diff --git a/addons/web/__openerp__.py b/addons/web/__openerp__.py index 42798c9a523..9e8e258dedc 100644 --- a/addons/web/__openerp__.py +++ b/addons/web/__openerp__.py @@ -1,10 +1,10 @@ { - "name" : "web", + "name" : "Web", "category": "Hidden", "description": """ OpenERP Web core module. - This module provides the core of the OpenERP web client. + This module provides the core of the OpenERP Web Client. """, "depends" : [], 'auto_install': True, diff --git a/addons/web/common/http.py b/addons/web/common/http.py index cc76a554693..87748d2e6d9 100644 --- a/addons/web/common/http.py +++ b/addons/web/common/http.py @@ -417,6 +417,18 @@ class ControllerType(type): class Controller(object): __metaclass__ = ControllerType +class DisableCacheMiddleware(object): + def __init__(self, app): + self.app = app + def __call__(self, environ, start_response): + def start_wrapped(status, headers): + debug = environ.get('HTTP_REFERER', '').find('debug') != -1 + filtered_headers = [(k,v) for k,v in headers if not (k=='Last-Modified' or (debug and k=='Cache-Control'))] + if debug: + filtered_headers.append(('Cache-Control', 'no-cache')) + start_response(status, filtered_headers) + return self.app(environ, start_wrapped) + class Root(object): """Root WSGI application for the OpenERP Web Client. @@ -452,8 +464,8 @@ class Root(object): static_dirs = self._load_addons(openerp_addons_namespace) if options.serve_static: - self.dispatch = werkzeug.wsgi.SharedDataMiddleware( - self.dispatch, static_dirs, cache=False) + app = werkzeug.wsgi.SharedDataMiddleware( self.dispatch, static_dirs) + self.dispatch = DisableCacheMiddleware(app) if options.session_storage: if not os.path.exists(options.session_storage): diff --git a/addons/web/controllers/main.py b/addons/web/controllers/main.py index 412ea9abda2..7f9710f8aa6 100644 --- a/addons/web/controllers/main.py +++ b/addons/web/controllers/main.py @@ -258,8 +258,7 @@ class WebClient(openerpweb.Controller): file_map = dict(files) rx_import = re.compile(r"""@import\s+('|")(?!'|"|/|https?://)""", re.U) - rx_url = re.compile(r"""url\s*\(\s*('|"|)(?!'|"|/|https?://)""", re.U) - + rx_url = re.compile(r"""url\s*\(\s*('|"|)(?!'|"|/|https?://|data:)""", re.U) def reader(f): """read the a css file and absolutify all relative uris""" @@ -1494,10 +1493,6 @@ class Binary(openerpweb.Controller): class Action(openerpweb.Controller): _cp_path = "/web/action" - - action_mapping = { - "ir.actions.act_url": "ir.actions.url", - } # For most actions, the type attribute and the model name are the same, but # there are exceptions. This dict is used to remap action type attributes @@ -1511,6 +1506,17 @@ class Action(openerpweb.Controller): Actions = req.session.model('ir.actions.actions') value = False context = req.session.eval_context(req.context) + + try: + action_id = int(action_id) + except ValueError: + try: + module, xmlid = action_id.split('.', 1) + model, action_id = req.session.model('ir.model.data').get_object_reference(module, xmlid) + assert model.startswith('ir.actions.') + except Exception: + action_id = 0 # force failed read + base_action = Actions.read([action_id], ['type'], context) if base_action: ctx = {} diff --git a/addons/web/i18n/ja.po b/addons/web/i18n/ja.po index 66f1f5d584b..c1339863a4d 100644 --- a/addons/web/i18n/ja.po +++ b/addons/web/i18n/ja.po @@ -8,179 +8,183 @@ msgstr "" "Project-Id-Version: openerp-web\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2012-07-02 09:06+0200\n" -"PO-Revision-Date: 2012-03-31 18:44+0000\n" -"Last-Translator: Masaki Yamaya \n" +"PO-Revision-Date: 2012-07-19 01:18+0000\n" +"Last-Translator: Akira Hiyama \n" "Language-Team: Japanese \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-07-03 05:54+0000\n" -"X-Generator: Launchpad (build 15531)\n" +"X-Launchpad-Export-Date: 2012-07-19 04:53+0000\n" +"X-Generator: Launchpad (build 15637)\n" #. openerp-web -#: addons/web/static/src/js/chrome.js:170 -#: addons/web/static/src/js/chrome.js:196 -#: addons/web/static/src/js/chrome.js:364 -#: addons/web/static/src/js/view_form.js:531 -#: addons/web/static/src/js/view_form.js:1665 -#: addons/web/static/src/xml/base.xml:1641 +#: addons/web/static/src/js/chrome.js:176 +#: addons/web/static/src/js/chrome.js:202 +#: addons/web/static/src/js/chrome.js:380 +#: addons/web/static/src/js/view_form.js:457 +#: addons/web/static/src/js/view_form.js:1292 +#: addons/web/static/src/xml/base.xml:1701 msgid "Ok" -msgstr "正常" +msgstr "OK" #. openerp-web -#: addons/web/static/src/js/chrome.js:178 +#: addons/web/static/src/js/chrome.js:184 msgid "Send OpenERP Enterprise Report" msgstr "OpenERPエンタープライズレポートを送る" #. openerp-web -#: addons/web/static/src/js/chrome.js:192 +#: addons/web/static/src/js/chrome.js:198 msgid "Dont send" msgstr "送らない" #. openerp-web -#: addons/web/static/src/js/chrome.js:212 -#: addons/web/static/src/js/chrome.js:914 +#: addons/web/static/src/js/chrome.js:1119 msgid "Client Error" msgstr "クライアントのエラー" #. openerp-web -#: addons/web/static/src/js/chrome.js:253 +#: addons/web/static/src/js/chrome.js:260 #, python-format msgid "Loading (%d)" msgstr "ロード中 (%d)" #. openerp-web -#: addons/web/static/src/js/chrome.js:276 +#: addons/web/static/src/js/chrome.js:292 msgid "Invalid database name" msgstr "無効なデータベース名" #. openerp-web -#: addons/web/static/src/js/chrome.js:402 +#: addons/web/static/src/js/chrome.js:455 msgid "Backed" msgstr "バックアップされました" #. openerp-web -#: addons/web/static/src/js/chrome.js:402 +#: addons/web/static/src/js/chrome.js:456 msgid "Database backed up successfully" msgstr "データベースは正常にバックアップされました" #. openerp-web -#: addons/web/static/src/js/chrome.js:442 +#: addons/web/static/src/js/chrome.js:499 msgid "Restored" msgstr "リストアされました" #. openerp-web -#: addons/web/static/src/js/chrome.js:442 +#: addons/web/static/src/js/chrome.js:499 msgid "Database restored successfully" msgstr "データベースは正常にリストアされました" #. openerp-web -#: addons/web/static/src/js/chrome.js:735 -#: addons/web/static/src/xml/base.xml:259 -#: addons/web/static/src/xml/base.xml:367 +#: addons/web/static/src/js/chrome.js:783 +#: addons/web/static/src/xml/base.xml:226 +#: addons/web/static/src/xml/base.xml:1735 msgid "Change Password" msgstr "パスワードの変更" #. openerp-web -#: addons/web/static/src/js/chrome.js:809 -#: addons/web/static/src/xml/base.xml:326 +#: addons/web/static/src/js/chrome.js:759 +#: addons/web/static/src/xml/base.xml:356 msgid "Preferences" msgstr "個人設定" #. openerp-web -#: addons/web/static/src/js/chrome.js:812 +#: addons/web/static/src/js/chrome.js:763 msgid "Change password" msgstr "パスワードの変更" #. openerp-web -#: addons/web/static/src/js/chrome.js:813 -#: addons/web/static/src/js/view_editor.js:96 -#: addons/web/static/src/js/view_editor.js:832 -#: addons/web/static/src/js/view_editor.js:960 -#: addons/web/static/src/js/view_form.js:1660 -#: addons/web/static/src/xml/base.xml:1468 -#: addons/web/static/src/xml/base.xml:1478 +#: addons/web/static/src/js/chrome.js:762 +#: addons/web/static/src/js/search.js:241 +#: addons/web/static/src/js/search.js:300 +#: addons/web/static/src/js/view_editor.js:95 +#: addons/web/static/src/js/view_editor.js:836 +#: addons/web/static/src/js/view_editor.js:962 +#: addons/web/static/src/js/view_form.js:1287 +#: addons/web/static/src/xml/base.xml:743 +#: addons/web/static/src/xml/base.xml:1502 +#: addons/web/static/src/xml/base.xml:1512 +#: addons/web/static/src/xml/base.xml:1521 msgid "Cancel" msgstr "キャンセル" #. openerp-web -#: addons/web/static/src/js/chrome.js:814 -#: addons/web/static/src/js/view_editor.js:74 -#: addons/web/static/src/js/views.js:899 addons/web/static/src/xml/base.xml:687 -#: addons/web/static/src/xml/base.xml:1384 -#: addons/web/static/src/xml/base.xml:1472 +#: addons/web/static/src/js/chrome.js:764 +#: addons/web/static/src/js/view_editor.js:73 +#: addons/web/static/src/js/views.js:967 addons/web/static/src/xml/base.xml:742 +#: addons/web/static/src/xml/base.xml:1506 +#: addons/web/static/src/xml/base.xml:1520 msgid "Save" msgstr "保存" #. openerp-web -#: addons/web/static/src/js/chrome.js:839 +#: addons/web/static/src/js/chrome.js:680 +#: addons/web/static/src/xml/base.xml:359 msgid "About" msgstr "について" #. openerp-web -#: addons/web/static/src/js/chrome.js:856 +#: addons/web/static/src/js/chrome.js:1052 msgid "OpenERP - Unsupported/Community Version" msgstr "OpenERP - サポート無し/コミュニティバージョン" #. openerp-web #: addons/web/static/src/js/coresetup.js:619 msgid "less than a minute ago" -msgstr "" +msgstr "数十秒前" #. openerp-web #: addons/web/static/src/js/coresetup.js:620 msgid "about a minute ago" -msgstr "" +msgstr "1分前" #. openerp-web #: addons/web/static/src/js/coresetup.js:621 #, python-format msgid "%d minutes ago" -msgstr "" +msgstr "%d分前" #. openerp-web #: addons/web/static/src/js/coresetup.js:622 msgid "about an hour ago" -msgstr "" +msgstr "1時間前" #. openerp-web #: addons/web/static/src/js/coresetup.js:623 #, python-format msgid "%d hours ago" -msgstr "" +msgstr "%d時間前" #. openerp-web #: addons/web/static/src/js/coresetup.js:624 msgid "a day ago" -msgstr "" +msgstr "1日前" #. openerp-web #: addons/web/static/src/js/coresetup.js:625 #, python-format msgid "%d days ago" -msgstr "" +msgstr "%d 日前" #. openerp-web #: addons/web/static/src/js/coresetup.js:626 msgid "about a month ago" -msgstr "" +msgstr "1ヶ月前" #. openerp-web #: addons/web/static/src/js/coresetup.js:627 #, python-format msgid "%d months ago" -msgstr "" +msgstr "%dヶ月前" #. openerp-web #: addons/web/static/src/js/coresetup.js:628 msgid "about a year ago" -msgstr "" +msgstr "1年前" #. openerp-web #: addons/web/static/src/js/coresetup.js:629 #, python-format msgid "%d years ago" -msgstr "" +msgstr "%d年前" #. openerp-web #: addons/web/static/src/js/data_export.js:6 @@ -191,10 +195,10 @@ msgstr "データのエクスポート" #: addons/web/static/src/js/data_export.js:19 #: addons/web/static/src/js/data_import.js:70 #: addons/web/static/src/js/view_editor.js:49 -#: addons/web/static/src/js/view_editor.js:399 -#: addons/web/static/src/js/view_form.js:891 -#: addons/web/static/src/js/view_form.js:3901 -#: addons/web/static/src/js/views.js:900 +#: addons/web/static/src/js/view_editor.js:398 +#: addons/web/static/src/js/view_form.js:734 +#: addons/web/static/src/js/view_form.js:3298 +#: addons/web/static/src/js/views.js:968 msgid "Close" msgstr "閉じる" @@ -204,19 +208,19 @@ msgid "Export To File" msgstr "ファイルにエクスポート" #. openerp-web -#: addons/web/static/src/js/data_export.js:125 +#: addons/web/static/src/js/data_export.js:126 msgid "Please enter save field list name" -msgstr "保管するフィールドリスト名を入れてください" +msgstr "保管する項目リスト名を入れてください" #. openerp-web -#: addons/web/static/src/js/data_export.js:360 +#: addons/web/static/src/js/data_export.js:362 msgid "Please select fields to save export list..." -msgstr "エクスポートリストに保管するフィールドを選んでください" +msgstr "エクスポートリストに保存する項目を選んでください" #. openerp-web -#: addons/web/static/src/js/data_export.js:373 +#: addons/web/static/src/js/data_export.js:375 msgid "Please select fields to export..." -msgstr "エクスポートするフィールドを選んでください" +msgstr "エクスポートする項目を選んでください" #. openerp-web #: addons/web/static/src/js/data_import.js:34 @@ -238,93 +242,93 @@ msgstr "外部ID" msgid "" "Destination fields should only be selected once, some fields are selected " "more than once:" -msgstr "" +msgstr "宛先項目の選択は1回のみです。幾つかの項目は複数回選択されます:" #. openerp-web #: addons/web/static/src/js/data_import.js:383 msgid "*Required Fields are not selected :" -msgstr "" +msgstr "* 必須項目が選択されていません:" #. openerp-web -#: addons/web/static/src/js/formats.js:141 +#: addons/web/static/src/js/formats.js:139 #, python-format msgid "(%d records)" -msgstr "" +msgstr "(%d レコード)" #. openerp-web -#: addons/web/static/src/js/formats.js:327 -#: addons/web/static/src/js/view_form.js:4301 +#: addons/web/static/src/js/formats.js:325 +#: addons/web/static/src/js/view_page.js:268 msgid "Download" msgstr "ダウンロード" #. openerp-web -#: addons/web/static/src/js/formats.js:332 +#: addons/web/static/src/js/formats.js:330 #, python-format msgid "Download \"%s\"" -msgstr "ダウンロード \"%s\"" +msgstr "%s のダウンロード" #. openerp-web -#: addons/web/static/src/js/search.js:798 +#: addons/web/static/src/js/search.js:437 msgid "Invalid Search" msgstr "無効な検索" #. openerp-web -#: addons/web/static/src/js/search.js:798 +#: addons/web/static/src/js/search.js:437 msgid "triggered from search view" msgstr "検索ビューによって起動" #. openerp-web -#: addons/web/static/src/js/search.js:839 +#: addons/web/static/src/js/search.js:528 #, python-format msgid "Incorrect value for field %(fieldname)s: [%(value)s] is %(message)s" -msgstr "フィールド %(fieldname)s の正しくない値: [%(value)s] は %(message)s" +msgstr "項目 %(fieldname)s の誤った値: [%(value)s] は %(message)s" #. openerp-web #: addons/web/static/src/js/search.js:948 #, python-format msgid "Filter on: %s" -msgstr "" +msgstr "フィルタ:%s" #. openerp-web #: addons/web/static/src/js/search.js:999 msgid "Filter" -msgstr "" +msgstr "フィルタ" #. openerp-web #: addons/web/static/src/js/search.js:1108 #, python-format msgid "Group by: %s" -msgstr "" +msgstr "グループ:%s" #. openerp-web #: addons/web/static/src/js/search.js:1132 msgid "GroupBy" -msgstr "" +msgstr "グループ化" #. openerp-web #: addons/web/static/src/js/search.js:1267 #, python-format msgid "Search %(field)s for: %(value)s" -msgstr "" +msgstr "%(field)s を検索:%(value)s" #. openerp-web -#: addons/web/static/src/js/search.js:1301 +#: addons/web/static/src/js/search.js:869 msgid "not a valid integer" msgstr "正しいトリガーではありません" #. openerp-web -#: addons/web/static/src/js/search.js:1315 +#: addons/web/static/src/js/search.js:883 msgid "not a valid number" msgstr "正しい数値ではありません" #. openerp-web -#: addons/web/static/src/js/search.js:1398 -#: addons/web/static/src/xml/base.xml:840 +#: addons/web/static/src/js/search.js:962 +#: addons/web/static/src/xml/base.xml:973 msgid "Yes" msgstr "はい" #. openerp-web -#: addons/web/static/src/js/search.js:1399 +#: addons/web/static/src/js/search.js:963 msgid "No" msgstr "いいえ" @@ -332,18 +336,17 @@ msgstr "いいえ" #: addons/web/static/src/js/search.js:1416 #, python-format msgid "Search %(field)s at: %(value)s" -msgstr "" +msgstr "%(field)s の検索:%(value)s" #. openerp-web -#: addons/web/static/src/js/search.js:1622 -#: addons/web/static/src/xml/base.xml:1229 +#: addons/web/static/src/xml/base.xml:1286 msgid "Filters" msgstr "フィルタ" #. openerp-web #: addons/web/static/src/js/search.js:1762 msgid "Advanced" -msgstr "" +msgstr "高度" #. openerp-web #: addons/web/static/src/js/search.js:1853 @@ -352,77 +355,87 @@ msgid "%(field)s %(operator)s \"%(value)s\"" msgstr "" #. openerp-web -#: addons/web/static/src/js/search.js:1888 +#: addons/web/static/src/js/search.js:1341 msgid "contains" -msgstr "次を含む" +msgstr "含む" #. openerp-web -#: addons/web/static/src/js/search.js:1889 +#: addons/web/static/src/js/search.js:1342 msgid "doesn't contain" msgstr "含まない" #. openerp-web -#: addons/web/static/src/js/search.js:1890 -#: addons/web/static/src/js/search.js:1900 -#: addons/web/static/src/js/search.js:1928 -#: addons/web/static/src/js/search.js:1952 +#: addons/web/static/src/js/search.js:1343 +#: addons/web/static/src/js/search.js:1359 +#: addons/web/static/src/js/search.js:1380 +#: addons/web/static/src/js/search.js:1401 +#: addons/web/static/src/js/search.js:1424 msgid "is equal to" msgstr "は次と一致する" #. openerp-web -#: addons/web/static/src/js/search.js:1891 -#: addons/web/static/src/js/search.js:1901 -#: addons/web/static/src/js/search.js:1929 -#: addons/web/static/src/js/search.js:1953 +#: addons/web/static/src/js/search.js:1344 +#: addons/web/static/src/js/search.js:1360 +#: addons/web/static/src/js/search.js:1381 +#: addons/web/static/src/js/search.js:1402 +#: addons/web/static/src/js/search.js:1425 msgid "is not equal to" msgstr "は次と一致しない" #. openerp-web -#: addons/web/static/src/js/search.js:1902 -#: addons/web/static/src/js/search.js:1930 -#: addons/web/static/src/js/search.js:1954 +#: addons/web/static/src/js/search.js:1345 +#: addons/web/static/src/js/search.js:1361 +#: addons/web/static/src/js/search.js:1382 +#: addons/web/static/src/js/search.js:1403 +#: addons/web/static/src/js/search.js:1426 msgid "greater than" msgstr "次より大きい" #. openerp-web -#: addons/web/static/src/js/search.js:1903 -#: addons/web/static/src/js/search.js:1931 -#: addons/web/static/src/js/search.js:1955 +#: addons/web/static/src/js/search.js:1346 +#: addons/web/static/src/js/search.js:1362 +#: addons/web/static/src/js/search.js:1383 +#: addons/web/static/src/js/search.js:1404 +#: addons/web/static/src/js/search.js:1427 msgid "less than" msgstr "次より小さい" #. openerp-web -#: addons/web/static/src/js/search.js:1904 -#: addons/web/static/src/js/search.js:1932 -#: addons/web/static/src/js/search.js:1956 +#: addons/web/static/src/js/search.js:1347 +#: addons/web/static/src/js/search.js:1363 +#: addons/web/static/src/js/search.js:1384 +#: addons/web/static/src/js/search.js:1405 +#: addons/web/static/src/js/search.js:1428 msgid "greater or equal than" msgstr "次より大きいか等しい" #. openerp-web -#: addons/web/static/src/js/search.js:1905 -#: addons/web/static/src/js/search.js:1933 -#: addons/web/static/src/js/search.js:1957 +#: addons/web/static/src/js/search.js:1348 +#: addons/web/static/src/js/search.js:1364 +#: addons/web/static/src/js/search.js:1385 +#: addons/web/static/src/js/search.js:1406 +#: addons/web/static/src/js/search.js:1429 msgid "less or equal than" msgstr "次より小さいか等しい" #. openerp-web -#: addons/web/static/src/js/search.js:1947 -#: addons/web/static/src/js/search.js:1973 +#: addons/web/static/src/js/search.js:1419 +#: addons/web/static/src/js/search.js:1444 msgid "is" msgstr "が次である" #. openerp-web -#: addons/web/static/src/js/search.js:1974 +#: addons/web/static/src/js/search.js:1445 msgid "is not" msgstr "は次ではない" #. openerp-web -#: addons/web/static/src/js/search.js:1988 +#: addons/web/static/src/js/search.js:1459 msgid "is true" msgstr "は正しい" #. openerp-web -#: addons/web/static/src/js/search.js:1989 +#: addons/web/static/src/js/search.js:1460 msgid "is false" msgstr "は正しくない" @@ -435,195 +448,194 @@ msgstr "管理ビュー (%s)" #. openerp-web #: addons/web/static/src/js/view_editor.js:46 #: addons/web/static/src/js/view_list.js:17 -#: addons/web/static/src/xml/base.xml:121 -#: addons/web/static/src/xml/base.xml:164 -#: addons/web/static/src/xml/base.xml:684 +#: addons/web/static/src/xml/base.xml:100 +#: addons/web/static/src/xml/base.xml:327 +#: addons/web/static/src/xml/base.xml:761 msgid "Create" msgstr "作成" #. openerp-web #: addons/web/static/src/js/view_editor.js:47 -#: addons/web/static/src/xml/base.xml:456 -#: addons/web/static/src/xml/base.xml:683 +#: addons/web/static/src/xml/base.xml:483 +#: addons/web/static/src/xml/base.xml:760 msgid "Edit" msgstr "編集" #. openerp-web #: addons/web/static/src/js/view_editor.js:48 -#: addons/web/static/src/xml/base.xml:1595 +#: addons/web/static/src/xml/base.xml:1653 msgid "Remove" msgstr "削除" #. openerp-web -#: addons/web/static/src/js/view_editor.js:72 +#: addons/web/static/src/js/view_editor.js:71 #, python-format msgid "Create a view (%s)" msgstr "ビュー (%s) を作成" #. openerp-web -#: addons/web/static/src/js/view_editor.js:169 +#: addons/web/static/src/js/view_editor.js:168 msgid "Do you really want to remove this view?" msgstr "このビューを削除しますか?" #. openerp-web -#: addons/web/static/src/js/view_editor.js:365 +#: addons/web/static/src/js/view_editor.js:364 #, python-format msgid "View Editor %d - %s" msgstr "ビューエディタ %d - %s" #. openerp-web -#: addons/web/static/src/js/view_editor.js:368 +#: addons/web/static/src/js/view_editor.js:367 msgid "Inherited View" msgstr "継承ビュー" #. openerp-web -#: addons/web/static/src/js/view_editor.js:372 +#: addons/web/static/src/js/view_editor.js:371 msgid "Do you really wants to create an inherited view here?" msgstr "継承ビューを作成しますか?" #. openerp-web -#: addons/web/static/src/js/view_editor.js:382 +#: addons/web/static/src/js/view_editor.js:381 msgid "Preview" msgstr "プレビュー" #. openerp-web -#: addons/web/static/src/js/view_editor.js:502 +#: addons/web/static/src/js/view_editor.js:501 msgid "Do you really want to remove this node?" msgstr "このノードを削除しますか?" #. openerp-web -#: addons/web/static/src/js/view_editor.js:811 -#: addons/web/static/src/js/view_editor.js:937 +#: addons/web/static/src/js/view_editor.js:815 +#: addons/web/static/src/js/view_editor.js:939 msgid "Properties" msgstr "属性" #. openerp-web -#: addons/web/static/src/js/view_editor.js:814 -#: addons/web/static/src/js/view_editor.js:940 +#: addons/web/static/src/js/view_editor.js:818 +#: addons/web/static/src/js/view_editor.js:942 msgid "Update" msgstr "更新" #. openerp-web -#: addons/web/static/src/js/view_form.js:43 +#: addons/web/static/src/js/view_form.js:16 +#: addons/web/static/src/js/view_form.js:210 msgid "Form" msgstr "フォーム" #. openerp-web -#: addons/web/static/src/js/view_form.js:147 -#: addons/web/static/src/js/view_list.js:358 -#: addons/web/static/src/xml/base.xml:1653 +#: addons/web/static/src/xml/base.xml:632 +#: addons/web/static/src/xml/base.xml:763 +#: addons/web/static/src/xml/base.xml:1714 msgid "Delete" msgstr "削除" #. openerp-web -#: addons/web/static/src/js/view_form.js:148 +#: addons/web/static/src/xml/base.xml:762 msgid "Duplicate" -msgstr "重複" +msgstr "複製" #. openerp-web -#: addons/web/static/src/js/view_form.js:149 -#: addons/web/static/src/js/view_form.js:885 +#: addons/web/static/src/js/view_form.js:133 +#: addons/web/static/src/js/view_form.js:728 msgid "Set Default" msgstr "デフォルトに設定" #. openerp-web -#: addons/web/static/src/js/view_form.js:643 +#: addons/web/static/src/js/view_page.js:59 msgid "Do you really want to delete this record?" msgstr "このレコードを削除しますか?" #. openerp-web -#: addons/web/static/src/js/view_form.js:657 +#: addons/web/static/src/js/view_form.js:508 msgid "" "Warning, the record has been modified, your changes will be discarded." -msgstr "警告,レコードは変更されて,あなたが行った変更は無視されます" +msgstr "警告,レコードは変更されて,あなたが行った変更は無視されます。" #. openerp-web -#: addons/web/static/src/js/view_form.js:892 +#: addons/web/static/src/js/view_form.js:735 msgid "Save default" -msgstr "デフォルトを保管" +msgstr "デフォルトに保存" #. openerp-web -#: addons/web/static/src/js/view_form.js:1402 +#: addons/web/static/src/js/view_form.js:867 #, python-format msgid "Unknown operator %s in domain %s" msgstr "ドメイン %s に無効な演算 %s があります" #. openerp-web -#: addons/web/static/src/js/view_form.js:1410 +#: addons/web/static/src/js/view_form.js:875 #, python-format msgid "Unknown field %s in domain %s" -msgstr "ドメイン %s に無効なフィールド %s があります" +msgstr "ドメイン %s に無効な項目 %s があります" #. openerp-web -#: addons/web/static/src/js/view_form.js:1448 +#: addons/web/static/src/js/view_form.js:913 #, python-format msgid "Unsupported operator %s in domain %s" msgstr "ドメイン %s に無効な演算 %s があります" #. openerp-web -#: addons/web/static/src/js/view_form.js:1657 +#: addons/web/static/src/js/view_form.js:1284 msgid "Confirm" msgstr "確認" #. openerp-web -#: addons/web/static/src/js/view_form.js:2478 +#: addons/web/static/src/js/view_form.js:2193 msgid "   Search More..." -msgstr "   もっと検索…" +msgstr "   さらに検索…" #. openerp-web -#: addons/web/static/src/js/view_form.js:2488 +#: addons/web/static/src/js/view_form.js:2211 #, python-format msgid "   Create \"%s\"" msgstr "   作成 \"%s\"" #. openerp-web -#: addons/web/static/src/js/view_form.js:2494 +#: addons/web/static/src/js/view_form.js:2217 msgid "   Create and Edit..." -msgstr "   作成して編集…" +msgstr "   作成&編集…" #. openerp-web -#: addons/web/static/src/js/view_form.js:2527 +#: addons/web/static/src/js/view_form.js:2250 +#: addons/web/static/src/js/views.js:680 msgid "Search: " msgstr "検索: " #. openerp-web -#: addons/web/static/src/js/view_form.js:2527 -#: addons/web/static/src/js/view_form.js:3210 +#: addons/web/static/src/js/view_form.js:2250 +#: addons/web/static/src/js/view_form.js:2738 msgid "Create: " msgstr "作成: " #. openerp-web -#: addons/web/static/src/js/view_form.js:2596 -#: addons/web/static/src/js/view_form.js:3125 -#: addons/web/static/src/js/view_form.js:3238 -#: addons/web/static/src/js/view_form.js:3586 -#: addons/web/static/src/js/view_form.js:3702 +#: addons/web/static/src/js/view_form.js:2040 +#: addons/web/static/src/js/view_form.js:2766 +#: addons/web/static/src/js/view_form.js:2991 msgid "Open: " msgstr "開く: " #. openerp-web -#: addons/web/static/src/js/view_form.js:3517 -#: addons/web/static/src/js/view_form.js:3644 -#: addons/web/static/src/xml/base.xml:1184 -#: addons/web/static/src/xml/base.xml:1594 +#: addons/web/static/src/js/view_form.js:2911 +#: addons/web/static/src/xml/base.xml:755 +#: addons/web/static/src/xml/base.xml:777 +#: addons/web/static/src/xml/base.xml:1652 msgid "Add" msgstr "追加" #. openerp-web -#: addons/web/static/src/js/view_form.js:3566 -#: addons/web/static/src/js/view_form.js:3684 +#: addons/web/static/src/js/view_form.js:2971 msgid "Add: " msgstr "追加: " #. openerp-web #: addons/web/static/src/js/view_form.js:4230 msgid "Save As..." -msgstr "" +msgstr "名前を付けて保存" #. openerp-web #: addons/web/static/src/js/view_form.js:4230 msgid "The field is empty, there's nothing to save !" -msgstr "" +msgstr "項目は空です。何も保存するものはありません。" #. openerp-web #: addons/web/static/src/js/view_list.js:8 @@ -631,54 +643,52 @@ msgid "List" msgstr "リスト" #. openerp-web -#: addons/web/static/src/js/view_list.js:338 +#: addons/web/static/src/js/view_list.js:277 msgid "Unlimited" msgstr "制限なし" #. openerp-web -#: addons/web/static/src/js/view_list.js:356 -#: addons/web/static/src/xml/base.xml:622 -#: addons/web/static/src/xml/base.xml:1657 +#: addons/web/static/src/js/views.js:819 +#: addons/web/static/src/xml/base.xml:1742 msgid "Import" msgstr "インポート" #. openerp-web -#: addons/web/static/src/js/view_list.js:357 -#: addons/web/static/src/xml/base.xml:1554 +#: addons/web/static/src/js/views.js:822 +#: addons/web/static/src/xml/base.xml:1612 msgid "Export" msgstr "エクスポート" #. openerp-web -#: addons/web/static/src/js/view_list.js:436 +#: addons/web/static/src/js/view_list.js:374 msgid "Group" -msgstr "" +msgstr "グループ" #. openerp-web -#: addons/web/static/src/js/view_list.js:623 +#: addons/web/static/src/js/view_list.js:549 msgid "Do you really want to remove these records?" msgstr "このレコードを削除しますか?" #. openerp-web -#: addons/web/static/src/js/view_list.js:716 -#: addons/web/static/src/js/views.js:820 +#: addons/web/static/src/js/views.js:925 msgid "Warning" msgstr "注意" #. openerp-web #: addons/web/static/src/js/view_list.js:716 msgid "You must select at least one record." -msgstr "" +msgstr "最低限1レコード選択して下さい。" #. openerp-web -#: addons/web/static/src/js/view_list.js:1332 +#: addons/web/static/src/js/view_list.js:1243 msgid "Undefined" msgstr "未定義" #. openerp-web -#: addons/web/static/src/js/view_list.js:1428 +#: addons/web/static/src/js/view_list.js:1342 #, python-format msgid "%(page)d/%(page_count)d" -msgstr "%(page)d/%(page_count)d" +msgstr "%(page)d / %(page_count)d" #. openerp-web #: addons/web/static/src/js/view_tree.js:11 @@ -686,336 +696,337 @@ msgid "Tree" msgstr "ツリー" #. openerp-web -#: addons/web/static/src/js/views.js:566 addons/web/static/src/xml/base.xml:452 +#: addons/web/static/src/js/views.js:570 addons/web/static/src/xml/base.xml:480 msgid "Fields View Get" -msgstr "フィールドのビューを得る" +msgstr "項目ビューの取得" #. openerp-web -#: addons/web/static/src/js/views.js:574 +#: addons/web/static/src/js/views.js:578 #, python-format msgid "View Log (%s)" msgstr "ビューのログ (%s)" #. openerp-web -#: addons/web/static/src/js/views.js:604 +#: addons/web/static/src/js/views.js:605 #, python-format msgid "Model %s fields" -msgstr "モデル %s フィールド" +msgstr "モデル %s 項目" #. openerp-web -#: addons/web/static/src/js/views.js:614 addons/web/static/src/xml/base.xml:455 +#: addons/web/static/src/js/views.js:615 addons/web/static/src/xml/base.xml:482 msgid "Manage Views" msgstr "ビューの管理" #. openerp-web -#: addons/web/static/src/js/views.js:615 +#: addons/web/static/src/js/views.js:616 msgid "Could not find current view declaration" msgstr "このビューの定義が見つかりません" #. openerp-web #: addons/web/static/src/js/views.js:716 msgid "Print" -msgstr "" +msgstr "印刷" #. openerp-web #: addons/web/static/src/js/views.js:717 msgid "Attachment" -msgstr "" +msgstr "添付" #. openerp-web #: addons/web/static/src/js/views.js:718 addons/web/static/src/xml/base.xml:276 msgid "More" -msgstr "" +msgstr "さらに" #. openerp-web -#: addons/web/static/src/js/views.js:726 +#: addons/web/static/src/js/views.js:810 msgid "Translate" msgstr "翻訳" #. openerp-web -#: addons/web/static/src/js/views.js:726 +#: addons/web/static/src/js/views.js:812 msgid "Technical translation" msgstr "技術翻訳" #. openerp-web -#: addons/web/static/src/js/views.js:820 +#: addons/web/static/src/js/views.js:924 msgid "You must choose at least one record." -msgstr "少なくとも1つのレコードを選んでください" +msgstr "少なくとも1つのレコードを選んで下さい。" #. openerp-web #: addons/web/static/src/js/views.js:875 msgid "Uploading..." -msgstr "" +msgstr "アップロード中..." #. openerp-web #: addons/web/static/src/js/views.js:885 msgid "Do you really want to delete this attachment ?" -msgstr "" +msgstr "この添付を本当に削除しますか?" #. openerp-web -#: addons/web/static/src/js/views.js:894 +#: addons/web/static/src/js/views.js:962 msgid "Translations" msgstr "翻訳" #. openerp-web -#: addons/web/static/src/xml/base.xml:9 +#: addons/web/static/src/xml/base.xml:52 msgid "Loading..." msgstr "読込み中..." #. openerp-web -#: addons/web/static/src/xml/base.xml:48 +#: addons/web/static/src/xml/base.xml:251 msgid "" "Your version of OpenERP is unsupported. Support & maintenance services are " "available here:" -msgstr "このOpenERPはサポートされていあせん。サポート保守サービスはこちらまで:" +msgstr "このOpenERPのバージョンはサポートされていません。サポート保守サービスはこちらから:" #. openerp-web -#: addons/web/static/src/xml/base.xml:48 +#: addons/web/static/src/xml/base.xml:251 msgid "OpenERP Entreprise" msgstr "OpenERPエンタープライズ" #. openerp-web -#: addons/web/static/src/xml/base.xml:53 +#: addons/web/static/src/xml/base.xml:256 msgid "OpenERP Enterprise Contract." msgstr "OpenERPエンタープライズ契約" #. openerp-web -#: addons/web/static/src/xml/base.xml:54 +#: addons/web/static/src/xml/base.xml:257 msgid "Your report will be sent to the OpenERP Enterprise team." -msgstr "あなたのレポートをOpenERPエンタープライズチームに送ります" +msgstr "あなたのレポートをOpenERPエンタープライズチームに送ります。" #. openerp-web -#: addons/web/static/src/xml/base.xml:56 +#: addons/web/static/src/xml/base.xml:259 msgid "Summary:" -msgstr "要約:" +msgstr "要約:" #. openerp-web -#: addons/web/static/src/xml/base.xml:60 +#: addons/web/static/src/xml/base.xml:263 msgid "Description:" -msgstr "説明:" +msgstr "説明:" #. openerp-web -#: addons/web/static/src/xml/base.xml:64 +#: addons/web/static/src/xml/base.xml:267 msgid "What you did:" msgstr "あなたが行ったこと:" #. openerp-web -#: addons/web/static/src/xml/base.xml:80 +#: addons/web/static/src/xml/base.xml:297 msgid "Invalid username or password" msgstr "ユーザ名またはパスワードが間違っています" #. openerp-web -#: addons/web/static/src/xml/base.xml:84 addons/web/static/src/xml/base.xml:174 -#: addons/web/static/src/xml/base.xml:200 +#: addons/web/static/src/xml/base.xml:116 +#: addons/web/static/src/xml/base.xml:150 +#: addons/web/static/src/xml/base.xml:301 msgid "Database:" msgstr "データベース:" #. openerp-web -#: addons/web/static/src/xml/base.xml:89 +#: addons/web/static/src/xml/base.xml:306 msgid "Username" msgstr "ユーザ名" #. openerp-web -#: addons/web/static/src/xml/base.xml:91 addons/web/static/src/xml/base.xml:125 +#: addons/web/static/src/xml/base.xml:308 +#: addons/web/static/src/xml/base.xml:331 msgid "Password" msgstr "パスワード" #. openerp-web -#: addons/web/static/src/xml/base.xml:93 +#: addons/web/static/src/xml/base.xml:310 msgid "Log in" msgstr "ログイン" #. openerp-web -#: addons/web/static/src/xml/base.xml:97 +#: addons/web/static/src/xml/base.xml:314 msgid "Manage Databases" msgstr "データベースの管理" #. openerp-web -#: addons/web/static/src/xml/base.xml:98 addons/web/static/src/xml/base.xml:389 +#: addons/web/static/src/xml/base.xml:44 addons/web/static/src/xml/base.xml:315 msgid "Powered by" msgstr "で動く" #. openerp-web -#: addons/web/static/src/xml/base.xml:98 addons/web/static/src/xml/base.xml:334 +#: addons/web/static/src/xml/base.xml:44 addons/web/static/src/xml/base.xml:315 +#: addons/web/static/src/xml/base.xml:1819 msgid "OpenERP" msgstr "OpenERP" #. openerp-web -#: addons/web/static/src/xml/base.xml:122 -#: addons/web/static/src/xml/base.xml:189 +#: addons/web/static/src/xml/base.xml:132 +#: addons/web/static/src/xml/base.xml:328 msgid "Drop" -msgstr "破棄" +msgstr "削除" #. openerp-web -#: addons/web/static/src/xml/base.xml:123 -#: addons/web/static/src/xml/base.xml:215 +#: addons/web/static/src/xml/base.xml:166 +#: addons/web/static/src/xml/base.xml:329 msgid "Backup" msgstr "バックアップ" #. openerp-web -#: addons/web/static/src/xml/base.xml:124 -#: addons/web/static/src/xml/base.xml:237 +#: addons/web/static/src/xml/base.xml:195 +#: addons/web/static/src/xml/base.xml:330 msgid "Restore" msgstr "リストア" #. openerp-web -#: addons/web/static/src/xml/base.xml:126 +#: addons/web/static/src/xml/base.xml:332 msgid "Back to Login" msgstr "ログインへ戻る" #. openerp-web -#: addons/web/static/src/xml/base.xml:131 +#: addons/web/static/src/xml/base.xml:61 msgid "CREATE DATABASE" msgstr "データベース作成" #. openerp-web -#: addons/web/static/src/xml/base.xml:134 -#: addons/web/static/src/xml/base.xml:247 +#: addons/web/static/src/xml/base.xml:68 addons/web/static/src/xml/base.xml:211 msgid "Master password:" msgstr "マスタパスワード:" #. openerp-web -#: addons/web/static/src/xml/base.xml:138 -#: addons/web/static/src/xml/base.xml:233 +#: addons/web/static/src/xml/base.xml:72 addons/web/static/src/xml/base.xml:191 msgid "New database name:" msgstr "新しいデータベース名:" #. openerp-web -#: addons/web/static/src/xml/base.xml:142 +#: addons/web/static/src/xml/base.xml:77 msgid "Load Demonstration data:" msgstr "デモ用のデータを読込み中:" #. openerp-web -#: addons/web/static/src/xml/base.xml:146 +#: addons/web/static/src/xml/base.xml:81 msgid "Default language:" msgstr "デフォルトの言語:" #. openerp-web -#: addons/web/static/src/xml/base.xml:156 +#: addons/web/static/src/xml/base.xml:91 msgid "Admin password:" msgstr "アドミン用パスワード:" #. openerp-web -#: addons/web/static/src/xml/base.xml:160 +#: addons/web/static/src/xml/base.xml:95 msgid "Confirm password:" msgstr "パスワード確認" #. openerp-web -#: addons/web/static/src/xml/base.xml:171 +#: addons/web/static/src/xml/base.xml:109 msgid "DROP DATABASE" -msgstr "データベースを破棄" +msgstr "データベースを削除" #. openerp-web -#: addons/web/static/src/xml/base.xml:185 -#: addons/web/static/src/xml/base.xml:211 -#: addons/web/static/src/xml/base.xml:229 +#: addons/web/static/src/xml/base.xml:128 +#: addons/web/static/src/xml/base.xml:162 +#: addons/web/static/src/xml/base.xml:187 msgid "Master Password:" msgstr "マスタパスワード:" #. openerp-web -#: addons/web/static/src/xml/base.xml:197 +#: addons/web/static/src/xml/base.xml:143 msgid "BACKUP DATABASE" msgstr "データベースをバックアップ" #. openerp-web -#: addons/web/static/src/xml/base.xml:222 +#: addons/web/static/src/xml/base.xml:175 msgid "RESTORE DATABASE" msgstr "データベースをリストア" #. openerp-web -#: addons/web/static/src/xml/base.xml:225 +#: addons/web/static/src/xml/base.xml:182 msgid "File:" msgstr "ファイル:" #. openerp-web -#: addons/web/static/src/xml/base.xml:244 +#: addons/web/static/src/xml/base.xml:204 msgid "CHANGE MASTER PASSWORD" msgstr "マスタパスワードの変更" #. openerp-web -#: addons/web/static/src/xml/base.xml:251 +#: addons/web/static/src/xml/base.xml:216 msgid "New master password:" msgstr "新しいマスタパスワード:" #. openerp-web -#: addons/web/static/src/xml/base.xml:255 +#: addons/web/static/src/xml/base.xml:221 msgid "Confirm new master password:" msgstr "新しいマスタパスワードの確認:" #. openerp-web #: addons/web/static/src/xml/base.xml:325 msgid "About OpenERP" -msgstr "" +msgstr "OpenERPについて" #. openerp-web #: addons/web/static/src/xml/base.xml:327 msgid "Log out" -msgstr "" +msgstr "ログアウト" #. openerp-web #: addons/web/static/src/xml/base.xml:333 msgid "Activate the developer mode" -msgstr "" +msgstr "開発者モードを有効化" #. openerp-web -#: addons/web/static/src/xml/base.xml:335 +#: addons/web/static/src/xml/base.xml:1820 msgid "Version" msgstr "バージョン" #. openerp-web -#: addons/web/static/src/xml/base.xml:336 +#: addons/web/static/src/xml/base.xml:1821 msgid "Copyright © 2004-TODAY OpenERP SA. All Rights Reserved." msgstr "Copyright © 2004-TODAY OpenERP SA. All Rights Reserved." #. openerp-web -#: addons/web/static/src/xml/base.xml:337 +#: addons/web/static/src/xml/base.xml:1822 msgid "OpenERP is a trademark of the" msgstr "OpenERPは商標です" #. openerp-web -#: addons/web/static/src/xml/base.xml:338 +#: addons/web/static/src/xml/base.xml:1823 msgid "OpenERP SA Company" msgstr "OpenERP SA Company" #. openerp-web -#: addons/web/static/src/xml/base.xml:340 +#: addons/web/static/src/xml/base.xml:1825 msgid "Licenced under the terms of" msgstr "ライセンスに準拠" #. openerp-web -#: addons/web/static/src/xml/base.xml:341 +#: addons/web/static/src/xml/base.xml:1826 msgid "GNU Affero General Public License" msgstr "GNU Affero General Public License" #. openerp-web -#: addons/web/static/src/xml/base.xml:343 +#: addons/web/static/src/xml/base.xml:1828 msgid "For more information visit" msgstr "もっと詳しい情報はこちらへ" #. openerp-web -#: addons/web/static/src/xml/base.xml:344 +#: addons/web/static/src/xml/base.xml:1829 msgid "OpenERP.com" msgstr "OpenERP.com" #. openerp-web -#: addons/web/static/src/xml/base.xml:352 +#: addons/web/static/src/xml/base.xml:1720 msgid "Old Password:" msgstr "古いパスワード" #. openerp-web -#: addons/web/static/src/xml/base.xml:357 +#: addons/web/static/src/xml/base.xml:1725 msgid "New Password:" msgstr "新しいパスワード:" #. openerp-web -#: addons/web/static/src/xml/base.xml:362 +#: addons/web/static/src/xml/base.xml:1730 msgid "Confirm Password:" msgstr "パスワードの確認:" #. openerp-web #: addons/web/static/src/xml/base.xml:390 msgid "Open" -msgstr "" +msgstr "開く" #. openerp-web #: addons/web/static/src/xml/base.xml:390 @@ -1023,85 +1034,84 @@ msgid "ERP" msgstr "" #. openerp-web -#: addons/web/static/src/xml/base.xml:448 +#: addons/web/static/src/xml/base.xml:477 msgid "Debug View#" -msgstr "ビュー#をデバッグ" +msgstr "ビューをデバッグ" #. openerp-web -#: addons/web/static/src/xml/base.xml:449 +#: addons/web/static/src/xml/base.xml:478 msgid "View Log (perm_read)" msgstr "ログ (perm_read) のビュー" #. openerp-web #: addons/web/static/src/xml/base.xml:450 msgid "Toggle Form Layout Outline" -msgstr "" +msgstr "トグル形式のレイアウトの概観" #. openerp-web -#: addons/web/static/src/xml/base.xml:451 +#: addons/web/static/src/xml/base.xml:479 msgid "View Fields" -msgstr "フィールドのビュー" +msgstr "項目のビュー" #. openerp-web -#: addons/web/static/src/xml/base.xml:453 -#: addons/web/static/src/xml/base.xml:1242 +#: addons/web/static/src/xml/base.xml:1300 msgid "Manage Filters" msgstr "フィルタの管理" #. openerp-web -#: addons/web/static/src/xml/base.xml:456 +#: addons/web/static/src/xml/base.xml:483 msgid "View" msgstr "ビュー" #. openerp-web -#: addons/web/static/src/xml/base.xml:457 +#: addons/web/static/src/xml/base.xml:484 msgid "Edit SearchView" -msgstr "サーチビューを編集" +msgstr "検索ビューの編集" #. openerp-web -#: addons/web/static/src/xml/base.xml:458 +#: addons/web/static/src/xml/base.xml:485 msgid "Edit Action" -msgstr "アクションを編集" +msgstr "アクションの編集" #. openerp-web -#: addons/web/static/src/xml/base.xml:459 +#: addons/web/static/src/xml/base.xml:486 msgid "Edit Workflow" msgstr "ワークフローを編集" #. openerp-web -#: addons/web/static/src/xml/base.xml:464 +#: addons/web/static/src/xml/base.xml:491 msgid "ID:" -msgstr "ID:" +msgstr "ID:" #. openerp-web -#: addons/web/static/src/xml/base.xml:467 +#: addons/web/static/src/xml/base.xml:494 msgid "XML ID:" msgstr "XML ID:" #. openerp-web -#: addons/web/static/src/xml/base.xml:470 +#: addons/web/static/src/xml/base.xml:497 msgid "Creation User:" msgstr "ユーザの作成:" #. openerp-web -#: addons/web/static/src/xml/base.xml:473 +#: addons/web/static/src/xml/base.xml:500 msgid "Creation Date:" msgstr "日付の作成:" #. openerp-web -#: addons/web/static/src/xml/base.xml:476 +#: addons/web/static/src/xml/base.xml:503 msgid "Latest Modification by:" -msgstr "最近の修正は:" +msgstr "最終更新者:" #. openerp-web -#: addons/web/static/src/xml/base.xml:479 +#: addons/web/static/src/xml/base.xml:506 msgid "Latest Modification Date:" -msgstr "最近修正した日付:" +msgstr "最終更新日:" #. openerp-web #: addons/web/static/src/xml/base.xml:518 msgid "Delete this attachment" -msgstr "" +msgstr "この添付の削除" #. openerp-web #: addons/web/static/src/xml/base.xml:523 @@ -1111,446 +1121,450 @@ msgstr "" #. openerp-web #: addons/web/static/src/xml/base.xml:527 msgid "Add..." -msgstr "" +msgstr "追加" #. openerp-web #: addons/web/static/src/xml/base.xml:622 #: addons/web/static/src/xml/base.xml:687 msgid "or" -msgstr "" +msgstr "または" #. openerp-web #: addons/web/static/src/xml/base.xml:687 msgid "Discard" -msgstr "" +msgstr "破棄" #. openerp-web -#: addons/web/static/src/xml/base.xml:704 +#: addons/web/static/src/xml/base.xml:806 msgid "Default:" msgstr "デフォルト:" #. openerp-web -#: addons/web/static/src/xml/base.xml:721 +#: addons/web/static/src/xml/base.xml:823 msgid "Condition:" msgstr "状態:" #. openerp-web -#: addons/web/static/src/xml/base.xml:740 +#: addons/web/static/src/xml/base.xml:842 msgid "Only you" msgstr "あなただけ" #. openerp-web -#: addons/web/static/src/xml/base.xml:747 +#: addons/web/static/src/xml/base.xml:849 msgid "All users" msgstr "全てのユーザ" #. openerp-web -#: addons/web/static/src/xml/base.xml:797 +#: addons/web/static/src/xml/base.xml:856 msgid "Unhandled widget" msgstr "処理されないウィジェット" #. openerp-web -#: addons/web/static/src/xml/base.xml:803 +#: addons/web/static/src/xml/base.xml:936 msgid "(nolabel)" -msgstr "(nolabel)" +msgstr "(ラベルなし)" #. openerp-web -#: addons/web/static/src/xml/base.xml:808 +#: addons/web/static/src/xml/base.xml:941 msgid "Field:" -msgstr "フィールド:" +msgstr "項目:" #. openerp-web -#: addons/web/static/src/xml/base.xml:812 +#: addons/web/static/src/xml/base.xml:945 msgid "Object:" msgstr "オブジェクト:" #. openerp-web -#: addons/web/static/src/xml/base.xml:816 +#: addons/web/static/src/xml/base.xml:949 msgid "Type:" -msgstr "タイプ:" +msgstr "タイプ:" #. openerp-web -#: addons/web/static/src/xml/base.xml:820 +#: addons/web/static/src/xml/base.xml:953 msgid "Widget:" msgstr "ウィジェット:" #. openerp-web -#: addons/web/static/src/xml/base.xml:824 +#: addons/web/static/src/xml/base.xml:957 msgid "Size:" msgstr "サイズ:" #. openerp-web -#: addons/web/static/src/xml/base.xml:828 +#: addons/web/static/src/xml/base.xml:961 msgid "Context:" -msgstr "コンテキスト" +msgstr "コンテキスト:" #. openerp-web -#: addons/web/static/src/xml/base.xml:832 +#: addons/web/static/src/xml/base.xml:965 msgid "Domain:" -msgstr "ドメイン:" +msgstr "ドメイン:" #. openerp-web -#: addons/web/static/src/xml/base.xml:836 +#: addons/web/static/src/xml/base.xml:910 +#: addons/web/static/src/xml/base.xml:969 msgid "Modifiers:" -msgstr "修飾:" +msgstr "修飾:" #. openerp-web -#: addons/web/static/src/xml/base.xml:840 +#: addons/web/static/src/xml/base.xml:973 msgid "Change default:" msgstr "デフォルトの変更:" #. openerp-web -#: addons/web/static/src/xml/base.xml:844 +#: addons/web/static/src/xml/base.xml:977 msgid "On change:" msgstr "変更:" #. openerp-web -#: addons/web/static/src/xml/base.xml:848 +#: addons/web/static/src/xml/base.xml:981 msgid "Relation:" msgstr "関係:" #. openerp-web -#: addons/web/static/src/xml/base.xml:852 +#: addons/web/static/src/xml/base.xml:985 msgid "Selection:" msgstr "選択:" #. openerp-web -#: addons/web/static/src/xml/base.xml:895 +#: addons/web/static/src/xml/base.xml:1040 msgid "Open this resource" msgstr "このリソースを開く" #. openerp-web -#: addons/web/static/src/xml/base.xml:922 +#: addons/web/static/src/xml/base.xml:1063 msgid "Select date" msgstr "日付を選択" #. openerp-web #: addons/web/static/src/xml/base.xml:948 msgid "Open Resource" -msgstr "" +msgstr "リソースを開く" #. openerp-web -#: addons/web/static/src/xml/base.xml:1026 -#: addons/web/static/src/xml/base.xml:1067 +#: addons/web/static/src/xml/base.xml:1162 +#: addons/web/static/src/xml/base.xml:1205 msgid "Set Image" -msgstr "イメージをセット" +msgstr "画像をセット" #. openerp-web -#: addons/web/static/src/xml/base.xml:1030 -#: addons/web/static/src/xml/base.xml:1082 -#: addons/web/static/src/xml/base.xml:1084 +#: addons/web/static/src/js/view_form.js:1620 +#: addons/web/static/src/xml/base.xml:1170 +#: addons/web/static/src/xml/base.xml:1220 +#: addons/web/static/src/xml/base.xml:1222 +#: addons/web/static/src/xml/base.xml:1279 msgid "Clear" -msgstr "クリアー" +msgstr "クリア" #. openerp-web -#: addons/web/static/src/xml/base.xml:1035 -#: addons/web/static/src/xml/base.xml:1092 +#: addons/web/static/src/xml/base.xml:1179 +#: addons/web/static/src/xml/base.xml:1230 msgid "Uploading ..." msgstr "アップロード中…" #. openerp-web #: addons/web/static/src/xml/base.xml:1066 msgid "width: 83px;" -msgstr "" +msgstr "幅:83px;" #. openerp-web -#: addons/web/static/src/xml/base.xml:1069 -#: addons/web/static/src/xml/base.xml:1467 +#: addons/web/static/src/xml/base.xml:1207 +#: addons/web/static/src/xml/base.xml:1501 msgid "Select" msgstr "選択" #. openerp-web -#: addons/web/static/src/xml/base.xml:1075 -#: addons/web/static/src/xml/base.xml:1077 +#: addons/web/static/src/xml/base.xml:1214 +#: addons/web/static/src/xml/base.xml:1216 msgid "Save As" msgstr "名前を付けて保存" #. openerp-web -#: addons/web/static/src/xml/base.xml:1126 +#: addons/web/static/src/xml/base.xml:1245 msgid "Button" msgstr "ボタン" #. openerp-web -#: addons/web/static/src/xml/base.xml:1129 +#: addons/web/static/src/xml/base.xml:1248 msgid "(no string)" -msgstr "(ストリングなし)" +msgstr "(文字列なし)" #. openerp-web -#: addons/web/static/src/xml/base.xml:1136 +#: addons/web/static/src/xml/base.xml:1255 msgid "Special:" msgstr "特別:" #. openerp-web -#: addons/web/static/src/xml/base.xml:1141 +#: addons/web/static/src/xml/base.xml:1260 msgid "Button Type:" msgstr "ボタンのタイプ:" #. openerp-web -#: addons/web/static/src/xml/base.xml:1145 +#: addons/web/static/src/xml/base.xml:1264 msgid "Method:" -msgstr "メソッド:" +msgstr "メソッド:" #. openerp-web -#: addons/web/static/src/xml/base.xml:1149 +#: addons/web/static/src/xml/base.xml:1268 msgid "Action ID:" msgstr "アクションID:" #. openerp-web -#: addons/web/static/src/xml/base.xml:1159 +#: addons/web/static/src/xml/base.xml:542 msgid "Field" -msgstr "フィールド" +msgstr "項目" #. openerp-web #: addons/web/static/src/xml/base.xml:1205 msgid "Advanced Search..." -msgstr "" +msgstr "高度な検索..." #. openerp-web -#: addons/web/static/src/xml/base.xml:1230 +#: addons/web/static/src/xml/base.xml:1287 msgid "-- Filters --" msgstr "--フィルタ--" #. openerp-web -#: addons/web/static/src/xml/base.xml:1239 +#: addons/web/static/src/xml/base.xml:1296 msgid "-- Actions --" msgstr "--アクション--" #. openerp-web -#: addons/web/static/src/xml/base.xml:1240 +#: addons/web/static/src/xml/base.xml:1297 msgid "Add Advanced Filter" msgstr "高度なフィルタを追加" #. openerp-web -#: addons/web/static/src/xml/base.xml:1241 +#: addons/web/static/src/xml/base.xml:1298 msgid "Save Filter" msgstr "フィルタを保存" #. openerp-web -#: addons/web/static/src/xml/base.xml:1247 +#: addons/web/static/src/xml/base.xml:1305 msgid "Filter Name:" -msgstr "フィルタ名" +msgstr "フィルタ名:" #. openerp-web -#: addons/web/static/src/xml/base.xml:1249 +#: addons/web/static/src/xml/base.xml:1307 msgid "(Any existing filter with the same name will be replaced)" msgstr "(同じ名前の既存のフィルタは置き換えられます)" #. openerp-web #: addons/web/static/src/xml/base.xml:1376 msgid "Custom Filters" -msgstr "" +msgstr "カスタムフィルタ" #. openerp-web #: addons/web/static/src/xml/base.xml:1379 msgid "Save current filter" -msgstr "" +msgstr "現在のフィルタを保存" #. openerp-web #: addons/web/static/src/xml/base.xml:1381 msgid "Filter name" -msgstr "" +msgstr "フィルタ名" #. openerp-web #: addons/web/static/src/xml/base.xml:1383 msgid "Share with all users" -msgstr "" +msgstr "全てのユーザと共有" #. openerp-web -#: addons/web/static/src/xml/base.xml:1392 +#: addons/web/static/src/js/search.js:298 +#: addons/web/static/src/xml/base.xml:1299 msgid "Add to Dashboard" msgstr "ダッシュボードに追加" #. openerp-web #: addons/web/static/src/xml/base.xml:1394 msgid "Title of new Dashboard item" -msgstr "" +msgstr "新しいダッシュボード項目のタイトル" #. openerp-web #: addons/web/static/src/xml/base.xml:1395 msgid "save" -msgstr "" +msgstr "保存" #. openerp-web #: addons/web/static/src/xml/base.xml:1399 msgid "Select Dashboard to add this filter to" -msgstr "" +msgstr "このフィルタを加えるためのダッシュボードの選択" #. openerp-web #: addons/web/static/src/xml/base.xml:1406 msgid "Advanced Search" -msgstr "" +msgstr "高度な検索" #. openerp-web #: addons/web/static/src/xml/base.xml:1411 msgid "Add a condition" -msgstr "" +msgstr "条件の追加" #. openerp-web #: addons/web/static/src/xml/base.xml:1412 msgid "Apply" -msgstr "" +msgstr "適用" #. openerp-web -#: addons/web/static/src/xml/base.xml:1475 +#: addons/web/static/src/xml/base.xml:1509 msgid "Save & New" msgstr "保存して新規" #. openerp-web -#: addons/web/static/src/xml/base.xml:1476 +#: addons/web/static/src/xml/base.xml:1510 msgid "Save & Close" msgstr "保存して閉じる" #. openerp-web -#: addons/web/static/src/xml/base.xml:1559 +#: addons/web/static/src/xml/base.xml:1617 msgid "" "This wizard will export all data that matches the current search criteria to " "a CSV file.\n" " You can export all data or only the fields that can be " "reimported after modification." msgstr "" -"このウェザードは,検索条件に合った全てのデータをCSVファイルとしてエクスポートします。\n" -"            全てのデータあるいは変更したあと再インポートできるフィールドのみをエクスポートできます。" +"このウィザードは,現在の検索条件に合致した全てのデータをCSVファイルとしてエクスポートします。\n" +"            全てのデータ,または変更後に再インポートした項目のみをエクスポートできます。" #. openerp-web -#: addons/web/static/src/xml/base.xml:1566 +#: addons/web/static/src/xml/base.xml:1624 msgid "Export Type:" msgstr "エクスポートのタイプ:" #. openerp-web -#: addons/web/static/src/xml/base.xml:1568 +#: addons/web/static/src/xml/base.xml:1626 msgid "Import Compatible Export" msgstr "インポートと互換性があるエクスポート" #. openerp-web -#: addons/web/static/src/xml/base.xml:1569 +#: addons/web/static/src/xml/base.xml:1627 msgid "Export all Data" msgstr "全てのデータをエクスポート" #. openerp-web -#: addons/web/static/src/xml/base.xml:1572 +#: addons/web/static/src/xml/base.xml:1630 msgid "Export Formats" msgstr "エクスポートの形式" #. openerp-web -#: addons/web/static/src/xml/base.xml:1578 +#: addons/web/static/src/xml/base.xml:1636 msgid "Available fields" -msgstr "利用可能なフィールド" +msgstr "利用可能な項目" #. openerp-web -#: addons/web/static/src/xml/base.xml:1580 +#: addons/web/static/src/xml/base.xml:1638 msgid "Fields to export" -msgstr "エクスポートするフィールド" +msgstr "エクスポートする項目" #. openerp-web -#: addons/web/static/src/xml/base.xml:1582 +#: addons/web/static/src/xml/base.xml:1640 msgid "Save fields list" -msgstr "フィールドリストを保存" +msgstr "項目リストを保存" #. openerp-web -#: addons/web/static/src/xml/base.xml:1596 +#: addons/web/static/src/xml/base.xml:1654 msgid "Remove All" msgstr "全てを削除" #. openerp-web -#: addons/web/static/src/xml/base.xml:1607 +#: addons/web/static/src/xml/base.xml:1666 msgid "Name" msgstr "名前" #. openerp-web -#: addons/web/static/src/xml/base.xml:1639 +#: addons/web/static/src/xml/base.xml:1699 msgid "Save as:" msgstr "名前を付けて保存 :" #. openerp-web -#: addons/web/static/src/xml/base.xml:1645 +#: addons/web/static/src/xml/base.xml:1706 msgid "Saved exports:" -msgstr "保存されたエクスポート" +msgstr "保存されたエクスポート:" #. openerp-web -#: addons/web/static/src/xml/base.xml:1663 +#: addons/web/static/src/xml/base.xml:1748 msgid "1. Import a .CSV file" msgstr "1. CVSファイルのインポート" #. openerp-web -#: addons/web/static/src/xml/base.xml:1664 +#: addons/web/static/src/xml/base.xml:1749 msgid "" "Select a .CSV file to import. If you need a sample of file to import,\n" " you should use the export tool with the \"Import Compatible\" option." msgstr "" -"インポートするファイルのサンプルが必要ならば,インポートするCSVファイルを選択\n" -"      インポート互換のエクスポートツールを使ってください" +"インポートするファイルのサンプルが必要ならば、インポートするCSVファイルを選択します。\n" +"      エクスポートツールでインポート互換オプションを使って下さい。" #. openerp-web -#: addons/web/static/src/xml/base.xml:1668 +#: addons/web/static/src/xml/base.xml:1753 msgid "CSV File:" -msgstr "CSVファイル" +msgstr "CSVファイル:" #. openerp-web -#: addons/web/static/src/xml/base.xml:1671 +#: addons/web/static/src/xml/base.xml:1756 msgid "2. Check your file format" -msgstr "2. ファイル形式をチェックしてください" +msgstr "2. ファイル形式のチェック" #. openerp-web -#: addons/web/static/src/xml/base.xml:1674 +#: addons/web/static/src/xml/base.xml:1759 msgid "Import Options" msgstr "インポートオプション" #. openerp-web -#: addons/web/static/src/xml/base.xml:1678 +#: addons/web/static/src/xml/base.xml:1763 msgid "Does your file have titles?" msgstr "そのファイルはタイトルを持っていますか?" #. openerp-web -#: addons/web/static/src/xml/base.xml:1684 +#: addons/web/static/src/xml/base.xml:1769 msgid "Separator:" -msgstr "区切り文字:" +msgstr "区切り文字:" #. openerp-web -#: addons/web/static/src/xml/base.xml:1686 +#: addons/web/static/src/xml/base.xml:1771 msgid "Delimiter:" -msgstr "区切り文字:" +msgstr "区切り文字:" #. openerp-web -#: addons/web/static/src/xml/base.xml:1690 +#: addons/web/static/src/xml/base.xml:1775 msgid "Encoding:" -msgstr "エンコーディング:" +msgstr "エンコード:" #. openerp-web -#: addons/web/static/src/xml/base.xml:1693 +#: addons/web/static/src/xml/base.xml:1778 msgid "UTF-8" msgstr "UTF-8" #. openerp-web -#: addons/web/static/src/xml/base.xml:1694 +#: addons/web/static/src/xml/base.xml:1779 msgid "Latin 1" msgstr "ラテン1" #. openerp-web -#: addons/web/static/src/xml/base.xml:1697 +#: addons/web/static/src/xml/base.xml:1782 msgid "Lines to skip" msgstr "スキップする行" #. openerp-web -#: addons/web/static/src/xml/base.xml:1697 +#: addons/web/static/src/xml/base.xml:1782 msgid "" "For use if CSV files have titles on multiple lines, skips more than a single " "line during import" -msgstr "CVSファイルが,複数行にタイトルを持っていたら,インポートの際に1行以上をスキップする" +msgstr "CVSファイルが複数行であり、タイトルを持っていた場合、インポートの際に1行以上をスキップするために使用します" #. openerp-web #: addons/web/static/src/xml/base.xml:1713 msgid "--- Don't Import ---" -msgstr "" +msgstr "---インポートなし---" #. openerp-web -#: addons/web/static/src/xml/base.xml:1724 +#: addons/web/static/src/xml/base.xml:1809 msgid "The import failed due to:" msgstr "次の理由でインポートに失敗しました:" #. openerp-web -#: addons/web/static/src/xml/base.xml:1726 +#: addons/web/static/src/xml/base.xml:1811 msgid "Here is a preview of the file we could not import:" -msgstr "インポートできなかったファイルのポレビュー:" +msgstr "インポートできなかったファイルのプレビュー:" #~ msgid "Filter Entry" #~ msgstr "フィルター項目" diff --git a/addons/web/static/src/css/base.css b/addons/web/static/src/css/base.css index f9493f08e55..0a3d24d41f4 100644 --- a/addons/web/static/src/css/base.css +++ b/addons/web/static/src/css/base.css @@ -1,4 +1,4 @@ -@charset "utf-8"; +@charset "UTF-8"; @font-face { font-family: "mnmliconsRegular"; src: url("/web/static/src/font/mnmliconsv21-webfont.eot") format("eot"); @@ -34,7 +34,7 @@ background: white; /* http://www.quirksmode.org/dom/inputfile.html * http://stackoverflow.com/questions/2855589/replace-input-type-file-by-an-image - */ */ + */ } .openerp a { text-decoration: none; @@ -188,13 +188,7 @@ } .openerp.ui-dialog { display: none; - position: fixed; padding: 6px; - top: 50%; - left: 50%; - z-index: 1050; - width: 560px; - margin: -150px 0 0 -280px; background-color: rgba(60, 60, 60, 0.7); border: 1px solid; border-color: #888888 #555555 #444444; @@ -208,6 +202,9 @@ -moz-background-clip: padding-box; background-clip: padding-box; } +.openerp.ui-dialog .ui-dialog-content { + padding: 0px; +} .openerp.ui-dialog .ui-dialog-titlebar, .openerp.ui-dialog .ui-dialog-content, .openerp.ui-dialog .ui-dialog-buttonpane { padding: 16px; } @@ -237,14 +234,16 @@ .openerp.ui-dialog .ui-dialog-buttonpane { border-top: 1px solid #e0e0e0; background: #f5f7f9; - padding: 8px; margin: 0; -moz-border-radius: 0 0 2px 2px; -webkit-border-radius: 0 0 2px 2px; border-radius: 0 0 2px 2px; } .openerp.ui-dialog .ui-dialog-buttonpane button { - margin-left: 8px; + margin: 0; +} +.openerp.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { + float: left; } .openerp.ui-dialog .ui-dialog-titlebar-close { padding: 0; @@ -268,6 +267,9 @@ color: black; text-decoration: none; } +.openerp.ui-dialog.oe_act_window .ui-dialog-content { + padding: 0px; +} .openerp .modal-backdrop { position: fixed; top: 0; @@ -308,6 +310,7 @@ } .openerp .oe_fade { color: #888888; + font-weight: normal; } .openerp .oe_bold { font-weight: bold; @@ -376,7 +379,8 @@ background: #ed6f6a; } .openerp .oe_title { - width: 60%; + width: 50%; + float: left; } .openerp .oe_title:after { content: "."; @@ -386,17 +390,18 @@ visibility: hidden; } .openerp .oe_button_box { - width: 38%; + width: 270px; text-align: right; } .openerp .oe_button_box button { margin: 4px; } .openerp .oe_avatar { - margin: 0 16px 0 0; + margin: 0 6px 15px 0; } -.openerp .oe_avatar img { - height: 50px; +.openerp .oe_avatar > img { + height: 90px; + max-width: 100px; -moz-border-radius: 3px; -webkit-border-radius: 3px; border-radius: 3px; @@ -405,6 +410,9 @@ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3); border: none; } +.openerp .oe_avatar + div { + margin-left: 5px; +} .openerp .oe_button.oe_link { border: none; padding: 0; @@ -450,6 +458,29 @@ .openerp .oe_webclient .oe_star_on { color: gold; } +.openerp .oe_tag { + border-radius: 2px; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box; + border: 1px solid #9daccc; + background: #e2e6f0; + color: black !important; + padding: 0px 3px 0px 3px; + margin: 0 2px 2px 0; + height: 16px; +} +.openerp .oe_tags .text-wrap { + width: 100% !important; +} +.openerp .oe_tags .text-wrap textarea { + width: 100% !important; +} +.openerp .oe_tags .text-core .text-wrap .text-dropdown .text-list .text-suggestion em { + font-style: italic; + text-decoration: none; +} .openerp.oe_tooltip { font-size: 12px; } @@ -1136,63 +1167,63 @@ .openerp .oe_view_manager .oe_view_manager_view_kanban { height: inherit; } -.openerp .oe_view_manager .oe_view_manager_header { +.openerp .oe_view_manager table.oe_view_manager_header { width: 100%; + table-layout: fixed; } -.openerp .oe_view_manager .oe_view_manager_header .oe_header_row { +.openerp .oe_view_manager table.oe_view_manager_header .oe_header_row { clear: both; text-shadow: 0 1px 1px white; } -.openerp .oe_view_manager .oe_view_manager_header .oe_header_row:last-child td { +.openerp .oe_view_manager table.oe_view_manager_header .oe_header_row:last-child td { padding-top: 0; } -.openerp .oe_view_manager .oe_view_manager_header .oe_view_manager_sidebar { +.openerp .oe_view_manager table.oe_view_manager_header .oe_view_manager_sidebar { margin: 0px auto; - width: 400px; text-align: center; } -.openerp .oe_view_manager .oe_view_manager_header td { +.openerp .oe_view_manager table.oe_view_manager_header td { line-height: 26px; } -.openerp .oe_view_manager .oe_view_manager_header h2 { +.openerp .oe_view_manager table.oe_view_manager_header h2 { font-size: 18px; margin: 0; float: left; } -.openerp .oe_view_manager .oe_view_manager_header h2 a { +.openerp .oe_view_manager table.oe_view_manager_header h2 a { color: #8a89ba; } -.openerp .oe_view_manager .oe_view_manager_header .oe_button_group { +.openerp .oe_view_manager table.oe_view_manager_header .oe_button_group { display: inline-block; border: 1px solid #ababab; -moz-border-radius: 5px; -webkit-border-radius: 5px; border-radius: 5px; } -.openerp .oe_view_manager .oe_view_manager_header .oe_button_group li { +.openerp .oe_view_manager table.oe_view_manager_header .oe_button_group li { float: left; border-right: 1px solid #ababab; } -.openerp .oe_view_manager .oe_view_manager_header .oe_button_group li:last-child { +.openerp .oe_view_manager table.oe_view_manager_header .oe_button_group li:last-child { border: none; } -.openerp .oe_view_manager .oe_view_manager_header .oe_button_group a { +.openerp .oe_view_manager table.oe_view_manager_header .oe_button_group a { color: #4c4c4c; } -.openerp .oe_view_manager .oe_view_manager_header .oe_button_group a:hover { +.openerp .oe_view_manager table.oe_view_manager_header .oe_button_group a:hover { text-decoration: none; } -.openerp .oe_view_manager .oe_view_manager_header .oe_button_group .active { +.openerp .oe_view_manager table.oe_view_manager_header .oe_button_group .active { background: #999999; -moz-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3) inset; -webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3) inset; box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3) inset; } -.openerp .oe_view_manager .oe_view_manager_header .oe_button_group .active a { +.openerp .oe_view_manager table.oe_view_manager_header .oe_button_group .active a { color: white; text-shadow: 0 1px 2px rgba(0, 0, 0, 0.4); } -.openerp .oe_view_manager .oe_view_manager_header .oe_view_manager_buttons { +.openerp .oe_view_manager table.oe_view_manager_header .oe_view_manager_buttons { white-space: nowrap; } .openerp .oe_view_manager .oe_view_manager_pager { @@ -1319,7 +1350,7 @@ float: right; padding: 1px 0; line-height: 18px; - width: 480px; + width: 400px; border: 1px solid #ababab; background: white; -moz-border-radius: 13px; @@ -1741,12 +1772,12 @@ width: auto; } .openerp .oe_form_nosheet { - margin-left: 10px; - margin-right: 10px; + margin: 20px; } .openerp .oe_form_nosheet > header { - margin-left: -10px; - margin-right: -10px; + margin-top: -20px; + margin-left: -20px; + margin-right: -20px; } .openerp .oe_form header { position: relative; @@ -1765,7 +1796,7 @@ display: inline-block; float: right; } -.openerp .oe_form footer { +.openerp .oe_form div.oe_chatter { min-width: 650px; max-width: 860px; margin: 0 auto; @@ -1817,17 +1848,21 @@ .openerp .oe_form .oe_subtotal_footer td.oe_form_group_cell_label { border-right: none; } -.openerp .oe_form .oe_subtotal_footer .oe_form_field { - width: auto !important; -} .openerp .oe_form .oe_subtotal_footer .oe_subtotal_footer_separator { + width: 108px; border-top: 1px solid #cacaca; - font-sie: 120%; font-weight: bold; + font-size: 18px; +} +.openerp .oe_form .oe_subtotal_footer label:after { + content: ":"; } .openerp .oe_form .oe_subtotal_footer label.oe_subtotal_footer_separator { font-weight: bold !important; - padding: 2px 8px 2px 0px !important; + padding: 2px 11px 2px 0px !important; +} +.openerp .oe_form .oe_subtotal_footer label.oe_form_label_help { + font-weight: normal; } .openerp .oe_application .oe_form_sheetbg { background: url(/web/static/src/img/form_sheetbg.png); @@ -1854,6 +1889,9 @@ .openerp .oe_application .oe_form_sheet .oe_notebook_page { padding: 0 16px; } +.openerp .oe_form .oe_form_button { + margin: 2px; +} .openerp .oe_form td.oe_form_group_cell_label { border-right: 1px solid #dddddd; padding: 2px 0px 2px 0px; @@ -1861,17 +1899,17 @@ .openerp .oe_form td.oe_form_group_cell_label label { line-height: 18px; display: block; - min-width: 110px; + min-width: 120px; } .openerp .oe_form td.oe_form_group_cell + .oe_form_group_cell { padding-left: 6px; } .openerp .oe_form .oe_form_group { width: 100%; - margin: 4px 0 4px 0; + margin: 6px 0 6px 0; } -.openerp .oe_form .oe_form_group .oe_group_right > tbody > tr > td:first-child { - padding-left: 18px; +.openerp .oe_form .oe_form_group .oe_form_group_cell.oe_group_right { + padding-left: 20px; } .openerp .oe_form .oe_form_label_help[for], .openerp .oe_form .oe_form_label[for] { font-weight: bold; @@ -1941,15 +1979,6 @@ .openerp .oe_form .oe_form_field_text.oe_inline, .openerp .oe_form .oe_form_field_text.oe_inline > textarea { width: 500px; } -.openerp .oe_form .oe_form_field_float input { - width: 100px; -} -.openerp .oe_form h1 .oe_form_field_float input { - width: 140px; -} -.openerp .oe_form h2 .oe_form_field_float input { - width: 120px; -} .openerp .oe_form h1, .openerp .oe_form h2, .openerp .oe_form h3, .openerp .oe_form h4, .openerp .oe_form h5, .openerp .oe_form h6 { margin: 0 0 4px 0; } @@ -1966,18 +1995,6 @@ .openerp .oe_form .oe_form_field input { margin: 0px; } -.openerp .oe_form .oe_form_field_integer { - width: 180px; -} -.openerp .oe_form .oe_form_field_float { - width: 180px; -} -.openerp .oe_form .oe_form_field_date { - width: 7.5em; -} -.openerp .oe_form .oe_form_field_datetime { - width: 11em; -} .openerp .oe_form input[type="text"], .openerp .oe_form input[type="password"], .openerp .oe_form input[type="file"], .openerp .oe_form select { height: 22px; padding-top: 2px; @@ -2017,32 +2034,6 @@ padding-top: 4px; width: auto; } -.openerp .oe_form .oe_form_field_many2manytags .text-wrap { - width: 100% !important; -} -.openerp .oe_form .oe_form_field_many2manytags .text-wrap textarea { - width: 100% !important; -} -.openerp .oe_form .oe_form_field_many2manytags .oe_form_field_many2manytags_box { - border-radius: 2px; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - -ms-box-sizing: border-box; - box-sizing: border-box; - position: relative; - float: left; - border: 1px solid #9daccc; - background: #e2e6f0; - color: black; - padding: 0px 3px 0px 3px; - margin: 0 2px 2px 0; - height: 16px; - font: 11px "lucida grande", tahoma, verdana, arial, sans-serif; -} -.openerp .oe_form .oe_form_field_many2manytags .text-core .text-wrap .text-dropdown .text-list .text-suggestion em { - font-style: italic; - text-decoration: none; -} .openerp .oe_form .oe_datepicker_container { display: none; } @@ -2072,15 +2063,6 @@ .openerp .oe_form .oe_form_field_with_button.oe_no_button > .oe_button { display: none; } -.openerp .oe_form .oe_form_field_with_button:not(.oe_no_button) input { - border-right: none; - -webkit-border-top-right-radius: 0px; - -webkit-border-bottom-right-radius: 0px; - -moz-border-radius-topright: 0px; - -moz-border-radius-bottomright: 0px; - border-top-right-radius: 0px; - border-bottom-right-radius: 0px; -} .openerp .oe_form .oe_form_field_with_button:not(.oe_no_button) > .oe_button { float: right; -moz-border-radius: 0; @@ -2096,6 +2078,18 @@ position: relative; overflow: hidden; } +.openerp .oe_form_editable .oe_form .oe_form_field_integer { + width: 7em !important; +} +.openerp .oe_form_editable .oe_form .oe_form_field_float { + width: 8em !important; +} +.openerp .oe_form_editable .oe_form .oe_form_field_date { + width: 7.5em !important; +} +.openerp .oe_form_editable .oe_form .oe_form_field_datetime { + width: 11.5em !important; +} .openerp .oe_hidden_input_file { overflow: hidden; position: relative; @@ -2125,6 +2119,7 @@ } .openerp .oe_form .oe_form_field_image .oe_form_field_image_controls { position: absolute; + white-space: nowrap; top: 1px; padding: 3px 0 0 0; margin: 0 1px; @@ -2146,33 +2141,42 @@ } .openerp .oe_form_field_many2one span.oe_m2o_drop_down_button { position: absolute; - top: 1px; + top: 2px; right: 0px; } +.openerp .oe_form_field_many2one .oe_m2o_cm_button { + line-height: 14px; +} .openerp .oe_form .oe_form_field_one2many > .oe_view_manager .oe_list_pager_single_page { display: none; } -.openerp .oe_form_field_one2many .oe_list .oe_list_edit_row_save { +.openerp .oe_form_field_one2many .oe_list_content > thead, .openerp .oe_form_field_many2many .oe_list_content > thead { + border-bottom: 1px; +} +.openerp .oe_form_field_one2many .oe_list_content > tbody tr:nth-child(odd), .openerp .oe_form_field_many2many .oe_list_content > tbody tr:nth-child(odd) { + background: transparent; +} +.openerp .oe_form_field_one2many .oe_list .oe_list_edit_row_save, .openerp .oe_form_field_many2many .oe_list .oe_list_edit_row_save { background: url(/web/static/src/img/iconset-b-remove.png) 50% 50% no-repeat; } -.openerp .oe_form_field_one2many .oe_list .oe_list_edit_row_save:before { +.openerp .oe_form_field_one2many .oe_list .oe_list_edit_row_save:before, .openerp .oe_form_field_many2many .oe_list .oe_list_edit_row_save:before { visibility: hidden; } -.openerp .oe_form_field_one2many > .oe_view_manager .oe_header_row_top { +.openerp .oe_form_field_one2many > .oe_view_manager .oe_header_row_top, .openerp .oe_form_field_many2many > .oe_view_manager .oe_header_row_top { display: none; } -.openerp .oe_form_field_one2many > .oe_view_manager .oe_view_manager_header2 td { +.openerp .oe_form_field_one2many > .oe_view_manager .oe_view_manager_header2 td, .openerp .oe_form_field_many2many > .oe_view_manager .oe_view_manager_header2 td { padding: 0px 8px; line-height: 16px; } -.openerp .oe_form_field_one2many > .oe_view_manager .oe_view_manager_header2 td .oe_i { +.openerp .oe_form_field_one2many > .oe_view_manager .oe_view_manager_header2 td .oe_i, .openerp .oe_form_field_many2many > .oe_view_manager .oe_view_manager_header2 td .oe_i { font-size: 13px; } -.openerp .oe_form_field_one2many > .oe_view_manager .oe_view_manager_header2 td .oe_pager_group { +.openerp .oe_form_field_one2many > .oe_view_manager .oe_view_manager_header2 td .oe_pager_group, .openerp .oe_form_field_many2many > .oe_view_manager .oe_view_manager_header2 td .oe_pager_group { height: auto; line-height: 16px; } -.openerp .oe_form_field_one2many > .oe_view_manager .oe_view_manager_header2 td .oe_pager_group li { +.openerp .oe_form_field_one2many > .oe_view_manager .oe_view_manager_header2 td .oe_pager_group li, .openerp .oe_form_field_many2many > .oe_view_manager .oe_view_manager_header2 td .oe_pager_group li { height: auto; line-height: 16px; } @@ -2185,6 +2189,10 @@ .openerp .oe_list_content td:first-child:after, .openerp .oe_list_content th:first-child:after { border-width: 0; } +.openerp .oe_list_content td.oe_number { + text-align: right !important; + max-width: 100px; +} .openerp .oe_list_content > thead { border-bottom: 2px solid #cacaca; background: #eeeeee; @@ -2233,8 +2241,8 @@ .openerp .oe_list_content > tbody > tr > td.oe_list_field_cell { padding: 3px 6px; } -.openerp .oe_list_content > tbody > tr > td, .openerp .oe_list_content > tbody > tr > th { - line-height: 18px; +.openerp .oe_list_content > tbody > tr > td.oe_list_field_cell progress { + width: 100%; } .openerp .oe_list_content > tbody > tr > td > button, .openerp .oe_list_content > tbody > tr > th > button { border: none; @@ -2250,9 +2258,6 @@ .openerp .oe_list_content > tbody > tr > td.oe_list_checkbox:first-child:after, .openerp .oe_list_content > tbody > tr th.oe_list_checkbox:first-child:after { border-width: 0; } -.openerp .oe_list_content > tbody > tr > td.oe_number { - text-align: right !important; -} .openerp .oe_list_content > tbody > tr:nth-child(odd) { background-color: #f0f0fa; background-color: #f0f0fa; diff --git a/addons/web/static/src/css/base.sass b/addons/web/static/src/css/base.sass index d26b6c9e29b..fb67945a02d 100644 --- a/addons/web/static/src/css/base.sass +++ b/addons/web/static/src/css/base.sass @@ -205,13 +205,7 @@ $sheet-max-width: 860px // Modal box &.ui-dialog display: none - position: fixed padding: 6px - top: 50% - left: 50% - z-index: 1050 - width: 560px - margin: -150px 0 0 -280px //overflow: hidden background-color: rgba(60,60,60,0.7) border: 1px solid @@ -220,6 +214,8 @@ $sheet-max-width: 860px @include radius(8px) @include box-shadow(0 1px 12px rgba(0, 0, 0, 0.6)) @include background-clip() + .ui-dialog-content + padding: 0px .ui-dialog-titlebar, .ui-dialog-content, .ui-dialog-buttonpane padding: 16px .ui-dialog-titlebar @@ -236,11 +232,12 @@ $sheet-max-width: 860px .ui-dialog-buttonpane border-top: 1px solid #e0e0e0 background: #f5f7f9 - padding: 8px margin: 0 @include radius(0 0 2px 2px) button - margin-left: 8px + margin: 0 + .ui-dialog-buttonset + float: left .ui-dialog-titlebar-close padding: 0 .ui-icon-closethick @@ -260,6 +257,10 @@ $sheet-max-width: 860px color: black text-decoration: none + &.ui-dialog.oe_act_window + .ui-dialog-content + padding: 0px + .modal-backdrop position: fixed top: 0 @@ -294,6 +295,7 @@ $sheet-max-width: 860px cursor: wait .oe_fade color: #888 + font-weight: normal .oe_bold font-weight: bold .oe_inline @@ -322,7 +324,8 @@ $sheet-max-width: 860px &:hover background: #ED6F6A .oe_title - width: 60% + width: 50% + float: left .oe_title:after content: "." display: block @@ -330,17 +333,20 @@ $sheet-max-width: 860px clear: both visibility: hidden .oe_button_box - width: 38% + width: 270px text-align: right button margin: 4px .oe_avatar - margin: 0 16px 0 0 - img - height: 50px + margin: 0 6px 15px 0 + > img + height: 90px + max-width: 100px @include radius(3px) @include box-shadow(0 1px 3px rgba(0, 0, 0, 0.3)) border: none + .oe_avatar + div + margin-left: 5px .oe_button.oe_link @include reset() img @@ -362,8 +368,26 @@ $sheet-max-width: 860px text-decoration: none .oe_star_on color: gold - - //.oe_edit_only  + // }}} + // Tags (for many2many tags, among others) {{{ + .oe_tag + border-radius: 2px + @include box-sizing(border) + border: 1px solid #9DACCC + background: #E2E6F0 + color: black !important + padding: 0px 3px 0px 3px + margin: 0 2px 2px 0 + height: 16px + // font: 11px "lucida grande", tahoma, verdana, arial, sans-serif + .oe_tags + .text-wrap + width: 100% !important + textarea + width: 100% !important + .text-core .text-wrap .text-dropdown .text-list .text-suggestion em + font-style: italic + text-decoration: none // }}} // Tooltips {{{ &.oe_tooltip @@ -823,7 +847,7 @@ $sheet-max-width: 860px text-shadow: 0 1px 1px rgba(0,0,0,0.2) @include radius(4px) @include box-shadow(inset 0 1px 1px rgba(0, 0, 0, 0.2)) - .oe_menu_counter + .oe_menu_counter float: right background: #8a89ba color: #eee @@ -846,7 +870,7 @@ $sheet-max-width: 860px color: $colour4 text-shadow: 0 1px 1px white @include box-shadow(0 1px 1px rgba(0, 0, 0, 0.2)) - .oe_menu_counter + .oe_menu_counter background: #eee color: #8a89ba .oe_menu_toggler:before @@ -888,8 +912,9 @@ $sheet-max-width: 860px .oe_view_manager_view_kanban height: inherit - .oe_view_manager_header + table.oe_view_manager_header width: 100% + table-layout: fixed .oe_header_row //min-height: 26px //line-height: 26px @@ -900,7 +925,6 @@ $sheet-max-width: 860px padding-top: 0 .oe_view_manager_sidebar margin: 0px auto - width: 400px text-align: center td line-height: 26px @@ -1033,7 +1057,7 @@ $sheet-max-width: 860px float: right padding: 1px 0 line-height: 18px - width: 480px + width: 400px border: 1px solid #ababab background: white @include radius(13px) @@ -1312,7 +1336,7 @@ $sheet-max-width: 860px margin: 0 0 0 4px padding: 0 - + // }}} // Views Common {{{ .oe_view_nocontent @@ -1356,25 +1380,25 @@ $sheet-max-width: 860px display: none !important .oe_form .oe_form_field_date width: auto - .oe_form_nosheet - margin-left: 10px - margin-right: 10px + .oe_form_nosheet + margin: 20px .oe_form_nosheet > header - margin-left: -10px - margin-right: -10px + margin-top: -20px + margin-left: -20px + margin-right: -20px // }}} // FormView.custom tags and classes {{{ - .oe_form + .oe_form header position: relative border-bottom: 1px solid #cacaca @include vertical-gradient(#fcfcfc, #dedede) padding: 0 8px - line-height: 30px + line-height: 30px ul display: inline-block float: right - footer + div.oe_chatter min-width: 650px max-width: $sheet-max-width margin: 0 auto @@ -1387,12 +1411,12 @@ $sheet-max-width: 860px vertical-align: top margin-left: 8px li - border-right: none + border-right: none padding: 0 margin: 0 - float: left + float: left vertical-align: top - height: 30px + height: 30px padding: 0 0 0 12px &:first-child border-left: 1px solid #cacaca @@ -1414,21 +1438,24 @@ $sheet-max-width: 860px padding: 0 !important td.oe_form_group_cell_label border-right: none - .oe_form_field - width: auto !important .oe_subtotal_footer_separator + width: 108px border-top: 1px solid #cacaca - font-sie: 120% font-weight: bold + font-size: 18px + label:after + content: ":" label.oe_subtotal_footer_separator font-weight: bold !important - padding: 2px 8px 2px 0px !important + padding: 2px 11px 2px 0px !important + label.oe_form_label_help + font-weight: normal // no sheet in popups .oe_application .oe_form_sheetbg background: url(/web/static/src/img/form_sheetbg.png) padding: 8px 0 - border-bottom: 1px solid #ddd + border-bottom: 1px solid #ddd .oe_form_sheet_width min-width: 650px max-width: $sheet-max-width @@ -1446,21 +1473,22 @@ $sheet-max-width: 860px // }}} // FormView.group {{{ .oe_form + .oe_form_button + margin: 2px td.oe_form_group_cell_label border-right: 1px solid #ddd padding: 2px 0px 2px 0px label line-height: 18px display: block - min-width: 110px + min-width: 120px td.oe_form_group_cell + .oe_form_group_cell padding-left: 6px .oe_form_group width: 100% - margin: 4px 0 4px 0 - .oe_group_right - > tbody > tr > td:first-child - padding-left: 18px + margin: 6px 0 6px 0 + .oe_form_group_cell.oe_group_right + padding-left: 20px // }}} // FormView.label {{{ .oe_form @@ -1521,12 +1549,6 @@ $sheet-max-width: 860px width: 100% .oe_form_field_text.oe_inline, .oe_form_field_text.oe_inline > textarea width: 500px - .oe_form_field_float input - width: 100px - h1 .oe_form_field_float input - width: 140px - h2 .oe_form_field_float input - width: 120px h1, h2, h3, h4, h5, h6 margin: 0 0 4px 0 input @@ -1539,14 +1561,6 @@ $sheet-max-width: 860px line-height: 18px input margin: 0px - .oe_form_field_integer - width: 180px - .oe_form_field_float - width: 180px - .oe_form_field_date - width: 7.5em - .oe_form_field_datetime - width: 11em input[type="text"], input[type="password"], input[type="file"], select height: 22px padding-top: 2px @@ -1572,26 +1586,6 @@ $sheet-max-width: 860px .oe_form_field_boolean padding-top: 4px width: auto - .oe_form_field_many2manytags - .text-wrap - width: 100% !important - textarea - width: 100% !important - .oe_form_field_many2manytags_box - border-radius: 2px - @include box-sizing(border) - position: relative - float: left - border: 1px solid #9DACCC - background: #E2E6F0 - color: black - padding: 0px 3px 0px 3px - margin: 0 2px 2px 0 - height: 16px - font: 11px "lucida grande", tahoma, verdana, arial, sans-serif - .text-core .text-wrap .text-dropdown .text-list .text-suggestion em - font-style: italic - text-decoration: none .oe_datepicker_container display: none .oe_datepicker_root @@ -1617,14 +1611,6 @@ $sheet-max-width: 860px .oe_form_field_with_button.oe_no_button > .oe_button display: none .oe_form_field_with_button:not(.oe_no_button) - input - border-right: none - -webkit-border-top-right-radius: 0px - -webkit-border-bottom-right-radius: 0px - -moz-border-radius-topright: 0px - -moz-border-radius-bottomright: 0px - border-top-right-radius: 0px - border-bottom-right-radius: 0px > .oe_button float: right @include radius(0) @@ -1636,6 +1622,16 @@ $sheet-max-width: 860px > div position: relative overflow: hidden + .oe_form_editable + .oe_form + .oe_form_field_integer + width: 7em !important + .oe_form_field_float + width: 8em !important + .oe_form_field_date + width: 7.5em !important + .oe_form_field_datetime + width: 11.5em !important // }}} // FormView.fields_binary {{{ /* http://www.quirksmode.org/dom/inputfile.html @@ -1669,6 +1665,7 @@ $sheet-max-width: 860px vertical-align: top .oe_form_field_image_controls position: absolute + white-space: nowrap top: 1px padding: 3px 0 0 0 margin: 0 1px @@ -1687,15 +1684,23 @@ $sheet-max-width: 860px position: relative span.oe_m2o_drop_down_button position: absolute - top: 1px + top: 2px right: 0px + .oe_m2o_cm_button + line-height: 14px // }}} // FormView.one2many {{{ .oe_form .oe_form_field_one2many > .oe_view_manager .oe_list_pager_single_page display: none - .oe_form_field_one2many + .oe_form_field_one2many,.oe_form_field_many2many // TODO: oe_form_field_one2many_list? + .oe_list_content + > thead + border-bottom: 1px + > tbody + tr:nth-child(odd) + background: transparent .oe_list .oe_list_edit_row_save background: url(/web/static/src/img/iconset-b-remove.png) 50% 50% no-repeat &:before @@ -1728,6 +1733,9 @@ $sheet-max-width: 860px td:first-child, th:first-child &:after border-width: 0 + td.oe_number + text-align: right !important + max-width: 100px > thead border-bottom: 2px solid #cacaca background: #eee @@ -1763,8 +1771,9 @@ $sheet-max-width: 860px border-top: 1px solid #ddd > td.oe_list_field_cell padding: 3px 6px + progress + width: 100% > td, > th - line-height: 18px > button border: none background: transparent @@ -1774,8 +1783,6 @@ $sheet-max-width: 860px width: 17px &:after border-width: 0 - > td.oe_number - text-align: right !important > tr:nth-child(odd) background-color: #f0f0fa @include vertical-gradient(#f0f0fa, #eeeef6) diff --git a/addons/web/static/src/js/chrome.js b/addons/web/static/src/js/chrome.js index 970d509d481..094e2f184e6 100644 --- a/addons/web/static/src/js/chrome.js +++ b/addons/web/static/src/js/chrome.js @@ -63,7 +63,7 @@ instance.web.Dialog = instance.web.Widget.extend({ this.dialog_options = { modal: true, destroy_on_close: true, - width: $(window).width() * (($(window).width() > 1024) ? 0.5 : 0.75), + width: 900, min_width: 0, max_width: '95%', height: 'auto', @@ -145,9 +145,9 @@ instance.web.Dialog = instance.web.Widget.extend({ _.each(this.getChildren(), function(el) { el.destroy(); }); - if (! this.isDestroyed()) { - this.$element.dialog('destroy'); - } + if (! this.isDestroyed()) { + this.$element.dialog('destroy'); + } this._super(); } }); @@ -212,11 +212,11 @@ instance.web.CrashManager = instance.web.CallbackEnabled.extend({ dialog.$element.html(QWeb.render('CrashManager.error', {session: instance.connection, error: error})); }, on_javascript_exception: function(exception) { - this.on_traceback({ - type: _t("Client Error"), - message: exception, - data: {debug: ""} - }); + this.on_traceback({ + type: _t("Client Error"), + message: exception, + data: {debug: ""} + }); }, }); @@ -482,24 +482,26 @@ instance.web.Login = instance.web.Widget.extend({ } } }, + open_db_manager: function(){ + var self = this; + self.$element.find('.oe_login_bottom').hide(); + self.$element.find('.oe_login_pane').hide(); + self.databasemanager = new instance.web.DatabaseManager(self); + self.databasemanager.appendTo(self.$element); + self.databasemanager.do_exit.add_last(function() { + self.databasemanager.destroy(); + self.$element.find('.oe_login_bottom').show(); + self.$element.find('.oe_login_pane').show(); + self.load_db_list(true).then(self.on_db_list_loaded); + }); + }, start: function() { var self = this; - self.$element.find("form").submit(self.on_submit); - self.$element.find('.oe_login_manage_db').click(function() { - self.$element.find('.oe_login_bottom').hide(); - self.$element.find('.oe_login_pane').hide(); - self.databasemanager = new instance.web.DatabaseManager(self); - self.databasemanager.appendTo(self.$element); - self.databasemanager.do_exit.add_last(function() { - self.databasemanager.destroy(); - self.$element.find('.oe_login_bottom').show(); - self.$element.find('.oe_login_pane').show(); - self.load_db_list(true).then(self.proxy('_db_list_loaded')); - }); + self.open_db_manager(); }); - return self.load_db_list().then(self.proxy('_db_list_loaded')); + return self.load_db_list().then(self.on_db_list_loaded); }, load_db_list: function (force) { var d = $.when(), self = this; @@ -514,11 +516,14 @@ instance.web.Login = instance.web.Widget.extend({ } return d; }, - _db_list_loaded: function () { - var list = this._db_list, - dbdiv = this.$element.find('div.oe_login_dbpane'); + on_db_list_loaded: function () { + var self = this; + var list = this._db_list; + var dbdiv = this.$element.find('div.oe_login_dbpane'); this.$element.find("[name=db]").replaceWith(instance.web.qweb.render('Login.dblist', { db_list: list, selected_db: this.selected_db})); - if(list && list.length === 1) { + if(list.length === 0) { + self.open_db_manager(); + } else if(list && list.length === 1) { dbdiv.hide(); } else { dbdiv.show(); @@ -667,7 +672,7 @@ instance.web.Menu = instance.web.Widget.extend({ * @param {Number} id the action_id to match */ open_action: function (id) { - var $menu = this.$element.add(this.$secondary_menus).find('a[data-action-id=' + id + ']'); + var $menu = this.$element.add(this.$secondary_menus).find('a[data-action-id="' + id + '"]'); var menu_id = $menu.data('menu'); if (menu_id) { this.open_menu(menu_id); @@ -822,8 +827,8 @@ instance.web.UserMenu = instance.web.Widget.extend({ {text: _t("Change password"), click: function(){ self.change_password(); }}, {text: _t("Cancel"), click: function(){ $(this).dialog('destroy'); }}, {text: _t("Save"), click: function(){ - var inner_viewmanager = action_manager.inner_viewmanager; - inner_viewmanager.views[inner_viewmanager.active_view].controller.do_save() + var inner_widget = action_manager.inner_widget; + inner_widget.views[inner_widget.active_view].controller.do_save() .then(function() { self.dialog.destroy(); // needs to refresh interface in case language changed @@ -1037,6 +1042,7 @@ instance.web.WebClient = instance.web.Widget.extend({ if (options.needaction) { action.context.search_default_needaction_pending = true; } + self.action_manager.clear_breadcrumbs(); self.action_manager.do_action(action); }); }, diff --git a/addons/web/static/src/js/coresetup.js b/addons/web/static/src/js/coresetup.js index a00ca4002e5..a5a62b9bcc1 100644 --- a/addons/web/static/src/js/coresetup.js +++ b/addons/web/static/src/js/coresetup.js @@ -404,10 +404,11 @@ instance.web.Session = instance.web.JsonRPC.extend( /** @lends instance.web.Sess } }); + /** * Event Bus used to bind events scoped in the current instance */ -instance.web.bus = new (instance.web.Class.extend(instance.web.EventDispatcherMixin, { +instance.web.Bus = instance.web.Class.extend(instance.web.EventDispatcherMixin, { init: function() { instance.web.EventDispatcherMixin.init.call(this, parent); var self = this; @@ -425,7 +426,8 @@ instance.web.bus = new (instance.web.Class.extend(instance.web.EventDispatcherMi }); }); } -}))(); +}) +instance.web.bus = new instance.web.Bus(); /** OpenERP Translations */ instance.web.TranslationDataBase = instance.web.Class.extend(/** @lends instance.web.TranslationDataBase# */{ diff --git a/addons/web/static/src/js/view_editor.js b/addons/web/static/src/js/view_editor.js index 8733a191b21..6df78679ecb 100644 --- a/addons/web/static/src/js/view_editor.js +++ b/addons/web/static/src/js/view_editor.js @@ -53,7 +53,7 @@ instance.web.ViewEditor = instance.web.OldWidget.extend({ this.main_view_id = this.parent.fields_view.view_id; this.action_manager = new instance.web.ActionManager(this); $.when(this.action_manager.do_action(action)).then(function() { - var viewmanager = self.action_manager.inner_viewmanager, + var viewmanager = self.action_manager.inner_widget, controller = viewmanager.views[viewmanager.active_view].controller; self.action_manager.appendTo(self.view_edit_dialog.$element); self.action_manager.renderElement(self.view_edit_dialog); @@ -88,7 +88,7 @@ instance.web.ViewEditor = instance.web.OldWidget.extend({ } else { $.when(self.do_save_view(view_values)).then(function() { self.create_view_dialog.close(); - var controller = self.action_manager.inner_viewmanager.views[self.action_manager.inner_viewmanager.active_view].controller; + var controller = self.action_manager.inner_widget.views[self.action_manager.inner_widget.active_view].controller; controller.reload_content(); }); } @@ -167,7 +167,7 @@ instance.web.ViewEditor = instance.web.OldWidget.extend({ do_delete_view: function() { var self = this; if (confirm(_t("Do you really want to remove this view?"))) { - var controller = this.action_manager.inner_viewmanager.views[this.action_manager.inner_viewmanager.active_view].controller; + var controller = this.action_manager.inner_widget.views[this.action_manager.inner_widget.active_view].controller; this.dataset.unlink([this.main_view_id]).then(function() { controller.reload_content(); self.main_view_id = self.parent.fields_view.view_id; @@ -397,7 +397,7 @@ instance.web.ViewEditor = instance.web.OldWidget.extend({ action_manager.do_action(action); }}, {text: _t("Close"), click: function(){ - self.action_manager.inner_viewmanager.views[self.action_manager.inner_viewmanager.active_view].controller.reload_content(); + self.action_manager.inner_widget.views[self.action_manager.inner_widget.active_view].controller.reload_content(); self.edit_xml_dialog.close(); }} ] @@ -998,7 +998,7 @@ instance.web.ViewEditor = instance.web.OldWidget.extend({ }; var action_manager = new instance.web.ActionManager(self); $.when(action_manager.do_action(action)).then(function() { - var controller = action_manager.dialog_viewmanager.views['form'].controller; + var controller = action_manager.dialog_widget.views['form'].controller; controller.on_button_cancel.add_last(function(){ action_manager.destroy() }); diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index caa2cb8ab7e..24182503b9b 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -9,7 +9,7 @@ instance.web.form = {}; /** * Interface implemented by the form view or any other object * able to provide the features necessary for the fields to work. - * + * * Properties: * - display_invalid_fields : if true, all fields where is_valid() return true should * be displayed as invalid. @@ -287,10 +287,12 @@ instance.web.FormView = instance.web.View.extend(instance.web.form.FieldManagerM on_record_loaded: function(record) { var self = this, set_values = []; if (!record) { + this.set({ 'title' : undefined }); this.do_warn("Form", "The record could not be found in the database.", true); return $.Deferred().reject(); } this.datarecord = record; + this.set({ 'title' : record.id ? record.name : "New record" }); if (this.qweb) { this.kill_current_form(); @@ -524,7 +526,7 @@ instance.web.FormView = instance.web.View.extend(instance.web.form.FieldManagerM this.on_form_changed(); } if (!_.isEmpty(result.warning)) { - instance.web.dialog($(QWeb.render("CrashManager.warning", result.warning)), { + instance.web.dialog($(QWeb.render("CrashManager.warning", result.warning)), { title:result.warning.title, modal: true, buttons: [ @@ -800,13 +802,13 @@ instance.web.FormView = instance.web.View.extend(instance.web.form.FieldManagerM }); }, get_fields_values: function(blacklist) { - blacklist = blacklist || []; + blacklist = blacklist || []; var values = {}; var ids = this.get_selected_ids(); values["id"] = ids.length > 0 ? ids[0] : false; _.each(this.fields, function(value_, key) { - if (_.include(blacklist, key)) - return; + if (_.include(blacklist, key)) + return; var val = value_.get_value(); values[key] = val; }); @@ -863,6 +865,9 @@ instance.web.FormView = instance.web.View.extend(instance.web.form.FieldManagerM return option[0] === value; })[1]; break; + case 'many2one': + displayed = field.get_displayed(); + break; } return { @@ -953,7 +958,7 @@ instance.web.form.FormRenderingEngineInterface = instance.web.Class.extend({ /** * Default rendering engine for the form view. - * + * * It is necessary to set the view using set_view() before usage. */ instance.web.form.FormRenderingEngine = instance.web.form.FormRenderingEngineInterface.extend({ @@ -1184,8 +1189,7 @@ instance.web.form.FormRenderingEngine = instance.web.form.FormRenderingEngineInt row_cols = cols; } else if (tagName==='group') { // When , we need a spacing between the two groups - $child.addClass('oe_group_right') - + $td.addClass('oe_group_right') } row_cols -= colspan; @@ -1211,12 +1215,6 @@ instance.web.form.FormRenderingEngine = instance.web.form.FormRenderingEngineInt $child = $td.children(':first'); switch ($child[0].tagName.toLowerCase()) { case 'separator': - if ($child.attr('orientation') === 'vertical') { - $td.addClass('oe_vertical_separator').attr('width', '1'); - $td.empty(); - row_cols-= $td.attr('colspan') || 1; - total--; - } break; case 'label': if ($child.attr('for')) { @@ -1276,7 +1274,7 @@ instance.web.form.FormRenderingEngine = instance.web.form.FormRenderingEngineInt page_attrs.__page = $new_page; page_attrs.__ic = ic; pages.push(page_attrs); - + $new_page.children().each(function() { self.process($(this)); }); @@ -1302,7 +1300,7 @@ instance.web.form.FormRenderingEngine = instance.web.form.FormRenderingEngineInt } }); }); - + this.handle_common_properties($new_notebook, $notebook); return $new_notebook; }, @@ -1585,7 +1583,7 @@ instance.web.form.FormWidget = instance.web.Widget.extend(instance.web.form.Invi parent: {} }); if (a_dataset.parent_view) { - fields_values.parent = a_dataset.parent_view.get_fields_values([a_dataset.child_name]); + fields_values.parent = a_dataset.parent_view.get_fields_values([a_dataset.child_name]); } return fields_values; }, @@ -1603,7 +1601,7 @@ instance.web.form.FormWidget = instance.web.Widget.extend(instance.web.form.Invi if (! v_context) { v_context = (this.field || {}).context || {}; } - + if (v_context.__ref || true) { //TODO: remove true var fields_values = this._build_eval_context(blacklist); v_context = new instance.web.CompoundContext(v_context).set_eval_context(fields_values); @@ -1711,14 +1709,14 @@ instance.web.form.WidgetButton = instance.web.form.FormWidget.extend({ /** * Interface to be implemented by fields. - * + * * Properties: * - readonly: boolean. If set to true the field should appear in readonly mode. * - force_readonly: boolean, When it is true, the field should always appear * in read only mode, no matter what the value of the "readonly" property can be. * Events: * - changed_value: triggered to inform the view to check on_changes - * + * */ instance.web.form.FieldInterface = { /** @@ -1729,14 +1727,14 @@ instance.web.form.FieldInterface = { init: function(field_manager, node) {}, /** * Called by the form view to indicate the value of the field. - * + * * set_value() may return an object that can be passed to $.when() that represents the moment when * the field has finished all operations necessary before the user can effectively use the widget. - * + * * Multiple calls to set_value() can occur at any time and must be handled correctly by the implementation, * regardless of any asynchronous operation currently running and the status of any promise that a * previous call to set_value() could have returned. - * + * * set_value() must be able, at any moment, to handle the syntax returned by the "read" method of the * osv class in the OpenERP server as well as the syntax used by the set_value() (see below). It must * also be able to handle any other format commonly used in the _defaults key on the models in the addons @@ -1746,16 +1744,16 @@ instance.web.form.FieldInterface = { set_value: function(value_) {}, /** * Get the current value of the widget. - * + * * Must always return a syntaxically correct value to be passed to the "write" method of the osv class in * the OpenERP server, although it is not assumed to respect the constraints applied to the field. * For example if the field is marqued as "required", a call to get_value() can return false. - * + * * get_value() can also be called *before* a call to set_value() and, in that case, is supposed to * return a defaut value according to the type of field. - * + * * This method is always assumed to perform synchronously, it can not return a promise. - * + * * If there was no user interaction to modify the value of the field, it is always assumed that * get_value() return the same semantic value than the one passed in the last call to set_value(), * altough the syntax can be different. This can be the case for type of fields that have a different @@ -1785,14 +1783,14 @@ instance.web.form.FieldInterface = { /** * Abstract class for classes implementing FieldInterface. - * + * * Properties: * - effective_readonly: when it is true, the widget is displayed as readonly. Vary depending * the values of the "readonly" property and the "force_readonly" property on the field manager. * - value: useful property to hold the value of the field. By default, set_value() and get_value() * set and retrieve the value property. Changing the value property also triggers automatically * a 'changed_value' event that inform the view to trigger on_changes. - * + * */ instance.web.form.AbstractField = instance.web.form.FormWidget.extend(instance.web.form.FieldInterface, { /** @@ -1811,7 +1809,7 @@ instance.web.form.AbstractField = instance.web.form.FormWidget.extend(instance.w this.string = this.node.attrs.string || this.field.string || this.name; this.set({'value': false}); this.set({required: this.modifiers['required'] === true}); - + // some events to make the property "effective_readonly" sync automatically with "readonly" and // "force_readonly" this.set({"readonly": this.modifiers['readonly'] === true}); @@ -1821,7 +1819,7 @@ instance.web.form.AbstractField = instance.web.form.FormWidget.extend(instance.w this.on("change:readonly", this, test_effective_readonly); this.on("change:force_readonly", this, test_effective_readonly); _.bind(test_effective_readonly, this)(); - + this.on("change:value", this, function() { if (! this._inhibit_on_change) this.trigger('changed_value'); @@ -2003,7 +2001,7 @@ instance.web.form.FieldChar = instance.web.form.AbstractField.extend(instance.we }); instance.web.form.FieldID = instance.web.form.FieldChar.extend({ - + }); instance.web.form.FieldEmail = instance.web.form.FieldChar.extend({ @@ -2454,7 +2452,7 @@ instance.web.form.FieldSelection = instance.web.form.AbstractField.extend(instan } else { var self = this; var option = _(this.values) - .detect(function (record) { return record[0] === self.get('value'); }); + .detect(function (record) { return record[0] === self.get('value'); }); this.$element.text(option ? option[1] : this.values[0][1]); } }, @@ -2633,7 +2631,7 @@ instance.web.form.FieldMany2One = instance.web.form.AbstractField.extend(instanc render_editable: function() { var self = this; this.$input = this.$element.find("input"); - + self.$input.tipsy({ title: function() { return "No element was selected, you should create or select one from the dropdown list."; @@ -2641,10 +2639,10 @@ instance.web.form.FieldMany2One = instance.web.form.AbstractField.extend(instanc trigger:'manual', fade: true, }); - + this.$drop_down = this.$element.find(".oe_m2o_drop_down_button"); this.$follow_button = $(".oe_m2o_cm_button", this.$element); - + this.$follow_button.click(function() { if (!self.get('value')) { self.focus(); @@ -2802,10 +2800,20 @@ instance.web.form.FieldMany2One = instance.web.form.AbstractField.extend(instanc this.$input.val(str.split("\n")[0]); this.current_display = this.$input.val(); } else { - str = _.escape(str).split("\n").join("
"); + var lines = _.escape(str).split("\n"); + var link = ""; + var follow = ""; + if (! this.get_definition_options().highlight_first_line) { + link = lines.join("
"); + } else { + link = lines[0]; + follow = _.rest(lines).join("
"); + if (follow) + link += "
"; + } this.$element.find('a') .unbind('click') - .html(str) + .html(link) .click(function () { self.do_action({ type: 'ir.actions.act_window', @@ -2817,6 +2825,7 @@ instance.web.form.FieldMany2One = instance.web.form.AbstractField.extend(instanc }); return false; }); + $(".oe_form_m2o_follow").html(follow); } }, set_value: function(value_) { @@ -2833,6 +2842,9 @@ instance.web.form.FieldMany2One = instance.web.form.AbstractField.extend(instanc this._super(value_); this.inhibit_on_change = false; }, + get_displayed: function() { + return this.display_value["" + this.get("value")]; + }, add_id: function(id) { this.display_value = {}; this.set({value: id}); @@ -2938,7 +2950,7 @@ instance.web.form.FieldOne2Many = instance.web.form.AbstractField.extend({ }, load_views: function() { var self = this; - + var modes = this.node.attrs.mode; modes = !!modes ? modes.split(",") : ["tree"]; var views = []; @@ -3140,30 +3152,30 @@ instance.web.form.FieldOne2Many = instance.web.form.AbstractField.extend({ save_any_view: function() { if (this.doing_on_change) return false; - return this.session.synchronized_mode(_.bind(function() { - if (this.viewmanager && this.viewmanager.views && this.viewmanager.active_view && - this.viewmanager.views[this.viewmanager.active_view] && - this.viewmanager.views[this.viewmanager.active_view].controller) { - var view = this.viewmanager.views[this.viewmanager.active_view].controller; - if (this.viewmanager.active_view === "form") { - if (!view.is_initialized.isResolved()) { - return false; - } - var res = $.when(view.do_save()); - if (!res.isResolved() && !res.isRejected()) { - console.warn("Asynchronous get_value() is not supported in form view."); - } - return res; - } else if (this.viewmanager.active_view === "list") { - var res = $.when(view.ensure_saved()); - if (!res.isResolved() && !res.isRejected()) { - console.warn("Asynchronous get_value() is not supported in list view."); - } - return res; - } - } - return false; - }, this)); + return this.session.synchronized_mode(_.bind(function() { + if (this.viewmanager && this.viewmanager.views && this.viewmanager.active_view && + this.viewmanager.views[this.viewmanager.active_view] && + this.viewmanager.views[this.viewmanager.active_view].controller) { + var view = this.viewmanager.views[this.viewmanager.active_view].controller; + if (this.viewmanager.active_view === "form") { + if (!view.is_initialized.isResolved()) { + return false; + } + var res = $.when(view.do_save()); + if (!res.isResolved() && !res.isRejected()) { + console.warn("Asynchronous get_value() is not supported in form view."); + } + return res; + } else if (this.viewmanager.active_view === "list") { + var res = $.when(view.ensure_saved()); + if (!res.isResolved() && !res.isRejected()) { + console.warn("Asynchronous get_value() is not supported in list view."); + } + return res; + } + } + return false; + }, this)); }, is_syntax_valid: function() { if (!this.viewmanager.views[this.viewmanager.active_view]) @@ -3520,7 +3532,7 @@ instance.web.form.FieldMany2ManyTags = instance.web.form.AbstractField.extend(in $("textarea", self.$element).css("padding-left", "3px"); self.tags.addTags(_.map(data, function(el) {return {name: el[1], id:el[0]};})); } else { - self.$element.html(QWeb.render("FieldMany2ManyTags.box", {elements: data})); + self.$element.html(QWeb.render("FieldMany2ManyTag", {elements: data})); } }; if (! self.get('values') || self.get('values').length > 0) { @@ -3692,7 +3704,7 @@ instance.web.form.FieldMany2ManyKanban = instance.web.form.AbstractField.extend( this.dataset.on_unlink.add_last(function(ids) { self.dataset_changed(); }); - + this.is_setted.then(function() { self.load_view(); }); @@ -3808,7 +3820,7 @@ instance.web.form.Many2ManyKanbanView = instance.web_kanban.KanbanView.extend({ }); instance.web.form.Many2ManyQuickCreate = instance.web.Widget.extend({ template: 'Many2ManyKanban.quick_create', - + /** * close_btn: If true, the widget will display a "Close" button able to trigger * a "close" event. @@ -3924,8 +3936,8 @@ instance.web.form.AbstractFormPopup = instance.web.OldWidget.extend({ var self = this; this.renderElement(); new instance.web.Dialog(this, { - width: '90%', min_width: '800px', + dialogClass: 'oe_act_window', close: function() { self.check_exit(true); }, @@ -4501,7 +4513,7 @@ instance.web.form.FieldStatus = instance.web.form.AbstractField.extend({ this.selection = []; // get fold information from widget var fold = ((this.node.attrs || {}).statusbar_fold || true); - // build final domain: if fold option required, add the + // build final domain: if fold option required, add the if (fold == true) { var domain = new instance.web.CompoundDomain(['|'], ['&'], self.build_domain(), [['fold', '=', false]], [['id', '=', self.selected_value]]); } else { @@ -4533,7 +4545,7 @@ instance.web.form.FieldStatus = instance.web.form.AbstractField.extend({ var shown = _.map(((this.node.attrs || {}).statusbar_visible || "").split(","), function(x) { return _.str.trim(x); }); shown = _.select(shown, function(x) { return x.length > 0; }); - + if (shown.length == 0) { this.to_show = this.selection; } else { diff --git a/addons/web/static/src/js/view_list.js b/addons/web/static/src/js/view_list.js index 3033404b387..edc53f82042 100644 --- a/addons/web/static/src/js/view_list.js +++ b/addons/web/static/src/js/view_list.js @@ -1045,7 +1045,7 @@ instance.web.ListView.List = instance.web.Class.extend( /** @lends instance.web. render_cell: function () { return self.render_cell.apply(self, arguments); } }, this))); - this.pad_table_to(5); + this.pad_table_to(4); }, pad_table_to: function (count) { if (this.records.length >= count || diff --git a/addons/web/static/src/js/views.js b/addons/web/static/src/js/views.js index 6586807264d..bd102d867de 100644 --- a/addons/web/static/src/js/views.js +++ b/addons/web/static/src/js/views.js @@ -10,28 +10,111 @@ instance.web.ActionManager = instance.web.Widget.extend({ init: function(parent) { this._super(parent); this.inner_action = null; - this.inner_viewmanager = null; + this.inner_widget = null; this.dialog = null; - this.dialog_viewmanager = null; - this.client_widget = null; + this.dialog_widget = null; + this.breadcrumbs = []; + }, + start: function() { + this._super.apply(this, arguments); + this.$element.on('click', '.oe_breadcrumb_item', this.on_breadcrumb_clicked); }, dialog_stop: function () { if (this.dialog) { - this.dialog_viewmanager.destroy(); - this.dialog_viewmanager = null; + this.dialog_widget.destroy(); + this.dialog_widget = null; this.dialog.destroy(); this.dialog = null; } }, - content_stop: function () { - if (this.inner_viewmanager) { - this.inner_viewmanager.destroy(); - this.inner_viewmanager = null; + /** + * Add a new item to the breadcrumb + * + * If the title of an item is an array, the multiple title mode is in use. + * (eg: a widget with multiple views might need to display a title for each view) + * In multiple title mode, the show() callback can check the index it receives + * in order to detect which of its titles has been clicked on by the user. + * + * @param {Object} item breadcrumb item + * @param {Object} item.widget widget containing the view(s) to be added to the breadcrumb added + * @param {Function} [item.show] triggered whenever the widget should be shown back + * @param {Function} [item.hide] triggered whenever the widget should be shown hidden + * @param {Function} [item.destroy] triggered whenever the widget should be destroyed + * @param {String|Array} [item.title] title(s) of the view(s) to be displayed in the breadcrumb + * @param {Function} [item.get_title] should return the title(s) of the view(s) to be displayed in the breadcrumb + */ + push_breadcrumb: function(item) { + var last = this.breadcrumbs.slice(-1)[0]; + if (last) { + last.hide(); } - if (this.client_widget) { - this.client_widget.destroy(); - this.client_widget = null; + var item = _.extend({ + show: function(index) { + this.widget.$element.show(); + }, + hide: function() { + this.widget.$element.hide(); + }, + destroy: function() { + this.widget.destroy(); + }, + get_title: function() { + return this.title || this.widget.get('title'); + } + }, item); + item.id = _.uniqueId('breadcrumb_'); + this.breadcrumbs.push(item); + }, + on_breadcrumb_clicked: function(ev) { + var $e = $(ev.target); + var id = $e.data('id'); + var item; + for (var i = this.breadcrumbs.length - 1; i >= 0; i--) { + var it = this.breadcrumbs[i]; + if (it.id == id) { + item = it; + break; + } + this.remove_breadcrumb(i); } + var index = $e.parent().find('.oe_breadcrumb_item[data-id=' + $e.data('id') + ']').index($e); + item.show(index, $e); + this.inner_widget = item.widget; + }, + clear_breadcrumbs: function() { + while (this.breadcrumbs.length) { + this.remove_breadcrumb(0); + } + }, + remove_breadcrumb: function(index) { + var item = this.breadcrumbs.splice(index, 1)[0]; + if (item) { + var dups = _.filter(this.breadcrumbs, function(it) { + return item.widget === it.widget; + }); + if (!dups.length) { + item.destroy(); + } + } + }, + get_title: function() { + var titles = []; + for (var i = 0; i < this.breadcrumbs.length; i += 1) { + var item = this.breadcrumbs[i]; + var tit = item.get_title(); + if (!_.isArray(tit)) { + tit = [tit]; + } + for (var j = 0; j < tit.length; j += 1) { + var label = _.escape(tit[j]); + if (i === this.breadcrumbs.length - 1 && j === tit.length - 1) { + titles.push(label); + } else { + titles.push(_.str.sprintf('%s', item.id, label)); + } + } + } + return titles.join(' / '); }, do_push_state: function(state) { if (this.getParent() && this.getParent().do_push_state) { @@ -49,7 +132,7 @@ instance.web.ActionManager = instance.web.Widget.extend({ var self = this, action_loaded; if (state.action_id) { - var run_action = (!this.inner_viewmanager) || this.inner_viewmanager.action.id !== state.action_id; + var run_action = (!this.inner_widget || !this.inner_widget.action) || this.inner_widget.action.id !== state.action_id; if (run_action) { this.null_action(); action_loaded = this.do_action(state.action_id); @@ -89,13 +172,13 @@ instance.web.ActionManager = instance.web.Widget.extend({ } $.when(action_loaded || null).then(function() { - if (self.inner_viewmanager) { - self.inner_viewmanager.do_load_state(state, warm); + if (self.inner_widget && self.inner_widget.do_load_state) { + self.inner_widget.do_load_state(state, warm); } }); }, do_action: function(action, on_close) { - if (_.isNumber(action)) { + if (_.isNumber(action) || _.isString(action)) { var self = this; return self.rpc("/web/action/load", { action_id: action }, function(result) { self.do_action(result.result, on_close); @@ -124,7 +207,7 @@ instance.web.ActionManager = instance.web.Widget.extend({ }, null_action: function() { this.dialog_stop(); - this.content_stop(); + this.clear_breadcrumbs(); }, ir_actions_act_window: function (action, on_close) { var self = this; @@ -137,29 +220,31 @@ instance.web.ActionManager = instance.web.Widget.extend({ } if (action.target === 'new') { if (this.dialog === null) { - this.dialog = new instance.web.Dialog(this, { width: '80%' }); + // These buttons will be overwrited by