diff --git a/addons/web/__openerp__.py b/addons/web/__openerp__.py index 6863779e41f..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, @@ -33,6 +33,7 @@ "static/lib/underscore/underscore.js", "static/lib/underscore/underscore.string.js", "static/lib/backbone/backbone.js", + "static/lib/cleditor/jquery.cleditor.js", "static/lib/py.js/lib/py.js", "static/src/js/boot.js", "static/src/js/corelib.js", @@ -60,6 +61,7 @@ "static/src/css/base.css", "static/src/css/data_export.css", "static/src/css/data_import.css", + "static/lib/cleditor/jquery.cleditor.css", ], 'qweb' : [ "static/src/xml/*.xml", diff --git a/addons/web/common/http.py b/addons/web/common/http.py index cc76a554693..bb87d719bad 100644 --- a/addons/web/common/http.py +++ b/addons/web/common/http.py @@ -28,6 +28,7 @@ import werkzeug.wsgi from . import nonliterals from . import session from . import openerplib +import urlparse __all__ = ['Root', 'jsonrequest', 'httprequest', 'Controller', 'WebRequest', 'JsonRequest', 'HttpRequest'] @@ -417,6 +418,20 @@ 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): + referer = environ.get('HTTP_REFERER', '') + parsed = urlparse.urlparse(referer) + debug = not urlparse.parse_qs(parsed.query).has_key('debug') + 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 +467,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..41154a91a72 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-20 04:45+0000\n" +"X-Generator: Launchpad (build 15644)\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/lib/cleditor/images/buttons.gif b/addons/web/static/lib/cleditor/images/buttons.gif new file mode 100644 index 00000000000..2e464d0c8c7 Binary files /dev/null and b/addons/web/static/lib/cleditor/images/buttons.gif differ diff --git a/addons/web/static/lib/cleditor/images/toolbar.gif b/addons/web/static/lib/cleditor/images/toolbar.gif new file mode 100644 index 00000000000..e6eb2da5549 Binary files /dev/null and b/addons/web/static/lib/cleditor/images/toolbar.gif differ diff --git a/addons/web/static/lib/cleditor/jquery.cleditor.css b/addons/web/static/lib/cleditor/jquery.cleditor.css new file mode 100644 index 00000000000..6ac490bcfc4 --- /dev/null +++ b/addons/web/static/lib/cleditor/jquery.cleditor.css @@ -0,0 +1,24 @@ +.cleditorMain {border:1px solid #999; padding:0 1px 1px; background-color:white} +.cleditorMain iframe {border:none; margin:0; padding:0} +.cleditorMain textarea {border:none; margin:0; padding:0; overflow-y:scroll; font:10pt Arial,Verdana; resize:none; outline:none /* webkit grip focus */} +.cleditorToolbar {background: url('images/toolbar.gif') repeat} +.cleditorGroup {float:left; height:26px} +.cleditorButton {float:left; width:24px; height:24px; margin:1px 0 1px 0; background: url('images/buttons.gif')} +.cleditorDisabled {opacity:0.3; filter:alpha(opacity=30)} +.cleditorDivider {float:left; width:1px; height:23px; margin:1px 0 1px 0; background:#CCC} +.cleditorPopup {border:solid 1px #999; background-color:white; position:absolute; font:10pt Arial,Verdana; cursor:default; z-index:10000} +.cleditorList div {padding:2px 4px 2px 4px} +.cleditorList p, +.cleditorList h1, +.cleditorList h2, +.cleditorList h3, +.cleditorList h4, +.cleditorList h5, +.cleditorList h6, +.cleditorList font {padding:0; margin:0; background-color:Transparent} +.cleditorColor {width:150px; padding:1px 0 0 1px} +.cleditorColor div {float:left; width:14px; height:14px; margin:0 1px 1px 0} +.cleditorPrompt {background-color:#F6F7F9; padding:4px; font-size:8.5pt} +.cleditorPrompt input, +.cleditorPrompt textarea {font:8.5pt Arial,Verdana;} +.cleditorMsg {background-color:#FDFCEE; width:150px; padding:4px; font-size:8.5pt} diff --git a/addons/web/static/lib/cleditor/jquery.cleditor.js b/addons/web/static/lib/cleditor/jquery.cleditor.js new file mode 100644 index 00000000000..c0763136c99 --- /dev/null +++ b/addons/web/static/lib/cleditor/jquery.cleditor.js @@ -0,0 +1,1132 @@ +/** + @preserve CLEditor WYSIWYG HTML Editor v1.3.0 + http://premiumsoftware.net/cleditor + requires jQuery v1.4.2 or later + + Copyright 2010, Chris Landowski, Premium Software, LLC + Dual licensed under the MIT or GPL Version 2 licenses. +*/ + +// ==ClosureCompiler== +// @compilation_level SIMPLE_OPTIMIZATIONS +// @output_file_name jquery.cleditor.min.js +// ==/ClosureCompiler== + +(function($) { + + //============== + // jQuery Plugin + //============== + + $.cleditor = { + + // Define the defaults used for all new cleditor instances + defaultOptions: { + width: 500, // width not including margins, borders or padding + height: 250, // height not including margins, borders or padding + controls: // controls to add to the toolbar + "bold italic underline strikethrough subscript superscript | font size " + + "style | color highlight removeformat | bullets numbering | outdent " + + "indent | alignleft center alignright justify | undo redo | " + + "rule image link unlink | cut copy paste pastetext | print source", + colors: // colors in the color popup + "FFF FCC FC9 FF9 FFC 9F9 9FF CFF CCF FCF " + + "CCC F66 F96 FF6 FF3 6F9 3FF 6FF 99F F9F " + + "BBB F00 F90 FC6 FF0 3F3 6CC 3CF 66C C6C " + + "999 C00 F60 FC3 FC0 3C0 0CC 36F 63F C3C " + + "666 900 C60 C93 990 090 399 33F 60C 939 " + + "333 600 930 963 660 060 366 009 339 636 " + + "000 300 630 633 330 030 033 006 309 303", + fonts: // font names in the font popup + "Arial,Arial Black,Comic Sans MS,Courier New,Narrow,Garamond," + + "Georgia,Impact,Sans Serif,Serif,Tahoma,Trebuchet MS,Verdana", + sizes: // sizes in the font size popup + "1,2,3,4,5,6,7", + styles: // styles in the style popup + [["Paragraph", "

"], ["Header 1", "

"], ["Header 2", "

"], + ["Header 3", "

"], ["Header 4","

"], ["Header 5","

"], + ["Header 6","
"]], + useCSS: false, // use CSS to style HTML when possible (not supported in ie) + docType: // Document type contained within the editor + '', + docCSSFile: // CSS file used to style the document contained within the editor + "", + bodyStyle: // style to assign to document body contained within the editor + "margin:4px; font:10pt Arial,Verdana; cursor:text" + }, + + // Define all usable toolbar buttons - the init string property is + // expanded during initialization back into the buttons object and + // seperate object properties are created for each button. + // e.g. buttons.size.title = "Font Size" + buttons: { + // name,title,command,popupName (""=use name) + init: + "bold,,|" + + "italic,,|" + + "underline,,|" + + "strikethrough,,|" + + "subscript,,|" + + "superscript,,|" + + "font,,fontname,|" + + "size,Font Size,fontsize,|" + + "style,,formatblock,|" + + "color,Font Color,forecolor,|" + + "highlight,Text Highlight Color,hilitecolor,color|" + + "removeformat,Remove Formatting,|" + + "bullets,,insertunorderedlist|" + + "numbering,,insertorderedlist|" + + "outdent,,|" + + "indent,,|" + + "alignleft,Align Text Left,justifyleft|" + + "center,,justifycenter|" + + "alignright,Align Text Right,justifyright|" + + "justify,,justifyfull|" + + "undo,,|" + + "redo,,|" + + "rule,Insert Horizontal Rule,inserthorizontalrule|" + + "image,Insert Image,insertimage,url|" + + "link,Insert Hyperlink,createlink,url|" + + "unlink,Remove Hyperlink,|" + + "cut,,|" + + "copy,,|" + + "paste,,|" + + "pastetext,Paste as Text,inserthtml,|" + + "print,,|" + + "source,Show Source" + }, + + // imagesPath - returns the path to the images folder + imagesPath: function() { return imagesPath(); } + + }; + + // cleditor - creates a new editor for each of the matched textareas + $.fn.cleditor = function(options) { + + // Create a new jQuery object to hold the results + var $result = $([]); + + // Loop through all matching textareas and create the editors + this.each(function(idx, elem) { + if (elem.tagName == "TEXTAREA") { + var data = $.data(elem, CLEDITOR); + if (!data) data = new cleditor(elem, options); + $result = $result.add(data); + } + }); + + // return the new jQuery object + return $result; + + }; + + //================== + // Private Variables + //================== + + var + + // Misc constants + BACKGROUND_COLOR = "backgroundColor", + BUTTON = "button", + BUTTON_NAME = "buttonName", + CHANGE = "change", + CLEDITOR = "cleditor", + CLICK = "click", + DISABLED = "disabled", + DIV_TAG = "
", + TRANSPARENT = "transparent", + UNSELECTABLE = "unselectable", + + // Class name constants + MAIN_CLASS = "cleditorMain", // main containing div + TOOLBAR_CLASS = "cleditorToolbar", // toolbar div inside main div + GROUP_CLASS = "cleditorGroup", // group divs inside the toolbar div + BUTTON_CLASS = "cleditorButton", // button divs inside group div + DISABLED_CLASS = "cleditorDisabled",// disabled button divs + DIVIDER_CLASS = "cleditorDivider", // divider divs inside group div + POPUP_CLASS = "cleditorPopup", // popup divs inside body + LIST_CLASS = "cleditorList", // list popup divs inside body + COLOR_CLASS = "cleditorColor", // color popup div inside body + PROMPT_CLASS = "cleditorPrompt", // prompt popup divs inside body + MSG_CLASS = "cleditorMsg", // message popup div inside body + + // Test for ie + ie = $.browser.msie, + ie6 = /msie\s6/i.test(navigator.userAgent), + + // Test for iPhone/iTouch/iPad + iOS = /iphone|ipad|ipod/i.test(navigator.userAgent), + + // Popups are created once as needed and shared by all editor instances + popups = {}, + + // Used to prevent the document click event from being bound more than once + documentClickAssigned, + + // Local copy of the buttons object + buttons = $.cleditor.buttons; + + //=============== + // Initialization + //=============== + + // Expand the buttons.init string back into the buttons object + // and create seperate object properties for each button. + // e.g. buttons.size.title = "Font Size" + $.each(buttons.init.split("|"), function(idx, button) { + var items = button.split(","), name = items[0]; + buttons[name] = { + stripIndex: idx, + name: name, + title: items[1] === "" ? name.charAt(0).toUpperCase() + name.substr(1) : items[1], + command: items[2] === "" ? name : items[2], + popupName: items[3] === "" ? name : items[3] + }; + }); + delete buttons.init; + + //============ + // Constructor + //============ + + // cleditor - creates a new editor for the passed in textarea element + cleditor = function(area, options) { + + var editor = this; + + // Get the defaults and override with options + editor.options = options = $.extend({}, $.cleditor.defaultOptions, options); + + // Hide the textarea and associate it with this editor + var $area = editor.$area = $(area) + .hide() + .data(CLEDITOR, editor) + .blur(function() { + // Update the iframe when the textarea loses focus + updateFrame(editor, true); + }); + + // Create the main container and append the textarea + var $main = editor.$main = $(DIV_TAG) + .addClass(MAIN_CLASS) + .width(options.width) + .height(options.height); + + // Create the toolbar + var $toolbar = editor.$toolbar = $(DIV_TAG) + .addClass(TOOLBAR_CLASS) + .appendTo($main); + + // Add the first group to the toolbar + var $group = $(DIV_TAG) + .addClass(GROUP_CLASS) + .appendTo($toolbar); + + // Add the buttons to the toolbar + $.each(options.controls.split(" "), function(idx, buttonName) { + if (buttonName === "") return true; + + // Divider + if (buttonName == "|") { + + // Add a new divider to the group + var $div = $(DIV_TAG) + .addClass(DIVIDER_CLASS) + .appendTo($group); + + // Create a new group + $group = $(DIV_TAG) + .addClass(GROUP_CLASS) + .appendTo($toolbar); + + } + + // Button + else { + + // Get the button definition + var button = buttons[buttonName]; + + // Add a new button to the group + var $buttonDiv = $(DIV_TAG) + .data(BUTTON_NAME, button.name) + .addClass(BUTTON_CLASS) + .attr("title", button.title) + .bind(CLICK, $.proxy(buttonClick, editor)) + .appendTo($group) + .hover(hoverEnter, hoverLeave); + + // Prepare the button image + var map = {}; + if (button.css) map = button.css; + else if (button.image) map.backgroundImage = imageUrl(button.image); + if (button.stripIndex) map.backgroundPosition = button.stripIndex * -24; + $buttonDiv.css(map); + + // Add the unselectable attribute for ie + if (ie) + $buttonDiv.attr(UNSELECTABLE, "on"); + + // Create the popup + if (button.popupName) + createPopup(button.popupName, options, button.popupClass, + button.popupContent, button.popupHover); + + } + + }); + + // Add the main div to the DOM and append the textarea + $main.insertBefore($area) + .append($area); + + // Bind the document click event handler + if (!documentClickAssigned) { + $(document).click(function(e) { + // Dismiss all non-prompt popups + var $target = $(e.target); + if (!$target.add($target.parents()).is("." + PROMPT_CLASS)) + hidePopups(); + }); + documentClickAssigned = true; + } + + // Bind the window resize event when the width or height is auto or % + if (/auto|%/.test("" + options.width + options.height)) + $(window).resize(function() {refresh(editor);}); + + // Create the iframe and resize the controls + refresh(editor); + + }; + + //=============== + // Public Methods + //=============== + + var fn = cleditor.prototype, + + // Expose the following private functions as methods on the cleditor object. + // The closure compiler will rename the private functions. However, the + // exposed method names on the cleditor object will remain fixed. + methods = [ + ["clear", clear], + ["disable", disable], + ["execCommand", execCommand], + ["focus", focus], + ["hidePopups", hidePopups], + ["sourceMode", sourceMode, true], + ["refresh", refresh], + ["select", select], + ["selectedHTML", selectedHTML, true], + ["selectedText", selectedText, true], + ["showMessage", showMessage], + ["updateFrame", updateFrame], + ["updateTextArea", updateTextArea] + ]; + + $.each(methods, function(idx, method) { + fn[method[0]] = function() { + var editor = this, args = [editor]; + // using each here would cast booleans into objects! + for(var x = 0; x < arguments.length; x++) {args.push(arguments[x]);} + var result = method[1].apply(editor, args); + if (method[2]) return result; + return editor; + }; + }); + + // change - shortcut for .bind("change", handler) or .trigger("change") + fn.change = function(handler) { + var $this = $(this); + return handler ? $this.bind(CHANGE, handler) : $this.trigger(CHANGE); + }; + + //=============== + // Event Handlers + //=============== + + // buttonClick - click event handler for toolbar buttons + function buttonClick(e) { + + var editor = this, + buttonDiv = e.target, + buttonName = $.data(buttonDiv, BUTTON_NAME), + button = buttons[buttonName], + popupName = button.popupName, + popup = popups[popupName]; + + // Check if disabled + if (editor.disabled || $(buttonDiv).attr(DISABLED) == DISABLED) + return; + + // Fire the buttonClick event + var data = { + editor: editor, + button: buttonDiv, + buttonName: buttonName, + popup: popup, + popupName: popupName, + command: button.command, + useCSS: editor.options.useCSS + }; + + if (button.buttonClick && button.buttonClick(e, data) === false) + return false; + + // Toggle source + if (buttonName == "source") { + + // Show the iframe + if (sourceMode(editor)) { + delete editor.range; + editor.$area.hide(); + editor.$frame.show(); + buttonDiv.title = button.title; + } + + // Show the textarea + else { + editor.$frame.hide(); + editor.$area.show(); + buttonDiv.title = "Show Rich Text"; + } + + // Enable or disable the toolbar buttons + // IE requires the timeout + setTimeout(function() {refreshButtons(editor);}, 100); + + } + + // Check for rich text mode + else if (!sourceMode(editor)) { + + // Handle popups + if (popupName) { + var $popup = $(popup); + + // URL + if (popupName == "url") { + + // Check for selection before showing the link url popup + if (buttonName == "link" && selectedText(editor) === "") { + showMessage(editor, "A selection is required when inserting a link.", buttonDiv); + return false; + } + + // Wire up the submit button click event handler + $popup.children(":button") + .unbind(CLICK) + .bind(CLICK, function() { + + // Insert the image or link if a url was entered + var $text = $popup.find(":text"), + url = $.trim($text.val()); + if (url !== "") + execCommand(editor, data.command, url, null, data.button); + + // Reset the text, hide the popup and set focus + $text.val("http://"); + hidePopups(); + focus(editor); + + }); + + } + + // Paste as Text + else if (popupName == "pastetext") { + + // Wire up the submit button click event handler + $popup.children(":button") + .unbind(CLICK) + .bind(CLICK, function() { + + // Insert the unformatted text replacing new lines with break tags + var $textarea = $popup.find("textarea"), + text = $textarea.val().replace(/\n/g, "
"); + if (text !== "") + execCommand(editor, data.command, text, null, data.button); + + // Reset the text, hide the popup and set focus + $textarea.val(""); + hidePopups(); + focus(editor); + + }); + + } + + // Show the popup if not already showing for this button + if (buttonDiv !== $.data(popup, BUTTON)) { + showPopup(editor, popup, buttonDiv); + return false; // stop propagination to document click + } + + // propaginate to documnt click + return; + + } + + // Print + else if (buttonName == "print") + editor.$frame[0].contentWindow.print(); + + // All other buttons + else if (!execCommand(editor, data.command, data.value, data.useCSS, buttonDiv)) + return false; + + } + + // Focus the editor + focus(editor); + + } + + // hoverEnter - mouseenter event handler for buttons and popup items + function hoverEnter(e) { + var $div = $(e.target).closest("div"); + $div.css(BACKGROUND_COLOR, $div.data(BUTTON_NAME) ? "#FFF" : "#FFC"); + } + + // hoverLeave - mouseleave event handler for buttons and popup items + function hoverLeave(e) { + $(e.target).closest("div").css(BACKGROUND_COLOR, "transparent"); + } + + // popupClick - click event handler for popup items + function popupClick(e) { + + var editor = this, + popup = e.data.popup, + target = e.target; + + // Check for message and prompt popups + if (popup === popups.msg || $(popup).hasClass(PROMPT_CLASS)) + return; + + // Get the button info + var buttonDiv = $.data(popup, BUTTON), + buttonName = $.data(buttonDiv, BUTTON_NAME), + button = buttons[buttonName], + command = button.command, + value, + useCSS = editor.options.useCSS; + + // Get the command value + if (buttonName == "font") + // Opera returns the fontfamily wrapped in quotes + value = target.style.fontFamily.replace(/"/g, ""); + else if (buttonName == "size") { + if (target.tagName == "DIV") + target = target.children[0]; + value = target.innerHTML; + } + else if (buttonName == "style") + value = "<" + target.tagName + ">"; + else if (buttonName == "color") + value = hex(target.style.backgroundColor); + else if (buttonName == "highlight") { + value = hex(target.style.backgroundColor); + if (ie) command = 'backcolor'; + else useCSS = true; + } + + // Fire the popupClick event + var data = { + editor: editor, + button: buttonDiv, + buttonName: buttonName, + popup: popup, + popupName: button.popupName, + command: command, + value: value, + useCSS: useCSS + }; + + if (button.popupClick && button.popupClick(e, data) === false) + return; + + // Execute the command + if (data.command && !execCommand(editor, data.command, data.value, data.useCSS, buttonDiv)) + return false; + + // Hide the popup and focus the editor + hidePopups(); + focus(editor); + + } + + //================== + // Private Functions + //================== + + // checksum - returns a checksum using the Adler-32 method + function checksum(text) + { + var a = 1, b = 0; + for (var index = 0; index < text.length; ++index) { + a = (a + text.charCodeAt(index)) % 65521; + b = (b + a) % 65521; + } + return (b << 16) | a; + } + + // clear - clears the contents of the editor + function clear(editor) { + editor.$area.val(""); + updateFrame(editor); + } + + // createPopup - creates a popup and adds it to the body + function createPopup(popupName, options, popupTypeClass, popupContent, popupHover) { + + // Check if popup already exists + if (popups[popupName]) + return popups[popupName]; + + // Create the popup + var $popup = $(DIV_TAG) + .hide() + .addClass(POPUP_CLASS) + .appendTo("body"); + + // Add the content + + // Custom popup + if (popupContent) + $popup.html(popupContent); + + // Color + else if (popupName == "color") { + var colors = options.colors.split(" "); + if (colors.length < 10) + $popup.width("auto"); + $.each(colors, function(idx, color) { + $(DIV_TAG).appendTo($popup) + .css(BACKGROUND_COLOR, "#" + color); + }); + popupTypeClass = COLOR_CLASS; + } + + // Font + else if (popupName == "font") + $.each(options.fonts.split(","), function(idx, font) { + $(DIV_TAG).appendTo($popup) + .css("fontFamily", font) + .html(font); + }); + + // Size + else if (popupName == "size") + $.each(options.sizes.split(","), function(idx, size) { + $(DIV_TAG).appendTo($popup) + .html("" + size + ""); + }); + + // Style + else if (popupName == "style") + $.each(options.styles, function(idx, style) { + $(DIV_TAG).appendTo($popup) + .html(style[1] + style[0] + style[1].replace("<", "
'); + popupTypeClass = PROMPT_CLASS; + } + + // Paste as Text + else if (popupName == "pastetext") { + $popup.html('Paste your content here and click submit.

'); + popupTypeClass = PROMPT_CLASS; + } + + // Add the popup type class name + if (!popupTypeClass && !popupContent) + popupTypeClass = LIST_CLASS; + $popup.addClass(popupTypeClass); + + // Add the unselectable attribute to all items + if (ie) { + $popup.attr(UNSELECTABLE, "on") + .find("div,font,p,h1,h2,h3,h4,h5,h6") + .attr(UNSELECTABLE, "on"); + } + + // Add the hover effect to all items + if ($popup.hasClass(LIST_CLASS) || popupHover === true) + $popup.children().hover(hoverEnter, hoverLeave); + + // Add the popup to the array and return it + popups[popupName] = $popup[0]; + return $popup[0]; + + } + + // disable - enables or disables the editor + function disable(editor, disabled) { + + // Update the textarea and save the state + if (disabled) { + editor.$area.attr(DISABLED, DISABLED); + editor.disabled = true; + } + else { + editor.$area.removeAttr(DISABLED); + delete editor.disabled; + } + + // Switch the iframe into design mode. + // ie6 does not support designMode. + // ie7 & ie8 do not properly support designMode="off". + try { + if (ie) editor.doc.body.contentEditable = !disabled; + else editor.doc.designMode = !disabled ? "on" : "off"; + } + // Firefox 1.5 throws an exception that can be ignored + // when toggling designMode from off to on. + catch (err) {} + + // Enable or disable the toolbar buttons + refreshButtons(editor); + + } + + // execCommand - executes a designMode command + function execCommand(editor, command, value, useCSS, button) { + + // Restore the current ie selection + restoreRange(editor); + + // Set the styling method + if (!ie) { + if (useCSS === undefined || useCSS === null) + useCSS = editor.options.useCSS; + editor.doc.execCommand("styleWithCSS", 0, useCSS.toString()); + } + + // Execute the command and check for error + var success = true, description; + if (ie && command.toLowerCase() == "inserthtml") + getRange(editor).pasteHTML(value); + else { + try { success = editor.doc.execCommand(command, 0, value || null); } + catch (err) { description = err.description; success = false; } + if (!success) { + if ("cutcopypaste".indexOf(command) > -1) + showMessage(editor, "For security reasons, your browser does not support the " + + command + " command. Try using the keyboard shortcut or context menu instead.", + button); + else + showMessage(editor, + (description ? description : "Error executing the " + command + " command."), + button); + } + } + + // Enable the buttons + refreshButtons(editor); + return success; + + } + + // focus - sets focus to either the textarea or iframe + function focus(editor) { + setTimeout(function() { + if (sourceMode(editor)) editor.$area.focus(); + else editor.$frame[0].contentWindow.focus(); + refreshButtons(editor); + }, 0); + } + + // getRange - gets the current text range object + function getRange(editor) { + if (ie) return getSelection(editor).createRange(); + return getSelection(editor).getRangeAt(0); + } + + // getSelection - gets the current text range object + function getSelection(editor) { + if (ie) return editor.doc.selection; + return editor.$frame[0].contentWindow.getSelection(); + } + + // Returns the hex value for the passed in string. + // hex("rgb(255, 0, 0)"); // #FF0000 + // hex("#FF0000"); // #FF0000 + // hex("#F00"); // #FF0000 + function hex(s) { + var m = /rgba?\((\d+), (\d+), (\d+)/.exec(s), + c = s.split(""); + if (m) { + s = ( m[1] << 16 | m[2] << 8 | m[3] ).toString(16); + while (s.length < 6) + s = "0" + s; + } + return "#" + (s.length == 6 ? s : c[1] + c[1] + c[2] + c[2] + c[3] + c[3]); + } + + // hidePopups - hides all popups + function hidePopups() { + $.each(popups, function(idx, popup) { + $(popup) + .hide() + .unbind(CLICK) + .removeData(BUTTON); + }); + } + + // imagesPath - returns the path to the images folder + function imagesPath() { + var cssFile = "jquery.cleditor.css", + href = $("link[href$='" + cssFile +"']").attr("href"); + return href.substr(0, href.length - cssFile.length) + "images/"; + } + + // imageUrl - Returns the css url string for a filemane + function imageUrl(filename) { + return "url(" + imagesPath() + filename + ")"; + } + + // refresh - creates the iframe and resizes the controls + function refresh(editor) { + + var $main = editor.$main, + options = editor.options; + + // Remove the old iframe + if (editor.$frame) + editor.$frame.remove(); + + // Create a new iframe + var $frame = editor.$frame = $('