[MERGE] trunk

bzr revid: chm@openerp.com-20120914083540-t5bhzfksdxi2wqj5
This commit is contained in:
Christophe Matthieu 2012-09-14 10:35:40 +02:00
commit 5d25e1c109
439 changed files with 1583 additions and 27694 deletions

View File

@ -48,7 +48,6 @@ This module provides the core of the OpenERP Web Client.
"static/src/js/views.js",
"static/src/js/data.js",
"static/src/js/data_export.js",
"static/src/js/data_import.js",
"static/src/js/search.js",
"static/src/js/view_form.js",
"static/src/js/view_list.js",
@ -63,7 +62,6 @@ This module provides the core of the OpenERP Web Client.
"static/lib/jquery.textext/jquery.textext.css",
"static/src/css/base.css",
"static/src/css/data_export.css",
"static/src/css/data_import.css",
"static/lib/cleditor/jquery.cleditor.css",
],
'qweb' : [

View File

@ -7,6 +7,7 @@ import cgi
import contextlib
import functools
import logging
import mimetypes
import os
import pprint
import sys
@ -420,6 +421,10 @@ def session_context(request, storage_path, session_cookie='httpsessionid'):
#----------------------------------------------------------
# OpenERP Web WSGI Application
#----------------------------------------------------------
# Add potentially missing (older ubuntu) font mime types
mimetypes.add_type('application/font-woff', '.woff')
mimetypes.add_type('application/vnd.ms-fontobject', '.eot')
mimetypes.add_type('application/x-font-ttf', '.ttf')
class DisableCacheMiddleware(object):
def __init__(self, app):
self.app = app

View File

@ -484,15 +484,13 @@ def fix_view_modes(action):
if not action.get('views'):
generate_views(action)
id_form = None
for index, (id, mode) in enumerate(action['views']):
if mode == 'form':
id_form = id
break
if action.pop('view_type', 'form') != 'form':
return action
if 'view_mode' in action:
action['view_mode'] = ','.join(
mode if mode != 'tree' else 'list'
for mode in action['view_mode'].split(','))
action['views'] = [
[id, mode if mode != 'tree' else 'list']
for id, mode in action['views']
@ -1351,27 +1349,6 @@ class View(openerpweb.Controller):
def load(self, req, model, view_id, view_type, toolbar=False):
return self.fields_view_get(req, model, view_id, view_type, toolbar=toolbar)
class ListView(View):
_cp_path = "/web/listview"
def process_colors(self, view, row, context):
colors = view['arch']['attrs'].get('colors')
if not colors:
return None
color = [
pair.split(':')[0]
for pair in colors.split(';')
if eval(pair.split(':')[1], dict(context, **row))
]
if not color:
return None
elif len(color) == 1:
return color[0]
return 'maroon'
class TreeView(View):
_cp_path = "/web/treeview"

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-05 04:54+0000\n"
"X-Generator: Launchpad (build 15901)\n"
"X-Launchpad-Export-Date: 2012-09-14 05:04+0000\n"
"X-Generator: Launchpad (build 15944)\n"
#. openerp-web
#: addons/web/static/src/js/chrome.js:176

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-05 04:54+0000\n"
"X-Generator: Launchpad (build 15901)\n"
"X-Launchpad-Export-Date: 2012-09-14 05:04+0000\n"
"X-Generator: Launchpad (build 15944)\n"
#. openerp-web
#: addons/web/static/src/js/chrome.js:176

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-05 04:54+0000\n"
"X-Generator: Launchpad (build 15901)\n"
"X-Launchpad-Export-Date: 2012-09-14 05:04+0000\n"
"X-Generator: Launchpad (build 15944)\n"
#. openerp-web
#: addons/web/static/src/js/chrome.js:176

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-05 04:54+0000\n"
"X-Generator: Launchpad (build 15901)\n"
"X-Launchpad-Export-Date: 2012-09-14 05:04+0000\n"
"X-Generator: Launchpad (build 15944)\n"
#. openerp-web
#: addons/web/static/src/js/chrome.js:176

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-05 04:54+0000\n"
"X-Generator: Launchpad (build 15901)\n"
"X-Launchpad-Export-Date: 2012-09-14 05:04+0000\n"
"X-Generator: Launchpad (build 15944)\n"
#. openerp-web
#: addons/web/static/src/js/chrome.js:176

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-05 04:54+0000\n"
"X-Generator: Launchpad (build 15901)\n"
"X-Launchpad-Export-Date: 2012-09-14 05:04+0000\n"
"X-Generator: Launchpad (build 15944)\n"
"X-Poedit-Language: Czech\n"
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-05 04:55+0000\n"
"X-Generator: Launchpad (build 15901)\n"
"X-Launchpad-Export-Date: 2012-09-14 05:04+0000\n"
"X-Generator: Launchpad (build 15944)\n"
#. openerp-web
#: addons/web/static/src/js/chrome.js:176

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-05 04:55+0000\n"
"X-Generator: Launchpad (build 15901)\n"
"X-Launchpad-Export-Date: 2012-09-14 05:05+0000\n"
"X-Generator: Launchpad (build 15944)\n"
#. openerp-web
#: addons/web/static/src/js/chrome.js:176

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-05 04:55+0000\n"
"X-Generator: Launchpad (build 15901)\n"
"X-Launchpad-Export-Date: 2012-09-14 05:05+0000\n"
"X-Generator: Launchpad (build 15944)\n"
#. openerp-web
#: addons/web/static/src/js/chrome.js:176

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-05 04:55+0000\n"
"X-Generator: Launchpad (build 15901)\n"
"X-Launchpad-Export-Date: 2012-09-14 05:05+0000\n"
"X-Generator: Launchpad (build 15944)\n"
#. openerp-web
#: addons/web/static/src/js/chrome.js:176
@ -243,17 +243,19 @@ msgid ""
"Destination fields should only be selected once, some fields are selected "
"more than once:"
msgstr ""
"Destination fields should only be selected once, some fields are selected "
"more than once:"
#. openerp-web
#: addons/web/static/src/js/data_import.js:386
msgid "*Required Fields are not selected :"
msgstr ""
msgstr "*Required Fields are not selected :"
#. openerp-web
#: addons/web/static/src/js/formats.js:139
#, python-format
msgid "(%d records)"
msgstr ""
msgstr "(%d records)"
#. openerp-web
#: addons/web/static/src/js/formats.js:325
@ -663,7 +665,7 @@ msgstr "Export"
#. openerp-web
#: addons/web/static/src/js/view_list.js:374
msgid "Group"
msgstr ""
msgstr "Group"
#. openerp-web
#: addons/web/static/src/js/view_list.js:549

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-05 04:55+0000\n"
"X-Generator: Launchpad (build 15901)\n"
"X-Launchpad-Export-Date: 2012-09-14 05:05+0000\n"
"X-Generator: Launchpad (build 15944)\n"
#. openerp-web
#: addons/web/static/src/js/chrome.js:176

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-05 04:55+0000\n"
"X-Generator: Launchpad (build 15901)\n"
"X-Launchpad-Export-Date: 2012-09-14 05:05+0000\n"
"X-Generator: Launchpad (build 15944)\n"
#. openerp-web
#: addons/web/static/src/js/chrome.js:176

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-05 04:55+0000\n"
"X-Generator: Launchpad (build 15901)\n"
"X-Launchpad-Export-Date: 2012-09-14 05:05+0000\n"
"X-Generator: Launchpad (build 15944)\n"
"Language: es\n"
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-05 04:55+0000\n"
"X-Generator: Launchpad (build 15901)\n"
"X-Launchpad-Export-Date: 2012-09-14 05:05+0000\n"
"X-Generator: Launchpad (build 15944)\n"
#. openerp-web
#: addons/web/static/src/js/chrome.js:176

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-05 04:55+0000\n"
"X-Generator: Launchpad (build 15901)\n"
"X-Launchpad-Export-Date: 2012-09-14 05:04+0000\n"
"X-Generator: Launchpad (build 15944)\n"
#. openerp-web
#: addons/web/static/src/js/chrome.js:176

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-05 04:54+0000\n"
"X-Generator: Launchpad (build 15901)\n"
"X-Launchpad-Export-Date: 2012-09-14 05:04+0000\n"
"X-Generator: Launchpad (build 15944)\n"
#. openerp-web
#: addons/web/static/src/js/chrome.js:176

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-05 04:55+0000\n"
"X-Generator: Launchpad (build 15901)\n"
"X-Launchpad-Export-Date: 2012-09-14 05:05+0000\n"
"X-Generator: Launchpad (build 15944)\n"
#. openerp-web
#: addons/web/static/src/js/chrome.js:176

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-05 04:55+0000\n"
"X-Generator: Launchpad (build 15901)\n"
"X-Launchpad-Export-Date: 2012-09-14 05:05+0000\n"
"X-Generator: Launchpad (build 15944)\n"
#. openerp-web
#: addons/web/static/src/js/chrome.js:176

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-05 04:55+0000\n"
"X-Generator: Launchpad (build 15901)\n"
"X-Launchpad-Export-Date: 2012-09-14 05:05+0000\n"
"X-Generator: Launchpad (build 15944)\n"
#. openerp-web
#: addons/web/static/src/js/chrome.js:176

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-05 04:55+0000\n"
"X-Generator: Launchpad (build 15901)\n"
"X-Launchpad-Export-Date: 2012-09-14 05:05+0000\n"
"X-Generator: Launchpad (build 15944)\n"
#. openerp-web
#: addons/web/static/src/js/chrome.js:176

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-05 04:55+0000\n"
"X-Generator: Launchpad (build 15901)\n"
"X-Launchpad-Export-Date: 2012-09-14 05:05+0000\n"
"X-Generator: Launchpad (build 15944)\n"
#. openerp-web
#: addons/web/static/src/js/chrome.js:176

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-05 04:55+0000\n"
"X-Generator: Launchpad (build 15901)\n"
"X-Launchpad-Export-Date: 2012-09-14 05:05+0000\n"
"X-Generator: Launchpad (build 15944)\n"
#. openerp-web
#: addons/web/static/src/js/chrome.js:176

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-05 04:55+0000\n"
"X-Generator: Launchpad (build 15901)\n"
"X-Launchpad-Export-Date: 2012-09-14 05:05+0000\n"
"X-Generator: Launchpad (build 15944)\n"
#. openerp-web
#: addons/web/static/src/js/chrome.js:176

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-05 04:55+0000\n"
"X-Generator: Launchpad (build 15901)\n"
"X-Launchpad-Export-Date: 2012-09-14 05:05+0000\n"
"X-Generator: Launchpad (build 15944)\n"
#. openerp-web
#: addons/web/static/src/js/chrome.js:176
@ -35,18 +35,18 @@ msgstr ""
#. openerp-web
#: addons/web/static/src/js/chrome.js:198
msgid "Dont send"
msgstr ""
msgstr "Ne küldje"
#. openerp-web
#: addons/web/static/src/js/chrome.js:1119
msgid "Client Error"
msgstr ""
msgstr "Kliens hiba"
#. openerp-web
#: addons/web/static/src/js/chrome.js:260
#, python-format
msgid "Loading (%d)"
msgstr ""
msgstr "Betöltés (%d)"
#. openerp-web
#: addons/web/static/src/js/chrome.js:292
@ -66,12 +66,12 @@ msgstr "Az adatbázis mentése sikerült"
#. openerp-web
#: addons/web/static/src/js/chrome.js:499
msgid "Restored"
msgstr ""
msgstr "Visszaállítva"
#. openerp-web
#: addons/web/static/src/js/chrome.js:499
msgid "Database restored successfully"
msgstr ""
msgstr "Sikeres adatbázis visszaállítás"
#. openerp-web
#: addons/web/static/src/js/chrome.js:783
@ -235,7 +235,7 @@ msgstr "Fájl importálása"
#. openerp-web
#: addons/web/static/src/js/data_import.js:108
msgid "External ID"
msgstr ""
msgstr "Külső azonosító"
#. openerp-web
#: addons/web/static/src/js/data_import.js:349
@ -259,18 +259,18 @@ msgstr ""
#: addons/web/static/src/js/formats.js:325
#: addons/web/static/src/js/view_page.js:268
msgid "Download"
msgstr ""
msgstr "Letöltés"
#. openerp-web
#: addons/web/static/src/js/formats.js:330
#, python-format
msgid "Download \"%s\""
msgstr ""
msgstr "\"%s\" letöltése"
#. openerp-web
#: addons/web/static/src/js/search.js:437
msgid "Invalid Search"
msgstr ""
msgstr "Helytelen keresés"
#. openerp-web
#: addons/web/static/src/js/search.js:437
@ -325,12 +325,12 @@ msgstr ""
#: addons/web/static/src/js/search.js:962
#: addons/web/static/src/xml/base.xml:973
msgid "Yes"
msgstr ""
msgstr "Igen"
#. openerp-web
#: addons/web/static/src/js/search.js:963
msgid "No"
msgstr ""
msgstr "Nem"
#. openerp-web
#: addons/web/static/src/js/search.js:1416
@ -487,7 +487,7 @@ msgstr ""
#. openerp-web
#: addons/web/static/src/js/view_editor.js:367
msgid "Inherited View"
msgstr ""
msgstr "Örökölt Nézet"
#. openerp-web
#: addons/web/static/src/js/view_editor.js:371
@ -497,7 +497,7 @@ msgstr "Biztos, hogy létre akar hozni egy származtatott nézetet ide?"
#. openerp-web
#: addons/web/static/src/js/view_editor.js:381
msgid "Preview"
msgstr ""
msgstr "Előnézet"
#. openerp-web
#: addons/web/static/src/js/view_editor.js:501
@ -508,19 +508,19 @@ msgstr "Biztos, hogy el akarja távolítani ezt a csomópontot?"
#: addons/web/static/src/js/view_editor.js:815
#: addons/web/static/src/js/view_editor.js:939
msgid "Properties"
msgstr ""
msgstr "Tulajdonságok"
#. openerp-web
#: addons/web/static/src/js/view_editor.js:818
#: addons/web/static/src/js/view_editor.js:942
msgid "Update"
msgstr ""
msgstr "Frissítés"
#. openerp-web
#: addons/web/static/src/js/view_form.js:16
#: addons/web/static/src/js/view_form.js:210
msgid "Form"
msgstr ""
msgstr "Űrlap"
#. openerp-web
#: addons/web/static/src/xml/base.xml:632
@ -577,7 +577,7 @@ msgstr ""
#. openerp-web
#: addons/web/static/src/js/view_form.js:1287
msgid "Confirm"
msgstr ""
msgstr "Jóváhagyás"
#. openerp-web
#: addons/web/static/src/js/view_form.js:2220
@ -1036,7 +1036,7 @@ msgstr ""
#. openerp-web
#: addons/web/static/src/xml/base.xml:477
msgid "Debug View#"
msgstr ""
msgstr "Debug nézet#"
#. openerp-web
#: addons/web/static/src/xml/base.xml:478
@ -1634,3 +1634,9 @@ msgstr "Itt van a fájlnak az előnézete, amit nem tudunk importálni:"
#~ msgid "Hide this tip"
#~ msgstr "Tii elrejtése"
#~ msgid "OK"
#~ msgstr "OK"
#~ msgid "Filter Entry"
#~ msgstr "Szűrő bejegyzés"

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-05 04:55+0000\n"
"X-Generator: Launchpad (build 15901)\n"
"X-Launchpad-Export-Date: 2012-09-14 05:05+0000\n"
"X-Generator: Launchpad (build 15944)\n"
#. openerp-web
#: addons/web/static/src/js/chrome.js:176

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-05 04:55+0000\n"
"X-Generator: Launchpad (build 15901)\n"
"X-Launchpad-Export-Date: 2012-09-14 05:05+0000\n"
"X-Generator: Launchpad (build 15944)\n"
#. openerp-web
#: addons/web/static/src/js/chrome.js:176

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-05 04:55+0000\n"
"X-Generator: Launchpad (build 15901)\n"
"X-Launchpad-Export-Date: 2012-09-14 05:05+0000\n"
"X-Generator: Launchpad (build 15944)\n"
#. openerp-web
#: addons/web/static/src/js/chrome.js:176

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-05 04:55+0000\n"
"X-Generator: Launchpad (build 15901)\n"
"X-Launchpad-Export-Date: 2012-09-14 05:05+0000\n"
"X-Generator: Launchpad (build 15944)\n"
#. openerp-web
#: addons/web/static/src/js/chrome.js:176

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-05 04:55+0000\n"
"X-Generator: Launchpad (build 15901)\n"
"X-Launchpad-Export-Date: 2012-09-14 05:05+0000\n"
"X-Generator: Launchpad (build 15944)\n"
#. openerp-web
#: addons/web/static/src/js/chrome.js:176

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-05 04:55+0000\n"
"X-Generator: Launchpad (build 15901)\n"
"X-Launchpad-Export-Date: 2012-09-14 05:05+0000\n"
"X-Generator: Launchpad (build 15944)\n"
#. openerp-web
#: addons/web/static/src/js/chrome.js:176

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-05 04:55+0000\n"
"X-Generator: Launchpad (build 15901)\n"
"X-Launchpad-Export-Date: 2012-09-14 05:05+0000\n"
"X-Generator: Launchpad (build 15944)\n"
#. openerp-web
#: addons/web/static/src/js/chrome.js:176

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-05 04:55+0000\n"
"X-Generator: Launchpad (build 15901)\n"
"X-Launchpad-Export-Date: 2012-09-14 05:04+0000\n"
"X-Generator: Launchpad (build 15944)\n"
#. openerp-web
#: addons/web/static/src/js/chrome.js:176

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-05 04:55+0000\n"
"X-Generator: Launchpad (build 15901)\n"
"X-Launchpad-Export-Date: 2012-09-14 05:05+0000\n"
"X-Generator: Launchpad (build 15944)\n"
#. openerp-web
#: addons/web/static/src/js/chrome.js:176

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-05 04:55+0000\n"
"X-Generator: Launchpad (build 15901)\n"
"X-Launchpad-Export-Date: 2012-09-14 05:05+0000\n"
"X-Generator: Launchpad (build 15944)\n"
#. openerp-web
#: addons/web/static/src/js/chrome.js:176

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-05 04:55+0000\n"
"X-Generator: Launchpad (build 15901)\n"
"X-Launchpad-Export-Date: 2012-09-14 05:05+0000\n"
"X-Generator: Launchpad (build 15944)\n"
#. openerp-web
#: addons/web/static/src/js/chrome.js:176

View File

@ -15,8 +15,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-05 04:55+0000\n"
"X-Generator: Launchpad (build 15901)\n"
"X-Launchpad-Export-Date: 2012-09-14 05:05+0000\n"
"X-Generator: Launchpad (build 15944)\n"
#. openerp-web
#: addons/web/static/src/js/chrome.js:176
@ -256,7 +256,7 @@ msgstr "*Campos Obrigatórios não selecionados :"
#: addons/web/static/src/js/formats.js:139
#, python-format
msgid "(%d records)"
msgstr "(%d registos)"
msgstr "(%d registros)"
#. openerp-web
#: addons/web/static/src/js/formats.js:325
@ -500,7 +500,7 @@ msgstr "Quer realmente criar uma view herdada aqui?"
#. openerp-web
#: addons/web/static/src/js/view_editor.js:381
msgid "Preview"
msgstr "Pré-visualizar"
msgstr "Visualizar"
#. openerp-web
#: addons/web/static/src/js/view_editor.js:501
@ -541,7 +541,7 @@ msgstr "Duplicar"
#: addons/web/static/src/js/view_form.js:133
#: addons/web/static/src/js/view_form.js:728
msgid "Set Default"
msgstr "Definir como Padrão"
msgstr "Configurar Padrão"
#. openerp-web
#: addons/web/static/src/js/view_page.js:59
@ -665,12 +665,12 @@ msgstr "Exportar"
#. openerp-web
#: addons/web/static/src/js/view_list.js:374
msgid "Group"
msgstr "Grupo"
msgstr "Agrupar"
#. openerp-web
#: addons/web/static/src/js/view_list.js:549
msgid "Do you really want to remove these records?"
msgstr "Deseja remover esse registro?"
msgstr "Deseja remover estes registros?"
#. openerp-web
#: addons/web/static/src/js/views.js:925
@ -787,12 +787,12 @@ msgstr ""
#. openerp-web
#: addons/web/static/src/xml/base.xml:251
msgid "OpenERP Entreprise"
msgstr "OpenERP Entreprise"
msgstr "OpenERP Enterprise"
#. openerp-web
#: addons/web/static/src/xml/base.xml:256
msgid "OpenERP Enterprise Contract."
msgstr "Contrato Corporativo OpenERP"
msgstr "Contrato Enterprise do OpenERP"
#. openerp-web
#: addons/web/static/src/xml/base.xml:257
@ -829,7 +829,7 @@ msgstr "Banco de Dados:"
#. openerp-web
#: addons/web/static/src/xml/base.xml:306
msgid "Username"
msgstr "Nome do usuário"
msgstr "Nome de usuário"
#. openerp-web
#: addons/web/static/src/xml/base.xml:308
@ -840,7 +840,7 @@ msgstr "Senha"
#. openerp-web
#: addons/web/static/src/xml/base.xml:310
msgid "Log in"
msgstr "Autenticar"
msgstr "Acessar"
#. openerp-web
#: addons/web/static/src/xml/base.xml:314
@ -850,7 +850,7 @@ msgstr "Administrar bancos de dados"
#. openerp-web
#: addons/web/static/src/xml/base.xml:44 addons/web/static/src/xml/base.xml:315
msgid "Powered by"
msgstr "Desenvolvido Por"
msgstr "Desenvolvido por"
#. openerp-web
#: addons/web/static/src/xml/base.xml:44 addons/web/static/src/xml/base.xml:315
@ -862,7 +862,7 @@ msgstr "OpenERP"
#: addons/web/static/src/xml/base.xml:132
#: addons/web/static/src/xml/base.xml:328
msgid "Drop"
msgstr "Soltar"
msgstr "Excluir"
#. openerp-web
#: addons/web/static/src/xml/base.xml:166
@ -981,7 +981,7 @@ msgstr "Versão"
#. openerp-web
#: addons/web/static/src/xml/base.xml:1821
msgid "Copyright © 2004-TODAY OpenERP SA. All Rights Reserved."
msgstr "Copyright © 2004-HOJE OpenERP SA. Alguns Direitos Reservados."
msgstr "Copyright © 2004-HOJE OpenERP SA. Todos os Direitos Reservados."
#. openerp-web
#: addons/web/static/src/xml/base.xml:1822
@ -991,12 +991,12 @@ msgstr "OpenERP é uma marca de"
#. openerp-web
#: addons/web/static/src/xml/base.xml:1823
msgid "OpenERP SA Company"
msgstr "Empresa OpenERP SA"
msgstr "OpenERP SA"
#. openerp-web
#: addons/web/static/src/xml/base.xml:1825
msgid "Licenced under the terms of"
msgstr "Licenciado sobre os termos de"
msgstr "Licenciado sob os termos de"
#. openerp-web
#: addons/web/static/src/xml/base.xml:1826
@ -1152,7 +1152,7 @@ msgstr "Condição:"
#. openerp-web
#: addons/web/static/src/xml/base.xml:842
msgid "Only you"
msgstr "Somente voce"
msgstr "Apenas eu"
#. openerp-web
#: addons/web/static/src/xml/base.xml:849
@ -1167,7 +1167,7 @@ msgstr "Widget não utilizado"
#. openerp-web
#: addons/web/static/src/xml/base.xml:936
msgid "(nolabel)"
msgstr "(nolabel)"
msgstr "(sem rótulo)"
#. openerp-web
#: addons/web/static/src/xml/base.xml:941
@ -1213,7 +1213,7 @@ msgstr "Modificadores:"
#. openerp-web
#: addons/web/static/src/xml/base.xml:973
msgid "Change default:"
msgstr "Trocar padrão"
msgstr "Alterar padrão"
#. openerp-web
#: addons/web/static/src/xml/base.xml:977
@ -1238,7 +1238,7 @@ msgstr "Abrir este recurso"
#. openerp-web
#: addons/web/static/src/xml/base.xml:1063
msgid "Select date"
msgstr "Data selecionada"
msgstr "Escolha a data"
#. openerp-web
#: addons/web/static/src/xml/base.xml:948
@ -1511,12 +1511,12 @@ msgstr "Arquivo CSV:"
#. openerp-web
#: addons/web/static/src/xml/base.xml:1756
msgid "2. Check your file format"
msgstr "Verifique seu formato de arquivo"
msgstr "2. Verifique seu formato de arquivo"
#. openerp-web
#: addons/web/static/src/xml/base.xml:1759
msgid "Import Options"
msgstr "Opções de importação"
msgstr "Opções de Importação"
#. openerp-web
#: addons/web/static/src/xml/base.xml:1763
@ -1577,9 +1577,6 @@ msgstr "A importação falhou devido a:"
msgid "Here is a preview of the file we could not import:"
msgstr "Aqui está uma visualização do arquivo que não pode ser importado:"
#~ msgid "LOGOUT"
#~ msgstr "DESCONECTAR"
#~ msgid "Open..."
#~ msgstr "Abrir..."
@ -1623,9 +1620,6 @@ msgstr "Aqui está uma visualização do arquivo que não pode ser importado:"
#~ msgid "Page"
#~ msgstr "Página"
#~ msgid "Customize"
#~ msgstr "Customizar"
#~ msgid "Reports"
#~ msgstr "Relatórios"
@ -1665,9 +1659,6 @@ msgstr "Aqui está uma visualização do arquivo que não pode ser importado:"
#~ msgid "Add / Remove Shortcut..."
#~ msgstr "Adicionar/Remover atalho..."
#~ msgid "Fold menu"
#~ msgstr "Abrir menu"
#~ msgid "Add attachment"
#~ msgstr "Adicionar anexo"
@ -1689,3 +1680,12 @@ msgstr "Aqui está uma visualização do arquivo que não pode ser importado:"
#~ msgid "Filter disabled due to invalid syntax"
#~ msgstr "Filtro desativado devido a sintaxe inválida"
#~ msgid "Fold menu"
#~ msgstr "Fechar o menu"
#~ msgid "LOGOUT"
#~ msgstr "SAIR"
#~ msgid "Customize"
#~ msgstr "Personalizar"

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-05 04:55+0000\n"
"X-Generator: Launchpad (build 15901)\n"
"X-Launchpad-Export-Date: 2012-09-14 05:05+0000\n"
"X-Generator: Launchpad (build 15944)\n"
#. openerp-web
#: addons/web/static/src/js/chrome.js:176

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-05 04:55+0000\n"
"X-Generator: Launchpad (build 15901)\n"
"X-Launchpad-Export-Date: 2012-09-14 05:05+0000\n"
"X-Generator: Launchpad (build 15944)\n"
#. openerp-web
#: addons/web/static/src/js/chrome.js:176
@ -66,12 +66,12 @@ msgstr "База данных резервированна успешно"
#. openerp-web
#: addons/web/static/src/js/chrome.js:499
msgid "Restored"
msgstr "Восстановленна"
msgstr "Восстановлена"
#. openerp-web
#: addons/web/static/src/js/chrome.js:499
msgid "Database restored successfully"
msgstr "База данных восстановленна успешно"
msgstr "База данных восстановлена успешно"
#. openerp-web
#: addons/web/static/src/js/chrome.js:783
@ -205,12 +205,12 @@ msgstr "Закрыть"
#. openerp-web
#: addons/web/static/src/js/data_export.js:20
msgid "Export To File"
msgstr "Экспортировать в файл"
msgstr "Экспорт в файл"
#. openerp-web
#: 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:362
@ -230,12 +230,12 @@ msgstr "Импорт данных"
#. openerp-web
#: addons/web/static/src/js/data_import.js:72
msgid "Import File"
msgstr "Импортировать файл"
msgstr "Импорт файла"
#. openerp-web
#: addons/web/static/src/js/data_import.js:108
msgid "External ID"
msgstr "Внешний идентификатор"
msgstr "Внешний ID"
#. openerp-web
#: addons/web/static/src/js/data_import.js:349
@ -243,17 +243,19 @@ msgid ""
"Destination fields should only be selected once, some fields are selected "
"more than once:"
msgstr ""
"Конечные поля должны быть выбраны единожды, некоторые поля выбраны более "
"одного раза:"
#. openerp-web
#: addons/web/static/src/js/data_import.js:386
msgid "*Required Fields are not selected :"
msgstr ""
msgstr "*Требуемые поля не выбраны :"
#. openerp-web
#: 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:325
@ -444,7 +446,7 @@ msgstr "ложно"
#: addons/web/static/src/js/view_editor.js:20
#, python-format
msgid "Manage Views (%s)"
msgstr "Управление макетами (%s)"
msgstr "Управление видами (%s)"
#. openerp-web
#: addons/web/static/src/js/view_editor.js:46
@ -477,18 +479,18 @@ msgstr "Создать вид (%s)"
#. openerp-web
#: addons/web/static/src/js/view_editor.js:168
msgid "Do you really want to remove this view?"
msgstr "Вы действительно хотите удалить этот Вид?"
msgstr "Вы действительно хотите удалить этот вид?"
#. openerp-web
#: addons/web/static/src/js/view_editor.js:364
#, python-format
msgid "View Editor %d - %s"
msgstr "Редактор Вида %d - %s"
msgstr "Редактор вида %d - %s"
#. openerp-web
#: addons/web/static/src/js/view_editor.js:367
msgid "Inherited View"
msgstr "Унаследованный Вид"
msgstr "Унаследованный вид"
#. openerp-web
#: addons/web/static/src/js/view_editor.js:371
@ -503,7 +505,7 @@ msgstr "Предпросмотр"
#. openerp-web
#: addons/web/static/src/js/view_editor.js:501
msgid "Do you really want to remove this node?"
msgstr "Вы действительно хотите удалить этот Узел?"
msgstr "Вы действительно хотите удалить этот узел?"
#. openerp-web
#: addons/web/static/src/js/view_editor.js:815
@ -544,18 +546,18 @@ msgstr "Установить по умолчанию"
#. openerp-web
#: addons/web/static/src/js/view_page.js:59
msgid "Do you really want to delete this record?"
msgstr "Вы действительно хотите удалить эту Запись?"
msgstr "Вы действительно хотите удалить эту запись?"
#. openerp-web
#: 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:735
msgid "Save default"
msgstr "Сохранить как По Умолчанию"
msgstr "Сохранить значения по умолчанию"
#. openerp-web
#: addons/web/static/src/js/view_form.js:870
@ -663,12 +665,12 @@ msgstr "Экспорт"
#. openerp-web
#: addons/web/static/src/js/view_list.js:374
msgid "Group"
msgstr ""
msgstr "Группа"
#. openerp-web
#: addons/web/static/src/js/view_list.js:549
msgid "Do you really want to remove these records?"
msgstr "Вы действительно хотите удалить эту Запись?"
msgstr "Вы действительно хотите удалить эти записи?"
#. openerp-web
#: addons/web/static/src/js/views.js:925
@ -699,29 +701,29 @@ msgstr "Дерево"
#. openerp-web
#: 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:578
#, python-format
msgid "View Log (%s)"
msgstr "Просмотреть Протокол (%s)"
msgstr "Показать отчет (%s)"
#. openerp-web
#: 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:615 addons/web/static/src/xml/base.xml:482
msgid "Manage Views"
msgstr "Управление Видами"
msgstr "Управление видами"
#. openerp-web
#: addons/web/static/src/js/views.js:616
msgid "Could not find current view declaration"
msgstr "Не могу найти объявление текущего макета"
msgstr "Не удалось найти определение текущего вида"
#. openerp-web
#: addons/web/static/src/js/views.js:716
@ -751,7 +753,7 @@ msgstr "Технический перевод"
#. openerp-web
#: addons/web/static/src/js/views.js:924
msgid "You must choose at least one record."
msgstr "Вы должны выбрать хотя-бы одну запись."
msgstr "Вы должны выбрать хотя бы одну запись."
#. openerp-web
#: addons/web/static/src/js/views.js:875
@ -779,8 +781,7 @@ msgid ""
"Your version of OpenERP is unsupported. Support & maintenance services are "
"available here:"
msgstr ""
"Ваша версия OpenERP не поддерживается. Службы Технической Поддержки доступны "
"тут:"
"Ваша версия OpenERP не поддерживается. Услуги техподдержки доступны здесь:"
#. openerp-web
#: addons/web/static/src/xml/base.xml:251
@ -790,7 +791,7 @@ msgstr "OpenERP Entreprise"
#. openerp-web
#: addons/web/static/src/xml/base.xml:256
msgid "OpenERP Enterprise Contract."
msgstr "OpenERP Enterprise Contract."
msgstr "Контракт OpenERP Enterprise."
#. openerp-web
#: addons/web/static/src/xml/base.xml:257
@ -843,7 +844,7 @@ msgstr "Вход"
#. openerp-web
#: addons/web/static/src/xml/base.xml:314
msgid "Manage Databases"
msgstr "Управление Базами Данных"
msgstr "Управление базами данных"
#. openerp-web
#: addons/web/static/src/xml/base.xml:44 addons/web/static/src/xml/base.xml:315
@ -866,7 +867,7 @@ msgstr "Удалить"
#: addons/web/static/src/xml/base.xml:166
#: addons/web/static/src/xml/base.xml:329
msgid "Backup"
msgstr "Создать Резервную Копию"
msgstr "Резервное копирование"
#. openerp-web
#: addons/web/static/src/xml/base.xml:195
@ -877,7 +878,7 @@ msgstr "Востановить"
#. openerp-web
#: addons/web/static/src/xml/base.xml:332
msgid "Back to Login"
msgstr "Вернутся к Авторизации"
msgstr "Войти"
#. openerp-web
#: addons/web/static/src/xml/base.xml:61
@ -887,7 +888,7 @@ msgstr "СОЗДАТЬ БАЗУ ДАННЫХ"
#. openerp-web
#: addons/web/static/src/xml/base.xml:68 addons/web/static/src/xml/base.xml:211
msgid "Master password:"
msgstr "Мастер пароль:"
msgstr "Мастер-пароль:"
#. openerp-web
#: addons/web/static/src/xml/base.xml:72 addons/web/static/src/xml/base.xml:191
@ -897,7 +898,7 @@ msgstr "Название новой базы данных:"
#. openerp-web
#: addons/web/static/src/xml/base.xml:77
msgid "Load Demonstration data:"
msgstr "Загрузить Демонстрационные данные:"
msgstr "Загрузить демонстрационные данные:"
#. openerp-web
#: addons/web/static/src/xml/base.xml:81
@ -924,7 +925,7 @@ msgstr "УДАЛИТЬ БАЗУ ДАННЫХ"
#: addons/web/static/src/xml/base.xml:162
#: addons/web/static/src/xml/base.xml:187
msgid "Master Password:"
msgstr "Мастер Пароль:"
msgstr "Мастер-пароль:"
#. openerp-web
#: addons/web/static/src/xml/base.xml:143
@ -944,17 +945,17 @@ msgstr "Файл:"
#. openerp-web
#: addons/web/static/src/xml/base.xml:204
msgid "CHANGE MASTER PASSWORD"
msgstr "ИЗМЕНИТЬ МАСТЕР ПАРОЛЬ"
msgstr "ИЗМЕНИТЬ МАСТЕР-ПАРОЛЬ"
#. openerp-web
#: addons/web/static/src/xml/base.xml:216
msgid "New master password:"
msgstr "Новый Мастер Пароль:"
msgstr "Новый мастер-пароль:"
#. openerp-web
#: addons/web/static/src/xml/base.xml:221
msgid "Confirm new master password:"
msgstr "Подтверждение Мастер Пароля:"
msgstr "Подтвердить мастер-пароль:"
#. openerp-web
#: addons/web/static/src/xml/base.xml:325
@ -1054,7 +1055,7 @@ msgstr ""
#. openerp-web
#: addons/web/static/src/xml/base.xml:479
msgid "View Fields"
msgstr "Просмотр Полей"
msgstr "Просмотр полей"
#. openerp-web
#: addons/web/static/src/xml/base.xml:1300
@ -1069,7 +1070,7 @@ msgstr "Вид"
#. openerp-web
#: addons/web/static/src/xml/base.xml:484
msgid "Edit SearchView"
msgstr "Изменить Вид Поиска"
msgstr "Изменить вид поиска"
#. openerp-web
#: addons/web/static/src/xml/base.xml:485
@ -1099,7 +1100,7 @@ msgstr "Создатель:"
#. openerp-web
#: addons/web/static/src/xml/base.xml:500
msgid "Creation Date:"
msgstr "Дата Создания:"
msgstr "Дата создания:"
#. openerp-web
#: addons/web/static/src/xml/base.xml:503
@ -1109,7 +1110,7 @@ msgstr "Изменялся:"
#. openerp-web
#: addons/web/static/src/xml/base.xml:506
msgid "Latest Modification Date:"
msgstr "Дата Изменения:"
msgstr "Дата изменения:"
#. openerp-web
#: addons/web/static/src/xml/base.xml:518
@ -1299,7 +1300,7 @@ msgstr "Специальное:"
#. openerp-web
#: addons/web/static/src/xml/base.xml:1260
msgid "Button Type:"
msgstr "Тип Кнопки:"
msgstr "Тип кнопки:"
#. openerp-web
#: addons/web/static/src/xml/base.xml:1264
@ -1309,7 +1310,7 @@ msgstr "Метод:"
#. openerp-web
#: addons/web/static/src/xml/base.xml:1268
msgid "Action ID:"
msgstr "ID Действия:"
msgstr "ID действия:"
#. openerp-web
#: addons/web/static/src/xml/base.xml:542
@ -1334,7 +1335,7 @@ msgstr "-- Действия --"
#. openerp-web
#: addons/web/static/src/xml/base.xml:1297
msgid "Add Advanced Filter"
msgstr "Добавить Расширенный Фильтр"
msgstr "Добавить расширенный фильтр"
#. openerp-web
#: addons/web/static/src/xml/base.xml:1298
@ -1344,12 +1345,12 @@ msgstr "Сохранить фильтр"
#. openerp-web
#: addons/web/static/src/xml/base.xml:1305
msgid "Filter Name:"
msgstr "Название Фильтра:"
msgstr "Название фильтра:"
#. openerp-web
#: addons/web/static/src/xml/base.xml:1307
msgid "(Any existing filter with the same name will be replaced)"
msgstr "(Существующий фильтр с таким же именени будет замещен)"
msgstr "(Имеющийся фильтр с таким же имененем будет заменен)"
#. openerp-web
#: addons/web/static/src/xml/base.xml:1376
@ -1437,7 +1438,7 @@ msgstr "Тип экспорта:"
#. openerp-web
#: addons/web/static/src/xml/base.xml:1626
msgid "Import Compatible Export"
msgstr "Импорт совместимого Экспорта"
msgstr "Экспорт, совместимый с импортом"
#. openerp-web
#: addons/web/static/src/xml/base.xml:1627
@ -1447,7 +1448,7 @@ msgstr "Экспортировать все данные"
#. openerp-web
#: addons/web/static/src/xml/base.xml:1630
msgid "Export Formats"
msgstr "Форматы Экспорта"
msgstr "Форматы экспорта"
#. openerp-web
#: addons/web/static/src/xml/base.xml:1636
@ -1620,9 +1621,6 @@ msgstr "Предпросмотр файла, который система не
#~ msgid "[%(first_record)d to %(last_record)d] of %(records_count)d"
#~ msgstr "[%(first_record)d до %(last_record)d] из %(records_count)d"
#~ msgid "Filter disabled due to invalid syntax"
#~ msgstr "Фильтр отключен так-как имеет неверный синтаксис"
#~ msgid "Add / Remove Shortcut..."
#~ msgstr "Добавить / Удалить ярлык..."
@ -1641,9 +1639,6 @@ msgstr "Предпросмотр файла, который система не
#~ msgid "Open..."
#~ msgstr "Открыть..."
#~ msgid "Send an e-mail with your default e-mail client"
#~ msgstr "Отправлять имейл вашим почтовым клиентом"
#~ msgid "Search..."
#~ msgstr "Поиск…"
@ -1671,17 +1666,23 @@ msgstr "Предпросмотр файла, который система не
#~ msgid "None of the following conditions must match"
#~ msgstr "Ни одно из следующих условий не должно соответствовать"
#~ msgid "Advanced Filters"
#~ msgstr "Расширенные Фильтры"
#~ msgid "Activate the developper mode"
#~ msgstr "Активировать режим разработчика"
#~ msgid "Title of new Dashboard item:"
#~ msgstr "Заголовок нового Дашбоарда:"
#~ msgid "Notebook Page \""
#~ msgstr "Страница Блокнота \""
#~ msgid "Filter disabled due to invalid syntax"
#~ msgstr "Фильтр отключен из-за неверного синтаксиса"
#~ msgid "Send an e-mail with your default e-mail client"
#~ msgstr "Отправлять e-mail вашим почтовым клиентом"
#~ msgid "Select Dashboard to add this filter to:"
#~ msgstr "Выберите Дашбоард, к которому добавить этот фильтр:"
#~ msgstr "Выберите панель для добавления этого фильтра:"
#~ msgid "Title of new Dashboard item:"
#~ msgstr "Заголовок новой панели:"
#~ msgid "Advanced Filters"
#~ msgstr "Расширенные фильтры"

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-05 04:55+0000\n"
"X-Generator: Launchpad (build 15901)\n"
"X-Launchpad-Export-Date: 2012-09-14 05:05+0000\n"
"X-Generator: Launchpad (build 15944)\n"
#. openerp-web
#: addons/web/static/src/js/chrome.js:176

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-05 04:55+0000\n"
"X-Generator: Launchpad (build 15901)\n"
"X-Launchpad-Export-Date: 2012-09-14 05:05+0000\n"
"X-Generator: Launchpad (build 15944)\n"
#. openerp-web
#: addons/web/static/src/js/chrome.js:176

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-05 04:54+0000\n"
"X-Generator: Launchpad (build 15901)\n"
"X-Launchpad-Export-Date: 2012-09-14 05:04+0000\n"
"X-Generator: Launchpad (build 15944)\n"
#. openerp-web
#: addons/web/static/src/js/chrome.js:176

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-05 04:55+0000\n"
"X-Generator: Launchpad (build 15901)\n"
"X-Launchpad-Export-Date: 2012-09-14 05:05+0000\n"
"X-Generator: Launchpad (build 15944)\n"
#. openerp-web
#: addons/web/static/src/js/chrome.js:176

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-05 04:55+0000\n"
"X-Generator: Launchpad (build 15901)\n"
"X-Launchpad-Export-Date: 2012-09-14 05:05+0000\n"
"X-Generator: Launchpad (build 15944)\n"
#. openerp-web
#: addons/web/static/src/js/chrome.js:176

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-05 04:55+0000\n"
"X-Generator: Launchpad (build 15901)\n"
"X-Launchpad-Export-Date: 2012-09-14 05:05+0000\n"
"X-Generator: Launchpad (build 15944)\n"
#. openerp-web
#: addons/web/static/src/js/chrome.js:176

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-05 04:55+0000\n"
"X-Generator: Launchpad (build 15901)\n"
"X-Launchpad-Export-Date: 2012-09-14 05:05+0000\n"
"X-Generator: Launchpad (build 15944)\n"
#. openerp-web
#: addons/web/static/src/js/chrome.js:176

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-05 04:55+0000\n"
"X-Generator: Launchpad (build 15901)\n"
"X-Launchpad-Export-Date: 2012-09-14 05:05+0000\n"
"X-Generator: Launchpad (build 15944)\n"
#. openerp-web
#: addons/web/static/src/js/chrome.js:176

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-05 04:55+0000\n"
"X-Generator: Launchpad (build 15901)\n"
"X-Launchpad-Export-Date: 2012-09-14 05:05+0000\n"
"X-Generator: Launchpad (build 15944)\n"
#. openerp-web
#: addons/web/static/src/js/chrome.js:176

View File

@ -25,6 +25,7 @@
display: none !important;
}
}
.openerp.openerp_webclient_container {
height: 100%;
position: relative;
@ -40,7 +41,7 @@
text-shadow: 0 1px 1px rgba(255, 255, 255, 0.5);
/* http://www.quirksmode.org/dom/inputfile.html
* http://stackoverflow.com/questions/2855589/replace-input-type-file-by-an-image
*/
*/ */
}
.openerp :-moz-placeholder {
color: #afafb6 !important;
@ -111,28 +112,6 @@
.openerp h4 {
margin: 4px 0;
}
.openerp .oe_semantic_html_override ul, .openerp .oe_semantic_html_override ol {
margin: 0;
padding: 0;
}
.openerp .oe_semantic_html_override ul ul, .openerp .oe_semantic_html_override ul ol, .openerp .oe_semantic_html_override ul li, .openerp .oe_semantic_html_override ol ul, .openerp .oe_semantic_html_override ol ol, .openerp .oe_semantic_html_override ol li {
margin: 0;
padding: 0;
}
.openerp .oe_semantic_html_override ul li, .openerp .oe_semantic_html_override ol li {
list-style-type: none;
}
.openerp ul.oe_semantic_html_override {
margin: 0;
padding: 0;
}
.openerp ul.oe_semantic_html_override ul, .openerp ul.oe_semantic_html_override ol, .openerp ul.oe_semantic_html_override li {
margin: 0;
padding: 0;
}
.openerp ul.oe_semantic_html_override li {
list-style-type: none;
}
.openerp a.button:link, .openerp a.button:visited, .openerp button, .openerp input[type='submit'], .openerp .ui-dialog-buttonpane .ui-dialog-buttonset .ui-button {
display: inline-block;
border: 1px solid #ababab;
@ -265,7 +244,7 @@
border-radius: 0 0 2px 2px;
}
.openerp.ui-dialog .ui-dialog-buttonpane button {
margin: 0;
margin: 0 4px 0 0;
}
.openerp.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset {
float: left;
@ -393,40 +372,38 @@
background: #dc5f59;
}
.openerp button.oe_highlight {
background-color: #dc5f59;
background-image: -webkit-gradient(linear, left top, left bottom, from(#dc5f59), to(#b33630));
background-image: -webkit-linear-gradient(top, #dc5f59, #b33630);
background-image: -moz-linear-gradient(top, #dc5f59, #b33630);
background-image: -ms-linear-gradient(top, #dc5f59, #b33630);
background-image: -o-linear-gradient(top, #dc5f59, #b33630);
background-image: linear-gradient(to bottom, #dc5f59, #b33630);
-moz-box-shadow: none;
-webkit-box-shadow: none;
box-shadow: none;
}
.openerp button.oe_highlight:active {
background-color: #b33630;
background-image: -webkit-gradient(linear, left top, left bottom, from(#b33630), to(#dc5f59));
background-image: -webkit-linear-gradient(top, #b33630, #dc5f59);
background-image: -moz-linear-gradient(top, #b33630, #dc5f59);
background-image: -ms-linear-gradient(top, #b33630, #dc5f59);
background-image: -o-linear-gradient(top, #b33630, #dc5f59);
background-image: linear-gradient(to bottom, #b33630, #dc5f59);
-moz-box-shadow: none;
-webkit-box-shadow: none;
box-shadow: none;
border: 1px solid #795151;
background-color: #df3f3f;
background-image: -webkit-gradient(linear, left top, left bottom, from(#df3f3f), to(#a21a1a));
background-image: -webkit-linear-gradient(top, #df3f3f, #a21a1a);
background-image: -moz-linear-gradient(top, #df3f3f, #a21a1a);
background-image: -ms-linear-gradient(top, #df3f3f, #a21a1a);
background-image: -o-linear-gradient(top, #df3f3f, #a21a1a);
background-image: linear-gradient(to bottom, #df3f3f, #a21a1a);
-moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 1px rgba(155, 155, 155, 0.4) inset;
-webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 1px rgba(155, 155, 155, 0.4) inset;
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 1px rgba(155, 155, 155, 0.4) inset;
}
.openerp button.oe_highlight:hover {
background-color: #df6b66;
background-image: -webkit-gradient(linear, left top, left bottom, from(#df6b66), to(#bf3a33));
background-image: -webkit-linear-gradient(top, #df6b66, #bf3a33);
background-image: -moz-linear-gradient(top, #df6b66, #bf3a33);
background-image: -ms-linear-gradient(top, #df6b66, #bf3a33);
background-image: -o-linear-gradient(top, #df6b66, #bf3a33);
background-image: linear-gradient(to bottom, #df6b66, #bf3a33);
-moz-box-shadow: 0 0 1px rgba(0, 0, 0, 0.2);
-webkit-box-shadow: 0 0 1px rgba(0, 0, 0, 0.2);
box-shadow: 0 0 1px rgba(0, 0, 0, 0.2);
background-color: #e25858;
background-image: -webkit-gradient(linear, left top, left bottom, from(#e25858), to(#ab1b1b));
background-image: -webkit-linear-gradient(top, #e25858, #ab1b1b);
background-image: -moz-linear-gradient(top, #e25858, #ab1b1b);
background-image: -ms-linear-gradient(top, #e25858, #ab1b1b);
background-image: -o-linear-gradient(top, #e25858, #ab1b1b);
background-image: linear-gradient(to bottom, #e25858, #ab1b1b);
}
.openerp button.oe_highlight:active {
background-color: #c52020;
background-image: -webkit-gradient(linear, left top, left bottom, from(#c52020), to(#d22323));
background-image: -webkit-linear-gradient(top, #c52020, #d22323);
background-image: -moz-linear-gradient(top, #c52020, #d22323);
background-image: -ms-linear-gradient(top, #c52020, #d22323);
background-image: -o-linear-gradient(top, #c52020, #d22323);
background-image: linear-gradient(to bottom, #c52020, #d22323);
}
.openerp .oe_background_grey {
background: #eeeeee !important;
}
.openerp .oe_form_dirty .oe_highlight_on_dirty {
color: white;
@ -472,9 +449,9 @@
-moz-border-radius: 3px;
-webkit-border-radius: 3px;
border-radius: 3px;
-moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3);
-webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3);
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3);
-moz-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.4);
-webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.4);
box-shadow: 0 1px 4px rgba(0, 0, 0, 0.4);
border: none;
margin-bottom: 10px;
}
@ -604,26 +581,6 @@
padding: 0 16px;
list-style: none;
zoom: 1;
margin: 0;
padding: 0;
}
.openerp .oe_notebook ul, .openerp .oe_notebook ol, .openerp .oe_notebook li {
margin: 0;
padding: 0;
}
.openerp .oe_notebook li {
list-style-type: none;
}
.openerp .oe_notebook ul, .openerp .oe_notebook ol {
margin: 0;
padding: 0;
}
.openerp .oe_notebook ul ul, .openerp .oe_notebook ul ol, .openerp .oe_notebook ul li, .openerp .oe_notebook ol ul, .openerp .oe_notebook ol ol, .openerp .oe_notebook ol li {
margin: 0;
padding: 0;
}
.openerp .oe_notebook ul li, .openerp .oe_notebook ol li {
list-style-type: none;
}
.openerp .oe_notebook.ui-corner-all {
-moz-border-radius: 0;
@ -700,6 +657,8 @@
top: 26px;
left: 0;
z-index: 1;
margin: 0;
padding: 0;
border: 1px solid #afafb6;
background: white;
padding: 4px 0;
@ -717,6 +676,7 @@
float: none;
display: block;
position: relative;
margin: 0;
padding: 2px 8px;
}
.openerp .oe_dropdown_menu > li:hover {
@ -834,9 +794,10 @@
font-size: 14px;
height: 100%;
}
.openerp .oe_login li {
.openerp .oe_login ul, .openerp .oe_login li {
margin: 0;
list-style-type: none;
padding-bottom: 4px;
padding: 0 0 4px 0;
}
.openerp .oe_login button {
float: right;
@ -865,9 +826,9 @@
font-family: "Lucida Grande", Helvetica, Verdana, Arial;
border: 1px solid #999999;
background: whitesmoke;
-moz-box-shadow: inset 0 1px 4px rgba(0, 0, 0, 0.3);
-webkit-box-shadow: inset 0 1px 4px rgba(0, 0, 0, 0.3);
box-shadow: inset 0 1px 4px rgba(0, 0, 0, 0.3);
-moz-box-shadow: inset 0 1px 4px rgba(0, 0, 0, 0.4);
-webkit-box-shadow: inset 0 1px 4px rgba(0, 0, 0, 0.4);
box-shadow: inset 0 1px 4px rgba(0, 0, 0, 0.4);
-moz-border-radius: 3px;
-webkit-border-radius: 3px;
border-radius: 3px;
@ -929,17 +890,6 @@
-webkit-box-shadow: 0 0 18px rgba(0, 0, 0, 0.9);
box-shadow: 0 0 18px rgba(0, 0, 0, 0.9);
}
.openerp .oe_login .oe_login_pane ul, .openerp .oe_login .oe_login_pane ol {
margin: 0;
padding: 0;
}
.openerp .oe_login .oe_login_pane ul ul, .openerp .oe_login .oe_login_pane ul ol, .openerp .oe_login .oe_login_pane ul li, .openerp .oe_login .oe_login_pane ol ul, .openerp .oe_login .oe_login_pane ol ol, .openerp .oe_login .oe_login_pane ol li {
margin: 0;
padding: 0;
}
.openerp .oe_login .oe_login_pane ul li, .openerp .oe_login .oe_login_pane ol li {
list-style-type: none;
}
.openerp .oe_login .oe_login_pane h2 {
margin-top: 0;
font-size: 18px;
@ -1010,7 +960,6 @@
.openerp .oe_topbar {
width: 100%;
height: 31px;
border-top: solid 1px #d3d3d3;
background-color: #646060;
background-image: -webkit-gradient(linear, left top, left bottom, from(#646060), to(#262626));
background-image: -webkit-linear-gradient(top, #646060, #262626);
@ -1019,17 +968,6 @@
background-image: -o-linear-gradient(top, #646060, #262626);
background-image: linear-gradient(to bottom, #646060, #262626);
}
.openerp .oe_topbar ul, .openerp .oe_topbar ol {
margin: 0;
padding: 0;
}
.openerp .oe_topbar ul ul, .openerp .oe_topbar ul ol, .openerp .oe_topbar ul li, .openerp .oe_topbar ol ul, .openerp .oe_topbar ol ol, .openerp .oe_topbar ol li {
margin: 0;
padding: 0;
}
.openerp .oe_topbar ul li, .openerp .oe_topbar ol li {
list-style-type: none;
}
.openerp .oe_topbar .oe_topbar_item {
display: block;
padding: 5px 10px 7px;
@ -1102,17 +1040,6 @@
text-shadow: 0 1px 1px white;
padding-bottom: 16px;
}
.openerp .oe_leftbar ul, .openerp .oe_leftbar ol {
margin: 0;
padding: 0;
}
.openerp .oe_leftbar ul ul, .openerp .oe_leftbar ul ol, .openerp .oe_leftbar ul li, .openerp .oe_leftbar ol ul, .openerp .oe_leftbar ol ol, .openerp .oe_leftbar ol li {
margin: 0;
padding: 0;
}
.openerp .oe_leftbar ul li, .openerp .oe_leftbar ol li {
list-style-type: none;
}
.openerp a.oe_logo {
width: 220px;
display: block;
@ -1168,6 +1095,9 @@
margin: 0;
}
.openerp .oe_menu > li {
list-style-type: none;
padding: 0;
margin: 0;
float: left;
}
.openerp .oe_menu > li > a {
@ -1207,7 +1137,9 @@
}
.openerp .oe_secondary_submenu li {
position: relative;
margin: 0;
padding: 1px 0 1px 20px !important;
list-style-type: none;
}
.openerp .oe_secondary_submenu li a {
display: block;
@ -1235,24 +1167,26 @@
.openerp .oe_secondary_submenu .oe_menu_counter {
float: right;
text-shadow: 0 1px 1px rgba(0, 0, 0, 0.2);
margin: 0px;
margin: 1px;
padding: 1px 4px;
border: none;
}
.openerp .oe_secondary_submenu .oe_menu_counter:hover {
cursor: pointer;
border: 1px solid #c81010;
-moz-box-shadow: 0 0 2px #c81010;
-webkit-box-shadow: 0 0 2px #c81010;
box-shadow: 0 0 2px #c81010;
-webkit-transform: scale(1.1);
-moz-transform: scale(1.1);
-ms-transform: scale(1.1);
-o-transform: scale(1.1);
transform: scale(1.1);
}
.openerp .oe_secondary_submenu .oe_active {
background: #7c7bad;
border-top: 1px solid lightGray;
border-bottom: 1px solid lightGray;
border-bottom: 1px solid #dedede;
text-shadow: 0 1px 1px rgba(0, 0, 0, 0.2);
-moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.2);
-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.2);
box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.2);
-moz-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.2), inset 0 -1px 3px rgba(40, 40, 40, 0.2);
-webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.2), inset 0 -1px 3px rgba(40, 40, 40, 0.2);
box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.2), inset 0 -1px 3px rgba(40, 40, 40, 0.2);
background: #7c7bad;
}
.openerp .oe_secondary_submenu .oe_active a {
color: white;
@ -1268,6 +1202,9 @@
.openerp .oe_secondary_submenu .oe_active .oe_menu_counter {
background: #eeeeee;
color: #7c7bad;
-moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.2);
-webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.2);
box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.2);
}
.openerp .oe_secondary_submenu .oe_menu_toggler:before {
width: 0;
@ -1305,6 +1242,13 @@
.openerp .oe_application > div {
height: 100%;
}
.openerp .oe_application .oe_breadcrumb_item:not(:last-child) {
display: inline-block;
max-width: 7em;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.openerp .oe_view_manager .oe_view_manager_body {
height: inherit;
}
@ -1315,16 +1259,6 @@
width: 100%;
table-layout: fixed;
}
.openerp .oe_view_manager table.oe_view_manager_header ul {
padding: 0;
margin-right: 0;
margin-top: 0;
margin-bottom: 0;
}
.openerp .oe_view_manager table.oe_view_manager_header ul li {
list-style-type: none;
margin: 0;
}
.openerp .oe_view_manager table.oe_view_manager_header .oe_header_row {
clear: both;
text-shadow: 0 1px 1px white;
@ -1396,6 +1330,10 @@
float: left;
margin-right: 8px;
}
.openerp .oe_view_manager ul.oe_pager_group {
padding: 0;
margin: 0;
}
.openerp .oe_view_manager .oe_pager_group {
float: left;
height: 24px;
@ -1411,6 +1349,8 @@
height: 24px;
line-height: 24px;
padding: 0;
margin: 0;
list-style-type: none;
float: left;
border-right: 1px solid #ababab;
}
@ -1435,14 +1375,17 @@
text-shadow: 0 1px 2px rgba(0, 0, 0, 0.4);
}
.openerp .oe_view_manager .oe_view_manager_switch {
margin-left: 8px;
padding: 0;
margin: 0 0 0 8px;
}
.openerp .oe_view_manager .oe_view_manager_switch li {
text-align: center;
margin: 0;
width: 24px;
height: 24px;
line-height: 16px;
padding: 0;
text-align: center;
list-style-type: none;
}
.openerp .oe_view_manager .oe_view_manager_switch li a {
position: relative;
@ -1502,10 +1445,10 @@
.openerp .oe_view_manager_current > .oe_view_manager_header .oe_header_row:first-child td {
padding-top: 8px;
}
.openerp .oe_view_manager_inline {
.openerp .oe_view_manager_inline, .openerp .oe_view_manager_inlineview {
height: 100%;
}
.openerp .oe_view_manager_inline > .oe_view_manager_header {
.openerp .oe_view_manager_inline > .oe_view_manager_header, .openerp .oe_view_manager_inlineview > .oe_view_manager_header {
display: none;
}
.openerp .oe_popup_form > .oe_formview > .oe_form_pager {
@ -2006,6 +1949,7 @@
.openerp .oe_form header {
position: relative;
border-bottom: 1px solid #cacaca;
padding-left: 2px;
background-color: #fcfcfc;
background-image: -webkit-gradient(linear, left top, left bottom, from(#fcfcfc), to(#dedede));
background-image: -webkit-linear-gradient(top, #fcfcfc, #dedede);
@ -2018,6 +1962,9 @@
display: inline-block;
float: right;
}
.openerp .oe_form header .oe_form_button {
margin: 3px 2px 1px;
}
.openerp .oe_form div.oe_chatter {
min-width: 650px;
max-width: 860px;
@ -2037,140 +1984,11 @@
min-width: 150px;
}
.openerp .oe_form div.oe_form_configuration .oe_form_group_cell_label {
padding: 2px 0;
padding: 1px 0;
}
.openerp .oe_form div.oe_form_configuration .oe_form_group_cell div div {
padding: 1px 0;
}
.openerp .oe_form ul.oe_form_steps, .openerp .oe_form ul.oe_form_steps_clickable {
display: inline-block;
padding-right: 18px;
}
.openerp .oe_form ul.oe_form_steps li, .openerp .oe_form ul.oe_form_steps_clickable li {
display: inline-block;
margin-right: -20px;
background-color: #fcfcfc;
background-image: -webkit-gradient(linear, left top, left bottom, from(#fcfcfc), to(#dedede));
background-image: -webkit-linear-gradient(top, #fcfcfc, #dedede);
background-image: -moz-linear-gradient(top, #fcfcfc, #dedede);
background-image: -ms-linear-gradient(top, #fcfcfc, #dedede);
background-image: -o-linear-gradient(top, #fcfcfc, #dedede);
background-image: linear-gradient(to bottom, #fcfcfc, #dedede);
}
.openerp .oe_form ul.oe_form_steps li:first-child .label, .openerp .oe_form ul.oe_form_steps_clickable li:first-child .label {
border-left: 1px solid #cacaca;
padding-left: 14px;
}
.openerp .oe_form ul.oe_form_steps li:last-child, .openerp .oe_form ul.oe_form_steps_clickable li:last-child {
border-right: 1px solid #cacaca;
}
.openerp .oe_form ul.oe_form_steps li:last-child .label, .openerp .oe_form ul.oe_form_steps_clickable li:last-child .label {
padding-right: 14px;
}
.openerp .oe_form ul.oe_form_steps li:last-child .arrow, .openerp .oe_form ul.oe_form_steps_clickable li:last-child .arrow {
display: none;
}
.openerp .oe_form ul.oe_form_steps li .label, .openerp .oe_form ul.oe_form_steps_clickable li .label {
color: #4c4c4c;
text-shadow: 0 1px 1px #fcfcfc, 0 -1px 1px #dedede;
padding: 7px;
display: inline-block;
padding-left: 24px;
margin: 0;
position: relative;
}
.openerp .oe_form ul.oe_form_steps li .arrow, .openerp .oe_form ul.oe_form_steps_clickable li .arrow {
width: 17px;
display: inline-block;
vertical-align: top;
overflow: hidden;
margin-left: -5px;
}
.openerp .oe_form ul.oe_form_steps li .arrow span, .openerp .oe_form ul.oe_form_steps_clickable li .arrow span {
position: relative;
width: 24px;
height: 24px;
display: inline-block;
margin-left: -12px;
margin-top: 3px;
box-shadow: -1px 1px 2px rgba(255, 255, 255, 0.2), inset -1px 1px 1px rgba(0, 0, 0, 0.2);
background-color: #dedede;
background: -moz-linear-gradient(135deg, #dedede, #fcfcfc);
background: -o-linear-gradient(135deg, #fcfcfc, #dedede);
background: -webkit-gradient(linear, left top, right bottom, from(#fcfcfc), to(#dedede));
-moz-border-radius: 3px;
-webkit-border-radius: 3px;
border-radius: 3px;
-webkit-transform: rotate(45deg);
-moz-transform: rotate(45deg);
-ms-transform: rotate(45deg);
-o-transform: rotate(45deg);
transform: rotate(45deg);
}
.openerp .oe_form ul.oe_form_steps li.oe_active, .openerp .oe_form ul.oe_form_steps_clickable li.oe_active {
background-color: #729fcf;
background-image: -webkit-gradient(linear, left top, left bottom, from(#729fcf), to(#3465a4));
background-image: -webkit-linear-gradient(top, #729fcf, #3465a4);
background-image: -moz-linear-gradient(top, #729fcf, #3465a4);
background-image: -ms-linear-gradient(top, #729fcf, #3465a4);
background-image: -o-linear-gradient(top, #729fcf, #3465a4);
background-image: linear-gradient(to bottom, #729fcf, #3465a4);
}
.openerp .oe_form ul.oe_form_steps li.oe_active .arrow span, .openerp .oe_form ul.oe_form_steps_clickable li.oe_active .arrow span {
background-color: #3465a4;
background: -moz-linear-gradient(135deg, #3465a4, #729fcf);
background: -o-linear-gradient(135deg, #729fcf, #3465a4);
background: -webkit-gradient(linear, left top, right bottom, from(#729fcf), to(#3465a4));
}
.openerp .oe_form ul.oe_form_steps li.oe_active .label, .openerp .oe_form ul.oe_form_steps_clickable li.oe_active .label {
color: white;
text-shadow: 0 1px 1px #729fcf, 0 -1px 1px #3465a4;
}
.openerp .oe_form ul.oe_form_steps_clickable li {
cursor: pointer;
}
.openerp .oe_form ul.oe_form_steps_clickable li:hover {
background-color: #e8e8e8;
background-image: -webkit-gradient(linear, left top, left bottom, from(#e8e8e8), to(#cacaca));
background-image: -webkit-linear-gradient(top, #e8e8e8, #cacaca);
background-image: -moz-linear-gradient(top, #e8e8e8, #cacaca);
background-image: -ms-linear-gradient(top, #e8e8e8, #cacaca);
background-image: -o-linear-gradient(top, #e8e8e8, #cacaca);
background-image: linear-gradient(to bottom, #e8e8e8, #cacaca);
}
.openerp .oe_form ul.oe_form_steps_clickable li:hover .label {
text-shadow: 0 -1px 1px #fcfcfc, 0 1px 1px #dedede;
}
.openerp .oe_form ul.oe_form_steps_clickable li:hover .arrow span {
background-color: #e8e8e8;
background-image: -webkit-gradient(linear, left top, left bottom, from(#e8e8e8), to(#cacaca));
background-image: -webkit-linear-gradient(top, #e8e8e8, #cacaca);
background-image: -moz-linear-gradient(top, #e8e8e8, #cacaca);
background-image: -ms-linear-gradient(top, #e8e8e8, #cacaca);
background-image: -o-linear-gradient(top, #e8e8e8, #cacaca);
background-image: linear-gradient(to bottom, #e8e8e8, #cacaca);
}
.openerp .oe_form ul.oe_form_steps_clickable li .label {
color: #7c7bad;
}
.openerp .oe_form ul.oe_form_steps_clickable li.oe_active:hover {
background-color: #4c85c2;
background-image: -webkit-gradient(linear, left top, left bottom, from(#4c85c2), to(#284d7d));
background-image: -webkit-linear-gradient(top, #4c85c2, #284d7d);
background-image: -moz-linear-gradient(top, #4c85c2, #284d7d);
background-image: -ms-linear-gradient(top, #4c85c2, #284d7d);
background-image: -o-linear-gradient(top, #4c85c2, #284d7d);
background-image: linear-gradient(to bottom, #4c85c2, #284d7d);
}
.openerp .oe_form ul.oe_form_steps_clickable li.oe_active:hover .label {
text-shadow: 0 -1px 1px #729fcf, 0 1px 1px #3465a4;
}
.openerp .oe_form ul.oe_form_steps_clickable li.oe_active:hover .arrow span {
background-color: #284d7d;
background: -moz-linear-gradient(135deg, #284d7d, #4c85c2);
background: -o-linear-gradient(135deg, #4c85c2, #284d7d);
background: -webkit-gradient(linear, left top, right bottom, from(#4c85c2), to(#284d7d));
}
.openerp .oe_form .oe_subtotal_footer {
width: 1% !important;
}
@ -2202,7 +2020,7 @@
}
.openerp .oe_form td.oe_form_group_cell_label {
border-right: 1px solid #dddddd;
padding: 4px 0px 4px 0px;
padding: 2px 0px;
}
.openerp .oe_form td.oe_form_group_cell_label label {
line-height: 18px;
@ -2210,7 +2028,7 @@
min-width: 140px;
}
.openerp .oe_form td.oe_form_group_cell + .oe_form_group_cell {
padding-left: 6px;
padding: 2px 0 2px 8px;
}
.openerp .oe_form .oe_form_group {
width: 100%;
@ -2222,7 +2040,7 @@
.openerp .oe_form .oe_form_label_help[for], .openerp .oe_form .oe_form_label[for] {
font-weight: bold;
white-space: nowrap;
padding-right: 6px;
padding-right: 8px;
}
.openerp .oe_form .oe_form_label_help[for] span, .openerp .oe_form .oe_form_label[for] span {
font-size: 80%;
@ -2298,7 +2116,6 @@
width: 100%;
display: inline-block;
padding: 2px 2px 2px 0px;
line-height: 1em;
}
.openerp .oe_form .oe_form_field input {
margin: 0px;
@ -2459,27 +2276,137 @@
.openerp.ui-autocomplete li:not(.oe_m2o_dropdown_option) + li.oe_m2o_dropdown_option {
margin-top: 10px;
}
.openerp .oe_form_field_status {
.openerp ul.oe_form_status, .openerp ul.oe_form_status_clickable {
display: inline-block;
margin: 0;
padding: 0;
padding: 0 18px 0 0;
}
.openerp .oe_form_field_status ul, .openerp .oe_form_field_status ol {
margin: 0;
padding: 0;
}
.openerp .oe_form_field_status ul ul, .openerp .oe_form_field_status ul ol, .openerp .oe_form_field_status ul li, .openerp .oe_form_field_status ol ul, .openerp .oe_form_field_status ol ol, .openerp .oe_form_field_status ol li {
margin: 0;
padding: 0;
}
.openerp .oe_form_field_status ul li, .openerp .oe_form_field_status ol li {
.openerp ul.oe_form_status li, .openerp ul.oe_form_status_clickable li {
display: inline-block;
list-style-type: none;
}
.openerp .oe_form_field_status ul, .openerp .oe_form_field_status ol, .openerp .oe_form_field_status li {
margin: 0;
margin: 0 -20px 0 0;
padding: 0;
background-color: #fcfcfc;
background-image: -webkit-gradient(linear, left top, left bottom, from(#fcfcfc), to(#dedede));
background-image: -webkit-linear-gradient(top, #fcfcfc, #dedede);
background-image: -moz-linear-gradient(top, #fcfcfc, #dedede);
background-image: -ms-linear-gradient(top, #fcfcfc, #dedede);
background-image: -o-linear-gradient(top, #fcfcfc, #dedede);
background-image: linear-gradient(to bottom, #fcfcfc, #dedede);
}
.openerp .oe_form_field_status li {
list-style-type: none;
.openerp ul.oe_form_status li:first-child .label, .openerp ul.oe_form_status_clickable li:first-child .label {
border-left: 1px solid #cacaca;
padding-left: 14px;
}
.openerp ul.oe_form_status li:last-child, .openerp ul.oe_form_status_clickable li:last-child {
border-right: 1px solid #cacaca;
}
.openerp ul.oe_form_status li:last-child .label, .openerp ul.oe_form_status_clickable li:last-child .label {
padding-right: 14px;
}
.openerp ul.oe_form_status li:last-child .arrow, .openerp ul.oe_form_status_clickable li:last-child .arrow {
display: none;
}
.openerp ul.oe_form_status li .label, .openerp ul.oe_form_status_clickable li .label {
color: #4c4c4c;
text-shadow: 0 1px 1px #fcfcfc, 0 -1px 1px #dedede;
padding: 7px;
display: inline-block;
padding-left: 24px;
margin: 0;
position: relative;
}
.openerp ul.oe_form_status li .arrow, .openerp ul.oe_form_status_clickable li .arrow {
width: 17px;
display: inline-block;
vertical-align: top;
overflow: hidden;
margin-left: -5px;
}
.openerp ul.oe_form_status li .arrow span, .openerp ul.oe_form_status_clickable li .arrow span {
position: relative;
width: 24px;
height: 24px;
display: inline-block;
margin-left: -12px;
margin-top: 3px;
box-shadow: -1px 1px 2px rgba(255, 255, 255, 0.2), inset -1px 1px 1px rgba(0, 0, 0, 0.2);
background-color: #dedede;
background: -moz-linear-gradient(135deg, #dedede, #fcfcfc);
background: -o-linear-gradient(135deg, #fcfcfc, #dedede);
background: -webkit-gradient(linear, left top, right bottom, from(#fcfcfc), to(#dedede));
-moz-border-radius: 3px;
-webkit-border-radius: 3px;
border-radius: 3px;
-webkit-transform: rotate(45deg);
-moz-transform: rotate(45deg);
-ms-transform: rotate(45deg);
-o-transform: rotate(45deg);
transform: rotate(45deg);
}
.openerp ul.oe_form_status li.oe_active, .openerp ul.oe_form_status_clickable li.oe_active {
background-color: #729fcf;
background-image: -webkit-gradient(linear, left top, left bottom, from(#729fcf), to(#3465a4));
background-image: -webkit-linear-gradient(top, #729fcf, #3465a4);
background-image: -moz-linear-gradient(top, #729fcf, #3465a4);
background-image: -ms-linear-gradient(top, #729fcf, #3465a4);
background-image: -o-linear-gradient(top, #729fcf, #3465a4);
background-image: linear-gradient(to bottom, #729fcf, #3465a4);
}
.openerp ul.oe_form_status li.oe_active .arrow span, .openerp ul.oe_form_status_clickable li.oe_active .arrow span {
background-color: #3465a4;
background: -moz-linear-gradient(135deg, #3465a4, #729fcf);
background: -o-linear-gradient(135deg, #729fcf, #3465a4);
background: -webkit-gradient(linear, left top, right bottom, from(#729fcf), to(#3465a4));
}
.openerp ul.oe_form_status li.oe_active .label, .openerp ul.oe_form_status_clickable li.oe_active .label {
color: white;
text-shadow: 0 1px 1px #729fcf, 0 -1px 1px #3465a4;
}
.openerp ul.oe_form_status_clickable li {
cursor: pointer;
}
.openerp ul.oe_form_status_clickable li:hover {
background-color: #e8e8e8;
background-image: -webkit-gradient(linear, left top, left bottom, from(#e8e8e8), to(#cacaca));
background-image: -webkit-linear-gradient(top, #e8e8e8, #cacaca);
background-image: -moz-linear-gradient(top, #e8e8e8, #cacaca);
background-image: -ms-linear-gradient(top, #e8e8e8, #cacaca);
background-image: -o-linear-gradient(top, #e8e8e8, #cacaca);
background-image: linear-gradient(to bottom, #e8e8e8, #cacaca);
}
.openerp ul.oe_form_status_clickable li:hover .label {
text-shadow: 0 -1px 1px #fcfcfc, 0 1px 1px #dedede;
}
.openerp ul.oe_form_status_clickable li:hover .arrow span {
background-color: #e8e8e8;
background-image: -webkit-gradient(linear, left top, left bottom, from(#e8e8e8), to(#cacaca));
background-image: -webkit-linear-gradient(top, #e8e8e8, #cacaca);
background-image: -moz-linear-gradient(top, #e8e8e8, #cacaca);
background-image: -ms-linear-gradient(top, #e8e8e8, #cacaca);
background-image: -o-linear-gradient(top, #e8e8e8, #cacaca);
background-image: linear-gradient(to bottom, #e8e8e8, #cacaca);
}
.openerp ul.oe_form_status_clickable li .label {
color: #7c7bad;
}
.openerp ul.oe_form_status_clickable li.oe_active:hover {
background-color: #4c85c2;
background-image: -webkit-gradient(linear, left top, left bottom, from(#4c85c2), to(#284d7d));
background-image: -webkit-linear-gradient(top, #4c85c2, #284d7d);
background-image: -moz-linear-gradient(top, #4c85c2, #284d7d);
background-image: -ms-linear-gradient(top, #4c85c2, #284d7d);
background-image: -o-linear-gradient(top, #4c85c2, #284d7d);
background-image: linear-gradient(to bottom, #4c85c2, #284d7d);
}
.openerp ul.oe_form_status_clickable li.oe_active:hover .label {
text-shadow: 0 -1px 1px #729fcf, 0 1px 1px #3465a4;
}
.openerp ul.oe_form_status_clickable li.oe_active:hover .arrow span {
background-color: #284d7d;
background: -moz-linear-gradient(135deg, #284d7d, #4c85c2);
background: -o-linear-gradient(135deg, #4c85c2, #284d7d);
background: -webkit-gradient(linear, left top, right bottom, from(#4c85c2), to(#284d7d));
}
.openerp .oe_form .oe_form_field_one2many > .oe_view_manager .oe_list_pager_single_page {
display: none;
@ -2541,7 +2468,7 @@
.openerp .oe_list.oe_list_editable.oe_editing .oe_m2o_cm_button {
display: none;
}
.openerp .oe_list.oe_list_editable.oe_editing .oe_form_field input {
.openerp .oe_list.oe_list_editable.oe_editing .oe_form_field input, .openerp .oe_list.oe_list_editable.oe_editing .oe_form_field textarea {
height: 27px;
}
.openerp .oe_list.oe_list_editable.oe_editing .oe_form_field input, .openerp .oe_list.oe_list_editable.oe_editing .oe_form_field textarea {
@ -2551,9 +2478,6 @@
border: 1px solid #aaaaff;
margin: 0;
}
.openerp .oe_list.oe_list_editable.oe_editing .oe_form_field textarea {
height: 60px;
}
.openerp .oe_list.oe_list_editable.oe_editing .oe_form_field.oe_form_field_float input, .openerp .oe_list.oe_list_editable.oe_editing .oe_form_field.oe_form_view_integer input {
text-align: right;
}
@ -2570,10 +2494,13 @@
.openerp .oe_form .oe_form_field_many2many > .oe_list .oe_list_pager_single_page {
display: none;
}
.openerp .oe_list_buttons .oe_alternative {
visibility: hidden;
}
.openerp .oe_list_buttons .oe_list_save, .openerp .oe_list_buttons .oe_list_discard {
display: none;
}
.openerp .oe_list_buttons.oe_editing .oe_list_add, .openerp .oe_list_buttons.oe_editing .oe_list_button_import {
.openerp .oe_list_buttons.oe_editing .oe_list_add {
display: none;
}
.openerp .oe_list_buttons.oe_editing .oe_list_save {
@ -2582,6 +2509,9 @@
.openerp .oe_list_buttons.oe_editing .oe_list_discard {
display: inline;
}
.openerp .oe_list_buttons.oe_editing .oe_alternative {
visibility: visible;
}
.openerp .oe_list {
position: relative;
}
@ -2596,6 +2526,15 @@
margin: 0 !important;
padding: 0;
}
.openerp .oe_list .oe_list_content .oe_group_header {
background-color: #fcfcfc;
background-image: -webkit-gradient(linear, left top, left bottom, from(#fcfcfc), to(#dedede));
background-image: -webkit-linear-gradient(top, #fcfcfc, #dedede);
background-image: -moz-linear-gradient(top, #fcfcfc, #dedede);
background-image: -ms-linear-gradient(top, #fcfcfc, #dedede);
background-image: -o-linear-gradient(top, #fcfcfc, #dedede);
background-image: linear-gradient(to bottom, #fcfcfc, #dedede);
}
.openerp .oe_list_content {
width: 100%;
}
@ -2813,16 +2752,6 @@
float: right;
color: #333333;
}
.openerp .oe_semantic_html li {
list-style-type: disc;
display: list-item;
}
.openerp .oe_semantic_html ul {
padding-left: 1em;
}
.openerp .oe_semantic_html p {
color: #4c4c4c !important;
}
.kitten-mode-activated {
background-image: url(http://placekitten.com/g/1365/769);

View File

@ -124,19 +124,6 @@ $sheet-max-width: 860px
content: $icon-name
color: $color
@mixin ul-html-override()
margin: 0
padding: 0
ul, ol, li
margin: 0
padding: 0
li
list-style-type: none
@mixin semantic-html-override()
ul, ol
@include ul-html-override()
// }}}
@media print
@ -200,10 +187,6 @@ $sheet-max-width: 860px
vertical-align: middle
h4
margin: 4px 0
.oe_semantic_html_override
@include semantic-html-override
ul.oe_semantic_html_override
@include ul-html-override
// }}}
// Button style {{{
a.button:link, a.button:visited, button, input[type='submit'], .ui-dialog-buttonpane .ui-dialog-buttonset .ui-button
@ -283,7 +266,7 @@ $sheet-max-width: 860px
margin: 0
@include radius(0 0 2px 2px)
button
margin: 0
margin: 0 4px 0 0
.ui-dialog-buttonset
float: left
.ui-button
@ -379,15 +362,15 @@ $sheet-max-width: 860px
color: white
background: #DC5F59
button.oe_highlight
@include vertical-gradient(#dc5f59, #b33630)
@include box-shadow(none)
button.oe_highlight:active
@include vertical-gradient(#b33630, #dc5f59)
@include box-shadow(none)
border: 1px solid #795151
@include vertical-gradient(#df3f3f, #a21a1a)
@include box-shadow((0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 1px rgba(155, 155, 155, 0.4) inset))
button.oe_highlight:hover
@include vertical-gradient(#DF6B66, #BF3A33)
//@include vertical-gradient(lighten(#dc5f59, 3%), lighten(#b33630, 3%))
@include box-shadow(0 0 1px rgba(0, 0, 0, 0.2))
@include vertical-gradient(lighten(#e04f4f, 2%), lighten(#a21a1a, 2%))
button.oe_highlight:active
@include vertical-gradient(lighten(#a21a1a, 8%), darken(#df3f3f, 8%))
.oe_background_grey
background: #eee !important
.oe_form_dirty
.oe_highlight_on_dirty
@ -418,7 +401,7 @@ $sheet-max-width: 860px
max-height: 90px
max-width: 90px
@include radius(3px)
@include box-shadow(0 1px 3px rgba(0, 0, 0, 0.3))
@include box-shadow(0 1px 4px rgba(0, 0, 0, 0.4))
border: none
margin-bottom: 10px
.oe_avatar + div
@ -509,8 +492,6 @@ $sheet-max-width: 860px
padding: 0 16px
list-style: none
zoom: 1
@include ul-html-override
@include semantic-html-override
.oe_notebook.ui-corner-all
@include radius(0)
.oe_notebook:before, .oe_notebook:after
@ -568,6 +549,8 @@ $sheet-max-width: 860px
top: 26px
left: 0
z-index: 1
margin: 0
padding: 0
border: 1px solid $tag-border
background: white
padding: 4px 0
@ -583,6 +566,7 @@ $sheet-max-width: 860px
float: none
display: block
position: relative
margin: 0
padding: 2px 8px
> a
white-space: nowrap
@ -671,9 +655,10 @@ $sheet-max-width: 860px
text-align: center
font-size: 14px
height: 100%
li
ul, li
margin: 0
list-style-type: none
padding-bottom: 4px
padding: 0 0 4px 0
button
float: right
display: inline-block
@ -690,7 +675,7 @@ $sheet-max-width: 860px
font-family: "Lucida Grande", Helvetica, Verdana, Arial
border: 1px solid #999999
background: whitesmoke
@include box-shadow(inset 0 1px 4px rgba(0, 0, 0, 0.3))
@include box-shadow(inset 0 1px 4px rgba(0, 0, 0, 0.4))
@include radius(3px)
input
margin-bottom: 9px
@ -731,7 +716,6 @@ $sheet-max-width: 860px
text-align: left
@include radius(8px)
@include box-shadow(0 0 18px rgba(0, 0, 0, 0.9))
@include semantic-html-override
h2
margin-top: 0
font-size: 18px
@ -795,9 +779,7 @@ $sheet-max-width: 860px
.oe_topbar
width: 100%
height: 31px
border-top: solid 1px #d3d3d3
@include vertical-gradient(#646060, #262626)
@include semantic-html-override
.oe_topbar_item
display: block
padding: 5px 10px 7px
@ -848,7 +830,6 @@ $sheet-max-width: 860px
border-right: 1px solid $tag-border
text-shadow: 0 1px 1px white
padding-bottom: 16px
@include semantic-html-override
a.oe_logo
width: 220px
display: block
@ -899,6 +880,9 @@ $sheet-max-width: 860px
padding: 0
margin: 0
> li
list-style-type: none
padding: 0
margin: 0
float: left
> a
display: block
@ -928,7 +912,9 @@ $sheet-max-width: 860px
display: inline-block
li
position: relative
margin: 0
padding: 1px 0 1px 20px !important
list-style-type: none
a
display: block
color: #4c4c4c
@ -949,18 +935,18 @@ $sheet-max-width: 860px
.oe_menu_counter
float: right
text-shadow: 0 1px 1px rgba(0,0,0,0.2)
margin: 0px
margin: 1px
padding: 1px 4px
border: none
&:hover
cursor: pointer
border: 1px solid #C81010
@include box-shadow(0 0 2px #C81010)
@include transform(scale(1.1))
.oe_active
background: $link-color
border-top: 1px solid lightGray
border-bottom: 1px solid lightGray
border-bottom: 1px solid #dedede
text-shadow: 0 1px 1px rgba(0,0,0,0.2)
@include box-shadow(inset 0 1px 1px rgba(0, 0, 0, 0.2))
@include box-shadow((inset 0 1px 3px rgba(0, 0, 0, 0.2), inset 0 -1px 3px rgba(40, 40, 40, 0.2)))
background: $link-color
a
color: white
.oe_menu_label
@ -971,6 +957,7 @@ $sheet-max-width: 860px
.oe_menu_counter
background: #eee
color: $link-color
@include box-shadow(inset 0 1px 2px rgba(0, 0, 0, 0.2))
.oe_menu_toggler:before
width: 0
height: 0
@ -1002,6 +989,12 @@ $sheet-max-width: 860px
text-decoration: underline
> div
height: 100%
.oe_breadcrumb_item:not(:last-child)
display: inline-block
max-width: 7em
white-space: nowrap
overflow: hidden
text-overflow: ellipsis
// }}}
// ViewManager common {{{
.oe_view_manager
@ -1013,14 +1006,6 @@ $sheet-max-width: 860px
table.oe_view_manager_header
width: 100%
table-layout: fixed
ul
padding: 0
margin-right: 0
margin-top: 0
margin-bottom: 0
li
list-style-type: none
margin: 0
.oe_header_row
//min-height: 26px
//line-height: 26px
@ -1075,6 +1060,9 @@ $sheet-max-width: 860px
.oe_pager_value
float: left
margin-right: 8px
ul.oe_pager_group
padding: 0
margin: 0
.oe_pager_group
float: left
height: 24px
@ -1087,6 +1075,8 @@ $sheet-max-width: 860px
height: 24px
line-height: 24px
padding: 0
margin: 0
list-style-type: none
float: left
border-right: 1px solid #ababab
&:last-child
@ -1105,13 +1095,16 @@ $sheet-max-width: 860px
// }}}
// ViewManager.switches {{{
.oe_view_manager_switch
margin-left: 8px
padding: 0
margin: 0 0 0 8px
li
text-align: center
margin: 0
width: 24px
height: 24px
line-height: 16px
padding: 0
text-align: center
list-style-type: none
a
position: relative
.oe_vm_switch_list:after, .oe_vm_switch_tree:after
@ -1156,7 +1149,7 @@ $sheet-max-width: 860px
padding-top: 8px
// }}}
// ViewManager inline {{{
.oe_view_manager_inline
.oe_view_manager_inline, .oe_view_manager_inlineview
height: 100%
> .oe_view_manager_header
display: none
@ -1546,10 +1539,13 @@ $sheet-max-width: 860px
header
position: relative
border-bottom: 1px solid #cacaca
padding-left: 2px
@include vertical-gradient(#fcfcfc, #dedede)
ul
display: inline-block
float: right
.oe_form_button
margin: 3px 2px 1px
div.oe_chatter
min-width: 650px
max-width: $sheet-max-width
@ -1566,75 +1562,9 @@ $sheet-max-width: 860px
label
min-width: 150px
.oe_form_group_cell_label
padding: 2px 0
padding: 1px 0
.oe_form_group_cell div div
padding: 1px 0
ul.oe_form_steps, ul.oe_form_steps_clickable
display: inline-block
padding-right: 18px
li
display: inline-block
margin-right: -20px
@include vertical-gradient(#fcfcfc, #dedede)
&:first-child .label
border-left: 1px solid #cacaca
padding-left: 14px
&:last-child
border-right: 1px solid #cacaca
.label
padding-right: 14px
.arrow
display: none
.label
color: #4c4c4c
text-shadow: 0 1px 1px #fcfcfc, 0 -1px 1px #dedede
padding: 7px
display: inline-block
padding-left: 24px
margin: 0
position: relative
.arrow
width: 17px
display: inline-block
vertical-align: top
overflow: hidden
margin-left: -5px
span
position: relative
width: 24px
height: 24px
display: inline-block
margin-left: -12px
margin-top: 3px
box-shadow: -1px 1px 2px rgba(255,255,255,0.2), inset -1px 1px 1px rgba(0,0,0,0.2)
@include skew-gradient(#fcfcfc, #dedede)
@include radius(3px)
@include transform(rotate(45deg))
li.oe_active
@include vertical-gradient(#729fcf, #3465a4)
.arrow span
@include skew-gradient(#729fcf, #3465a4)
.label
color: white
text-shadow: 0 1px 1px #729fcf, 0 -1px 1px #3465a4
ul.oe_form_steps_clickable
li
cursor: pointer
&:hover
@include vertical-gradient(darken(#fcfcfc, 8%), darken(#dedede, 8%))
.label
text-shadow: 0 -1px 1px #fcfcfc, 0 1px 1px #dedede
.arrow span
@include vertical-gradient(darken(#fcfcfc, 8%), darken(#dedede, 8%))
.label
color: $link-color
li.oe_active
&:hover
@include vertical-gradient(darken(#729fcf, 10%), darken(#3465a4, 10%))
.label
text-shadow: 0 -1px 1px #729fcf, 0 1px 1px #3465a4
.arrow span
@include skew-gradient(darken(#729fcf, 10%), darken(#3465a4, 10%))
.oe_subtotal_footer
width: 1% !important
td.oe_form_group_cell
@ -1662,13 +1592,13 @@ $sheet-max-width: 860px
margin: 2px
td.oe_form_group_cell_label
border-right: 1px solid #ddd
padding: 4px 0px 4px 0px
padding: 2px 0px
label
line-height: 18px
display: block
min-width: 140px
td.oe_form_group_cell + .oe_form_group_cell
padding-left: 6px
padding: 2px 0 2px 8px
.oe_form_group
width: 100%
margin: 9px 0 9px 0
@ -1680,7 +1610,7 @@ $sheet-max-width: 860px
.oe_form_label_help[for], .oe_form_label[for]
font-weight: bold
white-space: nowrap
padding-right: 6px
padding-right: 8px
span
font-size: 80%
color: darkGreen
@ -1743,7 +1673,6 @@ $sheet-max-width: 860px
width: 100%
display: inline-block
padding: 2px 2px 2px 0px
line-height: 1em
input
margin: 0px
input[type="text"], input[type="password"], input[type="file"], select
@ -1877,9 +1806,75 @@ $sheet-max-width: 860px
margin-top: 10px
// }}}
// FormView.fieldstatus {{{
.oe_form_field_status
@include semantic-html-override
@include ul-html-override
ul.oe_form_status, ul.oe_form_status_clickable
display: inline-block
margin: 0
padding: 0 18px 0 0
li
display: inline-block
list-style-type: none
margin: 0 -20px 0 0
padding: 0
@include vertical-gradient(#fcfcfc, #dedede)
&:first-child .label
border-left: 1px solid #cacaca
padding-left: 14px
&:last-child
border-right: 1px solid #cacaca
.label
padding-right: 14px
.arrow
display: none
.label
color: #4c4c4c
text-shadow: 0 1px 1px #fcfcfc, 0 -1px 1px #dedede
padding: 7px
display: inline-block
padding-left: 24px
margin: 0
position: relative
.arrow
width: 17px
display: inline-block
vertical-align: top
overflow: hidden
margin-left: -5px
span
position: relative
width: 24px
height: 24px
display: inline-block
margin-left: -12px
margin-top: 3px
box-shadow: -1px 1px 2px rgba(255,255,255,0.2), inset -1px 1px 1px rgba(0,0,0,0.2)
@include skew-gradient(#fcfcfc, #dedede)
@include radius(3px)
@include transform(rotate(45deg))
li.oe_active
@include vertical-gradient(#729fcf, #3465a4)
.arrow span
@include skew-gradient(#729fcf, #3465a4)
.label
color: white
text-shadow: 0 1px 1px #729fcf, 0 -1px 1px #3465a4
ul.oe_form_status_clickable
li
cursor: pointer
&:hover
@include vertical-gradient(darken(#fcfcfc, 8%), darken(#dedede, 8%))
.label
text-shadow: 0 -1px 1px #fcfcfc, 0 1px 1px #dedede
.arrow span
@include vertical-gradient(darken(#fcfcfc, 8%), darken(#dedede, 8%))
.label
color: $link-color
li.oe_active
&:hover
@include vertical-gradient(darken(#729fcf, 10%), darken(#3465a4, 10%))
.label
text-shadow: 0 -1px 1px #729fcf, 0 1px 1px #3465a4
.arrow span
@include skew-gradient(darken(#729fcf, 10%), darken(#3465a4, 10%))
// }}}
// FormView.one2many {{{
.oe_form .oe_form_field_one2many > .oe_view_manager
@ -1943,14 +1938,12 @@ $sheet-max-width: 860px
.oe_m2o_cm_button
display: none
.oe_form_field
input
input, textarea
height: $row-height
input, textarea
@include radius(0)
border: 1px solid #aaf
margin: 0
textarea
height: 60px
&.oe_form_field_float,&.oe_form_view_integer
input
text-align: right
@ -1970,15 +1963,19 @@ $sheet-max-width: 860px
// }}}
// ListView {{{
.oe_list_buttons
.oe_alternative
visibility: hidden
.oe_list_save, .oe_list_discard
display: none
&.oe_editing
.oe_list_add, .oe_list_button_import
.oe_list_add
display: none
.oe_list_save
display: inline-block
.oe_list_discard
display: inline
.oe_alternative
visibility: visible
.oe_list
position: relative
@ -1992,6 +1989,8 @@ $sheet-max-width: 860px
position: absolute
margin: 0 !important // dammit
padding: 0
.oe_list_content .oe_group_header
@include vertical-gradient(#fcfcfc, #dedede)
.oe_list_content
width: 100%
@ -2051,6 +2050,7 @@ $sheet-max-width: 860px
> tr:nth-child(odd)
background-color: #f0f0fa
@include vertical-gradient(#f0f0fa, #eeeef6)
> tfoot
border-top: 2px solid #cacaca
border-bottom: 1px solid #cacaca
@ -2162,15 +2162,6 @@ $sheet-max-width: 860px
float: right
color: #333
// }}}
.oe_semantic_html // a style to use normal html
li
list-style-type: disc
display: list-item
ul
padding-left: 1em
p
color: #4C4C4C !important
// Kitten Mode {{{
.kitten-mode-activated
background-image: url(http://placekitten.com/g/1365/769)

View File

@ -1,46 +0,0 @@
.openerp .oe_import_grid {
border: none;
border-collapse: collapse;
}
.openerp .oe_import_grid-header .oe_import_grid-cell {
background: url(../img/gradientlinebg.gif) repeat-x #CCCCCC;
border-bottom: 1px solid #E3E3E3;
font-weight: bold;
text-align: left;
}
.openerp .oe_import_grid-row .oe_import_grid-cell {
border-bottom: 1px solid #E3E3E3;
}
.openerp .oe_import_no_result .oe_import_result {
display: none;
}
.openerp .oe_import fieldset {
cursor: pointer;
}
.openerp .oe_import fieldset legend:before {
content: '\25BC ';
}
.openerp .oe_import fieldset.oe_closed legend:before {
content: '\25B6 ';
}
.openerp .oe_import fieldset.oe_closed table {
display: none;
}
.openerp .oe_import .separator.horizontal {
font-weight: bold;
border-bottom-width: 1px;
margin: 6px 4px 6px 1px;
height: 20px;
}
.openerp .duplicate_fld{
background-color:#FF6666;
}
.openerp .select_fld{
background: none repeat scroll 0 0 white;
}
.openerp .ui-autocomplete {
max-height: 300px;
overflow-y: auto;
padding-right: 20px;
}

View File

@ -731,6 +731,8 @@ instance.web.Menu = instance.web.Widget.extend({
* @param {Number} id database id of the terminal menu to select
*/
open_menu: function (id) {
this.current_menu = id;
this.session.active_id = id;
var $clicked_menu, $sub_menu, $main_menu;
$clicked_menu = this.$el.add(this.$secondary_menus).find('a[data-menu=' + id + ']');
this.trigger('open_menu', id, $clicked_menu);
@ -803,16 +805,15 @@ instance.web.Menu = instance.web.Widget.extend({
}
}
}
this.open_menu(id);
this.current_menu = id;
this.session.active_id = id;
if (action_id) {
this.trigger('menu_click', {
action_id: action_id,
needaction: needaction,
id: id
id: id,
previous_menu_id: this.current_menu // Here we don't know if action will fail (in which case we have to revert menu)
}, $item);
}
this.open_menu(id);
},
/**
* Jquery event handler for menu click
@ -870,10 +871,12 @@ instance.web.UserMenu = instance.web.Widget.extend({
},
on_menu_settings: function() {
var self = this;
self.rpc("/web/action/load", { action_id: "base.action_res_users_my" }, function(result) {
result.result.res_id = instance.session.uid;
self.getParent().action_manager.do_action(result.result);
});
if (!this.getParent().has_uncommitted_changes()) {
self.rpc("/web/action/load", { action_id: "base.action_res_users_my" }, function(result) {
result.result.res_id = instance.session.uid;
self.getParent().action_manager.do_action(result.result);
});
}
},
on_menu_about: function() {
var self = this;
@ -951,7 +954,10 @@ instance.web.Client = instance.web.Widget.extend({
},
toggle_bars: function(value) {
this.$('tr:has(td.oe_topbar),.oe_leftbar').toggle(value);
}
},
has_uncommitted_changes: function() {
return false;
},
});
instance.web.WebClient = instance.web.Client.extend({
@ -963,6 +969,9 @@ instance.web.WebClient = instance.web.Client.extend({
start: function() {
var self = this;
return $.when(this._super()).pipe(function() {
self.$el.on('click', '.oe_logo', function() {
self.action_manager.do_action('home');
});
if (jQuery.param !== undefined && jQuery.deparam(jQuery.param.querystring()).kitten !== undefined) {
$("body").addClass("kitten-mode-activated");
if ($.blockUI) {
@ -1048,11 +1057,13 @@ instance.web.WebClient = instance.web.Client.extend({
},
on_logout: function() {
var self = this;
this.session.session_logout().then(function () {
$(window).unbind('hashchange', self.on_hashchange);
self.do_push_state({});
window.location.reload();
});
if (!this.has_uncommitted_changes()) {
this.session.session_logout().then(function () {
$(window).unbind('hashchange', self.on_hashchange);
self.do_push_state({});
window.location.reload();
});
}
},
bind_hashchange: function() {
var self = this;
@ -1095,14 +1106,15 @@ instance.web.WebClient = instance.web.Client.extend({
},
on_menu_action: function(options) {
var self = this;
this.rpc("/web/action/load", { action_id: options.action_id })
.then(function (result) {
return this.rpc("/web/action/load", { action_id: options.action_id })
.pipe(function (result) {
var action = result.result;
if (options.needaction) {
action.context.search_default_needaction_pending = true;
}
self.action_manager.clear_breadcrumbs();
self.action_manager.do_action(action);
return $.when(self.action_manager.do_action(action, null, true)).fail(function() {
self.menu.open_menu(options.previous_menu_id);
});
});
},
do_action: function(action) {
@ -1122,7 +1134,16 @@ instance.web.WebClient = instance.web.Client.extend({
$(".oe_webclient", this.$el).removeClass("oe_content_full_screen");
$("body").css({'overflow-y':'scroll'});
}
}
},
has_uncommitted_changes: function() {
var $e = $.Event('clear_uncommitted_changes');
instance.web.bus.trigger('clear_uncommitted_changes', $e);
if ($e.isDefaultPrevented()) {
return true;
} else {
return this._super.apply(this, arguments);
}
},
});
instance.web.EmbeddedClient = instance.web.Client.extend({

View File

@ -585,7 +585,7 @@ instance.session.on('module_loaded', this, function () {
/** Setup blockui */
if ($.blockUI) {
$.blockUI.defaults.baseZ = 1100;
$.blockUI.defaults.message = '<div class="oe_blockui_spin_container">';
$.blockUI.defaults.message = '<div class="openerp oe_blockui_spin_container" style="background-color: transparent;">';
$.blockUI.defaults.css.border = '0';
$.blockUI.defaults.css["background-color"] = '';
}
@ -597,7 +597,8 @@ var messages_by_seconds = function() {
[60, _t("Still loading...<br />Please be patient.")],
[120, _t("Don't leave yet,<br />it's still loading...")],
[300, _t("You may not believe it,<br />but the application is actually loading...")],
[600, _t("Take a minute to get a coffee,<br />because it's loading...")],
[420, _t("Take a minute to get a coffee,<br />because it's loading...")],
[600, _t("It's loading...<br />By the way, did you tried the kitten mode?")],
[3600, _t("Maybe you should consider pressing F5...")],
];
};

View File

@ -417,6 +417,7 @@ instance.web.data = {
var group_size = fixed_group[grouping_field + '_count'] || fixed_group.__count || 0;
var leaf_group = fixed_group.__context.group_by.length === 0;
this.attributes = {
folded: !!(fixed_group.__fold),
grouped_on: grouping_field,
// if terminal group (or no group) and group_by_no_leaf => use group.__count
length: group_size,
@ -494,6 +495,7 @@ instance.web.DataGroup = instance.web.CallbackEnabled.extend( /** @lends opener
{
__context: child_context,
__domain: group.model.domain(),
folded: group.get('folded'),
grouped_on: group.get('grouped_on'),
length: group.get('length'),
value: group.get('value'),

View File

@ -1,393 +0,0 @@
openerp.web.data_import = function(instance) {
var QWeb = instance.web.qweb,
_t = instance.web._t;
/**
* Safari does not deal well at all with raw JSON data being returned. As a
* result, we're going to cheat by using a pseudo-jsonp: instead of getting
* JSON data in the iframe, we're getting a ``script`` tag which consists of a
* function call and the returned data (the json dump).
*
* The function is an auto-generated name bound to ``window``, which calls
* back into the callback provided here.
*
* @param {Object} form the form element (DOM or jQuery) to use in the call
* @param {Object} attributes jquery.form attributes object
* @param {Function} callback function to call with the returned data
*/
function jsonp(form, attributes, callback) {
attributes = attributes || {};
var options = {jsonp: _.uniqueId('import_callback_')};
window[options.jsonp] = function () {
delete window[options.jsonp];
callback.apply(null, arguments);
};
if ('data' in attributes) {
_.extend(attributes.data, options);
} else {
_.extend(attributes, {data: options});
}
$(form).ajaxSubmit(attributes);
}
instance.web.DataImport = instance.web.Dialog.extend({
template: 'ImportDataView',
dialog_title: {toString: function () { return _t("Import Data"); }},
init: function(parent, dataset){
var self = this;
this._super(parent, {});
this.model = parent.model;
this.fields = [];
this.all_fields = [];
this.fields_with_defaults = [];
this.required_fields = null;
var convert_fields = function (root, prefix) {
prefix = prefix || '';
_(root.fields).each(function (f) {
self.all_fields.push(prefix + f.name);
if (f.fields) {
convert_fields(f, prefix + f.id + '/');
}
});
};
this.ready = $.Deferred.queue().then(function () {
self.required_fields = _(self.fields).chain()
.filter(function (field) {
return field.required &&
!_.include(self.fields_with_defaults, field.id); })
.pluck('id')
.uniq()
.value();
convert_fields(self);
self.all_fields.sort();
});
},
start: function() {
var self = this;
this._super();
this.open({
buttons: [
{text: _t("Close"), click: function() { self.destroy(); }},
{text: _t("Import File"), click: function() { self.do_import(); }, 'class': 'oe_import_dialog_button'}
],
close: function(event, ui) {
self.destroy();
}
});
this.toggle_import_button(false);
this.$el.find('#csvfile').change(this.on_autodetect_data);
this.$el.find('fieldset').change(this.on_autodetect_data);
this.$el.delegate('fieldset legend', 'click', function() {
$(this).parent().toggleClass('oe_closed');
});
this.ready.push(new instance.web.DataSet(this, this.model).call(
'fields_get', [], function (fields) {
self.graft_fields(fields);
self.ready.push(new instance.web.DataSet(self, self.model)
.default_get(_.pluck(self.fields, 'id')).then(function (fields) {
_.each(fields, function(val, key) {
if (val) {
self.fields_with_defaults.push(key);
}
});
})
)
}));
},
graft_fields: function (fields, parent, level) {
parent = parent || this;
level = level || 0;
var self = this;
if (level === 0) {
parent.fields.push({
id: 'id',
name: 'id',
string: _t('External ID'),
required: false
});
}
_(fields).each(function (field, field_name) {
// Ignore spec for id field
// Don't import function fields (function and related)
if (field_name === 'id') {
return;
}
// Skip if there's no state which could disable @readonly,
// if a field is ever always readonly we can't import it
if (field.readonly) {
// no states at all
if (_.isEmpty(field.states)) { return; }
// no state altering @readonly
if (!_.any(field.states, function (modifiers) {
return _(modifiers).chain().pluck(0).contains('readonly').value();
})) { return; }
}
var f = {
id: field_name,
name: field_name,
string: field.string,
required: field.required
};
switch (field.type) {
case 'many2many':
case 'many2one':
// push a copy for the bare many2one field, to allow importing
// using name_search too - even if we default to exporting the XML ID
var many2one_field = _.extend({}, f)
parent.fields.push(many2one_field);
f.name += '/id';
break;
case 'one2many':
f.name += '/id';
f.fields = [];
// only fetch sub-fields to a depth of 2 levels
if (level < 2) {
self.ready.push(new instance.web.DataSet(self, field.relation).call(
'fields_get', [], function (fields) {
self.graft_fields(fields, f, level+1);
}));
}
break;
}
parent.fields.push(f);
});
},
toggle_import_button: function (newstate) {
instance.web.dialog(this.$el, 'widget')
.find('.oe_import_dialog_button')
.button('option', 'disabled', !newstate);
},
do_import: function() {
if(!this.$el.find('#csvfile').val()) { return; }
var lines_to_skip = parseInt(this.$el.find('#csv_skip').val(), 10);
var with_headers = this.$el.find('#file_has_headers').prop('checked');
if (!lines_to_skip && with_headers) {
lines_to_skip = 1;
}
var indices = [], fields = [];
this.$el.find(".sel_fields").each(function(index, element) {
var val = element.value;
if (!val) {
return;
}
indices.push(index);
fields.push(val);
});
jsonp(this.$el.find('#import_data'), {
url: '/web/import/import_data',
data: {
model: this.model,
meta: JSON.stringify({
skip: lines_to_skip,
indices: indices,
fields: fields
})
}
}, this.on_import_results);
},
on_autodetect_data: function() {
if(!this.$el.find('#csvfile').val()) { return; }
jsonp(this.$el.find('#import_data'), {
url: '/web/import/detect_data'
}, this.on_import_results);
},
on_import_results: function(results) {
this.$el.find('#result').empty();
var headers, result_node = this.$el.find("#result");
if (results['error']) {
result_node.append(QWeb.render('ImportView.error', {
'error': results['error']}));
this.$el.find('fieldset').removeClass('oe_closed');
return;
}
if (results['success']) {
if (this.getParent().getParent().active_view == "list") {
this.getParent().reload_content();
}
this.destroy();
return;
}
if (results['records']) {
var lines_to_skip = parseInt(this.$el.find('#csv_skip').val(), 10),
with_headers = this.$el.find('#file_has_headers').prop('checked');
headers = with_headers ? results.records[0] : null;
result_node.append(QWeb.render('ImportView.result', {
'headers': headers,
'records': lines_to_skip ? results.records.slice(lines_to_skip)
: with_headers ? results.records.slice(1)
: results.records
}));
this.$el.find('fieldset').addClass('oe_closed');
}
this.$el.find('form').removeClass('oe_import_no_result');
this.$el.delegate('.oe_m2o_drop_down_button', 'click', function () {
$(this).prev('input').focus();
});
var self = this;
this.ready.then(function () {
var $fields = self.$el.find('.sel_fields').bind('blur', function () {
if (this.value && !_(self.all_fields).contains(this.value)) {
this.value = '';
}
}).autocomplete({
minLength: 0,
source: self.all_fields,
change: self.on_check_field_values
}).focus(function () {
$(this).autocomplete('search');
});
// Column auto-detection
_(headers).each(function (header, index) {
var field_name = self.match_column_to_field(header);
if (field_name) {
$fields.eq(index).val(field_name);
}
});
self.on_check_field_values();
});
},
/**
* Returns the name of the field (nested) matching the provided column name
*
* @param {String} name column name to look for
* @param {Array} [fields] fields to look into for the provided name
* @returns {String|undefined}
*/
match_column_to_field: function (name, fields) {
fields = fields || this.fields;
var f;
f = _(fields).detect(function (field) {
return field.name === name
});
if (!f) {
f = _(fields).detect(function (field) {
// TODO: levenshtein between header and field.string
return field.string.toLowerCase() === name.toLowerCase();
});
}
if (f) { return f.name; }
// if ``name`` is a path (o2m), we need to recurse through its .fields
var index = name.indexOf('/');
if (index === -1) { return undefined; }
// Get the first path section, try to find the matching field
var column_name = name.substring(0, index);
f = _(fields).detect(function (field) {
// field.name for o2m is $foo/id, so we want to match on id
return field.id === column_name;
});
if (!f) {
f = _(fields).detect(function (field) {
return field.string.toLowerCase() === column_name.toLowerCase();
});
}
if (!f) { return undefined; }
// if we found a matching field for the first path section, recurse in
// its own .fields to try and get the rest of the path matched
var rest = this.match_column_to_field(
name.substring(index+1), f.fields);
if (!rest) { return undefined; }
return f.id + '/' + rest;
},
/**
* Looks through all the field selections, and tries to find if two
* (or more) columns were matched to the same model field.
*
* Returns a map of the multiply-mapped fields to an array of offending
* columns (not actually columns, but the inputs containing the same field
* names).
*
* Also has the side-effect of marking the discovered inputs with the class
* ``duplicate_fld``.
*
* @returns {Object<String, Array<String>>} map of duplicate field matches to same-valued inputs
*/
find_duplicate_fields: function() {
// Maps values to DOM nodes, in order to discover duplicates
var values = {}, duplicates = {};
this.$el.find(".sel_fields").each(function(index, element) {
var value = element.value;
var $el = $(element).removeClass('duplicate_fld');
if (!value) { return; }
if (!(value in values)) {
values[value] = element;
} else {
var same_valued_field = values[value];
if (value in duplicates) {
duplicates[value].push(element);
} else {
duplicates[value] = [same_valued_field, element];
}
$el.add(same_valued_field).addClass('duplicate_fld');
}
});
return duplicates;
},
on_check_field_values: function () {
this.$el.find("#message, #msg").remove();
var required_valid = this.check_required();
var duplicates = this.find_duplicate_fields();
if (_.isEmpty(duplicates)) {
this.toggle_import_button(required_valid);
} else {
var $err = $('<div id="msg" style="color: red;">'+_t("Destination fields should only be selected once, some fields are selected more than once:")+'</div>').insertBefore(this.$el.find('#result'));
var $dupes = $('<dl>').appendTo($err);
_(duplicates).each(function(elements, value) {
$('<dt>').text(value).appendTo($dupes);
_(elements).each(function(element) {
var cell = $(element).closest('td');
$('<dd>').text(cell.parent().children().index(cell)).appendTo($dupes);
});
});
this.toggle_import_button(false);
}
},
check_required: function() {
var self = this;
if (!self.required_fields.length) { return true; }
// Resolve field id based on column name, as there may be
// several ways to provide the value for a given field and
// thus satisfy the requirement.
// (e.g. m2o_id or m2o_id/id columns may be provided)
var resolve_field_id = function(column_name) {
var f = _.detect(self.fields, function(field) {
return field.name === column_name;
});
if (!f) { return column_name; };
return f.id;
};
var selected_fields = _(this.$el.find('.sel_fields').get()).chain()
.pluck('value')
.compact()
.map(resolve_field_id)
.value();
var missing_fields = _.difference(this.required_fields, selected_fields);
if (missing_fields.length) {
this.$el.find("#result").before('<div id="message" style="color:red">' + _t("*Required Fields are not selected :") + missing_fields + '.</div>');
return false;
}
return true;
},
destroy: function() {
this.$el.remove();
this._super();
}
});
};

View File

@ -92,6 +92,11 @@ instance.web.FormView = instance.web.View.extend(instance.web.form.FieldManagerM
self.on("change:actual_mode", self, self.init_pager);
self.init_pager();
});
instance.web.bus.on('clear_uncommitted_changes', this, function(e) {
if (!this.can_be_discarded()) {
e.preventDefault();
}
});
},
destroy: function() {
_.each(this.get_widgets(), function(w) {
@ -316,7 +321,7 @@ instance.web.FormView = instance.web.View.extend(instance.web.form.FieldManagerM
}
this.datarecord = record;
this._actualize_mode();
this.set({ 'title' : record.id ? record.display_name : "New record" });
this.set({ 'title' : record.id ? record.display_name : "New" });
if (this.qweb) {
this.kill_current_form();
@ -748,7 +753,13 @@ instance.web.FormView = instance.web.View.extend(instance.web.form.FieldManagerM
return def.promise();
},
can_be_discarded: function() {
return !this.$el.is('.oe_form_dirty') || confirm(_t("Warning, the record has been modified, your changes will be discarded."));
if (this.$el.is('.oe_form_dirty')) {
if (!confirm(_t("Warning, the record has been modified, your changes will be discarded.\n\nAre you sure you want to leave this page ?"))) {
return false;
}
this.$el.removeClass('oe_form_dirty');
}
return true;
},
/**
* Triggers saving the form's record. Chooses between creating a new
@ -1388,6 +1399,10 @@ instance.web.form.FormRenderingEngine = instance.web.form.FormRenderingEngineInt
if (! page.__ic)
return;
page.__ic.on("change:effective_invisible", null, function() {
if (!page.__ic.get('effective_invisible')) {
$new_notebook.tabs('select', i);
return;
}
var current = $new_notebook.tabs("option", "selected");
if (! pages[current].__ic || ! pages[current].__ic.get("effective_invisible"))
return;
@ -2387,6 +2402,9 @@ instance.web.form.FieldText = instance.web.form.AbstractField.extend(instance.we
*/
instance.web.form.FieldTextHtml = instance.web.form.AbstractField.extend(instance.web.form.ReinitializeFieldMixin, {
template: 'FieldTextHtml',
init: function() {
this._super.apply(this, arguments);
},
initialize_content: function() {
var self = this;
if (! this.get("effective_readonly")) {
@ -2419,7 +2437,7 @@ instance.web.form.FieldTextHtml = instance.web.form.AbstractField.extend(instanc
},
render_value: function() {
if (! this.get("effective_readonly")) {
this.$textarea.val(this.get('value'));
this.$textarea.val(this.get('value') || '');
this._updating_editor = true;
this.$cleditor.updateFrame();
this._updating_editor = false;
@ -2694,8 +2712,10 @@ instance.web.form.CompletionFieldMixin = {
_create_context: function(name) {
var tmp = {};
var field = (this.options || {}).create_name_field;
if (field !== false && (this.options || {}).quick_create !== false)
tmp["default_" + field] = name || "name";
if (field === undefined)
field = "name";
if (field !== false && name && (this.options || {}).quick_create !== false)
tmp["default_" + field] = name;
return tmp;
},
};
@ -2755,7 +2775,8 @@ instance.web.form.FieldMany2One = instance.web.form.AbstractField.extend(instanc
this.$drop_down = this.$el.find(".oe_m2o_drop_down_button");
this.$follow_button = $(".oe_m2o_cm_button", this.$el);
this.$follow_button.click(function() {
this.$follow_button.click(function(ev) {
ev.preventDefault();
if (!self.get('value')) {
self.focus();
return;
@ -2933,14 +2954,10 @@ instance.web.form.FieldMany2One = instance.web.form.AbstractField.extend(instanc
var lines = _.escape(str).split("\n");
var link = "";
var follow = "";
if (! this.options.highlight_first_line) {
link = lines.join("<br />");
} else {
link = lines[0];
follow = _.rest(lines).join("<br />");
if (follow)
link += "<br />";
}
link = lines[0];
follow = _.rest(lines).join("<br />");
if (follow)
link += "<br />";
var $link = this.$el.find('.oe_form_uri')
.unbind('click')
.html(link);

View File

@ -21,8 +21,6 @@ instance.web.ListView = instance.web.View.extend( /** @lends instance.web.ListVi
// whether the view rows can be reordered (via vertical drag & drop)
'reorderable': true,
'action_buttons': true,
// if true, the 'Import', 'Export', etc... buttons will be shown
'import_enabled': true,
},
/**
* Core class for list-type displays.
@ -281,7 +279,7 @@ instance.web.ListView = instance.web.View.extend( /** @lends instance.web.ListVi
self.reload_content();
});
// Add button and Import link
// Add button
if (!this.$buttons) {
this.$buttons = $(QWeb.render("ListView.buttons", {'widget':self}));
if (this.options.$buttons) {
@ -292,10 +290,6 @@ instance.web.ListView = instance.web.View.extend( /** @lends instance.web.ListVi
this.$buttons.find('.oe_list_add')
.click(this.proxy('do_add_record'))
.prop('disabled', grouped);
this.$buttons.on('click', '.oe_list_button_import', function() {
self.on_sidebar_import();
return false;
});
}
// Pager
@ -358,7 +352,6 @@ instance.web.ListView = instance.web.View.extend( /** @lends instance.web.ListVi
this.sidebar = new instance.web.Sidebar(this);
this.sidebar.appendTo(this.options.$sidebar);
this.sidebar.add_items('other', _.compact([
self.is_action_enabled('create') && { label: _t("Import"), callback: this.on_sidebar_import },
{ label: _t("Export"), callback: this.on_sidebar_export },
self.is_action_enabled('delete') && { label: _t('Delete'), callback: this.do_delete_selected }
]));
@ -480,7 +473,7 @@ instance.web.ListView = instance.web.View.extend( /** @lends instance.web.ListVi
if (this.embedded_view) {
return $.Deferred().then(callback).resolve(this.embedded_view);
} else {
return this.rpc('/web/listview/load', {
return this.rpc('/web/view/load', {
model: this.model,
view_id: this.view_id,
view_type: "tree",
@ -1265,7 +1258,7 @@ instance.web.ListView.Groups = instance.web.Class.extend( /** @lends instance.we
self.bind_child_events(child);
child.datagroup = group;
var $row = child.$row = $('<tr>');
var $row = child.$row = $('<tr class="oe_group_header">');
if (group.openable && group.length) {
$row.click(function (e) {
if (!$row.data('open')) {

View File

@ -20,7 +20,7 @@ instance.web.ActionManager = instance.web.Widget.extend({
},
start: function() {
this._super.apply(this, arguments);
this.$el.on('click', '.oe_breadcrumb_item', this.on_breadcrumb_clicked);
this.$el.on('click', 'a.oe_breadcrumb_item', this.on_breadcrumb_clicked);
},
dialog_stop: function () {
if (this.dialog) {
@ -95,13 +95,15 @@ instance.web.ActionManager = instance.web.Widget.extend({
break;
}
}
var subindex = $e.parent().find('.oe_breadcrumb_item[data-id=' + $e.data('id') + ']').index($e);
var subindex = $e.parent().find('a.oe_breadcrumb_item[data-id=' + $e.data('id') + ']').index($e);
this.select_breadcrumb(index, subindex);
},
select_breadcrumb: function(index, subindex) {
for (var i = this.breadcrumbs.length - 1; i >= 0; i--) {
if (i > index) {
this.remove_breadcrumb(i);
if (this.remove_breadcrumb(i) === false) {
return false;
}
}
}
var item = this.breadcrumbs[index];
@ -110,8 +112,10 @@ instance.web.ActionManager = instance.web.Widget.extend({
return true;
},
clear_breadcrumbs: function() {
while (this.breadcrumbs.length) {
this.remove_breadcrumb(0);
for (var i = this.breadcrumbs.length - 1; i >= 0; i--) {
if (this.remove_breadcrumb(0) === false) {
break;
}
}
},
remove_breadcrumb: function(index) {
@ -121,9 +125,17 @@ instance.web.ActionManager = instance.web.Widget.extend({
return item.widget === it.widget;
});
if (!dups.length) {
item.destroy();
if (this.getParent().has_uncommitted_changes()) {
this.inner_widget = item.widget;
this.breadcrumbs.splice(index, 0, item);
return false;
} else {
item.destroy();
}
}
}
var last_widget = this.breadcrumbs.slice(-1)[0];
this.inner_widget = last_widget && last_widget.widget;
},
get_title: function() {
var titles = [];
@ -136,7 +148,7 @@ instance.web.ActionManager = instance.web.Widget.extend({
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);
titles.push(_.str.sprintf('<span class="oe_breadcrumb_item">%s</span>', label));
} else {
titles.push(_.str.sprintf('<a href="#" class="oe_breadcrumb_item" data-id="%s">%s</a>', item.id, label));
}
@ -208,19 +220,19 @@ instance.web.ActionManager = instance.web.Widget.extend({
}
});
},
do_action: function(action, on_close) {
do_action: function(action, on_close, clear_breadcrumbs) {
if (_.isString(action) && instance.web.client_actions.contains(action)) {
var action_client = { type: "ir.actions.client", tag: action };
return this.do_action(action_client);
return this.do_action(action_client, on_close, clear_breadcrumbs);
} else 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);
return self.rpc("/web/action/load", { action_id: action }).pipe(function(result) {
return self.do_action(result.result, on_close, clear_breadcrumbs);
});
}
if (!action.type) {
console.error("No type for action", action);
return null;
return $.Deferred().reject();
}
var type = action.type.replace(/\./g,'_');
var popup = action.target === 'new';
@ -235,16 +247,23 @@ instance.web.ActionManager = instance.web.Widget.extend({
}, action.flags || {});
if (!(type in this)) {
console.error("Action manager can't handle action of type " + action.type, action);
return null;
return $.Deferred().reject();
}
return this[type](action, on_close);
return this[type](action, on_close, clear_breadcrumbs);
},
null_action: function() {
this.dialog_stop();
this.clear_breadcrumbs();
},
ir_actions_common: function(action, on_close) {
ir_actions_common: function(action, on_close, clear_breadcrumbs) {
var self = this, klass, widget, post_process;
if (this.inner_widget && (action.type === 'ir.actions.client' || action.target !== 'new')) {
if (this.getParent().has_uncommitted_changes()) {
return $.Deferred().reject();
} else if (clear_breadcrumbs) {
this.clear_breadcrumbs();
}
}
if (action.type === 'ir.actions.client') {
var ClientWidget = instance.web.client_actions.get_object(action.tag);
widget = new ClientWidget(this, action.params);
@ -287,17 +306,17 @@ instance.web.ActionManager = instance.web.Widget.extend({
this.inner_widget.appendTo(this.$el);
}
},
ir_actions_act_window: function (action, on_close) {
ir_actions_act_window: function (action, on_close, clear_breadcrumbs) {
var self = this;
if (action.target !== 'new') {
if(action.menu_id) {
this.dialog_stop();
return this.getParent().do_action(action, function () {
instance.webclient.menu.open_menu(action.menu_id);
});
}, clear_breadcrumbs);
}
}
return this.ir_actions_common(action, on_close);
return this.ir_actions_common(action, on_close, clear_breadcrumbs);
},
ir_actions_client: function (action, on_close) {
return this.ir_actions_common(action, on_close);
@ -314,7 +333,7 @@ instance.web.ActionManager = instance.web.Widget.extend({
action_id: action.id,
context: action.context || {}
}).then(function (action) {
self.do_action(action, on_closed)
self.do_action(action, on_closed, clear_breadcrumbs)
});
},
ir_actions_report_xml: function(action, on_closed) {
@ -412,8 +431,10 @@ instance.web.ViewManager = instance.web.Widget.extend({
var self = this;
var view = this.views[view_type];
var view_promise;
if(!view)
var form = this.views['form'];
if (!view || (form && form.controller && !form.controller.can_be_discarded())) {
return $.Deferred().reject();
}
if (!no_store) {
this.views_history.push(view_type);
@ -545,7 +566,8 @@ instance.web.ViewManager = instance.web.Widget.extend({
}
return controller.get('title');
});
if (next && next.action && next.action.res_id && self.active_view === 'form' && self.model === next.action.res_model && id === next.action.res_id) {
if (next && next.action && next.action.res_id && self.dataset &&
self.active_view === 'form' && self.dataset.model === next.action.res_model && id === next.action.res_id) {
// If the current active view is a formview and the next item in the breadcrumbs
// is an action on same object (model / res_id), then we omit the current formview's title
titles.pop();
@ -732,6 +754,14 @@ instance.web.ViewManagerAction = instance.web.ViewManager.extend({
var dialog = new instance.web.Dialog(this, { title: _t("Fields View Get"), width: '95%' }).open();
$('<pre>').text(instance.web.json_node_to_xml(current_view.fields_view.arch, true)).appendTo(dialog.$el);
break;
case 'tests':
this.do_action({
name: "JS Tests",
target: 'new',
type : 'ir.actions.act_url',
url: '/web/static/test/test.html'
})
break;
case 'perm_read':
var ids = current_view.get_selected_ids();
if (ids.length === 1) {
@ -807,6 +837,21 @@ instance.web.ViewManagerAction = instance.web.ViewManager.extend({
}
});
break;
case 'print_workflow':
if (current_view.get_selected_ids && current_view.get_selected_ids().length == 1) {
instance.web.blockUI();
var action = {
context: { active_ids: current_view.get_selected_ids() },
report_name: "workflow.instance.graph",
datas: {
model: this.dataset.model,
id: current_view.get_selected_ids()[0],
nested: true,
}
};
this.session.get_file({ url: '/web/report', data: {action: JSON.stringify(action)}, complete: instance.web.unblockUI });
}
break;
default:
if (val) {
console.log("No debug handler for ", val);
@ -1220,9 +1265,6 @@ instance.web.View = instance.web.Widget.extend({
},
do_search: function(view) {
},
on_sidebar_import: function() {
new instance.web.DataImport(this, this.dataset).open();
},
on_sidebar_export: function() {
new instance.web.DataExport(this, this.dataset).open();
},

View File

@ -79,7 +79,7 @@
</form>
<div class="oe_login_footer">
<a href="#" class="oe_login_manage_db">Manage Databases</a> |
<a href="http://www.openerp.com">Powered by <span>OpenERP</span></a>
<a href="http://www.openerp.com" target="_blank">Powered by <span>OpenERP</span></a>
</div>
</div>
</div>
@ -404,13 +404,10 @@
</tr>
<tr>
<td class="oe_leftbar" valign="top">
<t t-js="d">
d.url = '/' + (window.location.search || '');
</t>
<a t-att-href="url" class="oe_logo"><img t-att-src='_s + "/web/static/src/img/logo.png"'/></a>
<a class="oe_logo" href="#"><img t-att-src='_s + "/web/static/src/img/logo.png"'/></a>
<div class="oe_secondary_menus_container"/>
<div class="oe_footer">
Powered by <a href="http://www.openerp.com"><span>Open</span>ERP</a>
Powered by <a href="http://www.openerp.com" target="_blank"><span>Open</span>ERP</a>
</div>
</td>
<td class="oe_application">
@ -429,10 +426,10 @@
<t t-name="ViewManager">
<div class="oe_view_manager">
<table class="oe_view_manager_header">
<col width="20%"/>
<col width="25%"/>
<col width="20%"/>
<col width="35%"/>
<col width="15%"/>
<col width="30%"/>
<tr class="oe_header_row oe_header_row_top">
<td colspan="2">
<h2 class="oe_view_title" t-if="widget.flags.display_title !== false">
@ -479,6 +476,7 @@
<option value="">Debug View#<t t-esc="view.fields_view.view_id"/></option>
<option t-if="view_manager.active_view === 'form'" value="perm_read" data-views="form,page">View Log (perm_read)</option>
<option t-if="view_manager.active_view === 'form'" value="toggle_layout_outline">Toggle Form Layout Outline</option>
<option value="tests">JS Tests</option>
<option value="fields">View Fields</option>
<option value="fvg">Fields View Get</option>
<option value="manage_filters">Manage Filters</option>
@ -489,6 +487,7 @@
<option t-if="view_manager.searchview" value="edit" data-model="ir.ui.view" t-att-data-id="view_manager.searchview.view_id">Edit SearchView</option>
<option t-if="view_manager.action" value="edit" t-att-data-model="view_manager.action.type" t-att-data-id="view_manager.action.id">Edit Action</option>
<option value="edit_workflow">Edit Workflow</option>
<option value="print_workflow">Print Workflow</option>
</t>
</t>
<t t-name="ViewManagerDebugViewLog">
@ -654,9 +653,6 @@
<button type="button" class="oe_button oe_list_add oe_highlight">
<t t-esc="widget.options.addable"/>
</button>
<span class="oe_alternative" t-if="widget.options.import_enabled">
<span class="oe_fade">or</span> <a href="#" class="oe_bold oe_list_button_import">Import</a>
</span>
</t>
</div>
<t t-name="ListView.pager">
@ -700,9 +696,10 @@
<t t-jquery="button.oe_list_add" t-operation="after">
<button class="oe_button oe_list_save oe_highlight"
type="button">Save</button>
</t>
<t t-jquery="a.oe_list_button_import" t-operation="after">
<a href="#" class="oe_bold oe_list_discard">Discard</a>
<span class="oe_alternative">
<span class="oe_fade">or</span>
<a href="#" class="oe_bold oe_list_discard">Discard</a>
</span>
</t>
</t>
<t t-extend="ListView.row">
@ -1066,7 +1063,7 @@
</span>
</t>
<t t-name="FieldStatus">
<ul t-att-class="'oe_form_field_status ' + (widget.options.clickable ? 'oe_form_steps_clickable' : 'oe_form_steps')" t-att-style="widget.node.attrs.style"/>
<ul t-att-class="'oe_form_field_status ' + (widget.options.clickable ? 'oe_form_status_clickable' : 'oe_form_status')" t-att-style="widget.node.attrs.style"/>
</t>
<t t-name="FieldStatus.content">
<t t-foreach="widget.selection" t-as="i">

View File

@ -192,7 +192,7 @@ $(document).ready(function () {
var records = {};
_.extend(instance.session.responses, {
'/web/listview/load': function () {
'/web/view/load': function () {
return {result: {
type: 'tree',
fields: {
@ -268,7 +268,7 @@ $(document).ready(function () {
setup: function () {
baseSetup();
_.extend(instance.session.responses, {
'/web/listview/load': function () {
'/web/view/load': function () {
return {result: {
type: 'tree',
fields: {

View File

@ -1 +0,0 @@
# -*- coding: utf-8 -*-

View File

@ -1,81 +0,0 @@
# -*- coding: utf-8 -*-
import mock
import unittest2
import web.controllers.main
class TestDataSetController(unittest2.TestCase):
def setUp(self):
self.dataset = web.controllers.main.DataSet()
self.request = mock.Mock()
self.read = self.request.session.model().read
self.search = self.request.session.model().search
@unittest2.skip
def test_empty_find(self):
self.search.return_value = []
self.read.return_value = []
self.assertFalse(self.dataset.do_search_read(self.request, 'fake.model'))
self.read.assert_called_once_with([], False, self.request.context)
@unittest2.skip
def test_regular_find(self):
self.search.return_value = [1, 2, 3]
self.dataset.do_search_read(self.request, 'fake.model')
self.read.assert_called_once_with([1, 2, 3], False,
self.request.context)
@unittest2.skip
def test_ids_shortcut(self):
self.search.return_value = [1, 2, 3]
self.read.return_value = [
{'id': 1, 'name': 'foo'},
{'id': 2, 'name': 'bar'},
{'id': 3, 'name': 'qux'}
]
self.assertEqual(
self.dataset.do_search_read(self.request, 'fake.model', ['id']),
[{'id': 1}, {'id': 2}, {'id': 3}])
self.assertFalse(self.read.called)
@unittest2.skip
def test_get(self):
self.read.return_value = [
{'id': 1, 'name': 'baz'},
{'id': 3, 'name': 'foo'},
{'id': 2, 'name': 'bar'}
]
result = self.dataset.do_get(
self.request, 'fake.model', [3, 2, 1])
self.read.assert_called_once_with(
[3, 2, 1], False)
self.assertFalse(self.search.called)
self.assertEqual(
result,
[
{'id': 3, 'name': 'foo'},
{'id': 2, 'name': 'bar'},
{'id': 1, 'name': 'baz'}
]
)
def test_get_missing_result(self):
self.read.return_value = [
{'id': 1, 'name': 'baz'},
{'id': 2, 'name': 'bar'}
]
result = self.dataset.do_get(
self.request, 'fake.model', [3, 2, 1])
self.assertEqual(
result,
[
{'id': 2, 'name': 'bar'},
{'id': 1, 'name': 'baz'}
]
)

View File

@ -1,248 +0,0 @@
import copy
import xml.etree.ElementTree
import mock
import unittest2
import simplejson
import web.controllers.main
from ..common import nonliterals, session as s
def field_attrs(fields_view_get, fieldname):
(field,) = filter(lambda f: f['attrs'].get('name') == fieldname,
fields_view_get['arch']['children'])
return field['attrs']
#noinspection PyCompatibility
class DomainsAndContextsTest(unittest2.TestCase):
def setUp(self):
self.view = web.controllers.main.View()
def test_convert_literal_domain(self):
e = xml.etree.ElementTree.Element(
'field', domain=" [('somefield', '=', 3)] ")
self.view.parse_domains_and_contexts(e, None)
self.assertEqual(
e.get('domain'),
[('somefield', '=', 3)])
def test_convert_complex_domain(self):
e = xml.etree.ElementTree.Element(
'field',
domain="[('account_id.type','in',['receivable','payable']),"
"('reconcile_id','=',False),"
"('reconcile_partial_id','=',False),"
"('state', '=', 'valid')]"
)
self.view.parse_domains_and_contexts(e, None)
self.assertEqual(
e.get('domain'),
[('account_id.type', 'in', ['receivable', 'payable']),
('reconcile_id', '=', False),
('reconcile_partial_id', '=', False),
('state', '=', 'valid')]
)
def test_retrieve_nonliteral_domain(self):
session = mock.Mock(spec=s.OpenERPSession)
session.domains_store = {}
domain_string = ("[('month','=',(datetime.date.today() - "
"datetime.timedelta(365/12)).strftime('%%m'))]")
e = xml.etree.ElementTree.Element(
'field', domain=domain_string)
self.view.parse_domains_and_contexts(e, session)
self.assertIsInstance(e.get('domain'), nonliterals.Domain)
self.assertEqual(
nonliterals.Domain(
session, key=e.get('domain').key).get_domain_string(),
domain_string)
def test_convert_literal_context(self):
e = xml.etree.ElementTree.Element(
'field', context=" {'some_prop': 3} ")
self.view.parse_domains_and_contexts(e, None)
self.assertEqual(
e.get('context'),
{'some_prop': 3})
def test_convert_complex_context(self):
e = xml.etree.ElementTree.Element(
'field',
context="{'account_id.type': ['receivable','payable'],"
"'reconcile_id': False,"
"'reconcile_partial_id': False,"
"'state': 'valid'}"
)
self.view.parse_domains_and_contexts(e, None)
self.assertEqual(
e.get('context'),
{'account_id.type': ['receivable', 'payable'],
'reconcile_id': False,
'reconcile_partial_id': False,
'state': 'valid'}
)
def test_retrieve_nonliteral_context(self):
session = mock.Mock(spec=s.OpenERPSession)
session.contexts_store = {}
context_string = ("{'month': (datetime.date.today() - "
"datetime.timedelta(365/12)).strftime('%%m')}")
e = xml.etree.ElementTree.Element(
'field', context=context_string)
self.view.parse_domains_and_contexts(e, session)
self.assertIsInstance(e.get('context'), nonliterals.Context)
self.assertEqual(
nonliterals.Context(
session, key=e.get('context').key).get_context_string(),
context_string)
class AttrsNormalizationTest(unittest2.TestCase):
def setUp(self):
self.view = web.controllers.main.View()
def test_identity(self):
web_view = """
<form string="Title">
<group>
<field name="some_field"/>
<field name="some_other_field"/>
</group>
<field name="stuff"/>
</form>
"""
pristine = xml.etree.ElementTree.fromstring(web_view)
transformed = self.view.transform_view(web_view, None)
self.assertEqual(
xml.etree.ElementTree.tostring(transformed),
xml.etree.ElementTree.tostring(pristine)
)
@unittest2.skip
def test_transform_states(self):
element = xml.etree.ElementTree.Element(
'field', states="open,closed")
self.view.normalize_attrs(element, {})
self.assertIsNone(element.get('states'))
self.assertEqual(
simplejson.loads(element.get('attrs')),
{'invisible': [['state', 'not in', ['open', 'closed']]]})
@unittest2.skip
def test_transform_invisible(self):
element = xml.etree.ElementTree.Element(
'field', invisible="context.get('invisible_country', False)")
empty_context = copy.deepcopy(element)
self.view.normalize_attrs(empty_context, {})
self.assertEqual(empty_context.get('invisible'), None)
full_context = copy.deepcopy(element)
self.view.normalize_attrs(full_context, {'invisible_country': True})
self.assertEqual(full_context.get('invisible'), '1')
@unittest2.skip
def test_transform_invisible_list_column(self):
req = mock.Mock()
req.context = {'set_editable':True, 'set_visible':True,
'gtd_visible':True, 'user_invisible':True}
req.session.evaluation_context = \
s.OpenERPSession().evaluation_context
req.session.model('project.task').fields_view_get.return_value = {
'arch': '''
<tree colors="grey:state in ('cancelled','done');blue:state == 'pending';red:date_deadline and (date_deadline&lt;current_date) and (state in ('draft','pending','open'))" string="Tasks">
<field name="sequence" invisible="not context.get('seq_visible', False)"/>
<field name="user_id" invisible="context.get('user_invisible', False)"/>
<field name="delegated_user_id" invisible="context.get('show_delegated', True)"/>
<field name="total_hours" invisible="1"/>
<field name="date_deadline" invisible="context.get('deadline_visible',True)"/>
<field name="type_id" invisible="context.get('set_visible',False)"/>
</tree>
'''}
parsed_view = web.controllers.main.View().fields_view_get(
req, 'project.task', 42, 'tree')
self.assertTrue(field_attrs(parsed_view, 'sequence')['invisible'])
self.assertTrue(field_attrs(parsed_view, 'user_id')['invisible'])
self.assertTrue(
field_attrs(parsed_view, 'delegated_user_id')['invisible'])
self.assertTrue(field_attrs(parsed_view, 'total_hours')['invisible'])
self.assertTrue(
field_attrs(parsed_view, 'date_deadline')['invisible'])
self.assertTrue(field_attrs(parsed_view, 'type_id')['invisible'])
class ListViewTest(unittest2.TestCase):
def setUp(self):
self.view = web.controllers.main.ListView()
self.request = mock.Mock()
self.request.context = {'set_editable': True}
@unittest2.skip
def test_no_editable_editable_context(self):
self.request.session.model('fake').fields_view_get.return_value = \
{'arch': '<tree><field name="foo"/></tree>'}
view = self.view.fields_view_get(self.request, 'fake', False, False)
self.assertEqual(view['arch']['attrs']['editable'],
'bottom')
@unittest2.skip
def test_editable_top_editable_context(self):
self.request.session.model('fake').fields_view_get.return_value = \
{'arch': '<tree editable="top"><field name="foo"/></tree>'}
view = self.view.fields_view_get(self.request, 'fake', False)
self.assertEqual(view['arch']['attrs']['editable'],
'top')
@unittest2.skip
def test_editable_bottom_editable_context(self):
self.request.session.model('fake').fields_view_get.return_value = \
{'arch': '<tree editable="bottom"><field name="foo"/></tree>'}
view = self.view.fields_view_get(self.request, 'fake', False)
self.assertEqual(view['arch']['attrs']['editable'],
'bottom')
def test_color_nocolor(self):
self.assertEqual(
self.view.process_colors(
{'arch': {'attrs': {}, 'children': []}}, {}, {}),
None)
def test_color_literal(self):
self.assertEqual(
self.view.process_colors(
{'arch': {'attrs': {'colors': 'black:1'}}, 'children': []},
{}, {}),
'black')
def test_color_miss(self):
self.assertEqual(
self.view.process_colors(
{'arch': {'attrs': {'colors': "grey:state in ('cancelled','done');blue:state in ('pending')"}},
'children': []
}, {'state': 'open'}, {}),
None)
def test_color_compute(self):
self.assertEqual(
self.view.process_colors(
{'arch': {'attrs': {'colors': "grey:state in ('cancelled','done');blue:state in ('pending')"}},
'children': []
}, {'state': 'done'}, {}),
'grey')
def test_color_multiple(self):
self.assertEqual(
self.view.process_colors(
{'arch': {'attrs': {'colors': "grey:state in ('cancelled','done');blue:state in ('done')"}},
'children': []
}, {'state': 'done'}, {}),
'maroon')

View File

@ -0,0 +1,10 @@
# -*- coding: utf-8 -*-
from . import test_dataset, test_menu, test_serving_base, test_view
fast_suite = []
checks = [
test_dataset,
test_menu,
test_serving_base,
test_view,
]

View File

@ -0,0 +1,41 @@
# -*- coding: utf-8 -*-
import mock
import unittest2
import web.controllers.main
class TestDataSetController(unittest2.TestCase):
def setUp(self):
self.dataset = web.controllers.main.DataSet()
self.request = mock.Mock()
self.read = self.request.session.model().read
self.search = self.request.session.model().search
def test_empty_find(self):
self.search.return_value = []
self.read.return_value = []
self.assertEqual(
self.dataset.do_search_read(self.request, 'fake.model'),
{'records': [], 'length': 0})
self.read.assert_called_once_with(
[], False, self.request.session.eval_context())
def test_regular_find(self):
self.search.return_value = [1, 2, 3]
self.dataset.do_search_read(self.request, 'fake.model')
self.read.assert_called_once_with(
[1, 2, 3], False,self.request.session.eval_context())
def test_ids_shortcut(self):
self.search.return_value = [1, 2, 3]
self.read.return_value = [
{'id': 1, 'name': 'foo'},
{'id': 2, 'name': 'bar'},
{'id': 3, 'name': 'qux'}
]
self.assertEqual(
self.dataset.do_search_read(self.request, 'fake.model', ['id']),
{'records': [{'id': 1}, {'id': 2}, {'id': 3}], 'length': 3})
self.assertFalse(self.read.called)

View File

@ -1,4 +1,5 @@
# -*- coding: utf-8 -*-
import collections
import mock
import unittest2
@ -13,42 +14,56 @@ class Placeholder(object):
class LoadTest(unittest2.TestCase):
def setUp(self):
self.menu = main.Menu()
self.menus_mock = mock.Mock()
self.request = Placeholder(session=OpenERPSession())
self.request = mock.Mock()
# Have self.request.session.model() return a different mock object for
# each model (but always the same mock for a given model name)
models = collections.defaultdict(mock.Mock)
model = self.request.session.model.side_effect = \
lambda model_name: models[model_name]
self.MockMenus = model('ir.ui.menu')
# Mock the absence of custom menu
model('res.users').read.return_value = [{
'menu_id': False
}]
def tearDown(self):
del self.request
del self.menus_mock
del self.MockMenus
del self.menu
@unittest2.skip
def test_empty(self):
self.menus_mock.search = mock.Mock(return_value=[])
self.menus_mock.read = mock.Mock(return_value=[])
self.MockMenus.search.return_value = []
self.MockMenus.read.return_value = []
root = self.menu.do_load(self.request)
self.menus_mock.search.assert_called_with([])
self.menus_mock.read.assert_called_with(
[], ['name', 'sequence', 'parent_id'])
self.MockMenus.search.assert_called_with(
[], 0, False, False, self.request.session.eval_context())
self.MockMenus.read.assert_called_with(
[], ['name', 'sequence', 'parent_id',
'action', 'needaction_enabled', 'needaction_counter'],
self.request.session.eval_context())
self.assertListEqual(
root['children'],
[])
@unittest2.skip
def test_applications_sort(self):
self.menus_mock.search = mock.Mock(return_value=[1, 2, 3])
self.menus_mock.read = mock.Mock(return_value=[
{'id': 2, 'sequence': 3, 'parent_id': False},
{'id': 3, 'sequence': 2, 'parent_id': False},
self.MockMenus.search.return_value = [1, 2, 3]
self.MockMenus.read.side_effect = lambda *args: [
{'id': 1, 'sequence': 1, 'parent_id': False},
])
{'id': 3, 'sequence': 2, 'parent_id': False},
{'id': 2, 'sequence': 3, 'parent_id': False},
]
root = self.menu.do_load(self.request)
self.menus_mock.read.assert_called_with(
[1, 2, 3], ['name', 'sequence', 'parent_id'])
self.MockMenus.read.assert_called_with(
[1, 2, 3], ['name', 'sequence', 'parent_id',
'action', 'needaction_enabled', 'needaction_counter'],
self.request.session.eval_context())
self.assertEqual(
root['children'],
@ -63,15 +78,18 @@ class LoadTest(unittest2.TestCase):
'parent_id': False, 'children': []
}])
@unittest2.skip
def test_deep(self):
self.menus_mock.search = mock.Mock(return_value=[1, 2, 3, 4])
self.menus_mock.read = mock.Mock(return_value=[
{'id': 1, 'sequence': 1, 'parent_id': False},
{'id': 2, 'sequence': 2, 'parent_id': [1, '']},
{'id': 3, 'sequence': 1, 'parent_id': [2, '']},
{'id': 4, 'sequence': 2, 'parent_id': [2, '']},
])
self.MockMenus.search.side_effect = lambda domain, *args: (
[1] if domain == [('parent_id', '=', False)] else [1, 2, 3, 4])
root = {'id': 1, 'sequence': 1, 'parent_id': False}
self.MockMenus.read.side_effect = lambda ids, *args: (
[root] if ids == [1] else [
{'id': 1, 'sequence': 1, 'parent_id': False},
{'id': 2, 'sequence': 2, 'parent_id': [1, '']},
{'id': 3, 'sequence': 1, 'parent_id': [2, '']},
{'id': 4, 'sequence': 2, 'parent_id': [2, '']},
])
root = self.menu.do_load(self.request)
@ -117,7 +135,6 @@ class ActionMungerTest(unittest2.TestCase):
self.assertEqual(changed, action)
@unittest2.skip
def test_list_view(self):
action = {
"views": [[False, "tree"], [False, "form"],
@ -135,7 +152,6 @@ class ActionMungerTest(unittest2.TestCase):
"view_mode": "list,form,calendar"
})
@unittest2.skip
def test_redundant_views(self):
action = {

View File

@ -3,7 +3,7 @@
import random
import unittest2
from ..controllers.main import topological_sort
from ..controllers.main import module_topological_sort as sort
def sample(population):
return random.sample(
@ -22,7 +22,7 @@ class TestModulesLoading(unittest2.TestCase):
ms = dict(modules)
seen = set()
sorted_modules = topological_sort(ms)
sorted_modules = sort(ms)
for module in sorted_modules:
deps = ms[module]
self.assertGreaterEqual(

View File

@ -0,0 +1,128 @@
import copy
import xml.etree.ElementTree
import mock
import unittest2
import simplejson
import web.controllers.main
from ..common import nonliterals, session as s
def field_attrs(fields_view_get, fieldname):
(field,) = filter(lambda f: f['attrs'].get('name') == fieldname,
fields_view_get['arch']['children'])
return field['attrs']
#noinspection PyCompatibility
class DomainsAndContextsTest(unittest2.TestCase):
def setUp(self):
self.view = web.controllers.main.View()
def test_convert_literal_domain(self):
e = xml.etree.ElementTree.Element(
'field', domain=" [('somefield', '=', 3)] ")
self.view.parse_domains_and_contexts(e, None)
self.assertEqual(
e.get('domain'),
[('somefield', '=', 3)])
def test_convert_complex_domain(self):
e = xml.etree.ElementTree.Element(
'field',
domain="[('account_id.type','in',['receivable','payable']),"
"('reconcile_id','=',False),"
"('reconcile_partial_id','=',False),"
"('state', '=', 'valid')]"
)
self.view.parse_domains_and_contexts(e, None)
self.assertEqual(
e.get('domain'),
[('account_id.type', 'in', ['receivable', 'payable']),
('reconcile_id', '=', False),
('reconcile_partial_id', '=', False),
('state', '=', 'valid')]
)
def test_retrieve_nonliteral_domain(self):
session = mock.Mock(spec=s.OpenERPSession)
session.domains_store = {}
domain_string = ("[('month','=',(datetime.date.today() - "
"datetime.timedelta(365/12)).strftime('%%m'))]")
e = xml.etree.ElementTree.Element(
'field', domain=domain_string)
self.view.parse_domains_and_contexts(e, session)
self.assertIsInstance(e.get('domain'), nonliterals.Domain)
self.assertEqual(
nonliterals.Domain(
session, key=e.get('domain').key).get_domain_string(),
domain_string)
def test_convert_literal_context(self):
e = xml.etree.ElementTree.Element(
'field', context=" {'some_prop': 3} ")
self.view.parse_domains_and_contexts(e, None)
self.assertEqual(
e.get('context'),
{'some_prop': 3})
def test_convert_complex_context(self):
e = xml.etree.ElementTree.Element(
'field',
context="{'account_id.type': ['receivable','payable'],"
"'reconcile_id': False,"
"'reconcile_partial_id': False,"
"'state': 'valid'}"
)
self.view.parse_domains_and_contexts(e, None)
self.assertEqual(
e.get('context'),
{'account_id.type': ['receivable', 'payable'],
'reconcile_id': False,
'reconcile_partial_id': False,
'state': 'valid'}
)
def test_retrieve_nonliteral_context(self):
session = mock.Mock(spec=s.OpenERPSession)
session.contexts_store = {}
context_string = ("{'month': (datetime.date.today() - "
"datetime.timedelta(365/12)).strftime('%%m')}")
e = xml.etree.ElementTree.Element(
'field', context=context_string)
self.view.parse_domains_and_contexts(e, session)
self.assertIsInstance(e.get('context'), nonliterals.Context)
self.assertEqual(
nonliterals.Context(
session, key=e.get('context').key).get_context_string(),
context_string)
class AttrsNormalizationTest(unittest2.TestCase):
def setUp(self):
self.view = web.controllers.main.View()
def test_identity(self):
web_view = """
<form string="Title">
<group>
<field name="some_field"/>
<field name="some_other_field"/>
</group>
<field name="stuff"/>
</form>
"""
pristine = xml.etree.ElementTree.fromstring(web_view)
transformed = self.view.transform_view(web_view, None)
self.assertEqual(
xml.etree.ElementTree.tostring(transformed),
xml.etree.ElementTree.tostring(pristine)
)

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-05 04:55+0000\n"
"X-Generator: Launchpad (build 15901)\n"
"X-Launchpad-Export-Date: 2012-09-14 05:05+0000\n"
"X-Generator: Launchpad (build 15944)\n"
#. openerp-web
#: addons/web_calendar/static/src/js/calendar.js:11

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-05 04:55+0000\n"
"X-Generator: Launchpad (build 15901)\n"
"X-Launchpad-Export-Date: 2012-09-14 05:05+0000\n"
"X-Generator: Launchpad (build 15944)\n"
#. openerp-web
#: addons/web_calendar/static/src/js/calendar.js:11

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-05 04:55+0000\n"
"X-Generator: Launchpad (build 15901)\n"
"X-Launchpad-Export-Date: 2012-09-14 05:05+0000\n"
"X-Generator: Launchpad (build 15944)\n"
#. openerp-web
#: addons/web_calendar/static/src/js/calendar.js:11

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-05 04:55+0000\n"
"X-Generator: Launchpad (build 15901)\n"
"X-Launchpad-Export-Date: 2012-09-14 05:05+0000\n"
"X-Generator: Launchpad (build 15944)\n"
#. openerp-web
#: addons/web_calendar/static/src/js/calendar.js:11

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-05 04:55+0000\n"
"X-Generator: Launchpad (build 15901)\n"
"X-Launchpad-Export-Date: 2012-09-14 05:05+0000\n"
"X-Generator: Launchpad (build 15944)\n"
#. openerp-web
#: addons/web_calendar/static/src/js/calendar.js:11

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-05 04:55+0000\n"
"X-Generator: Launchpad (build 15901)\n"
"X-Launchpad-Export-Date: 2012-09-14 05:05+0000\n"
"X-Generator: Launchpad (build 15944)\n"
"X-Poedit-Language: Czech\n"
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-05 04:55+0000\n"
"X-Generator: Launchpad (build 15901)\n"
"X-Launchpad-Export-Date: 2012-09-14 05:05+0000\n"
"X-Generator: Launchpad (build 15944)\n"
#. openerp-web
#: addons/web_calendar/static/src/js/calendar.js:11

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-05 04:55+0000\n"
"X-Generator: Launchpad (build 15901)\n"
"X-Launchpad-Export-Date: 2012-09-14 05:05+0000\n"
"X-Generator: Launchpad (build 15944)\n"
#. openerp-web
#: addons/web_calendar/static/src/js/calendar.js:11

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-05 04:55+0000\n"
"X-Generator: Launchpad (build 15901)\n"
"X-Launchpad-Export-Date: 2012-09-14 05:05+0000\n"
"X-Generator: Launchpad (build 15944)\n"
#. openerp-web
#: addons/web_calendar/static/src/js/calendar.js:11

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-05 04:55+0000\n"
"X-Generator: Launchpad (build 15901)\n"
"X-Launchpad-Export-Date: 2012-09-14 05:05+0000\n"
"X-Generator: Launchpad (build 15944)\n"
#. openerp-web
#: addons/web_calendar/static/src/js/calendar.js:11
@ -25,114 +25,114 @@ msgstr "Calendar"
#. openerp-web
#: addons/web_calendar/static/src/js/calendar.js:70
msgid "Filter"
msgstr ""
msgstr "Filter"
#. openerp-web
#: addons/web_calendar/static/src/js/calendar.js:144
msgid "Today"
msgstr ""
msgstr "Today"
#. openerp-web
#: addons/web_calendar/static/src/js/calendar.js:145
msgid "Day"
msgstr ""
msgstr "Day"
#. openerp-web
#: addons/web_calendar/static/src/js/calendar.js:146
msgid "Week"
msgstr ""
msgstr "Week"
#. openerp-web
#: addons/web_calendar/static/src/js/calendar.js:147
msgid "Month"
msgstr ""
msgstr "Month"
#. openerp-web
#: addons/web_calendar/static/src/js/calendar.js:148
msgid "New event"
msgstr ""
msgstr "New event"
#. openerp-web
#: addons/web_calendar/static/src/js/calendar.js:149
msgid "Save"
msgstr ""
msgstr "Save"
#. openerp-web
#: addons/web_calendar/static/src/js/calendar.js:150
msgid "Cancel"
msgstr ""
msgstr "Cancel"
#. openerp-web
#: addons/web_calendar/static/src/js/calendar.js:151
msgid "Details"
msgstr ""
msgstr "Details"
#. openerp-web
#: addons/web_calendar/static/src/js/calendar.js:152
msgid "Edit"
msgstr ""
msgstr "Edit"
#. openerp-web
#: addons/web_calendar/static/src/js/calendar.js:153
msgid "Delete"
msgstr ""
msgstr "Delete"
#. openerp-web
#: addons/web_calendar/static/src/js/calendar.js:155
msgid "Event will be deleted permanently, are you sure?"
msgstr ""
msgstr "Event will be permanently deleted, are you sure?"
#. openerp-web
#: addons/web_calendar/static/src/js/calendar.js:156
#: addons/web_calendar/static/src/js/calendar.js:169
msgid "Description"
msgstr ""
msgstr "Description"
#. openerp-web
#: addons/web_calendar/static/src/js/calendar.js:157
msgid "Time period"
msgstr ""
msgstr "Time period"
#. openerp-web
#: addons/web_calendar/static/src/js/calendar.js:158
msgid "Full day"
msgstr ""
msgstr "Full day"
#. openerp-web
#: addons/web_calendar/static/src/js/calendar.js:161
msgid "Do you want to edit the whole set of repeated events?"
msgstr ""
msgstr "Do you want to edit the whole set of repeated events?"
#. openerp-web
#: addons/web_calendar/static/src/js/calendar.js:162
msgid "Repeat event"
msgstr ""
msgstr "Repeat event"
#. openerp-web
#: addons/web_calendar/static/src/js/calendar.js:163
msgid "Disabled"
msgstr ""
msgstr "Disabled"
#. openerp-web
#: addons/web_calendar/static/src/js/calendar.js:164
msgid "Enabled"
msgstr ""
msgstr "Enabled"
#. openerp-web
#: addons/web_calendar/static/src/js/calendar.js:167
#: addons/web_calendar/static/src/js/calendar.js:175
msgid "Agenda"
msgstr ""
msgstr "Agenda"
#. openerp-web
#: addons/web_calendar/static/src/js/calendar.js:168
msgid "Date"
msgstr ""
msgstr "Date"
#. openerp-web
#: addons/web_calendar/static/src/js/calendar.js:172
msgid "Year"
msgstr ""
msgstr "Year"
#. openerp-web
#: addons/web_calendar/static/src/xml/web_calendar.xml:5

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-05 04:55+0000\n"
"X-Generator: Launchpad (build 15901)\n"
"X-Launchpad-Export-Date: 2012-09-14 05:05+0000\n"
"X-Generator: Launchpad (build 15944)\n"
#. openerp-web
#: addons/web_calendar/static/src/js/calendar.js:11

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-05 04:55+0000\n"
"X-Generator: Launchpad (build 15901)\n"
"X-Launchpad-Export-Date: 2012-09-14 05:05+0000\n"
"X-Generator: Launchpad (build 15944)\n"
#. openerp-web
#: addons/web_calendar/static/src/js/calendar.js:11

View File

@ -15,8 +15,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-05 04:55+0000\n"
"X-Generator: Launchpad (build 15901)\n"
"X-Launchpad-Export-Date: 2012-09-14 05:05+0000\n"
"X-Generator: Launchpad (build 15944)\n"
"Language: es\n"
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-05 04:55+0000\n"
"X-Generator: Launchpad (build 15901)\n"
"X-Launchpad-Export-Date: 2012-09-14 05:05+0000\n"
"X-Generator: Launchpad (build 15944)\n"
#. openerp-web
#: addons/web_calendar/static/src/js/calendar.js:11

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-05 04:55+0000\n"
"X-Generator: Launchpad (build 15901)\n"
"X-Launchpad-Export-Date: 2012-09-14 05:05+0000\n"
"X-Generator: Launchpad (build 15944)\n"
#. openerp-web
#: addons/web_calendar/static/src/js/calendar.js:11

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-05 04:55+0000\n"
"X-Generator: Launchpad (build 15901)\n"
"X-Launchpad-Export-Date: 2012-09-14 05:05+0000\n"
"X-Generator: Launchpad (build 15944)\n"
#. openerp-web
#: addons/web_calendar/static/src/js/calendar.js:11

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-05 04:55+0000\n"
"X-Generator: Launchpad (build 15901)\n"
"X-Launchpad-Export-Date: 2012-09-14 05:05+0000\n"
"X-Generator: Launchpad (build 15944)\n"
#. openerp-web
#: addons/web_calendar/static/src/js/calendar.js:11

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-05 04:55+0000\n"
"X-Generator: Launchpad (build 15901)\n"
"X-Launchpad-Export-Date: 2012-09-14 05:05+0000\n"
"X-Generator: Launchpad (build 15944)\n"
#. openerp-web
#: addons/web_calendar/static/src/js/calendar.js:11

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-05 04:55+0000\n"
"X-Generator: Launchpad (build 15901)\n"
"X-Launchpad-Export-Date: 2012-09-14 05:05+0000\n"
"X-Generator: Launchpad (build 15944)\n"
#. openerp-web
#: addons/web_calendar/static/src/js/calendar.js:11

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-05 04:55+0000\n"
"X-Generator: Launchpad (build 15901)\n"
"X-Launchpad-Export-Date: 2012-09-14 05:05+0000\n"
"X-Generator: Launchpad (build 15944)\n"
#. openerp-web
#: addons/web_calendar/static/src/js/calendar.js:11

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-05 04:55+0000\n"
"X-Generator: Launchpad (build 15901)\n"
"X-Launchpad-Export-Date: 2012-09-14 05:05+0000\n"
"X-Generator: Launchpad (build 15944)\n"
#. openerp-web
#: addons/web_calendar/static/src/js/calendar.js:11

View File

@ -0,0 +1,144 @@
# Hungarian translation for openerp-web
# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
# This file is distributed under the same license as the openerp-web package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2012.
#
msgid ""
msgstr ""
"Project-Id-Version: openerp-web\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2012-07-02 09:06+0200\n"
"PO-Revision-Date: 2012-09-06 08:35+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Hungarian <hu@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-14 05:05+0000\n"
"X-Generator: Launchpad (build 15944)\n"
#. openerp-web
#: addons/web_calendar/static/src/js/calendar.js:11
msgid "Calendar"
msgstr "Naptár"
#. openerp-web
#: addons/web_calendar/static/src/js/calendar.js:70
msgid "Filter"
msgstr "Szűrő"
#. openerp-web
#: addons/web_calendar/static/src/js/calendar.js:144
msgid "Today"
msgstr "Ma"
#. openerp-web
#: addons/web_calendar/static/src/js/calendar.js:145
msgid "Day"
msgstr "Nap"
#. openerp-web
#: addons/web_calendar/static/src/js/calendar.js:146
msgid "Week"
msgstr "Hét"
#. openerp-web
#: addons/web_calendar/static/src/js/calendar.js:147
msgid "Month"
msgstr "Hó"
#. openerp-web
#: addons/web_calendar/static/src/js/calendar.js:148
msgid "New event"
msgstr "Új esemény"
#. openerp-web
#: addons/web_calendar/static/src/js/calendar.js:149
msgid "Save"
msgstr "Mentés"
#. openerp-web
#: addons/web_calendar/static/src/js/calendar.js:150
msgid "Cancel"
msgstr "Mégsem"
#. openerp-web
#: addons/web_calendar/static/src/js/calendar.js:151
msgid "Details"
msgstr "Részletek"
#. openerp-web
#: addons/web_calendar/static/src/js/calendar.js:152
msgid "Edit"
msgstr "Szerkesztés"
#. openerp-web
#: addons/web_calendar/static/src/js/calendar.js:153
msgid "Delete"
msgstr "Törlés"
#. openerp-web
#: addons/web_calendar/static/src/js/calendar.js:155
msgid "Event will be deleted permanently, are you sure?"
msgstr "Az esemény véglegesen törlődik, biztos benne?"
#. openerp-web
#: addons/web_calendar/static/src/js/calendar.js:156
#: addons/web_calendar/static/src/js/calendar.js:169
msgid "Description"
msgstr "Leírás"
#. openerp-web
#: addons/web_calendar/static/src/js/calendar.js:157
msgid "Time period"
msgstr "Időintervallum"
#. openerp-web
#: addons/web_calendar/static/src/js/calendar.js:158
msgid "Full day"
msgstr "Egész nap"
#. openerp-web
#: addons/web_calendar/static/src/js/calendar.js:161
msgid "Do you want to edit the whole set of repeated events?"
msgstr "Az összes ismétlődő eseményt szerkeszteni akarja?"
#. openerp-web
#: addons/web_calendar/static/src/js/calendar.js:162
msgid "Repeat event"
msgstr "Esemény ismétlése"
#. openerp-web
#: addons/web_calendar/static/src/js/calendar.js:163
msgid "Disabled"
msgstr "Tiltva"
#. openerp-web
#: addons/web_calendar/static/src/js/calendar.js:164
msgid "Enabled"
msgstr "Engedélyezve"
#. openerp-web
#: addons/web_calendar/static/src/js/calendar.js:167
#: addons/web_calendar/static/src/js/calendar.js:175
msgid "Agenda"
msgstr "Napirend"
#. openerp-web
#: addons/web_calendar/static/src/js/calendar.js:168
msgid "Date"
msgstr "Dátum"
#. openerp-web
#: addons/web_calendar/static/src/js/calendar.js:172
msgid "Year"
msgstr "Év"
#. openerp-web
#: addons/web_calendar/static/src/xml/web_calendar.xml:5
#: addons/web_calendar/static/src/xml/web_calendar.xml:6
msgid "&nbsp;"
msgstr "&nbsp;"
#~ msgid "Navigator"
#~ msgstr "Navigátor"

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-05 04:55+0000\n"
"X-Generator: Launchpad (build 15901)\n"
"X-Launchpad-Export-Date: 2012-09-14 05:05+0000\n"
"X-Generator: Launchpad (build 15944)\n"
#. openerp-web
#: addons/web_calendar/static/src/js/calendar.js:11

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-05 04:55+0000\n"
"X-Generator: Launchpad (build 15901)\n"
"X-Launchpad-Export-Date: 2012-09-14 05:05+0000\n"
"X-Generator: Launchpad (build 15944)\n"
#. openerp-web
#: addons/web_calendar/static/src/js/calendar.js:11

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-05 04:55+0000\n"
"X-Generator: Launchpad (build 15901)\n"
"X-Launchpad-Export-Date: 2012-09-14 05:05+0000\n"
"X-Generator: Launchpad (build 15944)\n"
#. openerp-web
#: addons/web_calendar/static/src/js/calendar.js:11

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-05 04:55+0000\n"
"X-Generator: Launchpad (build 15901)\n"
"X-Launchpad-Export-Date: 2012-09-14 05:05+0000\n"
"X-Generator: Launchpad (build 15944)\n"
#. openerp-web
#: addons/web_calendar/static/src/js/calendar.js:11

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-05 04:55+0000\n"
"X-Generator: Launchpad (build 15901)\n"
"X-Launchpad-Export-Date: 2012-09-14 05:05+0000\n"
"X-Generator: Launchpad (build 15944)\n"
#. openerp-web
#: addons/web_calendar/static/src/js/calendar.js:11

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-05 04:55+0000\n"
"X-Generator: Launchpad (build 15901)\n"
"X-Launchpad-Export-Date: 2012-09-14 05:05+0000\n"
"X-Generator: Launchpad (build 15944)\n"
#. openerp-web
#: addons/web_calendar/static/src/js/calendar.js:11

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-05 04:55+0000\n"
"X-Generator: Launchpad (build 15901)\n"
"X-Launchpad-Export-Date: 2012-09-14 05:05+0000\n"
"X-Generator: Launchpad (build 15944)\n"
#. openerp-web
#: addons/web_calendar/static/src/js/calendar.js:11

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-09-05 04:55+0000\n"
"X-Generator: Launchpad (build 15901)\n"
"X-Launchpad-Export-Date: 2012-09-14 05:05+0000\n"
"X-Generator: Launchpad (build 15944)\n"
#. openerp-web
#: addons/web_calendar/static/src/js/calendar.js:11

Some files were not shown because too many files have changed in this diff Show More