diff options
| author | Christophe Simonis <chs@openerp.com> | 2013-06-13 19:39:00 +0200 |
|---|---|---|
| committer | Christophe Simonis <chs@openerp.com> | 2013-06-13 19:39:00 +0200 |
| commit | a61e7cb0c80ae773cab9753bd8a4e7e888bbf415 (patch) | |
| tree | 019a235869a5e087055700895d4584c80e2f9afb /addons/web | |
| parent | 5ed0ac2614b9430e61dae472d657a21c037d6ee9 (diff) | |
| parent | 180e6e41d81e28df43b41e3cb6131225d4169a28 (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')
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 Binary files differindex d6dbd9d83d1..caa1b21d8d7 100644 --- a/addons/web/doc/_static/openerp.png +++ b/addons/web/doc/_static/openerp.png 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 8bcbe4566bc..0d6c249c652 100644 --- a/addons/web/static/src/img/accessories-archiver.png +++ b/addons/web/static/src/img/accessories-archiver.png diff --git a/addons/web/static/src/img/add-shortcut.png b/addons/web/static/src/img/add-shortcut.png Binary files differindex bcc0a09eb45..07b8ed40207 100644 --- a/addons/web/static/src/img/add-shortcut.png +++ b/addons/web/static/src/img/add-shortcut.png diff --git a/addons/web/static/src/img/attachments-close.png b/addons/web/static/src/img/attachments-close.png Binary files differindex 14d645534b8..2633d7142fe 100644 --- a/addons/web/static/src/img/attachments-close.png +++ b/addons/web/static/src/img/attachments-close.png diff --git a/addons/web/static/src/img/db.png b/addons/web/static/src/img/db.png Binary files differindex 83e42df26b3..d573d1d395b 100644 --- a/addons/web/static/src/img/db.png +++ b/addons/web/static/src/img/db.png diff --git a/addons/web/static/src/img/down-arrow.png b/addons/web/static/src/img/down-arrow.png Binary files differindex b1288e52682..0f473e13e84 100644 --- a/addons/web/static/src/img/down-arrow.png +++ b/addons/web/static/src/img/down-arrow.png diff --git a/addons/web/static/src/img/form_sheetbg.png b/addons/web/static/src/img/form_sheetbg.png Binary files differindex d54b6302d5a..f7eec72b0d6 100644 --- a/addons/web/static/src/img/form_sheetbg.png +++ b/addons/web/static/src/img/form_sheetbg.png diff --git a/addons/web/static/src/img/form_steps.png b/addons/web/static/src/img/form_steps.png Binary files differindex 0485c5977aa..84b1a0a459d 100644 --- a/addons/web/static/src/img/form_steps.png +++ b/addons/web/static/src/img/form_steps.png diff --git a/addons/web/static/src/img/graph_background.png b/addons/web/static/src/img/graph_background.png Binary files differindex 530312b20bb..0c7abf0faef 100644 --- a/addons/web/static/src/img/graph_background.png +++ b/addons/web/static/src/img/graph_background.png diff --git a/addons/web/static/src/img/icons/STOCK_ADD.png b/addons/web/static/src/img/icons/STOCK_ADD.png Binary files differindex 70612c181c6..00a001da01d 100644 --- a/addons/web/static/src/img/icons/STOCK_ADD.png +++ b/addons/web/static/src/img/icons/STOCK_ADD.png diff --git a/addons/web/static/src/img/icons/STOCK_APPLY.png b/addons/web/static/src/img/icons/STOCK_APPLY.png Binary files differindex 116f2e433bb..4859a588742 100644 --- a/addons/web/static/src/img/icons/STOCK_APPLY.png +++ b/addons/web/static/src/img/icons/STOCK_APPLY.png diff --git a/addons/web/static/src/img/icons/STOCK_CLOSE.png b/addons/web/static/src/img/icons/STOCK_CLOSE.png Binary files differindex 4966974e178..9776fd0ecf4 100644 --- a/addons/web/static/src/img/icons/STOCK_CLOSE.png +++ b/addons/web/static/src/img/icons/STOCK_CLOSE.png diff --git a/addons/web/static/src/img/icons/STOCK_COLOR_PICKER.png b/addons/web/static/src/img/icons/STOCK_COLOR_PICKER.png Binary files differindex 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 diff --git a/addons/web/static/src/img/icons/STOCK_DIRECTORY_MENU.png b/addons/web/static/src/img/icons/STOCK_DIRECTORY_MENU.png Binary files differindex 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 diff --git a/addons/web/static/src/img/icons/STOCK_DND.png b/addons/web/static/src/img/icons/STOCK_DND.png Binary files differindex bf3b8068397..5f026f625aa 100644 --- a/addons/web/static/src/img/icons/STOCK_DND.png +++ b/addons/web/static/src/img/icons/STOCK_DND.png diff --git a/addons/web/static/src/img/icons/STOCK_FLOPPY.png b/addons/web/static/src/img/icons/STOCK_FLOPPY.png Binary files differindex 7d8209cfb6f..427a762c141 100644 --- a/addons/web/static/src/img/icons/STOCK_FLOPPY.png +++ b/addons/web/static/src/img/icons/STOCK_FLOPPY.png diff --git a/addons/web/static/src/img/icons/STOCK_GOTO_FIRST.png b/addons/web/static/src/img/icons/STOCK_GOTO_FIRST.png Binary files differindex 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 diff --git a/addons/web/static/src/img/icons/STOCK_GOTO_TOP.png b/addons/web/static/src/img/icons/STOCK_GOTO_TOP.png Binary files differindex 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 diff --git a/addons/web/static/src/img/icons/STOCK_GO_BACK.png b/addons/web/static/src/img/icons/STOCK_GO_BACK.png Binary files differindex 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 diff --git a/addons/web/static/src/img/icons/STOCK_GO_UP.png b/addons/web/static/src/img/icons/STOCK_GO_UP.png Binary files differindex 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 diff --git a/addons/web/static/src/img/icons/STOCK_ITALIC.png b/addons/web/static/src/img/icons/STOCK_ITALIC.png Binary files differindex 26c57226a31..c7900917cea 100644 --- a/addons/web/static/src/img/icons/STOCK_ITALIC.png +++ b/addons/web/static/src/img/icons/STOCK_ITALIC.png diff --git a/addons/web/static/src/img/icons/STOCK_LEAVE_FULLSCREEN.png b/addons/web/static/src/img/icons/STOCK_LEAVE_FULLSCREEN.png Binary files differindex 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 diff --git a/addons/web/static/src/img/icons/STOCK_MEDIA_FORWARD.png b/addons/web/static/src/img/icons/STOCK_MEDIA_FORWARD.png Binary files differindex 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 diff --git a/addons/web/static/src/img/icons/STOCK_MEDIA_PAUSE.png b/addons/web/static/src/img/icons/STOCK_MEDIA_PAUSE.png Binary files differindex 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 diff --git a/addons/web/static/src/img/icons/STOCK_MEDIA_PLAY.png b/addons/web/static/src/img/icons/STOCK_MEDIA_PLAY.png Binary files differindex 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 diff --git a/addons/web/static/src/img/icons/STOCK_MEDIA_REWIND.png b/addons/web/static/src/img/icons/STOCK_MEDIA_REWIND.png Binary files differindex 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 diff --git a/addons/web/static/src/img/icons/STOCK_MEDIA_STOP.png b/addons/web/static/src/img/icons/STOCK_MEDIA_STOP.png Binary files differindex 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 diff --git a/addons/web/static/src/img/icons/STOCK_NO.png b/addons/web/static/src/img/icons/STOCK_NO.png Binary files differindex 047ddcd9289..77d48887cde 100644 --- a/addons/web/static/src/img/icons/STOCK_NO.png +++ b/addons/web/static/src/img/icons/STOCK_NO.png diff --git a/addons/web/static/src/img/icons/STOCK_OK.png b/addons/web/static/src/img/icons/STOCK_OK.png Binary files differindex 7755b8769f0..ad4451e3f11 100644 --- a/addons/web/static/src/img/icons/STOCK_OK.png +++ b/addons/web/static/src/img/icons/STOCK_OK.png diff --git a/addons/web/static/src/img/icons/STOCK_QUIT.png b/addons/web/static/src/img/icons/STOCK_QUIT.png Binary files differindex 50b5144660b..7556ae406fc 100644 --- a/addons/web/static/src/img/icons/STOCK_QUIT.png +++ b/addons/web/static/src/img/icons/STOCK_QUIT.png diff --git a/addons/web/static/src/img/icons/STOCK_REDO.png b/addons/web/static/src/img/icons/STOCK_REDO.png Binary files differindex 54055b3966d..da2138bb97b 100644 --- a/addons/web/static/src/img/icons/STOCK_REDO.png +++ b/addons/web/static/src/img/icons/STOCK_REDO.png diff --git a/addons/web/static/src/img/icons/STOCK_REMOVE.png b/addons/web/static/src/img/icons/STOCK_REMOVE.png Binary files differindex c2b6e915f77..fb95ab2361e 100644 --- a/addons/web/static/src/img/icons/STOCK_REMOVE.png +++ b/addons/web/static/src/img/icons/STOCK_REMOVE.png diff --git a/addons/web/static/src/img/icons/STOCK_STRIKETHROUGH.png b/addons/web/static/src/img/icons/STOCK_STRIKETHROUGH.png Binary files differindex 1c11f214622..a773530cdcb 100644 --- a/addons/web/static/src/img/icons/STOCK_STRIKETHROUGH.png +++ b/addons/web/static/src/img/icons/STOCK_STRIKETHROUGH.png diff --git a/addons/web/static/src/img/icons/STOCK_UNDERLINE.png b/addons/web/static/src/img/icons/STOCK_UNDERLINE.png Binary files differindex 7dbb5d7e60a..92b8c9ff153 100644 --- a/addons/web/static/src/img/icons/STOCK_UNDERLINE.png +++ b/addons/web/static/src/img/icons/STOCK_UNDERLINE.png diff --git a/addons/web/static/src/img/icons/STOCK_UNDO.png b/addons/web/static/src/img/icons/STOCK_UNDO.png Binary files differindex 7a50de0c61e..26d284e9ac8 100644 --- a/addons/web/static/src/img/icons/STOCK_UNDO.png +++ b/addons/web/static/src/img/icons/STOCK_UNDO.png diff --git a/addons/web/static/src/img/icons/STOCK_YES.png b/addons/web/static/src/img/icons/STOCK_YES.png Binary files differindex 01fb373c251..15e51054233 100644 --- a/addons/web/static/src/img/icons/STOCK_YES.png +++ b/addons/web/static/src/img/icons/STOCK_YES.png diff --git a/addons/web/static/src/img/icons/color-picker.png b/addons/web/static/src/img/icons/color-picker.png Binary files differindex 765294c6bdd..d22c393631e 100644 --- a/addons/web/static/src/img/icons/color-picker.png +++ b/addons/web/static/src/img/icons/color-picker.png diff --git a/addons/web/static/src/img/icons/gtk-add.png b/addons/web/static/src/img/icons/gtk-add.png Binary files differindex 70612c181c6..00a001da01d 100644 --- a/addons/web/static/src/img/icons/gtk-add.png +++ b/addons/web/static/src/img/icons/gtk-add.png diff --git a/addons/web/static/src/img/icons/gtk-apply.png b/addons/web/static/src/img/icons/gtk-apply.png Binary files differindex 116f2e433bb..4859a588742 100644 --- a/addons/web/static/src/img/icons/gtk-apply.png +++ b/addons/web/static/src/img/icons/gtk-apply.png diff --git a/addons/web/static/src/img/icons/gtk-close.png b/addons/web/static/src/img/icons/gtk-close.png Binary files differindex 4966974e178..9776fd0ecf4 100644 --- a/addons/web/static/src/img/icons/gtk-close.png +++ b/addons/web/static/src/img/icons/gtk-close.png diff --git a/addons/web/static/src/img/icons/gtk-color-picker.png b/addons/web/static/src/img/icons/gtk-color-picker.png Binary files differindex 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 diff --git a/addons/web/static/src/img/icons/gtk-dnd.png b/addons/web/static/src/img/icons/gtk-dnd.png Binary files differindex bf3b8068397..5f026f625aa 100644 --- a/addons/web/static/src/img/icons/gtk-dnd.png +++ b/addons/web/static/src/img/icons/gtk-dnd.png diff --git a/addons/web/static/src/img/icons/gtk-floppy.png b/addons/web/static/src/img/icons/gtk-floppy.png Binary files differindex 7d8209cfb6f..427a762c141 100644 --- a/addons/web/static/src/img/icons/gtk-floppy.png +++ b/addons/web/static/src/img/icons/gtk-floppy.png diff --git a/addons/web/static/src/img/icons/gtk-go-back.png b/addons/web/static/src/img/icons/gtk-go-back.png Binary files differindex 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 diff --git a/addons/web/static/src/img/icons/gtk-go-up.png b/addons/web/static/src/img/icons/gtk-go-up.png Binary files differindex 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 diff --git a/addons/web/static/src/img/icons/gtk-goto-first.png b/addons/web/static/src/img/icons/gtk-goto-first.png Binary files differindex 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 diff --git a/addons/web/static/src/img/icons/gtk-goto-top.png b/addons/web/static/src/img/icons/gtk-goto-top.png Binary files differindex 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 diff --git a/addons/web/static/src/img/icons/gtk-italic.png b/addons/web/static/src/img/icons/gtk-italic.png Binary files differindex 26c57226a31..c7900917cea 100644 --- a/addons/web/static/src/img/icons/gtk-italic.png +++ b/addons/web/static/src/img/icons/gtk-italic.png diff --git a/addons/web/static/src/img/icons/gtk-leave-fullscreen.png b/addons/web/static/src/img/icons/gtk-leave-fullscreen.png Binary files differindex 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 diff --git a/addons/web/static/src/img/icons/gtk-media-forward.png b/addons/web/static/src/img/icons/gtk-media-forward.png Binary files differindex 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 diff --git a/addons/web/static/src/img/icons/gtk-media-pause.png b/addons/web/static/src/img/icons/gtk-media-pause.png Binary files differindex 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 diff --git a/addons/web/static/src/img/icons/gtk-media-play.png b/addons/web/static/src/img/icons/gtk-media-play.png Binary files differindex 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 diff --git a/addons/web/static/src/img/icons/gtk-media-rewind.png b/addons/web/static/src/img/icons/gtk-media-rewind.png Binary files differindex 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 diff --git a/addons/web/static/src/img/icons/gtk-media-stop.png b/addons/web/static/src/img/icons/gtk-media-stop.png Binary files differindex 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 diff --git a/addons/web/static/src/img/icons/gtk-no.png b/addons/web/static/src/img/icons/gtk-no.png Binary files differindex 047ddcd9289..77d48887cde 100644 --- a/addons/web/static/src/img/icons/gtk-no.png +++ b/addons/web/static/src/img/icons/gtk-no.png diff --git a/addons/web/static/src/img/icons/gtk-ok.png b/addons/web/static/src/img/icons/gtk-ok.png Binary files differindex 7755b8769f0..ad4451e3f11 100644 --- a/addons/web/static/src/img/icons/gtk-ok.png +++ b/addons/web/static/src/img/icons/gtk-ok.png diff --git a/addons/web/static/src/img/icons/gtk-quit.png b/addons/web/static/src/img/icons/gtk-quit.png Binary files differindex 50b5144660b..7556ae406fc 100644 --- a/addons/web/static/src/img/icons/gtk-quit.png +++ b/addons/web/static/src/img/icons/gtk-quit.png diff --git a/addons/web/static/src/img/icons/gtk-redo.png b/addons/web/static/src/img/icons/gtk-redo.png Binary files differindex 54055b3966d..da2138bb97b 100644 --- a/addons/web/static/src/img/icons/gtk-redo.png +++ b/addons/web/static/src/img/icons/gtk-redo.png diff --git a/addons/web/static/src/img/icons/gtk-remove.png b/addons/web/static/src/img/icons/gtk-remove.png Binary files differindex c2b6e915f77..fb95ab2361e 100644 --- a/addons/web/static/src/img/icons/gtk-remove.png +++ b/addons/web/static/src/img/icons/gtk-remove.png diff --git a/addons/web/static/src/img/icons/gtk-strikethrough.png b/addons/web/static/src/img/icons/gtk-strikethrough.png Binary files differindex 1c11f214622..a773530cdcb 100644 --- a/addons/web/static/src/img/icons/gtk-strikethrough.png +++ b/addons/web/static/src/img/icons/gtk-strikethrough.png diff --git a/addons/web/static/src/img/icons/gtk-underline.png b/addons/web/static/src/img/icons/gtk-underline.png Binary files differindex 7dbb5d7e60a..92b8c9ff153 100644 --- a/addons/web/static/src/img/icons/gtk-underline.png +++ b/addons/web/static/src/img/icons/gtk-underline.png diff --git a/addons/web/static/src/img/icons/gtk-undo.png b/addons/web/static/src/img/icons/gtk-undo.png Binary files differindex 7a50de0c61e..26d284e9ac8 100644 --- a/addons/web/static/src/img/icons/gtk-undo.png +++ b/addons/web/static/src/img/icons/gtk-undo.png diff --git a/addons/web/static/src/img/icons/gtk-yes.png b/addons/web/static/src/img/icons/gtk-yes.png Binary files differindex 01fb373c251..15e51054233 100644 --- a/addons/web/static/src/img/icons/gtk-yes.png +++ b/addons/web/static/src/img/icons/gtk-yes.png diff --git a/addons/web/static/src/img/icons/kanban-apply.png b/addons/web/static/src/img/icons/kanban-apply.png Binary files differindex 02effd5f14c..e5fe4ee5f78 100644 --- a/addons/web/static/src/img/icons/kanban-apply.png +++ b/addons/web/static/src/img/icons/kanban-apply.png diff --git a/addons/web/static/src/img/icons/kanban-pause.png b/addons/web/static/src/img/icons/kanban-pause.png Binary files differindex 9e9544ee178..ce2357ccfef 100644 --- a/addons/web/static/src/img/icons/kanban-pause.png +++ b/addons/web/static/src/img/icons/kanban-pause.png diff --git a/addons/web/static/src/img/icons/kanban-stop.png b/addons/web/static/src/img/icons/kanban-stop.png Binary files differindex e1f98a26b59..da6839f2f8f 100644 --- a/addons/web/static/src/img/icons/kanban-stop.png +++ b/addons/web/static/src/img/icons/kanban-stop.png diff --git a/addons/web/static/src/img/icons/save-document.png b/addons/web/static/src/img/icons/save-document.png Binary files differindex 8933ca0bed9..3e076aa91cb 100644 --- a/addons/web/static/src/img/icons/save-document.png +++ b/addons/web/static/src/img/icons/save-document.png diff --git a/addons/web/static/src/img/icons/star-off.png b/addons/web/static/src/img/icons/star-off.png Binary files differindex 7cd0afd4f03..b999fb2e02f 100644 --- a/addons/web/static/src/img/icons/star-off.png +++ b/addons/web/static/src/img/icons/star-off.png diff --git a/addons/web/static/src/img/icons/star-on.png b/addons/web/static/src/img/icons/star-on.png Binary files differindex 4f2295e1395..f6a9ec830d0 100644 --- a/addons/web/static/src/img/icons/star-on.png +++ b/addons/web/static/src/img/icons/star-on.png diff --git a/addons/web/static/src/img/icons/stock.png b/addons/web/static/src/img/icons/stock.png Binary files differindex ca38181db90..762491f1e71 100644 --- a/addons/web/static/src/img/icons/stock.png +++ b/addons/web/static/src/img/icons/stock.png diff --git a/addons/web/static/src/img/icons/stock_calendar.png b/addons/web/static/src/img/icons/stock_calendar.png Binary files differindex 99a1f3f9ef1..5fdccf561ba 100644 --- a/addons/web/static/src/img/icons/stock_calendar.png +++ b/addons/web/static/src/img/icons/stock_calendar.png diff --git a/addons/web/static/src/img/icons/terp-accessories-archiver+.png b/addons/web/static/src/img/icons/terp-accessories-archiver+.png Binary files differindex 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 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 Binary files differindex 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 diff --git a/addons/web/static/src/img/icons/terp-accessories-archiver.png b/addons/web/static/src/img/icons/terp-accessories-archiver.png Binary files differindex 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 diff --git a/addons/web/static/src/img/icons/terp-account.png b/addons/web/static/src/img/icons/terp-account.png Binary files differindex 30dea82a105..01cc0c4e8b9 100644 --- a/addons/web/static/src/img/icons/terp-account.png +++ b/addons/web/static/src/img/icons/terp-account.png diff --git a/addons/web/static/src/img/icons/terp-administration.png b/addons/web/static/src/img/icons/terp-administration.png Binary files differindex ab129b2e4b3..8ff707ede02 100644 --- a/addons/web/static/src/img/icons/terp-administration.png +++ b/addons/web/static/src/img/icons/terp-administration.png diff --git a/addons/web/static/src/img/icons/terp-calendar.png b/addons/web/static/src/img/icons/terp-calendar.png Binary files differindex 37206565792..222e22c78d1 100644 --- a/addons/web/static/src/img/icons/terp-calendar.png +++ b/addons/web/static/src/img/icons/terp-calendar.png diff --git a/addons/web/static/src/img/icons/terp-call-start.png b/addons/web/static/src/img/icons/terp-call-start.png Binary files differindex 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 diff --git a/addons/web/static/src/img/icons/terp-camera_test.png b/addons/web/static/src/img/icons/terp-camera_test.png Binary files differindex 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 diff --git a/addons/web/static/src/img/icons/terp-crm.png b/addons/web/static/src/img/icons/terp-crm.png Binary files differindex fdac61ca92d..3c86dd3b043 100644 --- a/addons/web/static/src/img/icons/terp-crm.png +++ b/addons/web/static/src/img/icons/terp-crm.png diff --git a/addons/web/static/src/img/icons/terp-dialog-close.png b/addons/web/static/src/img/icons/terp-dialog-close.png Binary files differindex 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 diff --git a/addons/web/static/src/img/icons/terp-document-new.png b/addons/web/static/src/img/icons/terp-document-new.png Binary files differindex 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 diff --git a/addons/web/static/src/img/icons/terp-dolar.png b/addons/web/static/src/img/icons/terp-dolar.png Binary files differindex bca7021c82f..03b37cfa0ed 100644 --- a/addons/web/static/src/img/icons/terp-dolar.png +++ b/addons/web/static/src/img/icons/terp-dolar.png diff --git a/addons/web/static/src/img/icons/terp-dolar_ok!.png b/addons/web/static/src/img/icons/terp-dolar_ok!.png Binary files differindex 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 diff --git a/addons/web/static/src/img/icons/terp-emblem-important.png b/addons/web/static/src/img/icons/terp-emblem-important.png Binary files differindex 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 diff --git a/addons/web/static/src/img/icons/terp-folder-blue.png b/addons/web/static/src/img/icons/terp-folder-blue.png Binary files differindex 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 diff --git a/addons/web/static/src/img/icons/terp-folder-green.png b/addons/web/static/src/img/icons/terp-folder-green.png Binary files differindex 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 diff --git a/addons/web/static/src/img/icons/terp-folder-orange.png b/addons/web/static/src/img/icons/terp-folder-orange.png Binary files differindex 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 diff --git a/addons/web/static/src/img/icons/terp-folder-violet.png b/addons/web/static/src/img/icons/terp-folder-violet.png Binary files differindex 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 diff --git a/addons/web/static/src/img/icons/terp-folder-yellow.png b/addons/web/static/src/img/icons/terp-folder-yellow.png Binary files differindex 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 diff --git a/addons/web/static/src/img/icons/terp-go-year.png b/addons/web/static/src/img/icons/terp-go-year.png Binary files differindex 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 diff --git a/addons/web/static/src/img/icons/terp-graph.png b/addons/web/static/src/img/icons/terp-graph.png Binary files differindex 30dea82a105..01cc0c4e8b9 100644 --- a/addons/web/static/src/img/icons/terp-graph.png +++ b/addons/web/static/src/img/icons/terp-graph.png 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 diff --git a/addons/web/static/src/img/icons/terp-hr.png b/addons/web/static/src/img/icons/terp-hr.png Binary files differindex ba0241e6362..1e8eede30ca 100644 --- a/addons/web/static/src/img/icons/terp-hr.png +++ b/addons/web/static/src/img/icons/terp-hr.png diff --git a/addons/web/static/src/img/icons/terp-mail-forward.png b/addons/web/static/src/img/icons/terp-mail-forward.png Binary files differindex 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 diff --git a/addons/web/static/src/img/icons/terp-mail_delete.png b/addons/web/static/src/img/icons/terp-mail_delete.png Binary files differindex 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 diff --git a/addons/web/static/src/img/icons/terp-marketing.png b/addons/web/static/src/img/icons/terp-marketing.png Binary files differindex 1b04b599734..e3545242442 100644 --- a/addons/web/static/src/img/icons/terp-marketing.png +++ b/addons/web/static/src/img/icons/terp-marketing.png diff --git a/addons/web/static/src/img/icons/terp-mrp.png b/addons/web/static/src/img/icons/terp-mrp.png Binary files differindex c2b4ea31ec3..cd949c89213 100644 --- a/addons/web/static/src/img/icons/terp-mrp.png +++ b/addons/web/static/src/img/icons/terp-mrp.png diff --git a/addons/web/static/src/img/icons/terp-partner.png b/addons/web/static/src/img/icons/terp-partner.png Binary files differindex aab206a1d42..74b2414739e 100644 --- a/addons/web/static/src/img/icons/terp-partner.png +++ b/addons/web/static/src/img/icons/terp-partner.png diff --git a/addons/web/static/src/img/icons/terp-personal.png b/addons/web/static/src/img/icons/terp-personal.png Binary files differindex 0890c4d0e51..8e13350629b 100644 --- a/addons/web/static/src/img/icons/terp-personal.png +++ b/addons/web/static/src/img/icons/terp-personal.png diff --git a/addons/web/static/src/img/icons/terp-product.png b/addons/web/static/src/img/icons/terp-product.png Binary files differindex 99f58d95a8b..1009191c180 100644 --- a/addons/web/static/src/img/icons/terp-product.png +++ b/addons/web/static/src/img/icons/terp-product.png diff --git a/addons/web/static/src/img/icons/terp-project.png b/addons/web/static/src/img/icons/terp-project.png Binary files differindex cd95ae84e43..2686faba528 100644 --- a/addons/web/static/src/img/icons/terp-project.png +++ b/addons/web/static/src/img/icons/terp-project.png diff --git a/addons/web/static/src/img/icons/terp-purchase.png b/addons/web/static/src/img/icons/terp-purchase.png Binary files differindex 1e801f57485..3d5fcb67f4f 100644 --- a/addons/web/static/src/img/icons/terp-purchase.png +++ b/addons/web/static/src/img/icons/terp-purchase.png diff --git a/addons/web/static/src/img/icons/terp-report.png b/addons/web/static/src/img/icons/terp-report.png Binary files differindex ada36a2de24..6586ffcc501 100644 --- a/addons/web/static/src/img/icons/terp-report.png +++ b/addons/web/static/src/img/icons/terp-report.png diff --git a/addons/web/static/src/img/icons/terp-sale.png b/addons/web/static/src/img/icons/terp-sale.png Binary files differindex ba0241e6362..1e8eede30ca 100644 --- a/addons/web/static/src/img/icons/terp-sale.png +++ b/addons/web/static/src/img/icons/terp-sale.png diff --git a/addons/web/static/src/img/icons/terp-stock.png b/addons/web/static/src/img/icons/terp-stock.png Binary files differindex 0365dfdb8e1..fde0f52f28f 100644 --- a/addons/web/static/src/img/icons/terp-stock.png +++ b/addons/web/static/src/img/icons/terp-stock.png 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 diff --git a/addons/web/static/src/img/icons/terp-stock_zoom.png b/addons/web/static/src/img/icons/terp-stock_zoom.png Binary files differindex 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 diff --git a/addons/web/static/src/img/icons/terp-tools.png b/addons/web/static/src/img/icons/terp-tools.png Binary files differindex 379f7617427..4a44ce58e69 100644 --- a/addons/web/static/src/img/icons/terp-tools.png +++ b/addons/web/static/src/img/icons/terp-tools.png diff --git a/addons/web/static/src/img/iconset-a-help.png b/addons/web/static/src/img/iconset-a-help.png Binary files differindex 4af5ac170d6..a9df2902ed3 100644 --- a/addons/web/static/src/img/iconset-a-help.png +++ b/addons/web/static/src/img/iconset-a-help.png diff --git a/addons/web/static/src/img/iconset-b-remove.png b/addons/web/static/src/img/iconset-b-remove.png Binary files differindex 497f03b4ceb..48eb9670641 100644 --- a/addons/web/static/src/img/iconset-b-remove.png +++ b/addons/web/static/src/img/iconset-b-remove.png diff --git a/addons/web/static/src/img/logo.png b/addons/web/static/src/img/logo.png Binary files differindex 8f1c5c6085f..231cc26379f 100644 --- a/addons/web/static/src/img/logo.png +++ b/addons/web/static/src/img/logo.png diff --git a/addons/web/static/src/img/logo2.png b/addons/web/static/src/img/logo2.png Binary files differindex aca5f4c60d8..6b32937328b 100644 --- a/addons/web/static/src/img/logo2.png +++ b/addons/web/static/src/img/logo2.png diff --git a/addons/web/static/src/img/nologo.png b/addons/web/static/src/img/nologo.png Binary files differindex 711269813a1..36ff0e1d16c 100644 --- a/addons/web/static/src/img/nologo.png +++ b/addons/web/static/src/img/nologo.png diff --git a/addons/web/static/src/img/pager_first.png b/addons/web/static/src/img/pager_first.png Binary files differindex 83074ed696f..8f9005bfe2f 100644 --- a/addons/web/static/src/img/pager_first.png +++ b/addons/web/static/src/img/pager_first.png diff --git a/addons/web/static/src/img/pager_last.png b/addons/web/static/src/img/pager_last.png Binary files differindex dedcede4b62..582eb9620a1 100644 --- a/addons/web/static/src/img/pager_last.png +++ b/addons/web/static/src/img/pager_last.png diff --git a/addons/web/static/src/img/pager_next.png b/addons/web/static/src/img/pager_next.png Binary files differindex 9b5e7090735..068fa1d980d 100644 --- a/addons/web/static/src/img/pager_next.png +++ b/addons/web/static/src/img/pager_next.png diff --git a/addons/web/static/src/img/pager_previous.png b/addons/web/static/src/img/pager_previous.png Binary files differindex 7134186008c..7cd2a0de240 100644 --- a/addons/web/static/src/img/pager_previous.png +++ b/addons/web/static/src/img/pager_previous.png diff --git a/addons/web/static/src/img/partner.png b/addons/web/static/src/img/partner.png Binary files differindex aab206a1d42..74b2414739e 100644 --- a/addons/web/static/src/img/partner.png +++ b/addons/web/static/src/img/partner.png diff --git a/addons/web/static/src/img/placeholder.png b/addons/web/static/src/img/placeholder.png Binary files differindex 25af75ee815..c2e345e82e5 100644 --- a/addons/web/static/src/img/placeholder.png +++ b/addons/web/static/src/img/placeholder.png diff --git a/addons/web/static/src/img/product.png b/addons/web/static/src/img/product.png Binary files differindex 99f58d95a8b..1009191c180 100644 --- a/addons/web/static/src/img/product.png +++ b/addons/web/static/src/img/product.png diff --git a/addons/web/static/src/img/toggle-a-bg.png b/addons/web/static/src/img/toggle-a-bg.png Binary files differindex b9837ab233e..207a348725b 100644 --- a/addons/web/static/src/img/toggle-a-bg.png +++ b/addons/web/static/src/img/toggle-a-bg.png diff --git a/addons/web/static/src/img/ui/field_calendar.png b/addons/web/static/src/img/ui/field_calendar.png Binary files differindex 99a1f3f9ef1..5fdccf561ba 100644 --- a/addons/web/static/src/img/ui/field_calendar.png +++ b/addons/web/static/src/img/ui/field_calendar.png diff --git a/addons/web/static/src/img/ui/group-expanded.png b/addons/web/static/src/img/ui/group-expanded.png Binary files differindex 3f16536e123..ca76157826a 100644 --- a/addons/web/static/src/img/ui/group-expanded.png +++ b/addons/web/static/src/img/ui/group-expanded.png diff --git a/addons/web/static/src/img/ui/group-folded.png b/addons/web/static/src/img/ui/group-folded.png Binary files differindex 2909b0c268f..5fc4e533d1f 100644 --- a/addons/web/static/src/img/ui/group-folded.png +++ b/addons/web/static/src/img/ui/group-folded.png diff --git a/addons/web/static/src/img/user_menu_avatar.png b/addons/web/static/src/img/user_menu_avatar.png Binary files differindex a2c70ea7d49..f78ea0203d9 100644 --- a/addons/web/static/src/img/user_menu_avatar.png +++ b/addons/web/static/src/img/user_menu_avatar.png diff --git a/addons/web/static/src/img/view_empty_arrow.png b/addons/web/static/src/img/view_empty_arrow.png Binary files differindex 99561e3abf3..dc2b88a3c82 100644 --- a/addons/web/static/src/img/view_empty_arrow.png +++ b/addons/web/static/src/img/view_empty_arrow.png diff --git a/addons/web/static/src/img/warning.png b/addons/web/static/src/img/warning.png Binary files differindex cbfb25a89cd..85c1718e877 100644 --- a/addons/web/static/src/img/warning.png +++ b/addons/web/static/src/img/warning.png 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> |
