[MERGE] Merge with last trunk

bzr revid: fme@openerp.com-20111222095248-yt36zxntdyt5kce5
This commit is contained in:
Fabien Meghazi 2011-12-22 10:52:48 +01:00
commit 00344dace3
215 changed files with 21746 additions and 7325 deletions

View File

@ -1,6 +1,11 @@
{
"name" : "web",
"category" : "Hidden",
"category": "Hidden",
"description":
"""
OpenERP Web core module.
This module provides the core of the OpenERP web client.
""",
"depends" : [],
'active': True,
'post_load' : 'wsgi_postload',
@ -10,7 +15,7 @@
"static/lib/datejs/parser.js",
"static/lib/datejs/sugarpak.js",
"static/lib/datejs/extras.js",
"static/lib/jquery/jquery-1.6.2.js",
"static/lib/jquery/jquery-1.6.4.js",
"static/lib/jquery.MD5/jquery.md5.js",
"static/lib/jquery.form/jquery.form.js",
"static/lib/jquery.validate/jquery.validate.js",
@ -42,6 +47,7 @@
"static/src/js/data_import.js",
"static/src/js/search.js",
"static/src/js/view_form.js",
"static/src/js/view_page.js",
"static/src/js/view_list.js",
"static/src/js/view_list_editable.js",
"static/src/js/view_tree.js",

View File

@ -6,11 +6,12 @@ import ast
import contextlib
import functools
import logging
import urllib
import os
import pprint
import sys
import threading
import traceback
import urllib
import uuid
import xmlrpclib
@ -128,17 +129,37 @@ class JsonRequest(WebRequest):
"id": null}
"""
def dispatch(self, controller, method, requestf=None, request=None):
""" Calls the method asked for by the JSON-RPC2 request
def dispatch(self, controller, method):
""" Calls the method asked for by the JSON-RPC2 or JSONP request
:param controller: the instance of the controller which received the request
:param method: the method which received the request
:param requestf: a file-like object containing an encoded JSON-RPC2 request
:param request: a JSON-RPC2 request
:returns: an utf8 encoded JSON-RPC2 reply
:returns: an utf8 encoded JSON-RPC2 or JSONP reply
"""
args = self.httprequest.args
jsonp = args.get('jsonp')
requestf = None
request = None
if jsonp and self.httprequest.method == 'POST':
# jsonp 2 steps step1 POST: save call
self.init(args)
req.session.jsonp_requests[args.get('id')] = self.httprequest.form['r']
headers=[('Content-Type', 'text/plain; charset=utf-8')]
r = werkzeug.wrappers.Response(request_id, headers=headers)
return r
elif jsonp and args.get('r'):
# jsonp method GET
request = args.get('r')
elif jsonp and args.get('id'):
# jsonp 2 steps step2 GET: run and return result
self.init(args)
request = self.session.jsonp_requests.pop(args.get(id), "")
else:
# regular jsonrpc2
requestf = self.httprequest.stream
response = {"jsonrpc": "2.0" }
error = None
try:
@ -188,10 +209,16 @@ class JsonRequest(WebRequest):
if _logger.isEnabledFor(logging.DEBUG):
_logger.debug("<--\n%s", pprint.pformat(response))
content = simplejson.dumps(response, cls=nonliterals.NonLiteralEncoder)
return werkzeug.wrappers.Response(
content, headers=[('Content-Type', 'application/json'),
('Content-Length', len(content))])
if jsonp:
mime = 'application/javascript'
body = "%s(%s);" % (jsonp, simplejson.dumps(response, cls=nonliterals.NonLiteralEncoder),)
else:
mime = 'application/json'
body = simplejson.dumps(response, cls=nonliterals.NonLiteralEncoder)
r = werkzeug.wrappers.Response(body, headers=[('Content-Type', mime), ('Content-Length', len(body))])
return r
def jsonrequest(f):
""" Decorator marking the decorated method as being a handler for a
@ -205,8 +232,7 @@ def jsonrequest(f):
"""
@functools.wraps(f)
def json_handler(controller, request, config):
return JsonRequest(request, config).dispatch(
controller, f, requestf=request.stream)
return JsonRequest(request, config).dispatch(controller, f)
json_handler.exposed = True
return json_handler
@ -281,17 +307,19 @@ STORES = {}
@contextlib.contextmanager
def session_context(request, storage_path, session_cookie='sessionid'):
session_store = STORES.get(storage_path)
session_store, session_lock = STORES.get(storage_path, (None, None))
if not session_store:
session_store = werkzeug.contrib.sessions.FilesystemSessionStore(
storage_path)
STORES[storage_path] = session_store
session_lock = threading.Lock()
STORES[storage_path] = session_store, session_lock
sid = request.cookies.get(session_cookie)
if sid:
request.session = session_store.get(sid)
else:
request.session = session_store.new()
with session_lock:
if sid:
request.session = session_store.get(sid)
else:
request.session = session_store.new()
try:
yield request.session
@ -300,32 +328,44 @@ def session_context(request, storage_path, session_cookie='sessionid'):
# either by login process or by HTTP requests without an OpenERP
# session id, and are generally noise
for key, value in request.session.items():
if isinstance(value, session.OpenERPSession) and not value._uid:
if (isinstance(value, session.OpenERPSession)
and not value._uid
and not value.jsonp_requests
):
_logger.info('remove session %s: %r', key, value.jsonp_requests)
del request.session[key]
# FIXME: remove this when non-literals disappear
if sid:
# Re-load sessions from storage and merge non-literal
# contexts and domains (they're indexed by hash of the
# content so conflicts should auto-resolve), otherwise if
# two requests alter those concurrently the last to finish
# will overwrite the previous one, leading to loss of data
# (a non-literal is lost even though it was sent to the
# client and client errors)
#
# note that domains_store and contexts_store are append-only (we
# only ever add items to them), so we can just update one with the
# other to get the right result, if we want to merge the
# ``context`` dict we'll need something smarter
in_store = session_store.get(sid)
for k, v in request.session.iteritems():
stored = in_store.get(k)
if stored and isinstance(v, session.OpenERPSession)\
and v != stored:
v.contexts_store.update(stored.contexts_store)
v.domains_store.update(stored.domains_store)
with session_lock:
if sid:
# Re-load sessions from storage and merge non-literal
# contexts and domains (they're indexed by hash of the
# content so conflicts should auto-resolve), otherwise if
# two requests alter those concurrently the last to finish
# will overwrite the previous one, leading to loss of data
# (a non-literal is lost even though it was sent to the
# client and client errors)
#
# note that domains_store and contexts_store are append-only (we
# only ever add items to them), so we can just update one with the
# other to get the right result, if we want to merge the
# ``context`` dict we'll need something smarter
in_store = session_store.get(sid)
for k, v in request.session.iteritems():
stored = in_store.get(k)
if stored and isinstance(v, session.OpenERPSession):
v.contexts_store.update(stored.contexts_store)
v.domains_store.update(stored.domains_store)
if not hasattr(v, 'jsonp_requests'):
v.jsonp_requests = {}
v.jsonp_requests.update(getattr(
stored, 'jsonp_requests', {}))
session_store.save(request.session)
# add missing keys
for k, v in in_store.iteritems():
if k not in request.session:
request.session[k] = v
session_store.save(request.session)
#----------------------------------------------------------
# OpenERP Web Module/Controller Loading and URL Routing
@ -386,6 +426,7 @@ class Root(object):
if not os.path.exists(options.session_storage):
os.mkdir(options.session_storage, 0700)
self.session_storage = options.session_storage
_logger.debug('HTTP sessions stored in: %s', self.session_storage)
def __call__(self, environ, start_response):
""" Handle a WSGI request
@ -401,12 +442,13 @@ class Root(object):
"""
request = werkzeug.wrappers.Request(environ)
request.parameter_storage_class = werkzeug.datastructures.ImmutableDict
request.app = self
if request.path == '/':
params = urllib.urlencode(request.args)
return werkzeug.utils.redirect(self.root + '?' + params, 301)(
environ, start_response)
elif request.path == '/mobile':
elif request.path == '/mobile' or ('#' in request.path):
return werkzeug.utils.redirect(
'/web_mobile/static/src/web_mobile.html', 301)(environ, start_response)

View File

@ -291,7 +291,7 @@ class Service(object):
"""
self.connector = connector
self.service_name = service_name
self.__logger = _getChildLogger(_getChildLogger(_logger, 'service'),service_name)
self.__logger = _getChildLogger(_getChildLogger(_logger, 'service'),service_name or "")
def __getattr__(self, method):
"""
@ -363,7 +363,8 @@ class Connection(object):
if not self.database or not self.login or self.password is None:
raise AuthenticationError("Credentials not provided")
# TODO use authenticate instead of login
self.user_id = self.get_service("common").login(self.database, self.login, self.password)
if not self.user_id:
raise AuthenticationError("Authentication failure")
@ -406,7 +407,7 @@ class Model(object):
"""
self.connection = connection
self.model_name = model_name
self.__logger = _getChildLogger(_getChildLogger(_logger, 'object'), model_name)
self.__logger = _getChildLogger(_getChildLogger(_logger, 'object'), model_name or "")
def __getattr__(self, method):
"""

View File

@ -37,6 +37,7 @@ class OpenERPSession(object):
self.context = {}
self.contexts_store = {}
self.domains_store = {}
self.jsonp_requests = {} # FIXME use a LRU
def __getstate__(self):
state = dict(self.__dict__)
@ -58,8 +59,9 @@ class OpenERPSession(object):
self._login = login
self._password = password
def login(self, db, login, password):
uid = self.proxy('common').login(db, login, password)
def authenticate(self, db, login, password, env):
# TODO use the openerplib API once it exposes authenticate()
uid = self.proxy('common').authenticate(db, login, password, env)
self.bind(db, uid, login, password)
if uid: self.get_context()

View File

@ -16,7 +16,7 @@ class Xml2Json(object):
return Xml2Json.convert_element(root)
@staticmethod
def convert_element(el, skip_whitespaces=True):
def convert_element(el, preserve_whitespaces=False):
res = {}
if el.tag[0] == "{":
ns, name = el.tag.rsplit("}", 1)
@ -28,11 +28,11 @@ class Xml2Json(object):
for k, v in el.items():
res["attrs"][k] = v
kids = []
if el.text and (not skip_whitespaces or el.text.strip() != ''):
if el.text and (preserve_whitespaces or el.text.strip() != ''):
kids.append(el.text)
for kid in el:
kids.append(Xml2Json.convert_element(kid))
if kid.tail and (not skip_whitespaces or kid.tail.strip() != ''):
kids.append(Xml2Json.convert_element(kid, preserve_whitespaces))
if kid.tail and (preserve_whitespaces or kid.tail.strip() != ''):
kids.append(kid.tail)
res["children"] = kids
return res

View File

@ -10,12 +10,14 @@ import os
import re
import simplejson
import time
import urllib2
import xmlrpclib
import zlib
from xml.etree import ElementTree
from cStringIO import StringIO
import babel.messages.pofile
import werkzeug.utils
import web.common
openerpweb = web.common.http
@ -103,6 +105,7 @@ class WebClient(openerpweb.Controller):
addons = self.server_wide_modules(req)
else:
addons = addons.split(',')
r = []
for addon in addons:
manifest = openerpweb.addons_manifest.get(addon, None)
if not manifest:
@ -112,7 +115,8 @@ class WebClient(openerpweb.Controller):
globlist = manifest.get(key, [])
for pattern in globlist:
for path in glob.glob(os.path.normpath(os.path.join(addons_path, addon, pattern))):
yield path, path[len(addons_path):]
r.append( (path, path[len(addons_path):]))
return r
def manifest_list(self, req, mods, extension):
if not req.debug:
@ -197,6 +201,14 @@ class WebClient(openerpweb.Controller):
}
return r
@openerpweb.httprequest
def login(self, req, db, login, key):
req.session.authenticate(db, login, key, {})
redirect = werkzeug.utils.redirect('/web/webclient/home', 303)
cookie_val = urllib2.quote(simplejson.dumps(req.session_id))
redirect.set_cookie('session0|session_id', cookie_val)
return redirect
@openerpweb.jsonrequest
def translations(self, req, mods, lang):
lang_model = req.session.model('res.lang')
@ -240,6 +252,25 @@ class WebClient(openerpweb.Controller):
"version": web.common.release.version
}
class Proxy(openerpweb.Controller):
_cp_path = '/web/proxy'
@openerpweb.jsonrequest
def load(self, req, path):
""" Proxies an HTTP request through a JSON request.
It is strongly recommended to not request binary files through this,
as the result will be a binary data blob as well.
:param req: OpenERP request
:param path: actual request path
:return: file content
"""
from werkzeug.test import Client
from werkzeug.wrappers import BaseResponse
return Client(req.httprequest.app, BaseResponse).get(path).data
class Database(openerpweb.Controller):
_cp_path = "/web/database"
@ -268,7 +299,7 @@ class Database(openerpweb.Controller):
params['db_lang'],
params['create_admin_pwd']
)
try:
return req.session.proxy("db").create(*create_attrs)
except xmlrpclib.Fault, e:
@ -335,8 +366,16 @@ class Session(openerpweb.Controller):
_cp_path = "/web/session"
@openerpweb.jsonrequest
def login(self, req, db, login, password):
req.session.login(db, login, password)
def authenticate(self, req, db, login, password, base_location=None):
wsgienv = req.httprequest.environ
release = web.common.release
env = dict(
base_location=base_location,
HTTP_HOST=wsgienv['HTTP_HOST'],
REMOTE_ADDR=wsgienv['REMOTE_ADDR'],
user_agent="%s / %s" % (release.name, release.version),
)
req.session.authenticate(db, login, password, env)
ctx = req.session.get_context() if req.session._uid else {}
return {
@ -349,7 +388,6 @@ class Session(openerpweb.Controller):
@openerpweb.jsonrequest
def get_session_info(self, req):
req.session.assert_valid(force=True)
return {
"uid": req.session._uid,
"context": req.session.get_context() if req.session._uid else False,
@ -602,9 +640,17 @@ def fix_view_modes(action):
:param dict action: an action descriptor
:returns: nothing, the action is modified in place
"""
if 'views' not in 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 id_form is not None:
action['views'].insert(index + 1, (id_form, 'page'))
if action.pop('view_type', 'form') != 'form':
return action
@ -778,12 +824,15 @@ class DataSet(openerpweb.Controller):
return Model.unlink(ids, req.session.eval_context(req.context))
def call_common(self, req, model, method, args, domain_id=None, context_id=None):
domain = args[domain_id] if domain_id and len(args) - 1 >= domain_id else []
context = args[context_id] if context_id and len(args) - 1 >= context_id else {}
has_domain = domain_id is not None and domain_id < len(args)
has_context = context_id is not None and context_id < len(args)
domain = args[domain_id] if has_domain else []
context = args[context_id] if has_context else {}
c, d = eval_context_and_domain(req.session, context, domain)
if domain_id and len(args) - 1 >= domain_id:
if has_domain:
args[domain_id] = d
if context_id and len(args) - 1 >= context_id:
if has_context:
args[context_id] = c
for i in xrange(len(args)):
@ -841,12 +890,12 @@ class View(openerpweb.Controller):
context = req.session.eval_context(req.context)
fvg = Model.fields_view_get(view_id, view_type, context, toolbar, submenu)
# todo fme?: check that we should pass the evaluated context here
self.process_view(req.session, fvg, context, transform)
self.process_view(req.session, fvg, context, transform, (view_type == 'kanban'))
if toolbar and transform:
self.process_toolbar(req, fvg['toolbar'])
return fvg
def process_view(self, session, fvg, context, transform):
def process_view(self, session, fvg, context, transform, preserve_whitespaces=False):
# depending on how it feels, xmlrpclib.ServerProxy can translate
# XML-RPC strings to ``str`` or ``unicode``. ElementTree does not
# enjoy unicode strings which can not be trivially converted to
@ -864,7 +913,7 @@ class View(openerpweb.Controller):
xml = self.transform_view(arch, session, evaluation_context)
else:
xml = ElementTree.fromstring(arch)
fvg['arch'] = web.common.xml2json.Xml2Json.convert_element(xml)
fvg['arch'] = web.common.xml2json.Xml2Json.convert_element(xml, preserve_whitespaces)
for field in fvg['fields'].itervalues():
if field.get('views'):
@ -1064,6 +1113,44 @@ class SearchView(View):
}, context)
return to_return
@openerpweb.jsonrequest
def add_to_dashboard(self, req, menu_id, action_id, context_to_save, domain, view_mode, name=''):
ctx = web.common.nonliterals.CompoundContext(context_to_save)
ctx.session = req.session
ctx = ctx.evaluate()
domain = web.common.nonliterals.CompoundDomain(domain)
domain.session = req.session
domain = domain.evaluate()
dashboard_action = load_actions_from_ir_values(req, 'action', 'tree_but_open',
[('ir.ui.menu', menu_id)], False)
if dashboard_action:
action = dashboard_action[0][2]
if action['res_model'] == 'board.board' and action['views'][0][1] == 'form':
# Maybe should check the content instead of model board.board ?
view_id = action['views'][0][0]
board = req.session.model(action['res_model']).fields_view_get(view_id, 'form')
if board and 'arch' in board:
xml = ElementTree.fromstring(board['arch'])
column = xml.find('./board/column')
if column:
new_action = ElementTree.Element('action', {
'name' : str(action_id),
'string' : name,
'view_mode' : view_mode,
'context' : str(ctx),
'domain' : str(domain)
})
column.insert(0, new_action)
arch = ElementTree.tostring(xml, 'utf-8')
return req.session.model('ir.ui.view.custom').create({
'user_id': req.session._uid,
'ref_id': view_id,
'arch': arch
}, req.session.eval_context(req.context))
return False
class Binary(openerpweb.Controller):
_cp_path = "/web/binary"
@ -1122,7 +1209,7 @@ class Binary(openerpweb.Controller):
}
</script>"""
data = ufile.read()
args = [ufile.content_length, ufile.filename,
args = [len(data), ufile.filename,
ufile.content_type, base64.b64encode(data)]
except Exception, e:
args = [False, e.message]
@ -1220,13 +1307,16 @@ class Export(View):
records = []
for field_name, field in fields_sequence:
if import_compat and (exclude and field_name in exclude):
continue
if import_compat and field.get('readonly'):
# If none of the field's states unsets readonly, skip the field
if all(dict(attrs).get('readonly', True)
for attrs in field.get('states', {}).values()):
if import_compat:
if exclude and field_name in exclude:
continue
if 'function' in field:
continue
if field.get('readonly'):
# If none of the field's states unsets readonly, skip the field
if all(dict(attrs).get('readonly', True)
for attrs in field.get('states', {}).values()):
continue
id = prefix + (prefix and '/'or '') + field_name
name = parent_name + (parent_name and '/' or '') + field['string']
@ -1348,7 +1438,7 @@ class Export(View):
context = req.session.eval_context(req.context)
Model = req.session.model(model)
ids = ids or Model.search(domain, context=context)
ids = ids or Model.search(domain, 0, False, False, context)
field_names = map(operator.itemgetter('name'), fields)
import_data = Model.export_data(ids, field_names, context).get('datas',[])

View File

@ -7,54 +7,399 @@ msgid ""
msgstr ""
"Project-Id-Version: openerp-web\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2011-10-07 10:38+0200\n"
"POT-Creation-Date: 2011-12-20 18:48+0100\n"
"PO-Revision-Date: 2011-11-08 05:44+0000\n"
"Last-Translator: Ahmad Khayyat <Unknown>\n"
"Language-Team: Arabic <ar@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: 2011-11-21 05:49+0000\n"
"X-Generator: Launchpad (build 14299)\n"
"X-Launchpad-Export-Date: 2011-12-21 05:27+0000\n"
"X-Generator: Launchpad (build 14538)\n"
#: addons/web/static/src/js/view_form.js:355
#: addons/web/static/src/js/chrome.js:162
#: addons/web/static/src/js/chrome.js:175
#: addons/web/static/src/js/chrome.js:369
#: addons/web/static/src/js/view_form.js:358
#: addons/web/static/src/js/view_form.js:1078
#: addons/web/static/src/xml/base.xml:0
msgid "Ok"
msgstr "تم"
#: addons/web/static/src/js/chrome.js:668
msgid "About"
msgstr ""
#: addons/web/static/src/js/chrome.js:748
msgid "Preferences"
msgstr ""
#: addons/web/static/src/js/chrome.js:752
msgid "Change password"
msgstr ""
#: addons/web/static/src/js/chrome.js:753
#: addons/web/static/src/js/search.js:235
#: addons/web/static/src/js/search.js:276
#: addons/web/static/src/js/view_editor.js:97
#: addons/web/static/src/js/view_editor.js:778
#: addons/web/static/src/js/view_editor.js:907
#: addons/web/static/src/js/view_form.js:1085
#: addons/web/static/src/xml/base.xml:0
msgid "Cancel"
msgstr "إلغاء"
#: addons/web/static/src/js/chrome.js:754
#: addons/web/static/src/js/view_editor.js:75
#: addons/web/static/src/js/views.js:871 addons/web/static/src/xml/base.xml:0
msgid "Save"
msgstr "حفظ"
#: addons/web/static/src/js/chrome.js:774 addons/web/static/src/xml/base.xml:0
msgid "Change Password"
msgstr ""
#: addons/web/static/src/js/data_export.js:6
msgid "Export Data"
msgstr ""
#: addons/web/static/src/js/data_export.js:23
#: addons/web/static/src/js/data_import.js:73
#: addons/web/static/src/js/view_editor.js:49
#: addons/web/static/src/js/view_editor.js:387
#: addons/web/static/src/js/view_form.js:2775
#: addons/web/static/src/js/views.js:872
msgid "Close"
msgstr "إغلاق"
#: addons/web/static/src/js/data_export.js:24
msgid "Export To File"
msgstr ""
#: addons/web/static/src/js/data_import.js:34
msgid "Import Data"
msgstr ""
#: addons/web/static/src/js/data_import.js:74
msgid "Import File"
msgstr ""
#: addons/web/static/src/js/data_import.js:109
msgid "External ID"
msgstr ""
#: addons/web/static/src/js/search.js:233
msgid "Filter Entry"
msgstr ""
#: addons/web/static/src/js/search.js:238
#: addons/web/static/src/js/search.js:279
msgid "OK"
msgstr ""
#: addons/web/static/src/js/search.js:274 addons/web/static/src/xml/base.xml:0
msgid "Add to Dashboard"
msgstr ""
#: addons/web/static/src/js/search.js:403
msgid "Invalid Search"
msgstr ""
#: addons/web/static/src/js/search.js:403
msgid "triggered from search view"
msgstr ""
#: addons/web/static/src/js/search.js:490
#, python-format
msgid "Incorrect value for field %(fieldname)s: [%(value)s] is %(message)s"
msgstr ""
#: addons/web/static/src/js/search.js:822
msgid "not a valid integer"
msgstr ""
#: addons/web/static/src/js/search.js:836
msgid "not a valid number"
msgstr ""
#: addons/web/static/src/js/search.js:898
msgid "Yes"
msgstr ""
#: addons/web/static/src/js/search.js:899
msgid "No"
msgstr ""
#: addons/web/static/src/js/search.js:1252
msgid "contains"
msgstr ""
#: addons/web/static/src/js/search.js:1253
msgid "doesn't contain"
msgstr ""
#: addons/web/static/src/js/search.js:1254
#: addons/web/static/src/js/search.js:1269
#: addons/web/static/src/js/search.js:1289
#: addons/web/static/src/js/search.js:1309
#: addons/web/static/src/js/search.js:1331
msgid "is equal to"
msgstr ""
#: addons/web/static/src/js/search.js:1255
#: addons/web/static/src/js/search.js:1270
#: addons/web/static/src/js/search.js:1290
#: addons/web/static/src/js/search.js:1310
#: addons/web/static/src/js/search.js:1332
msgid "is not equal to"
msgstr ""
#: addons/web/static/src/js/search.js:1256
#: addons/web/static/src/js/search.js:1271
#: addons/web/static/src/js/search.js:1291
#: addons/web/static/src/js/search.js:1311
#: addons/web/static/src/js/search.js:1333
msgid "greater than"
msgstr ""
#: addons/web/static/src/js/search.js:1257
#: addons/web/static/src/js/search.js:1272
#: addons/web/static/src/js/search.js:1292
#: addons/web/static/src/js/search.js:1312
#: addons/web/static/src/js/search.js:1334
msgid "less than"
msgstr ""
#: addons/web/static/src/js/search.js:1258
#: addons/web/static/src/js/search.js:1273
#: addons/web/static/src/js/search.js:1293
#: addons/web/static/src/js/search.js:1313
#: addons/web/static/src/js/search.js:1335
msgid "greater or equal than"
msgstr ""
#: addons/web/static/src/js/search.js:1259
#: addons/web/static/src/js/search.js:1274
#: addons/web/static/src/js/search.js:1294
#: addons/web/static/src/js/search.js:1314
#: addons/web/static/src/js/search.js:1336
msgid "less or equal than"
msgstr ""
#: addons/web/static/src/js/search.js:1325
#: addons/web/static/src/js/search.js:1350
msgid "is"
msgstr ""
#: addons/web/static/src/js/search.js:1351
msgid "is not"
msgstr ""
#: addons/web/static/src/js/search.js:1364
msgid "is true"
msgstr ""
#: addons/web/static/src/js/search.js:1365
msgid "is false"
msgstr ""
#: addons/web/static/src/js/view_editor.js:42
msgid "ViewEditor"
msgstr ""
#: addons/web/static/src/js/view_editor.js:46
#: addons/web/static/src/js/view_list.js:17
#: addons/web/static/src/xml/base.xml:0
msgid "Create"
msgstr "إنشاء"
#: addons/web/static/src/js/view_editor.js:47
#: addons/web/static/src/xml/base.xml:0
msgid "Edit"
msgstr ""
#: addons/web/static/src/js/view_editor.js:48
#: addons/web/static/src/xml/base.xml:0
msgid "Remove"
msgstr "إزالة"
#: addons/web/static/src/js/view_editor.js:71
#, python-format
msgid "Create a view (%s)"
msgstr ""
#: addons/web/static/src/js/view_editor.js:170
msgid "Do you really want to remove this view?"
msgstr ""
#: addons/web/static/src/js/view_editor.js:367
#, python-format
msgid "View Editor %d - %s"
msgstr ""
#: addons/web/static/src/js/view_editor.js:371
msgid "Preview"
msgstr ""
#: addons/web/static/src/js/view_editor.js:442
msgid "Do you really want to remove this node?"
msgstr ""
#: addons/web/static/src/js/view_editor.js:756
#: addons/web/static/src/js/view_editor.js:883
msgid "Properties"
msgstr ""
#: addons/web/static/src/js/view_editor.js:760
#: addons/web/static/src/js/view_editor.js:887
msgid "Update"
msgstr ""
#: addons/web/static/src/js/view_form.js:17
msgid "Form"
msgstr ""
#: addons/web/static/src/js/view_form.js:401
msgid ""
"Warning, the record has been modified, your changes will be discarded."
msgstr "تحذير، تم تحرير السجل، تعديلاتك سيتم تجاهلها"
#: addons/web/static/src/js/view_form.js:1659
#: addons/web/static/src/js/view_form.js:612
msgid "Attachments"
msgstr ""
#: addons/web/static/src/js/view_form.js:650
#, python-format
msgid "Do you really want to delete the attachment %s?"
msgstr ""
#: addons/web/static/src/js/view_form.js:1075
msgid "Confirm"
msgstr ""
#: addons/web/static/src/js/view_form.js:1838
msgid "<em>   Search More...</em>"
msgstr "<em>    مزيداً من البحث...</em>"
#: addons/web/static/src/js/view_form.js:1672
#: addons/web/static/src/js/view_form.js:1851
#, python-format
msgid "<em>   Create \"<strong>%s</strong>\"</em>"
msgstr "<em>   إنشاء \"<strong>%s</strong>\"</em>"
#: addons/web/static/src/js/view_form.js:1678
#: addons/web/static/src/js/view_form.js:1857
msgid "<em>   Create and Edit...</em>"
msgstr "<em>   إنشاء و تحرير...</em>"
#: addons/web/static/src/js/views.js:568
#: addons/web/static/src/js/view_form.js:2404
#: addons/web/static/src/xml/base.xml:0
msgid "Add"
msgstr "اضافة"
#: addons/web/static/src/js/view_list.js:8
msgid "List"
msgstr ""
#: addons/web/static/src/js/view_list.js:269
msgid "Unlimited"
msgstr ""
#: addons/web/static/src/js/view_list.js:516
msgid "Do you really want to remove these records?"
msgstr ""
#: addons/web/static/src/js/view_list.js:1202
msgid "Undefined"
msgstr ""
#: addons/web/static/src/js/view_page.js:8
msgid "Page"
msgstr ""
#: addons/web/static/src/js/view_page.js:52
msgid "Do you really want to delete this record?"
msgstr ""
#: addons/web/static/src/js/view_page.js:227
msgid "Download"
msgstr ""
#: addons/web/static/src/js/view_tree.js:11
msgid "Tree"
msgstr ""
#: addons/web/static/src/js/views.js:590
msgid "Search: "
msgstr ""
#: addons/web/static/src/js/views.js:710
msgid "Customize"
msgstr ""
#: addons/web/static/src/js/views.js:713
msgid "Manage Views"
msgstr ""
#: addons/web/static/src/js/views.js:715 addons/web/static/src/js/views.js:719
#: addons/web/static/src/js/views.js:724
msgid "Manage views of the current object"
msgstr ""
#: addons/web/static/src/js/views.js:717
msgid "Edit Workflow"
msgstr ""
#: addons/web/static/src/js/views.js:722
msgid "Customize Object"
msgstr ""
#: addons/web/static/src/js/views.js:726
msgid "Translate"
msgstr ""
#: addons/web/static/src/js/views.js:728
msgid "Technical translation"
msgstr ""
#: addons/web/static/src/js/views.js:733
msgid "Other Options"
msgstr ""
#: addons/web/static/src/js/views.js:736 addons/web/static/src/xml/base.xml:0
msgid "Import"
msgstr "استيراد"
#: addons/web/static/src/js/views.js:739 addons/web/static/src/xml/base.xml:0
msgid "Export"
msgstr "تصدير"
#: addons/web/static/src/js/views.js:742
msgid "View Log"
msgstr ""
#: addons/web/static/src/js/views.js:751
msgid "Reports"
msgstr ""
#: addons/web/static/src/js/views.js:751
msgid "Actions"
msgstr ""
#: addons/web/static/src/js/views.js:751
msgid "Links"
msgstr ""
#: addons/web/static/src/js/views.js:831
msgid "You must choose at least one record."
msgstr "عليك إختيار سجل واحد علي الأقل."
#: addons/web/static/src/js/views.js:569
#: addons/web/static/src/js/views.js:832
msgid "Warning"
msgstr "تحذير"
#: addons/web/static/src/js/views.js:609
#: addons/web/static/src/js/views.js:866
msgid "Translations"
msgstr "ترجمات"
#: addons/web/static/src/js/views.js:614 addons/web/static/src/xml/base.xml:0
msgid "Save"
msgstr "حفظ"
#: addons/web/static/src/js/views.js:615
msgid "Close"
msgstr "إغلاق"
#: addons/web/static/src/xml/base.xml:0
msgid "x"
msgstr "x"
@ -83,10 +428,6 @@ msgstr "."
msgid "Loading..."
msgstr "جاري التحميل..."
#: addons/web/static/src/xml/base.xml:0
msgid "Create"
msgstr "إنشاء"
#: addons/web/static/src/xml/base.xml:0
msgid "Drop"
msgstr "إزالة"
@ -269,20 +610,32 @@ msgid "Disable all tips"
msgstr "تعطيل جميع الإرشادات"
#: addons/web/static/src/xml/base.xml:0
msgid "View#"
msgstr "View#"
msgid "More…"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Fields"
msgstr "حقول"
msgid "Debug View#"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "View labels"
msgstr "عرض التسميات"
msgid "- Fields View Get"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Sidebar Relates"
msgstr "روابط الشريط الجانبي"
msgid "- Edit"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "View"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "- Edit SearchView"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "- Edit Action"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Field"
@ -292,62 +645,10 @@ msgstr "حقل"
msgid ":"
msgstr ":"
#: addons/web/static/src/xml/base.xml:0
msgid "Translate view"
msgstr "ترجمة العرض"
#: addons/web/static/src/xml/base.xml:0
msgid "Translate sidebar"
msgstr "ترجمة الشريط الجانبي"
#: addons/web/static/src/xml/base.xml:0
msgid "Delete"
msgstr "حذف"
#: addons/web/static/src/xml/base.xml:0
msgid "First"
msgstr "الأول"
#: addons/web/static/src/xml/base.xml:0
msgid "<"
msgstr "<"
#: addons/web/static/src/xml/base.xml:0
msgid ">"
msgstr ">"
#: addons/web/static/src/xml/base.xml:0
msgid "Last"
msgstr "الأخير"
#: addons/web/static/src/xml/base.xml:0
msgid "♻"
msgstr "♻"
#: addons/web/static/src/xml/base.xml:0
msgid "Save & Edit"
msgstr "حفظ و تحرير"
#: addons/web/static/src/xml/base.xml:0
msgid "Create & Edit"
msgstr "إنشاء و تحرير"
#: addons/web/static/src/xml/base.xml:0
msgid "New"
msgstr "جديد"
#: addons/web/static/src/xml/base.xml:0
msgid "Duplicate"
msgstr "تكرار"
#: addons/web/static/src/xml/base.xml:0
msgid "Readonly/Editable"
msgstr "للقراءة فقط/قابل للتحرير"
#: addons/web/static/src/xml/base.xml:0
msgid "<<"
msgstr ">>"
#: addons/web/static/src/xml/base.xml:0
msgid "0"
msgstr "0"
@ -357,28 +658,88 @@ msgid "/"
msgstr "/"
#: addons/web/static/src/xml/base.xml:0
msgid ">>"
msgstr ">>"
#: addons/web/static/src/xml/base.xml:0
msgid "Add"
msgstr "اضافة"
msgid "Duplicate"
msgstr "تكرار"
#: addons/web/static/src/xml/base.xml:0
msgid "Unhandled widget"
msgstr "أداة غير معالجة"
#: addons/web/static/src/xml/base.xml:0
msgid "Notebook Page \""
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "\""
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Modifiers:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "?"
msgstr "؟"
#: addons/web/static/src/xml/base.xml:0
msgid "#"
msgstr "#"
msgid "(nolabel)"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Done"
msgstr "تم"
msgid "Field:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Object:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Type:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Widget:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Size:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Context:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Domain:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "On change:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Relation:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Selection:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "["
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "]"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "-"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "#"
msgstr "#"
#: addons/web/static/src/xml/base.xml:0
msgid "Open..."
@ -412,18 +773,38 @@ msgstr "حفظ كـ"
msgid "Clear"
msgstr "إفراغ"
#: addons/web/static/src/xml/base.xml:0
msgid "Button"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "(no string)"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Special:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Button Type:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Method:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Action ID:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Search"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Advanced Filter"
msgstr "مرشحات متقدمة"
#: addons/web/static/src/xml/base.xml:0
msgid "-- Filters --"
msgstr "-- مرشحات --"
#: addons/web/static/src/xml/base.xml:0
msgid "-- Actions --"
msgstr "-- إجراءات --"
#: addons/web/static/src/xml/base.xml:0
msgid "Save Filter"
msgstr "حفظ المرشح"
@ -440,6 +821,18 @@ msgstr "اسم المرشح:"
msgid "(Any existing filter with the same name will be replaced)"
msgstr "(لاحظ أن أي مرشح بنفس الاسم سيتم إستبداله)"
#: addons/web/static/src/xml/base.xml:0
msgid "Select Dashboard to add this filter to:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Title of new Dashboard item:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Advanced Filters"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Any of the following conditions must match"
msgstr "يجب تطابق أي من الشروط التالية"
@ -460,10 +853,6 @@ msgstr "إضافة شرط"
msgid "and"
msgstr "و"
#: addons/web/static/src/xml/base.xml:0
msgid "Cancel"
msgstr "إلغاء"
#: addons/web/static/src/xml/base.xml:0
msgid "Save & New"
msgstr "حفظ و جديد"
@ -472,10 +861,6 @@ msgstr "حفظ و جديد"
msgid "Save & Close"
msgstr "حفظ و إغلاق"
#: addons/web/static/src/xml/base.xml:0
msgid "Export"
msgstr "تصدير"
#: addons/web/static/src/xml/base.xml:0
msgid ""
"This wizard will export all data that matches the current search criteria to "
@ -516,10 +901,6 @@ msgstr "حقول للتصدير"
msgid "Save fields list"
msgstr "حفظ قائمة الحقول"
#: addons/web/static/src/xml/base.xml:0
msgid "Remove"
msgstr "إزالة"
#: addons/web/static/src/xml/base.xml:0
msgid "Remove All"
msgstr "إزالة الكل"
@ -536,10 +917,6 @@ msgstr "&nbsp;"
msgid "Save as:"
msgstr "حفظ باسم:"
#: addons/web/static/src/xml/base.xml:0
msgid "Ok"
msgstr "تم"
#: addons/web/static/src/xml/base.xml:0
msgid "Saved exports:"
msgstr "مُصدرة محفوظة:"
@ -556,10 +933,6 @@ msgstr "كلمة المرور الجديدة:"
msgid "Confirm Password:"
msgstr "تأكيد كلمة المرور:"
#: addons/web/static/src/xml/base.xml:0
msgid "Import"
msgstr "استيراد"
#: addons/web/static/src/xml/base.xml:0
msgid "1. Import a .CSV file"
msgstr "إستيراد ملف .CSV"

1050
addons/web/po/bn.po Normal file

File diff suppressed because it is too large Load Diff

View File

@ -7,56 +7,401 @@ msgid ""
msgstr ""
"Project-Id-Version: openerp-web\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2011-10-07 10:38+0200\n"
"POT-Creation-Date: 2011-12-20 18:48+0100\n"
"PO-Revision-Date: 2011-11-08 21:58+0000\n"
"Last-Translator: Jonas Mortensen <Unknown>\n"
"Language-Team: Danish <da@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: 2011-11-21 05:49+0000\n"
"X-Generator: Launchpad (build 14299)\n"
"X-Launchpad-Export-Date: 2011-12-21 05:27+0000\n"
"X-Generator: Launchpad (build 14538)\n"
#: addons/web/static/src/js/view_form.js:355
#: addons/web/static/src/js/chrome.js:162
#: addons/web/static/src/js/chrome.js:175
#: addons/web/static/src/js/chrome.js:369
#: addons/web/static/src/js/view_form.js:358
#: addons/web/static/src/js/view_form.js:1078
#: addons/web/static/src/xml/base.xml:0
msgid "Ok"
msgstr "Ok"
#: addons/web/static/src/js/chrome.js:668
msgid "About"
msgstr ""
#: addons/web/static/src/js/chrome.js:748
msgid "Preferences"
msgstr ""
#: addons/web/static/src/js/chrome.js:752
msgid "Change password"
msgstr ""
#: addons/web/static/src/js/chrome.js:753
#: addons/web/static/src/js/search.js:235
#: addons/web/static/src/js/search.js:276
#: addons/web/static/src/js/view_editor.js:97
#: addons/web/static/src/js/view_editor.js:778
#: addons/web/static/src/js/view_editor.js:907
#: addons/web/static/src/js/view_form.js:1085
#: addons/web/static/src/xml/base.xml:0
msgid "Cancel"
msgstr "Annullér"
#: addons/web/static/src/js/chrome.js:754
#: addons/web/static/src/js/view_editor.js:75
#: addons/web/static/src/js/views.js:871 addons/web/static/src/xml/base.xml:0
msgid "Save"
msgstr "Gem"
#: addons/web/static/src/js/chrome.js:774 addons/web/static/src/xml/base.xml:0
msgid "Change Password"
msgstr ""
#: addons/web/static/src/js/data_export.js:6
msgid "Export Data"
msgstr ""
#: addons/web/static/src/js/data_export.js:23
#: addons/web/static/src/js/data_import.js:73
#: addons/web/static/src/js/view_editor.js:49
#: addons/web/static/src/js/view_editor.js:387
#: addons/web/static/src/js/view_form.js:2775
#: addons/web/static/src/js/views.js:872
msgid "Close"
msgstr "Luk"
#: addons/web/static/src/js/data_export.js:24
msgid "Export To File"
msgstr ""
#: addons/web/static/src/js/data_import.js:34
msgid "Import Data"
msgstr ""
#: addons/web/static/src/js/data_import.js:74
msgid "Import File"
msgstr ""
#: addons/web/static/src/js/data_import.js:109
msgid "External ID"
msgstr ""
#: addons/web/static/src/js/search.js:233
msgid "Filter Entry"
msgstr ""
#: addons/web/static/src/js/search.js:238
#: addons/web/static/src/js/search.js:279
msgid "OK"
msgstr ""
#: addons/web/static/src/js/search.js:274 addons/web/static/src/xml/base.xml:0
msgid "Add to Dashboard"
msgstr ""
#: addons/web/static/src/js/search.js:403
msgid "Invalid Search"
msgstr ""
#: addons/web/static/src/js/search.js:403
msgid "triggered from search view"
msgstr ""
#: addons/web/static/src/js/search.js:490
#, python-format
msgid "Incorrect value for field %(fieldname)s: [%(value)s] is %(message)s"
msgstr ""
#: addons/web/static/src/js/search.js:822
msgid "not a valid integer"
msgstr ""
#: addons/web/static/src/js/search.js:836
msgid "not a valid number"
msgstr ""
#: addons/web/static/src/js/search.js:898
msgid "Yes"
msgstr ""
#: addons/web/static/src/js/search.js:899
msgid "No"
msgstr ""
#: addons/web/static/src/js/search.js:1252
msgid "contains"
msgstr ""
#: addons/web/static/src/js/search.js:1253
msgid "doesn't contain"
msgstr ""
#: addons/web/static/src/js/search.js:1254
#: addons/web/static/src/js/search.js:1269
#: addons/web/static/src/js/search.js:1289
#: addons/web/static/src/js/search.js:1309
#: addons/web/static/src/js/search.js:1331
msgid "is equal to"
msgstr ""
#: addons/web/static/src/js/search.js:1255
#: addons/web/static/src/js/search.js:1270
#: addons/web/static/src/js/search.js:1290
#: addons/web/static/src/js/search.js:1310
#: addons/web/static/src/js/search.js:1332
msgid "is not equal to"
msgstr ""
#: addons/web/static/src/js/search.js:1256
#: addons/web/static/src/js/search.js:1271
#: addons/web/static/src/js/search.js:1291
#: addons/web/static/src/js/search.js:1311
#: addons/web/static/src/js/search.js:1333
msgid "greater than"
msgstr ""
#: addons/web/static/src/js/search.js:1257
#: addons/web/static/src/js/search.js:1272
#: addons/web/static/src/js/search.js:1292
#: addons/web/static/src/js/search.js:1312
#: addons/web/static/src/js/search.js:1334
msgid "less than"
msgstr ""
#: addons/web/static/src/js/search.js:1258
#: addons/web/static/src/js/search.js:1273
#: addons/web/static/src/js/search.js:1293
#: addons/web/static/src/js/search.js:1313
#: addons/web/static/src/js/search.js:1335
msgid "greater or equal than"
msgstr ""
#: addons/web/static/src/js/search.js:1259
#: addons/web/static/src/js/search.js:1274
#: addons/web/static/src/js/search.js:1294
#: addons/web/static/src/js/search.js:1314
#: addons/web/static/src/js/search.js:1336
msgid "less or equal than"
msgstr ""
#: addons/web/static/src/js/search.js:1325
#: addons/web/static/src/js/search.js:1350
msgid "is"
msgstr ""
#: addons/web/static/src/js/search.js:1351
msgid "is not"
msgstr ""
#: addons/web/static/src/js/search.js:1364
msgid "is true"
msgstr ""
#: addons/web/static/src/js/search.js:1365
msgid "is false"
msgstr ""
#: addons/web/static/src/js/view_editor.js:42
msgid "ViewEditor"
msgstr ""
#: addons/web/static/src/js/view_editor.js:46
#: addons/web/static/src/js/view_list.js:17
#: addons/web/static/src/xml/base.xml:0
msgid "Create"
msgstr "Opret"
#: addons/web/static/src/js/view_editor.js:47
#: addons/web/static/src/xml/base.xml:0
msgid "Edit"
msgstr ""
#: addons/web/static/src/js/view_editor.js:48
#: addons/web/static/src/xml/base.xml:0
msgid "Remove"
msgstr "Fjern"
#: addons/web/static/src/js/view_editor.js:71
#, python-format
msgid "Create a view (%s)"
msgstr ""
#: addons/web/static/src/js/view_editor.js:170
msgid "Do you really want to remove this view?"
msgstr ""
#: addons/web/static/src/js/view_editor.js:367
#, python-format
msgid "View Editor %d - %s"
msgstr ""
#: addons/web/static/src/js/view_editor.js:371
msgid "Preview"
msgstr ""
#: addons/web/static/src/js/view_editor.js:442
msgid "Do you really want to remove this node?"
msgstr ""
#: addons/web/static/src/js/view_editor.js:756
#: addons/web/static/src/js/view_editor.js:883
msgid "Properties"
msgstr ""
#: addons/web/static/src/js/view_editor.js:760
#: addons/web/static/src/js/view_editor.js:887
msgid "Update"
msgstr ""
#: addons/web/static/src/js/view_form.js:17
msgid "Form"
msgstr ""
#: addons/web/static/src/js/view_form.js:401
msgid ""
"Warning, the record has been modified, your changes will be discarded."
msgstr ""
"Advarsel, registreringen er blevet ændret, dine ændringer vil derfor blive "
"kasseret."
#: addons/web/static/src/js/view_form.js:1659
#: addons/web/static/src/js/view_form.js:612
msgid "Attachments"
msgstr ""
#: addons/web/static/src/js/view_form.js:650
#, python-format
msgid "Do you really want to delete the attachment %s?"
msgstr ""
#: addons/web/static/src/js/view_form.js:1075
msgid "Confirm"
msgstr ""
#: addons/web/static/src/js/view_form.js:1838
msgid "<em>   Search More...</em>"
msgstr "<em>   Søg efter mere....</em>"
#: addons/web/static/src/js/view_form.js:1672
#: addons/web/static/src/js/view_form.js:1851
#, python-format
msgid "<em>   Create \"<strong>%s</strong>\"</em>"
msgstr "<em>   Create \"<strong>%s</strong>\"</em>"
#: addons/web/static/src/js/view_form.js:1678
#: addons/web/static/src/js/view_form.js:1857
msgid "<em>   Create and Edit...</em>"
msgstr "<em>   Opret og rediger...</em>"
#: addons/web/static/src/js/views.js:568
#: addons/web/static/src/js/view_form.js:2404
#: addons/web/static/src/xml/base.xml:0
msgid "Add"
msgstr "Tilføj"
#: addons/web/static/src/js/view_list.js:8
msgid "List"
msgstr ""
#: addons/web/static/src/js/view_list.js:269
msgid "Unlimited"
msgstr ""
#: addons/web/static/src/js/view_list.js:516
msgid "Do you really want to remove these records?"
msgstr ""
#: addons/web/static/src/js/view_list.js:1202
msgid "Undefined"
msgstr ""
#: addons/web/static/src/js/view_page.js:8
msgid "Page"
msgstr ""
#: addons/web/static/src/js/view_page.js:52
msgid "Do you really want to delete this record?"
msgstr ""
#: addons/web/static/src/js/view_page.js:227
msgid "Download"
msgstr ""
#: addons/web/static/src/js/view_tree.js:11
msgid "Tree"
msgstr ""
#: addons/web/static/src/js/views.js:590
msgid "Search: "
msgstr ""
#: addons/web/static/src/js/views.js:710
msgid "Customize"
msgstr ""
#: addons/web/static/src/js/views.js:713
msgid "Manage Views"
msgstr ""
#: addons/web/static/src/js/views.js:715 addons/web/static/src/js/views.js:719
#: addons/web/static/src/js/views.js:724
msgid "Manage views of the current object"
msgstr ""
#: addons/web/static/src/js/views.js:717
msgid "Edit Workflow"
msgstr ""
#: addons/web/static/src/js/views.js:722
msgid "Customize Object"
msgstr ""
#: addons/web/static/src/js/views.js:726
msgid "Translate"
msgstr ""
#: addons/web/static/src/js/views.js:728
msgid "Technical translation"
msgstr ""
#: addons/web/static/src/js/views.js:733
msgid "Other Options"
msgstr ""
#: addons/web/static/src/js/views.js:736 addons/web/static/src/xml/base.xml:0
msgid "Import"
msgstr "Importér"
#: addons/web/static/src/js/views.js:739 addons/web/static/src/xml/base.xml:0
msgid "Export"
msgstr "Eksportér"
#: addons/web/static/src/js/views.js:742
msgid "View Log"
msgstr ""
#: addons/web/static/src/js/views.js:751
msgid "Reports"
msgstr ""
#: addons/web/static/src/js/views.js:751
msgid "Actions"
msgstr ""
#: addons/web/static/src/js/views.js:751
msgid "Links"
msgstr ""
#: addons/web/static/src/js/views.js:831
msgid "You must choose at least one record."
msgstr "Du skal vælge mindst en registrering."
#: addons/web/static/src/js/views.js:569
#: addons/web/static/src/js/views.js:832
msgid "Warning"
msgstr "Advarsel"
#: addons/web/static/src/js/views.js:609
#: addons/web/static/src/js/views.js:866
msgid "Translations"
msgstr "Oversættelser"
#: addons/web/static/src/js/views.js:614 addons/web/static/src/xml/base.xml:0
msgid "Save"
msgstr "Gem"
#: addons/web/static/src/js/views.js:615
msgid "Close"
msgstr "Luk"
#: addons/web/static/src/xml/base.xml:0
msgid "x"
msgstr "x"
@ -85,10 +430,6 @@ msgstr ","
msgid "Loading..."
msgstr "Indlæser..."
#: addons/web/static/src/xml/base.xml:0
msgid "Create"
msgstr "Opret"
#: addons/web/static/src/xml/base.xml:0
msgid "Drop"
msgstr "Drop"
@ -275,20 +616,32 @@ msgid "Disable all tips"
msgstr "Deaktiver alle tips"
#: addons/web/static/src/xml/base.xml:0
msgid "View#"
msgstr "View#"
msgid "More…"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Fields"
msgstr "Felter"
msgid "Debug View#"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "View labels"
msgstr "Vis etiketter"
msgid "- Fields View Get"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Sidebar Relates"
msgstr "Relaterede til Sidebare"
msgid "- Edit"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "View"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "- Edit SearchView"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "- Edit Action"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Field"
@ -298,62 +651,10 @@ msgstr "Felt"
msgid ":"
msgstr ":"
#: addons/web/static/src/xml/base.xml:0
msgid "Translate view"
msgstr "Se oversættelse"
#: addons/web/static/src/xml/base.xml:0
msgid "Translate sidebar"
msgstr "Oversæt sidebar"
#: addons/web/static/src/xml/base.xml:0
msgid "Delete"
msgstr "Slet"
#: addons/web/static/src/xml/base.xml:0
msgid "First"
msgstr "Første"
#: addons/web/static/src/xml/base.xml:0
msgid "<"
msgstr "<"
#: addons/web/static/src/xml/base.xml:0
msgid ">"
msgstr ">"
#: addons/web/static/src/xml/base.xml:0
msgid "Last"
msgstr "Sidste"
#: addons/web/static/src/xml/base.xml:0
msgid "♻"
msgstr "♻"
#: addons/web/static/src/xml/base.xml:0
msgid "Save & Edit"
msgstr "Gem & Rediger"
#: addons/web/static/src/xml/base.xml:0
msgid "Create & Edit"
msgstr "Opret & Rediger"
#: addons/web/static/src/xml/base.xml:0
msgid "New"
msgstr "Ny"
#: addons/web/static/src/xml/base.xml:0
msgid "Duplicate"
msgstr "Duplikér"
#: addons/web/static/src/xml/base.xml:0
msgid "Readonly/Editable"
msgstr "Skrivebeskyttet/redigerbar"
#: addons/web/static/src/xml/base.xml:0
msgid "<<"
msgstr "<<"
#: addons/web/static/src/xml/base.xml:0
msgid "0"
msgstr "0"
@ -363,28 +664,88 @@ msgid "/"
msgstr "/"
#: addons/web/static/src/xml/base.xml:0
msgid ">>"
msgstr ">>"
#: addons/web/static/src/xml/base.xml:0
msgid "Add"
msgstr "Tilføj"
msgid "Duplicate"
msgstr "Duplikér"
#: addons/web/static/src/xml/base.xml:0
msgid "Unhandled widget"
msgstr "Ubehandlet widget"
#: addons/web/static/src/xml/base.xml:0
msgid "Notebook Page \""
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "\""
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Modifiers:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "?"
msgstr "?"
#: addons/web/static/src/xml/base.xml:0
msgid "#"
msgstr "#"
msgid "(nolabel)"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Done"
msgstr "Udført"
msgid "Field:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Object:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Type:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Widget:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Size:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Context:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Domain:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "On change:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Relation:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Selection:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "["
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "]"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "-"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "#"
msgstr "#"
#: addons/web/static/src/xml/base.xml:0
msgid "Open..."
@ -418,18 +779,38 @@ msgstr "Gem Som"
msgid "Clear"
msgstr "Ryd"
#: addons/web/static/src/xml/base.xml:0
msgid "Button"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "(no string)"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Special:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Button Type:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Method:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Action ID:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Search"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Advanced Filter"
msgstr "Avanceret filtrering"
#: addons/web/static/src/xml/base.xml:0
msgid "-- Filters --"
msgstr "-- Filtreringer --"
#: addons/web/static/src/xml/base.xml:0
msgid "-- Actions --"
msgstr "-- Handlinger --"
#: addons/web/static/src/xml/base.xml:0
msgid "Save Filter"
msgstr "Gem filter"
@ -446,6 +827,18 @@ msgstr "Filter Navn:"
msgid "(Any existing filter with the same name will be replaced)"
msgstr "(Et hvert filter med samme navn vil blive overskrevet)"
#: addons/web/static/src/xml/base.xml:0
msgid "Select Dashboard to add this filter to:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Title of new Dashboard item:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Advanced Filters"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Any of the following conditions must match"
msgstr "Enhver af de følgende betingelser skal være opfyldt"
@ -466,10 +859,6 @@ msgstr "Tilføj betingelse"
msgid "and"
msgstr "og"
#: addons/web/static/src/xml/base.xml:0
msgid "Cancel"
msgstr "Annullér"
#: addons/web/static/src/xml/base.xml:0
msgid "Save & New"
msgstr "Gem & Ny"
@ -478,10 +867,6 @@ msgstr "Gem & Ny"
msgid "Save & Close"
msgstr "Gem & Luk"
#: addons/web/static/src/xml/base.xml:0
msgid "Export"
msgstr "Eksportér"
#: addons/web/static/src/xml/base.xml:0
msgid ""
"This wizard will export all data that matches the current search criteria to "
@ -522,10 +907,6 @@ msgstr "Felter der kan eksporteres"
msgid "Save fields list"
msgstr "Gem listen med felter"
#: addons/web/static/src/xml/base.xml:0
msgid "Remove"
msgstr "Fjern"
#: addons/web/static/src/xml/base.xml:0
msgid "Remove All"
msgstr "Fjern alle"
@ -542,10 +923,6 @@ msgstr "&nbsp;"
msgid "Save as:"
msgstr "Gem som:"
#: addons/web/static/src/xml/base.xml:0
msgid "Ok"
msgstr "Ok"
#: addons/web/static/src/xml/base.xml:0
msgid "Saved exports:"
msgstr "Gem eksporteringer"
@ -562,10 +939,6 @@ msgstr "Ny adgangskode:"
msgid "Confirm Password:"
msgstr "Bekræft adgangskode:"
#: addons/web/static/src/xml/base.xml:0
msgid "Import"
msgstr "Importér"
#: addons/web/static/src/xml/base.xml:0
msgid "1. Import a .CSV file"
msgstr "1. Importér en .CSV fil"

View File

@ -7,66 +7,411 @@ msgid ""
msgstr ""
"Project-Id-Version: openerp-web\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2011-10-07 10:38+0200\n"
"PO-Revision-Date: 2011-10-10 20:59+0000\n"
"Last-Translator: Felix Schubert <Unknown>\n"
"POT-Creation-Date: 2011-12-20 18:48+0100\n"
"PO-Revision-Date: 2011-12-20 22:49+0000\n"
"Last-Translator: Ferdinand @ Camptocamp <Unknown>\n"
"Language-Team: German <de@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: 2011-11-21 05:50+0000\n"
"X-Generator: Launchpad (build 14299)\n"
"X-Launchpad-Export-Date: 2011-12-21 05:27+0000\n"
"X-Generator: Launchpad (build 14538)\n"
#: addons/web/static/src/js/view_form.js:355
#: addons/web/static/src/js/chrome.js:162
#: addons/web/static/src/js/chrome.js:175
#: addons/web/static/src/js/chrome.js:369
#: addons/web/static/src/js/view_form.js:358
#: addons/web/static/src/js/view_form.js:1078
#: addons/web/static/src/xml/base.xml:0
msgid "Ok"
msgstr "Ok"
#: addons/web/static/src/js/chrome.js:668
msgid "About"
msgstr "Info"
#: addons/web/static/src/js/chrome.js:748
msgid "Preferences"
msgstr "Einstellungen"
#: addons/web/static/src/js/chrome.js:752
msgid "Change password"
msgstr "Passwort ändern"
#: addons/web/static/src/js/chrome.js:753
#: addons/web/static/src/js/search.js:235
#: addons/web/static/src/js/search.js:276
#: addons/web/static/src/js/view_editor.js:97
#: addons/web/static/src/js/view_editor.js:778
#: addons/web/static/src/js/view_editor.js:907
#: addons/web/static/src/js/view_form.js:1085
#: addons/web/static/src/xml/base.xml:0
msgid "Cancel"
msgstr "Abbrechen"
#: addons/web/static/src/js/chrome.js:754
#: addons/web/static/src/js/view_editor.js:75
#: addons/web/static/src/js/views.js:871 addons/web/static/src/xml/base.xml:0
msgid "Save"
msgstr "Speichern"
#: addons/web/static/src/js/chrome.js:774 addons/web/static/src/xml/base.xml:0
msgid "Change Password"
msgstr "Passwort ändern"
#: addons/web/static/src/js/data_export.js:6
msgid "Export Data"
msgstr "Daten exportieren"
#: addons/web/static/src/js/data_export.js:23
#: addons/web/static/src/js/data_import.js:73
#: addons/web/static/src/js/view_editor.js:49
#: addons/web/static/src/js/view_editor.js:387
#: addons/web/static/src/js/view_form.js:2775
#: addons/web/static/src/js/views.js:872
msgid "Close"
msgstr "Schließen"
#: addons/web/static/src/js/data_export.js:24
msgid "Export To File"
msgstr "In Datei exportieren"
#: addons/web/static/src/js/data_import.js:34
msgid "Import Data"
msgstr "Daten importieren"
#: addons/web/static/src/js/data_import.js:74
msgid "Import File"
msgstr "Datei importieren"
#: addons/web/static/src/js/data_import.js:109
msgid "External ID"
msgstr "Externe ID"
#: addons/web/static/src/js/search.js:233
msgid "Filter Entry"
msgstr "Eintrag filtern"
#: addons/web/static/src/js/search.js:238
#: addons/web/static/src/js/search.js:279
msgid "OK"
msgstr "OK"
#: addons/web/static/src/js/search.js:274 addons/web/static/src/xml/base.xml:0
msgid "Add to Dashboard"
msgstr "Zur Anzeigetafel hinzufügen"
#: addons/web/static/src/js/search.js:403
msgid "Invalid Search"
msgstr "Ungültige Suche"
#: addons/web/static/src/js/search.js:403
msgid "triggered from search view"
msgstr "von der Suchansicht ausgelöst"
#: addons/web/static/src/js/search.js:490
#, python-format
msgid "Incorrect value for field %(fieldname)s: [%(value)s] is %(message)s"
msgstr "Ungültiger Wert für Feld %(fieldname)s: [%(value)s] is %(message)s"
#: addons/web/static/src/js/search.js:822
msgid "not a valid integer"
msgstr "ungültiger Trigger"
#: addons/web/static/src/js/search.js:836
msgid "not a valid number"
msgstr "ungültige Nummer"
#: addons/web/static/src/js/search.js:898
msgid "Yes"
msgstr "Ja."
#: addons/web/static/src/js/search.js:899
msgid "No"
msgstr "Nein"
#: addons/web/static/src/js/search.js:1252
msgid "contains"
msgstr "enthält"
#: addons/web/static/src/js/search.js:1253
msgid "doesn't contain"
msgstr "enthält nicht"
#: addons/web/static/src/js/search.js:1254
#: addons/web/static/src/js/search.js:1269
#: addons/web/static/src/js/search.js:1289
#: addons/web/static/src/js/search.js:1309
#: addons/web/static/src/js/search.js:1331
msgid "is equal to"
msgstr "Ist gleich"
#: addons/web/static/src/js/search.js:1255
#: addons/web/static/src/js/search.js:1270
#: addons/web/static/src/js/search.js:1290
#: addons/web/static/src/js/search.js:1310
#: addons/web/static/src/js/search.js:1332
msgid "is not equal to"
msgstr "ist ungleich"
#: addons/web/static/src/js/search.js:1256
#: addons/web/static/src/js/search.js:1271
#: addons/web/static/src/js/search.js:1291
#: addons/web/static/src/js/search.js:1311
#: addons/web/static/src/js/search.js:1333
msgid "greater than"
msgstr "ist größer als"
#: addons/web/static/src/js/search.js:1257
#: addons/web/static/src/js/search.js:1272
#: addons/web/static/src/js/search.js:1292
#: addons/web/static/src/js/search.js:1312
#: addons/web/static/src/js/search.js:1334
msgid "less than"
msgstr "ist kleiner als"
#: addons/web/static/src/js/search.js:1258
#: addons/web/static/src/js/search.js:1273
#: addons/web/static/src/js/search.js:1293
#: addons/web/static/src/js/search.js:1313
#: addons/web/static/src/js/search.js:1335
msgid "greater or equal than"
msgstr "ist größer oder gleich als"
#: addons/web/static/src/js/search.js:1259
#: addons/web/static/src/js/search.js:1274
#: addons/web/static/src/js/search.js:1294
#: addons/web/static/src/js/search.js:1314
#: addons/web/static/src/js/search.js:1336
msgid "less or equal than"
msgstr "ist kleiner oder gleich als"
#: addons/web/static/src/js/search.js:1325
#: addons/web/static/src/js/search.js:1350
msgid "is"
msgstr "ist"
#: addons/web/static/src/js/search.js:1351
msgid "is not"
msgstr "ist nicht"
#: addons/web/static/src/js/search.js:1364
msgid "is true"
msgstr "ist Wahr"
#: addons/web/static/src/js/search.js:1365
msgid "is false"
msgstr "ist falsch"
#: addons/web/static/src/js/view_editor.js:42
msgid "ViewEditor"
msgstr "Sicht-Editor"
#: addons/web/static/src/js/view_editor.js:46
#: addons/web/static/src/js/view_list.js:17
#: addons/web/static/src/xml/base.xml:0
msgid "Create"
msgstr "Erzeugen"
#: addons/web/static/src/js/view_editor.js:47
#: addons/web/static/src/xml/base.xml:0
msgid "Edit"
msgstr "Bearbeiten"
#: addons/web/static/src/js/view_editor.js:48
#: addons/web/static/src/xml/base.xml:0
msgid "Remove"
msgstr "Löschen"
#: addons/web/static/src/js/view_editor.js:71
#, python-format
msgid "Create a view (%s)"
msgstr "Erstelle Sicht (%s)"
#: addons/web/static/src/js/view_editor.js:170
msgid "Do you really want to remove this view?"
msgstr "Möchten Sie diese Sicht wirklich entfernen"
#: addons/web/static/src/js/view_editor.js:367
#, python-format
msgid "View Editor %d - %s"
msgstr "Sicht Editor %d - %s"
#: addons/web/static/src/js/view_editor.js:371
msgid "Preview"
msgstr "Voransicht"
#: addons/web/static/src/js/view_editor.js:442
msgid "Do you really want to remove this node?"
msgstr "Möchten Sie diesen Knoten wirklich entfernen?"
#: addons/web/static/src/js/view_editor.js:756
#: addons/web/static/src/js/view_editor.js:883
msgid "Properties"
msgstr "Eigenschaften"
#: addons/web/static/src/js/view_editor.js:760
#: addons/web/static/src/js/view_editor.js:887
msgid "Update"
msgstr "Aktualisieren"
#: addons/web/static/src/js/view_form.js:17
msgid "Form"
msgstr "Formular"
#: addons/web/static/src/js/view_form.js:401
msgid ""
"Warning, the record has been modified, your changes will be discarded."
msgstr ""
"Achtung der Datensatz wurde bearbeitet, alle Änderungen werden verworfen!"
#: addons/web/static/src/js/view_form.js:1659
#: addons/web/static/src/js/view_form.js:612
msgid "Attachments"
msgstr "Anhänge"
#: addons/web/static/src/js/view_form.js:650
#, python-format
msgid "Do you really want to delete the attachment %s?"
msgstr "Wollen Sie den Anhang %s wirklich löschen"
#: addons/web/static/src/js/view_form.js:1075
msgid "Confirm"
msgstr "Bestätigen"
#: addons/web/static/src/js/view_form.js:1838
msgid "<em>   Search More...</em>"
msgstr "<em>   Suche mehr...</em>"
#: addons/web/static/src/js/view_form.js:1672
#: addons/web/static/src/js/view_form.js:1851
#, python-format
msgid "<em>   Create \"<strong>%s</strong>\"</em>"
msgstr "<em>   Anlegen \"<strong>%s</strong>\"</em>"
#: addons/web/static/src/js/view_form.js:1678
#: addons/web/static/src/js/view_form.js:1857
msgid "<em>   Create and Edit...</em>"
msgstr "<em>   Anlegen und Bearbeiten...</em>"
#: addons/web/static/src/js/views.js:568
#: addons/web/static/src/js/view_form.js:2404
#: addons/web/static/src/xml/base.xml:0
msgid "Add"
msgstr "Hinzufügen"
#: addons/web/static/src/js/view_list.js:8
msgid "List"
msgstr "Liste"
#: addons/web/static/src/js/view_list.js:269
msgid "Unlimited"
msgstr "Unbegrenzt"
#: addons/web/static/src/js/view_list.js:516
msgid "Do you really want to remove these records?"
msgstr "Möchten Sie diese Datensätze wirklich löschen"
#: addons/web/static/src/js/view_list.js:1202
msgid "Undefined"
msgstr "Undefiniert"
#: addons/web/static/src/js/view_page.js:8
msgid "Page"
msgstr "Seite"
#: addons/web/static/src/js/view_page.js:52
msgid "Do you really want to delete this record?"
msgstr "Möchten Sie diesen Datensatz wirklich löschen?"
#: addons/web/static/src/js/view_page.js:227
msgid "Download"
msgstr "Herunterladen"
#: addons/web/static/src/js/view_tree.js:11
msgid "Tree"
msgstr "Baum"
#: addons/web/static/src/js/views.js:590
msgid "Search: "
msgstr "Suche: "
#: addons/web/static/src/js/views.js:710
msgid "Customize"
msgstr "Anpassen"
#: addons/web/static/src/js/views.js:713
msgid "Manage Views"
msgstr "Ansichten verwalten"
#: addons/web/static/src/js/views.js:715 addons/web/static/src/js/views.js:719
#: addons/web/static/src/js/views.js:724
msgid "Manage views of the current object"
msgstr "Ansichten des aktuelllen Objekts verwalten"
#: addons/web/static/src/js/views.js:717
msgid "Edit Workflow"
msgstr "Workflow bearbeiten"
#: addons/web/static/src/js/views.js:722
msgid "Customize Object"
msgstr "Objekt anpassen"
#: addons/web/static/src/js/views.js:726
msgid "Translate"
msgstr "Übersetzen"
#: addons/web/static/src/js/views.js:728
msgid "Technical translation"
msgstr "Technische Übersetzung"
#: addons/web/static/src/js/views.js:733
msgid "Other Options"
msgstr "Weitere Optionen"
#: addons/web/static/src/js/views.js:736 addons/web/static/src/xml/base.xml:0
msgid "Import"
msgstr "Import"
#: addons/web/static/src/js/views.js:739 addons/web/static/src/xml/base.xml:0
msgid "Export"
msgstr "Export"
#: addons/web/static/src/js/views.js:742
msgid "View Log"
msgstr "Protokoll anzeigen"
#: addons/web/static/src/js/views.js:751
msgid "Reports"
msgstr "Berichte"
#: addons/web/static/src/js/views.js:751
msgid "Actions"
msgstr "Aktionen"
#: addons/web/static/src/js/views.js:751
msgid "Links"
msgstr "Links"
#: addons/web/static/src/js/views.js:831
msgid "You must choose at least one record."
msgstr "Sie müssen mindestens einen Datensatz auswählen"
#: addons/web/static/src/js/views.js:569
#: addons/web/static/src/js/views.js:832
msgid "Warning"
msgstr "Warnung!"
#: addons/web/static/src/js/views.js:609
#: addons/web/static/src/js/views.js:866
msgid "Translations"
msgstr "Übersetzungen"
#: addons/web/static/src/js/views.js:614 addons/web/static/src/xml/base.xml:0
msgid "Save"
msgstr "Speichern"
#: addons/web/static/src/js/views.js:615
msgid "Close"
msgstr "Schließen"
#: addons/web/static/src/xml/base.xml:0
msgid "x"
msgstr "x"
#: addons/web/static/src/xml/base.xml:0
msgid "#{title}"
msgstr ""
msgstr "#{title}"
#: addons/web/static/src/xml/base.xml:0
msgid "#{text}"
msgstr ""
msgstr "#{text}"
#: addons/web/static/src/xml/base.xml:0
msgid "Powered by"
@ -84,10 +429,6 @@ msgstr "."
msgid "Loading..."
msgstr "Lade..."
#: addons/web/static/src/xml/base.xml:0
msgid "Create"
msgstr "Erzeugen"
#: addons/web/static/src/xml/base.xml:0
msgid "Drop"
msgstr "Löschen"
@ -276,20 +617,32 @@ msgid "Disable all tips"
msgstr "Deaktiviere alle Tipps"
#: addons/web/static/src/xml/base.xml:0
msgid "View#"
msgstr "Ansicht#"
msgid "More…"
msgstr "Mehr ..."
#: addons/web/static/src/xml/base.xml:0
msgid "Fields"
msgstr "Felder"
msgid "Debug View#"
msgstr "Source von Sicht#"
#: addons/web/static/src/xml/base.xml:0
msgid "View labels"
msgstr "Feldbeschreibung anzeigen"
msgid "- Fields View Get"
msgstr "- Fields View Get"
#: addons/web/static/src/xml/base.xml:0
msgid "Sidebar Relates"
msgstr "Seitenleiste bezieht sich auf"
msgid "- Edit"
msgstr "- Edit"
#: addons/web/static/src/xml/base.xml:0
msgid "View"
msgstr "Sicht"
#: addons/web/static/src/xml/base.xml:0
msgid "- Edit SearchView"
msgstr "- Edit SearchView"
#: addons/web/static/src/xml/base.xml:0
msgid "- Edit Action"
msgstr "- Edit Action"
#: addons/web/static/src/xml/base.xml:0
msgid "Field"
@ -299,62 +652,10 @@ msgstr "Feld"
msgid ":"
msgstr ":"
#: addons/web/static/src/xml/base.xml:0
msgid "Translate view"
msgstr "Übersetungsansicht"
#: addons/web/static/src/xml/base.xml:0
msgid "Translate sidebar"
msgstr "Seitenleiste übersetzen"
#: addons/web/static/src/xml/base.xml:0
msgid "Delete"
msgstr "Löschen"
#: addons/web/static/src/xml/base.xml:0
msgid "First"
msgstr "Erste"
#: addons/web/static/src/xml/base.xml:0
msgid "<"
msgstr "<"
#: addons/web/static/src/xml/base.xml:0
msgid ">"
msgstr ">"
#: addons/web/static/src/xml/base.xml:0
msgid "Last"
msgstr "Ende"
#: addons/web/static/src/xml/base.xml:0
msgid "♻"
msgstr "♻"
#: addons/web/static/src/xml/base.xml:0
msgid "Save & Edit"
msgstr "Sichern & Bearbeiten"
#: addons/web/static/src/xml/base.xml:0
msgid "Create & Edit"
msgstr "Anlegen & Bearbeiten"
#: addons/web/static/src/xml/base.xml:0
msgid "New"
msgstr "Neu"
#: addons/web/static/src/xml/base.xml:0
msgid "Duplicate"
msgstr "Kopieren"
#: addons/web/static/src/xml/base.xml:0
msgid "Readonly/Editable"
msgstr "Lesezugriff/Bearbeitbar"
#: addons/web/static/src/xml/base.xml:0
msgid "<<"
msgstr "<<"
#: addons/web/static/src/xml/base.xml:0
msgid "0"
msgstr "0"
@ -364,28 +665,88 @@ msgid "/"
msgstr "/"
#: addons/web/static/src/xml/base.xml:0
msgid ">>"
msgstr ">>"
#: addons/web/static/src/xml/base.xml:0
msgid "Add"
msgstr "Hinzufügen"
msgid "Duplicate"
msgstr "Kopieren"
#: addons/web/static/src/xml/base.xml:0
msgid "Unhandled widget"
msgstr ""
msgstr "unbekanntes Oberflächenelement"
#: addons/web/static/src/xml/base.xml:0
msgid "Notebook Page \""
msgstr "Notizbuch Seite \""
#: addons/web/static/src/xml/base.xml:0
msgid "\""
msgstr "\""
#: addons/web/static/src/xml/base.xml:0
msgid "Modifiers:"
msgstr "Modifikatoren:"
#: addons/web/static/src/xml/base.xml:0
msgid "?"
msgstr "?"
#: addons/web/static/src/xml/base.xml:0
msgid "#"
msgstr "Nr."
msgid "(nolabel)"
msgstr "(keine Bezeichnung)"
#: addons/web/static/src/xml/base.xml:0
msgid "Done"
msgstr "Abgeschlossen"
msgid "Field:"
msgstr "Feld:"
#: addons/web/static/src/xml/base.xml:0
msgid "Object:"
msgstr "Objekt:"
#: addons/web/static/src/xml/base.xml:0
msgid "Type:"
msgstr "Typ:"
#: addons/web/static/src/xml/base.xml:0
msgid "Widget:"
msgstr "Bedienelement:"
#: addons/web/static/src/xml/base.xml:0
msgid "Size:"
msgstr "Größe:"
#: addons/web/static/src/xml/base.xml:0
msgid "Context:"
msgstr "Kontext:"
#: addons/web/static/src/xml/base.xml:0
msgid "Domain:"
msgstr "Domäne:"
#: addons/web/static/src/xml/base.xml:0
msgid "On change:"
msgstr "Bei Änderung"
#: addons/web/static/src/xml/base.xml:0
msgid "Relation:"
msgstr "Relation:"
#: addons/web/static/src/xml/base.xml:0
msgid "Selection:"
msgstr "Auswahl:"
#: addons/web/static/src/xml/base.xml:0
msgid "["
msgstr "["
#: addons/web/static/src/xml/base.xml:0
msgid "]"
msgstr "]"
#: addons/web/static/src/xml/base.xml:0
msgid "-"
msgstr "-"
#: addons/web/static/src/xml/base.xml:0
msgid "#"
msgstr "Nr."
#: addons/web/static/src/xml/base.xml:0
msgid "Open..."
@ -419,18 +780,38 @@ msgstr "Speichern unter"
msgid "Clear"
msgstr "Leeren"
#: addons/web/static/src/xml/base.xml:0
msgid "Button"
msgstr "Schaltfläche"
#: addons/web/static/src/xml/base.xml:0
msgid "(no string)"
msgstr "(keine Zeichen)"
#: addons/web/static/src/xml/base.xml:0
msgid "Special:"
msgstr "Spezial:"
#: addons/web/static/src/xml/base.xml:0
msgid "Button Type:"
msgstr "Schaltfläche Typ:"
#: addons/web/static/src/xml/base.xml:0
msgid "Method:"
msgstr "Methode:"
#: addons/web/static/src/xml/base.xml:0
msgid "Action ID:"
msgstr "Aktion ID:"
#: addons/web/static/src/xml/base.xml:0
msgid "Search"
msgstr "Suche"
#: addons/web/static/src/xml/base.xml:0
msgid "Advanced Filter"
msgstr "Erweiterter Filter"
#: addons/web/static/src/xml/base.xml:0
msgid "-- Filters --"
msgstr "-- Filter --"
#: addons/web/static/src/xml/base.xml:0
msgid "-- Actions --"
msgstr "-- Aktionen --"
#: addons/web/static/src/xml/base.xml:0
msgid "Save Filter"
msgstr "Filter speichern"
@ -447,6 +828,18 @@ msgstr "Filter Name:"
msgid "(Any existing filter with the same name will be replaced)"
msgstr "(Jeder existierende Filter mit dem selben Namen wird ersetzt)"
#: addons/web/static/src/xml/base.xml:0
msgid "Select Dashboard to add this filter to:"
msgstr "Anzeigetafel wählen, zu der der Filter hinzugefügt werden soll"
#: addons/web/static/src/xml/base.xml:0
msgid "Title of new Dashboard item:"
msgstr "Titel des neuen Elements einer Anzeigetafel"
#: addons/web/static/src/xml/base.xml:0
msgid "Advanced Filters"
msgstr "Erweiterte Filter"
#: addons/web/static/src/xml/base.xml:0
msgid "Any of the following conditions must match"
msgstr "Eine der folgenden Bedingungen muss zutreffen"
@ -467,10 +860,6 @@ msgstr "Bedingung hinzufügen"
msgid "and"
msgstr "und"
#: addons/web/static/src/xml/base.xml:0
msgid "Cancel"
msgstr "Abbrechen"
#: addons/web/static/src/xml/base.xml:0
msgid "Save & New"
msgstr "Speichern & Neu"
@ -479,10 +868,6 @@ msgstr "Speichern & Neu"
msgid "Save & Close"
msgstr "Speichern & Beenden"
#: addons/web/static/src/xml/base.xml:0
msgid "Export"
msgstr "Export"
#: addons/web/static/src/xml/base.xml:0
msgid ""
"This wizard will export all data that matches the current search criteria to "
@ -523,10 +908,6 @@ msgstr "Zu exportierende Felder"
msgid "Save fields list"
msgstr "Feldliste speichern"
#: addons/web/static/src/xml/base.xml:0
msgid "Remove"
msgstr "Löschen"
#: addons/web/static/src/xml/base.xml:0
msgid "Remove All"
msgstr "Alle löschen"
@ -543,10 +924,6 @@ msgstr "&nbsp;"
msgid "Save as:"
msgstr "Speichern unter:"
#: addons/web/static/src/xml/base.xml:0
msgid "Ok"
msgstr "Ok"
#: addons/web/static/src/xml/base.xml:0
msgid "Saved exports:"
msgstr "Gespeicherte Exporte:"
@ -563,10 +940,6 @@ msgstr "Neues Passwort:"
msgid "Confirm Password:"
msgstr "Passwort bestätigen:"
#: addons/web/static/src/xml/base.xml:0
msgid "Import"
msgstr "Import"
#: addons/web/static/src/xml/base.xml:0
msgid "1. Import a .CSV file"
msgstr "1. Importiere eine .CSV Datei"

View File

@ -7,55 +7,400 @@ msgid ""
msgstr ""
"Project-Id-Version: openerp-web\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2011-10-07 10:38+0200\n"
"POT-Creation-Date: 2011-12-20 18:48+0100\n"
"PO-Revision-Date: 2011-10-19 07:27+0000\n"
"Last-Translator: Amós Oviedo <Unknown>\n"
"Language-Team: Spanish <es@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: 2011-11-21 05:50+0000\n"
"X-Generator: Launchpad (build 14299)\n"
"X-Launchpad-Export-Date: 2011-12-21 05:27+0000\n"
"X-Generator: Launchpad (build 14538)\n"
#: addons/web/static/src/js/view_form.js:355
#: addons/web/static/src/js/chrome.js:162
#: addons/web/static/src/js/chrome.js:175
#: addons/web/static/src/js/chrome.js:369
#: addons/web/static/src/js/view_form.js:358
#: addons/web/static/src/js/view_form.js:1078
#: addons/web/static/src/xml/base.xml:0
msgid "Ok"
msgstr "Ok"
#: addons/web/static/src/js/chrome.js:668
msgid "About"
msgstr ""
#: addons/web/static/src/js/chrome.js:748
msgid "Preferences"
msgstr ""
#: addons/web/static/src/js/chrome.js:752
msgid "Change password"
msgstr ""
#: addons/web/static/src/js/chrome.js:753
#: addons/web/static/src/js/search.js:235
#: addons/web/static/src/js/search.js:276
#: addons/web/static/src/js/view_editor.js:97
#: addons/web/static/src/js/view_editor.js:778
#: addons/web/static/src/js/view_editor.js:907
#: addons/web/static/src/js/view_form.js:1085
#: addons/web/static/src/xml/base.xml:0
msgid "Cancel"
msgstr "Cancelar"
#: addons/web/static/src/js/chrome.js:754
#: addons/web/static/src/js/view_editor.js:75
#: addons/web/static/src/js/views.js:871 addons/web/static/src/xml/base.xml:0
msgid "Save"
msgstr "Guardar"
#: addons/web/static/src/js/chrome.js:774 addons/web/static/src/xml/base.xml:0
msgid "Change Password"
msgstr ""
#: addons/web/static/src/js/data_export.js:6
msgid "Export Data"
msgstr ""
#: addons/web/static/src/js/data_export.js:23
#: addons/web/static/src/js/data_import.js:73
#: addons/web/static/src/js/view_editor.js:49
#: addons/web/static/src/js/view_editor.js:387
#: addons/web/static/src/js/view_form.js:2775
#: addons/web/static/src/js/views.js:872
msgid "Close"
msgstr "Cerrar"
#: addons/web/static/src/js/data_export.js:24
msgid "Export To File"
msgstr ""
#: addons/web/static/src/js/data_import.js:34
msgid "Import Data"
msgstr ""
#: addons/web/static/src/js/data_import.js:74
msgid "Import File"
msgstr ""
#: addons/web/static/src/js/data_import.js:109
msgid "External ID"
msgstr ""
#: addons/web/static/src/js/search.js:233
msgid "Filter Entry"
msgstr ""
#: addons/web/static/src/js/search.js:238
#: addons/web/static/src/js/search.js:279
msgid "OK"
msgstr ""
#: addons/web/static/src/js/search.js:274 addons/web/static/src/xml/base.xml:0
msgid "Add to Dashboard"
msgstr ""
#: addons/web/static/src/js/search.js:403
msgid "Invalid Search"
msgstr ""
#: addons/web/static/src/js/search.js:403
msgid "triggered from search view"
msgstr ""
#: addons/web/static/src/js/search.js:490
#, python-format
msgid "Incorrect value for field %(fieldname)s: [%(value)s] is %(message)s"
msgstr ""
#: addons/web/static/src/js/search.js:822
msgid "not a valid integer"
msgstr ""
#: addons/web/static/src/js/search.js:836
msgid "not a valid number"
msgstr ""
#: addons/web/static/src/js/search.js:898
msgid "Yes"
msgstr ""
#: addons/web/static/src/js/search.js:899
msgid "No"
msgstr ""
#: addons/web/static/src/js/search.js:1252
msgid "contains"
msgstr ""
#: addons/web/static/src/js/search.js:1253
msgid "doesn't contain"
msgstr ""
#: addons/web/static/src/js/search.js:1254
#: addons/web/static/src/js/search.js:1269
#: addons/web/static/src/js/search.js:1289
#: addons/web/static/src/js/search.js:1309
#: addons/web/static/src/js/search.js:1331
msgid "is equal to"
msgstr ""
#: addons/web/static/src/js/search.js:1255
#: addons/web/static/src/js/search.js:1270
#: addons/web/static/src/js/search.js:1290
#: addons/web/static/src/js/search.js:1310
#: addons/web/static/src/js/search.js:1332
msgid "is not equal to"
msgstr ""
#: addons/web/static/src/js/search.js:1256
#: addons/web/static/src/js/search.js:1271
#: addons/web/static/src/js/search.js:1291
#: addons/web/static/src/js/search.js:1311
#: addons/web/static/src/js/search.js:1333
msgid "greater than"
msgstr ""
#: addons/web/static/src/js/search.js:1257
#: addons/web/static/src/js/search.js:1272
#: addons/web/static/src/js/search.js:1292
#: addons/web/static/src/js/search.js:1312
#: addons/web/static/src/js/search.js:1334
msgid "less than"
msgstr ""
#: addons/web/static/src/js/search.js:1258
#: addons/web/static/src/js/search.js:1273
#: addons/web/static/src/js/search.js:1293
#: addons/web/static/src/js/search.js:1313
#: addons/web/static/src/js/search.js:1335
msgid "greater or equal than"
msgstr ""
#: addons/web/static/src/js/search.js:1259
#: addons/web/static/src/js/search.js:1274
#: addons/web/static/src/js/search.js:1294
#: addons/web/static/src/js/search.js:1314
#: addons/web/static/src/js/search.js:1336
msgid "less or equal than"
msgstr ""
#: addons/web/static/src/js/search.js:1325
#: addons/web/static/src/js/search.js:1350
msgid "is"
msgstr ""
#: addons/web/static/src/js/search.js:1351
msgid "is not"
msgstr ""
#: addons/web/static/src/js/search.js:1364
msgid "is true"
msgstr ""
#: addons/web/static/src/js/search.js:1365
msgid "is false"
msgstr ""
#: addons/web/static/src/js/view_editor.js:42
msgid "ViewEditor"
msgstr ""
#: addons/web/static/src/js/view_editor.js:46
#: addons/web/static/src/js/view_list.js:17
#: addons/web/static/src/xml/base.xml:0
msgid "Create"
msgstr "Crear"
#: addons/web/static/src/js/view_editor.js:47
#: addons/web/static/src/xml/base.xml:0
msgid "Edit"
msgstr ""
#: addons/web/static/src/js/view_editor.js:48
#: addons/web/static/src/xml/base.xml:0
msgid "Remove"
msgstr "Eliminar"
#: addons/web/static/src/js/view_editor.js:71
#, python-format
msgid "Create a view (%s)"
msgstr ""
#: addons/web/static/src/js/view_editor.js:170
msgid "Do you really want to remove this view?"
msgstr ""
#: addons/web/static/src/js/view_editor.js:367
#, python-format
msgid "View Editor %d - %s"
msgstr ""
#: addons/web/static/src/js/view_editor.js:371
msgid "Preview"
msgstr ""
#: addons/web/static/src/js/view_editor.js:442
msgid "Do you really want to remove this node?"
msgstr ""
#: addons/web/static/src/js/view_editor.js:756
#: addons/web/static/src/js/view_editor.js:883
msgid "Properties"
msgstr ""
#: addons/web/static/src/js/view_editor.js:760
#: addons/web/static/src/js/view_editor.js:887
msgid "Update"
msgstr ""
#: addons/web/static/src/js/view_form.js:17
msgid "Form"
msgstr ""
#: addons/web/static/src/js/view_form.js:401
msgid ""
"Warning, the record has been modified, your changes will be discarded."
msgstr ""
"Advertencia, el registro se ha modificado, los cambios serán descartados."
#: addons/web/static/src/js/view_form.js:1659
#: addons/web/static/src/js/view_form.js:612
msgid "Attachments"
msgstr ""
#: addons/web/static/src/js/view_form.js:650
#, python-format
msgid "Do you really want to delete the attachment %s?"
msgstr ""
#: addons/web/static/src/js/view_form.js:1075
msgid "Confirm"
msgstr ""
#: addons/web/static/src/js/view_form.js:1838
msgid "<em>   Search More...</em>"
msgstr "<em>   Buscar más...</em>"
#: addons/web/static/src/js/view_form.js:1672
#: addons/web/static/src/js/view_form.js:1851
#, python-format
msgid "<em>   Create \"<strong>%s</strong>\"</em>"
msgstr "<em>   Crear \"<strong>%s</strong>\"</em>"
#: addons/web/static/src/js/view_form.js:1678
#: addons/web/static/src/js/view_form.js:1857
msgid "<em>   Create and Edit...</em>"
msgstr "<em>   Crear y Editar...</em>"
#: addons/web/static/src/js/views.js:568
#: addons/web/static/src/js/view_form.js:2404
#: addons/web/static/src/xml/base.xml:0
msgid "Add"
msgstr "Añadir"
#: addons/web/static/src/js/view_list.js:8
msgid "List"
msgstr ""
#: addons/web/static/src/js/view_list.js:269
msgid "Unlimited"
msgstr ""
#: addons/web/static/src/js/view_list.js:516
msgid "Do you really want to remove these records?"
msgstr ""
#: addons/web/static/src/js/view_list.js:1202
msgid "Undefined"
msgstr ""
#: addons/web/static/src/js/view_page.js:8
msgid "Page"
msgstr ""
#: addons/web/static/src/js/view_page.js:52
msgid "Do you really want to delete this record?"
msgstr ""
#: addons/web/static/src/js/view_page.js:227
msgid "Download"
msgstr ""
#: addons/web/static/src/js/view_tree.js:11
msgid "Tree"
msgstr ""
#: addons/web/static/src/js/views.js:590
msgid "Search: "
msgstr ""
#: addons/web/static/src/js/views.js:710
msgid "Customize"
msgstr ""
#: addons/web/static/src/js/views.js:713
msgid "Manage Views"
msgstr ""
#: addons/web/static/src/js/views.js:715 addons/web/static/src/js/views.js:719
#: addons/web/static/src/js/views.js:724
msgid "Manage views of the current object"
msgstr ""
#: addons/web/static/src/js/views.js:717
msgid "Edit Workflow"
msgstr ""
#: addons/web/static/src/js/views.js:722
msgid "Customize Object"
msgstr ""
#: addons/web/static/src/js/views.js:726
msgid "Translate"
msgstr ""
#: addons/web/static/src/js/views.js:728
msgid "Technical translation"
msgstr ""
#: addons/web/static/src/js/views.js:733
msgid "Other Options"
msgstr ""
#: addons/web/static/src/js/views.js:736 addons/web/static/src/xml/base.xml:0
msgid "Import"
msgstr "Importar"
#: addons/web/static/src/js/views.js:739 addons/web/static/src/xml/base.xml:0
msgid "Export"
msgstr "Exportar"
#: addons/web/static/src/js/views.js:742
msgid "View Log"
msgstr ""
#: addons/web/static/src/js/views.js:751
msgid "Reports"
msgstr ""
#: addons/web/static/src/js/views.js:751
msgid "Actions"
msgstr ""
#: addons/web/static/src/js/views.js:751
msgid "Links"
msgstr ""
#: addons/web/static/src/js/views.js:831
msgid "You must choose at least one record."
msgstr "Debe seleccionar al menos un registro."
#: addons/web/static/src/js/views.js:569
#: addons/web/static/src/js/views.js:832
msgid "Warning"
msgstr "Advertencia"
#: addons/web/static/src/js/views.js:609
#: addons/web/static/src/js/views.js:866
msgid "Translations"
msgstr "Traducciones"
#: addons/web/static/src/js/views.js:614 addons/web/static/src/xml/base.xml:0
msgid "Save"
msgstr "Guardar"
#: addons/web/static/src/js/views.js:615
msgid "Close"
msgstr "Cerrar"
#: addons/web/static/src/xml/base.xml:0
msgid "x"
msgstr "x"
@ -84,10 +429,6 @@ msgstr "."
msgid "Loading..."
msgstr "Cargando…"
#: addons/web/static/src/xml/base.xml:0
msgid "Create"
msgstr "Crear"
#: addons/web/static/src/xml/base.xml:0
msgid "Drop"
msgstr "Eliminar"
@ -276,20 +617,32 @@ msgid "Disable all tips"
msgstr "Desactivar todas las sugerencias"
#: addons/web/static/src/xml/base.xml:0
msgid "View#"
msgstr "Vista#"
msgid "More…"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Fields"
msgstr "Campos"
msgid "Debug View#"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "View labels"
msgstr "Ver etiquetas"
msgid "- Fields View Get"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Sidebar Relates"
msgstr "Se relaciona con la barra lateral"
msgid "- Edit"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "View"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "- Edit SearchView"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "- Edit Action"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Field"
@ -299,62 +652,10 @@ msgstr "Campo"
msgid ":"
msgstr ":"
#: addons/web/static/src/xml/base.xml:0
msgid "Translate view"
msgstr "Traducir vista"
#: addons/web/static/src/xml/base.xml:0
msgid "Translate sidebar"
msgstr "Traducir barra lateral"
#: addons/web/static/src/xml/base.xml:0
msgid "Delete"
msgstr "Borrar"
#: addons/web/static/src/xml/base.xml:0
msgid "First"
msgstr "Primero"
#: addons/web/static/src/xml/base.xml:0
msgid "<"
msgstr "<"
#: addons/web/static/src/xml/base.xml:0
msgid ">"
msgstr ">"
#: addons/web/static/src/xml/base.xml:0
msgid "Last"
msgstr "Último"
#: addons/web/static/src/xml/base.xml:0
msgid "♻"
msgstr "♻"
#: addons/web/static/src/xml/base.xml:0
msgid "Save & Edit"
msgstr "Guardar y Editar"
#: addons/web/static/src/xml/base.xml:0
msgid "Create & Edit"
msgstr "Crear y Editar"
#: addons/web/static/src/xml/base.xml:0
msgid "New"
msgstr "Nuevo"
#: addons/web/static/src/xml/base.xml:0
msgid "Duplicate"
msgstr "Duplicar"
#: addons/web/static/src/xml/base.xml:0
msgid "Readonly/Editable"
msgstr "Sólo Lectura/Editable"
#: addons/web/static/src/xml/base.xml:0
msgid "<<"
msgstr "<<"
#: addons/web/static/src/xml/base.xml:0
msgid "0"
msgstr "0"
@ -364,28 +665,88 @@ msgid "/"
msgstr "/"
#: addons/web/static/src/xml/base.xml:0
msgid ">>"
msgstr ">>"
#: addons/web/static/src/xml/base.xml:0
msgid "Add"
msgstr "Añadir"
msgid "Duplicate"
msgstr "Duplicar"
#: addons/web/static/src/xml/base.xml:0
msgid "Unhandled widget"
msgstr "Widget no controlado"
#: addons/web/static/src/xml/base.xml:0
msgid "Notebook Page \""
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "\""
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Modifiers:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "?"
msgstr "?"
#: addons/web/static/src/xml/base.xml:0
msgid "#"
msgstr "#"
msgid "(nolabel)"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Done"
msgstr "Hecho"
msgid "Field:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Object:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Type:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Widget:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Size:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Context:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Domain:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "On change:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Relation:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Selection:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "["
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "]"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "-"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "#"
msgstr "#"
#: addons/web/static/src/xml/base.xml:0
msgid "Open..."
@ -419,18 +780,38 @@ msgstr "Guardar como"
msgid "Clear"
msgstr "Limpiar"
#: addons/web/static/src/xml/base.xml:0
msgid "Button"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "(no string)"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Special:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Button Type:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Method:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Action ID:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Search"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Advanced Filter"
msgstr "Filtro Avanzado"
#: addons/web/static/src/xml/base.xml:0
msgid "-- Filters --"
msgstr "-- Filtros --"
#: addons/web/static/src/xml/base.xml:0
msgid "-- Actions --"
msgstr "-- Acciones --"
#: addons/web/static/src/xml/base.xml:0
msgid "Save Filter"
msgstr "Guardar Filtro"
@ -447,6 +828,18 @@ msgstr "Nombre del Filtro"
msgid "(Any existing filter with the same name will be replaced)"
msgstr "(Cualquier filtro existente con el mismo nombre será reemplazado)"
#: addons/web/static/src/xml/base.xml:0
msgid "Select Dashboard to add this filter to:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Title of new Dashboard item:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Advanced Filters"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Any of the following conditions must match"
msgstr "Cualquiera de las condiciones siguientes deben coincidir"
@ -467,10 +860,6 @@ msgstr "Añadir condición"
msgid "and"
msgstr "y"
#: addons/web/static/src/xml/base.xml:0
msgid "Cancel"
msgstr "Cancelar"
#: addons/web/static/src/xml/base.xml:0
msgid "Save & New"
msgstr "Guardar y Nuevo"
@ -479,10 +868,6 @@ msgstr "Guardar y Nuevo"
msgid "Save & Close"
msgstr "Guardar y Cerrar"
#: addons/web/static/src/xml/base.xml:0
msgid "Export"
msgstr "Exportar"
#: addons/web/static/src/xml/base.xml:0
msgid ""
"This wizard will export all data that matches the current search criteria to "
@ -523,10 +908,6 @@ msgstr "Campos a exportar"
msgid "Save fields list"
msgstr "Guardar lista de campos"
#: addons/web/static/src/xml/base.xml:0
msgid "Remove"
msgstr "Eliminar"
#: addons/web/static/src/xml/base.xml:0
msgid "Remove All"
msgstr "Eliminar Todo"
@ -543,10 +924,6 @@ msgstr "&nbsp;"
msgid "Save as:"
msgstr "Guardar como:"
#: addons/web/static/src/xml/base.xml:0
msgid "Ok"
msgstr "Ok"
#: addons/web/static/src/xml/base.xml:0
msgid "Saved exports:"
msgstr "Exportaciones guardadas:"
@ -563,10 +940,6 @@ msgstr "Contraseña nueva:"
msgid "Confirm Password:"
msgstr "Confirmar la contraseña:"
#: addons/web/static/src/xml/base.xml:0
msgid "Import"
msgstr "Importar"
#: addons/web/static/src/xml/base.xml:0
msgid "1. Import a .CSV file"
msgstr "1. Importar un archivo .CSV"

View File

@ -7,55 +7,400 @@ msgid ""
msgstr ""
"Project-Id-Version: openerp-web\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2011-10-07 10:38+0200\n"
"POT-Creation-Date: 2011-12-20 18:48+0100\n"
"PO-Revision-Date: 2011-10-07 18:16+0000\n"
"Last-Translator: Cristian Salamea (Gnuthink) <ovnicraft@gmail.com>\n"
"Language-Team: Spanish (Ecuador) <es_EC@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: 2011-11-21 05:50+0000\n"
"X-Generator: Launchpad (build 14299)\n"
"X-Launchpad-Export-Date: 2011-12-21 05:28+0000\n"
"X-Generator: Launchpad (build 14538)\n"
#: addons/web/static/src/js/view_form.js:355
#: addons/web/static/src/js/chrome.js:162
#: addons/web/static/src/js/chrome.js:175
#: addons/web/static/src/js/chrome.js:369
#: addons/web/static/src/js/view_form.js:358
#: addons/web/static/src/js/view_form.js:1078
#: addons/web/static/src/xml/base.xml:0
msgid "Ok"
msgstr "Ok"
#: addons/web/static/src/js/chrome.js:668
msgid "About"
msgstr ""
#: addons/web/static/src/js/chrome.js:748
msgid "Preferences"
msgstr ""
#: addons/web/static/src/js/chrome.js:752
msgid "Change password"
msgstr ""
#: addons/web/static/src/js/chrome.js:753
#: addons/web/static/src/js/search.js:235
#: addons/web/static/src/js/search.js:276
#: addons/web/static/src/js/view_editor.js:97
#: addons/web/static/src/js/view_editor.js:778
#: addons/web/static/src/js/view_editor.js:907
#: addons/web/static/src/js/view_form.js:1085
#: addons/web/static/src/xml/base.xml:0
msgid "Cancel"
msgstr "Cancelar"
#: addons/web/static/src/js/chrome.js:754
#: addons/web/static/src/js/view_editor.js:75
#: addons/web/static/src/js/views.js:871 addons/web/static/src/xml/base.xml:0
msgid "Save"
msgstr "Guardar"
#: addons/web/static/src/js/chrome.js:774 addons/web/static/src/xml/base.xml:0
msgid "Change Password"
msgstr ""
#: addons/web/static/src/js/data_export.js:6
msgid "Export Data"
msgstr ""
#: addons/web/static/src/js/data_export.js:23
#: addons/web/static/src/js/data_import.js:73
#: addons/web/static/src/js/view_editor.js:49
#: addons/web/static/src/js/view_editor.js:387
#: addons/web/static/src/js/view_form.js:2775
#: addons/web/static/src/js/views.js:872
msgid "Close"
msgstr "Cerrar"
#: addons/web/static/src/js/data_export.js:24
msgid "Export To File"
msgstr ""
#: addons/web/static/src/js/data_import.js:34
msgid "Import Data"
msgstr ""
#: addons/web/static/src/js/data_import.js:74
msgid "Import File"
msgstr ""
#: addons/web/static/src/js/data_import.js:109
msgid "External ID"
msgstr ""
#: addons/web/static/src/js/search.js:233
msgid "Filter Entry"
msgstr ""
#: addons/web/static/src/js/search.js:238
#: addons/web/static/src/js/search.js:279
msgid "OK"
msgstr ""
#: addons/web/static/src/js/search.js:274 addons/web/static/src/xml/base.xml:0
msgid "Add to Dashboard"
msgstr ""
#: addons/web/static/src/js/search.js:403
msgid "Invalid Search"
msgstr ""
#: addons/web/static/src/js/search.js:403
msgid "triggered from search view"
msgstr ""
#: addons/web/static/src/js/search.js:490
#, python-format
msgid "Incorrect value for field %(fieldname)s: [%(value)s] is %(message)s"
msgstr ""
#: addons/web/static/src/js/search.js:822
msgid "not a valid integer"
msgstr ""
#: addons/web/static/src/js/search.js:836
msgid "not a valid number"
msgstr ""
#: addons/web/static/src/js/search.js:898
msgid "Yes"
msgstr ""
#: addons/web/static/src/js/search.js:899
msgid "No"
msgstr ""
#: addons/web/static/src/js/search.js:1252
msgid "contains"
msgstr ""
#: addons/web/static/src/js/search.js:1253
msgid "doesn't contain"
msgstr ""
#: addons/web/static/src/js/search.js:1254
#: addons/web/static/src/js/search.js:1269
#: addons/web/static/src/js/search.js:1289
#: addons/web/static/src/js/search.js:1309
#: addons/web/static/src/js/search.js:1331
msgid "is equal to"
msgstr ""
#: addons/web/static/src/js/search.js:1255
#: addons/web/static/src/js/search.js:1270
#: addons/web/static/src/js/search.js:1290
#: addons/web/static/src/js/search.js:1310
#: addons/web/static/src/js/search.js:1332
msgid "is not equal to"
msgstr ""
#: addons/web/static/src/js/search.js:1256
#: addons/web/static/src/js/search.js:1271
#: addons/web/static/src/js/search.js:1291
#: addons/web/static/src/js/search.js:1311
#: addons/web/static/src/js/search.js:1333
msgid "greater than"
msgstr ""
#: addons/web/static/src/js/search.js:1257
#: addons/web/static/src/js/search.js:1272
#: addons/web/static/src/js/search.js:1292
#: addons/web/static/src/js/search.js:1312
#: addons/web/static/src/js/search.js:1334
msgid "less than"
msgstr ""
#: addons/web/static/src/js/search.js:1258
#: addons/web/static/src/js/search.js:1273
#: addons/web/static/src/js/search.js:1293
#: addons/web/static/src/js/search.js:1313
#: addons/web/static/src/js/search.js:1335
msgid "greater or equal than"
msgstr ""
#: addons/web/static/src/js/search.js:1259
#: addons/web/static/src/js/search.js:1274
#: addons/web/static/src/js/search.js:1294
#: addons/web/static/src/js/search.js:1314
#: addons/web/static/src/js/search.js:1336
msgid "less or equal than"
msgstr ""
#: addons/web/static/src/js/search.js:1325
#: addons/web/static/src/js/search.js:1350
msgid "is"
msgstr ""
#: addons/web/static/src/js/search.js:1351
msgid "is not"
msgstr ""
#: addons/web/static/src/js/search.js:1364
msgid "is true"
msgstr ""
#: addons/web/static/src/js/search.js:1365
msgid "is false"
msgstr ""
#: addons/web/static/src/js/view_editor.js:42
msgid "ViewEditor"
msgstr ""
#: addons/web/static/src/js/view_editor.js:46
#: addons/web/static/src/js/view_list.js:17
#: addons/web/static/src/xml/base.xml:0
msgid "Create"
msgstr "Crear"
#: addons/web/static/src/js/view_editor.js:47
#: addons/web/static/src/xml/base.xml:0
msgid "Edit"
msgstr ""
#: addons/web/static/src/js/view_editor.js:48
#: addons/web/static/src/xml/base.xml:0
msgid "Remove"
msgstr "Eliminar"
#: addons/web/static/src/js/view_editor.js:71
#, python-format
msgid "Create a view (%s)"
msgstr ""
#: addons/web/static/src/js/view_editor.js:170
msgid "Do you really want to remove this view?"
msgstr ""
#: addons/web/static/src/js/view_editor.js:367
#, python-format
msgid "View Editor %d - %s"
msgstr ""
#: addons/web/static/src/js/view_editor.js:371
msgid "Preview"
msgstr ""
#: addons/web/static/src/js/view_editor.js:442
msgid "Do you really want to remove this node?"
msgstr ""
#: addons/web/static/src/js/view_editor.js:756
#: addons/web/static/src/js/view_editor.js:883
msgid "Properties"
msgstr ""
#: addons/web/static/src/js/view_editor.js:760
#: addons/web/static/src/js/view_editor.js:887
msgid "Update"
msgstr ""
#: addons/web/static/src/js/view_form.js:17
msgid "Form"
msgstr ""
#: addons/web/static/src/js/view_form.js:401
msgid ""
"Warning, the record has been modified, your changes will be discarded."
msgstr ""
"Aviso, el registro ha sido modificado, sus cambios serán descartados."
#: addons/web/static/src/js/view_form.js:1659
#: addons/web/static/src/js/view_form.js:612
msgid "Attachments"
msgstr ""
#: addons/web/static/src/js/view_form.js:650
#, python-format
msgid "Do you really want to delete the attachment %s?"
msgstr ""
#: addons/web/static/src/js/view_form.js:1075
msgid "Confirm"
msgstr ""
#: addons/web/static/src/js/view_form.js:1838
msgid "<em>   Search More...</em>"
msgstr "<em>   Buscar Más...</em>"
#: addons/web/static/src/js/view_form.js:1672
#: addons/web/static/src/js/view_form.js:1851
#, python-format
msgid "<em>   Create \"<strong>%s</strong>\"</em>"
msgstr "<em>   Crear \"<strong>%s</strong>\"</em>"
#: addons/web/static/src/js/view_form.js:1678
#: addons/web/static/src/js/view_form.js:1857
msgid "<em>   Create and Edit...</em>"
msgstr "<em>   Crear y Editar...</em>"
#: addons/web/static/src/js/views.js:568
#: addons/web/static/src/js/view_form.js:2404
#: addons/web/static/src/xml/base.xml:0
msgid "Add"
msgstr "Agregar"
#: addons/web/static/src/js/view_list.js:8
msgid "List"
msgstr ""
#: addons/web/static/src/js/view_list.js:269
msgid "Unlimited"
msgstr ""
#: addons/web/static/src/js/view_list.js:516
msgid "Do you really want to remove these records?"
msgstr ""
#: addons/web/static/src/js/view_list.js:1202
msgid "Undefined"
msgstr ""
#: addons/web/static/src/js/view_page.js:8
msgid "Page"
msgstr ""
#: addons/web/static/src/js/view_page.js:52
msgid "Do you really want to delete this record?"
msgstr ""
#: addons/web/static/src/js/view_page.js:227
msgid "Download"
msgstr ""
#: addons/web/static/src/js/view_tree.js:11
msgid "Tree"
msgstr ""
#: addons/web/static/src/js/views.js:590
msgid "Search: "
msgstr ""
#: addons/web/static/src/js/views.js:710
msgid "Customize"
msgstr ""
#: addons/web/static/src/js/views.js:713
msgid "Manage Views"
msgstr ""
#: addons/web/static/src/js/views.js:715 addons/web/static/src/js/views.js:719
#: addons/web/static/src/js/views.js:724
msgid "Manage views of the current object"
msgstr ""
#: addons/web/static/src/js/views.js:717
msgid "Edit Workflow"
msgstr ""
#: addons/web/static/src/js/views.js:722
msgid "Customize Object"
msgstr ""
#: addons/web/static/src/js/views.js:726
msgid "Translate"
msgstr ""
#: addons/web/static/src/js/views.js:728
msgid "Technical translation"
msgstr ""
#: addons/web/static/src/js/views.js:733
msgid "Other Options"
msgstr ""
#: addons/web/static/src/js/views.js:736 addons/web/static/src/xml/base.xml:0
msgid "Import"
msgstr "Importar"
#: addons/web/static/src/js/views.js:739 addons/web/static/src/xml/base.xml:0
msgid "Export"
msgstr "Exportar"
#: addons/web/static/src/js/views.js:742
msgid "View Log"
msgstr ""
#: addons/web/static/src/js/views.js:751
msgid "Reports"
msgstr ""
#: addons/web/static/src/js/views.js:751
msgid "Actions"
msgstr ""
#: addons/web/static/src/js/views.js:751
msgid "Links"
msgstr ""
#: addons/web/static/src/js/views.js:831
msgid "You must choose at least one record."
msgstr "Debe seleccionar al menos un registro."
#: addons/web/static/src/js/views.js:569
#: addons/web/static/src/js/views.js:832
msgid "Warning"
msgstr "Advertencia"
#: addons/web/static/src/js/views.js:609
#: addons/web/static/src/js/views.js:866
msgid "Translations"
msgstr "Traducciones"
#: addons/web/static/src/js/views.js:614 addons/web/static/src/xml/base.xml:0
msgid "Save"
msgstr "Guardar"
#: addons/web/static/src/js/views.js:615
msgid "Close"
msgstr "Cerrar"
#: addons/web/static/src/xml/base.xml:0
msgid "x"
msgstr "x"
@ -84,10 +429,6 @@ msgstr "."
msgid "Loading..."
msgstr "Cargando..."
#: addons/web/static/src/xml/base.xml:0
msgid "Create"
msgstr "Crear"
#: addons/web/static/src/xml/base.xml:0
msgid "Drop"
msgstr "Borrar"
@ -276,20 +617,32 @@ msgid "Disable all tips"
msgstr "Desactivar todas las sugerencias"
#: addons/web/static/src/xml/base.xml:0
msgid "View#"
msgstr "View#"
msgid "More…"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Fields"
msgstr "Campos"
msgid "Debug View#"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "View labels"
msgstr "Ver etiquetas"
msgid "- Fields View Get"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Sidebar Relates"
msgstr "Columna lateral relacionada"
msgid "- Edit"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "View"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "- Edit SearchView"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "- Edit Action"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Field"
@ -299,62 +652,10 @@ msgstr "Campo"
msgid ":"
msgstr ":"
#: addons/web/static/src/xml/base.xml:0
msgid "Translate view"
msgstr "Traducir vista"
#: addons/web/static/src/xml/base.xml:0
msgid "Translate sidebar"
msgstr "Traducir Barra lateral"
#: addons/web/static/src/xml/base.xml:0
msgid "Delete"
msgstr "Eliminar"
#: addons/web/static/src/xml/base.xml:0
msgid "First"
msgstr "Primero"
#: addons/web/static/src/xml/base.xml:0
msgid "<"
msgstr "<"
#: addons/web/static/src/xml/base.xml:0
msgid ">"
msgstr ">"
#: addons/web/static/src/xml/base.xml:0
msgid "Last"
msgstr "Último"
#: addons/web/static/src/xml/base.xml:0
msgid "♻"
msgstr "♻"
#: addons/web/static/src/xml/base.xml:0
msgid "Save & Edit"
msgstr "Grabar & Editar"
#: addons/web/static/src/xml/base.xml:0
msgid "Create & Edit"
msgstr "Crear & Editar"
#: addons/web/static/src/xml/base.xml:0
msgid "New"
msgstr "Nuevo"
#: addons/web/static/src/xml/base.xml:0
msgid "Duplicate"
msgstr "Duplicar"
#: addons/web/static/src/xml/base.xml:0
msgid "Readonly/Editable"
msgstr "Sólo Lectura/Editable"
#: addons/web/static/src/xml/base.xml:0
msgid "<<"
msgstr "<<"
#: addons/web/static/src/xml/base.xml:0
msgid "0"
msgstr "0"
@ -364,28 +665,88 @@ msgid "/"
msgstr "/"
#: addons/web/static/src/xml/base.xml:0
msgid ">>"
msgstr ">>"
#: addons/web/static/src/xml/base.xml:0
msgid "Add"
msgstr "Agregar"
msgid "Duplicate"
msgstr "Duplicar"
#: addons/web/static/src/xml/base.xml:0
msgid "Unhandled widget"
msgstr "Wdiget no controlado"
#: addons/web/static/src/xml/base.xml:0
msgid "Notebook Page \""
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "\""
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Modifiers:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "?"
msgstr "?"
#: addons/web/static/src/xml/base.xml:0
msgid "#"
msgstr "#"
msgid "(nolabel)"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Done"
msgstr "Realizado"
msgid "Field:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Object:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Type:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Widget:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Size:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Context:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Domain:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "On change:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Relation:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Selection:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "["
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "]"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "-"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "#"
msgstr "#"
#: addons/web/static/src/xml/base.xml:0
msgid "Open..."
@ -419,18 +780,38 @@ msgstr "Guardar Como"
msgid "Clear"
msgstr "Limpiar"
#: addons/web/static/src/xml/base.xml:0
msgid "Button"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "(no string)"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Special:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Button Type:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Method:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Action ID:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Search"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Advanced Filter"
msgstr "Filtro Avanzado"
#: addons/web/static/src/xml/base.xml:0
msgid "-- Filters --"
msgstr "-- Filtros --"
#: addons/web/static/src/xml/base.xml:0
msgid "-- Actions --"
msgstr "-- Acciones --"
#: addons/web/static/src/xml/base.xml:0
msgid "Save Filter"
msgstr "Guardar Filtro"
@ -447,6 +828,18 @@ msgstr "Nombre del Filtro:"
msgid "(Any existing filter with the same name will be replaced)"
msgstr "(Cualquier filtro existente con el mismo nombre será reemplazado)"
#: addons/web/static/src/xml/base.xml:0
msgid "Select Dashboard to add this filter to:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Title of new Dashboard item:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Advanced Filters"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Any of the following conditions must match"
msgstr "Cualquiera de las siguientes condiciones debe coincidir"
@ -467,10 +860,6 @@ msgstr "Agregar condición"
msgid "and"
msgstr "y"
#: addons/web/static/src/xml/base.xml:0
msgid "Cancel"
msgstr "Cancelar"
#: addons/web/static/src/xml/base.xml:0
msgid "Save & New"
msgstr "Grabar & Nuevo"
@ -479,10 +868,6 @@ msgstr "Grabar & Nuevo"
msgid "Save & Close"
msgstr "Grabar & Cerrar"
#: addons/web/static/src/xml/base.xml:0
msgid "Export"
msgstr "Exportar"
#: addons/web/static/src/xml/base.xml:0
msgid ""
"This wizard will export all data that matches the current search criteria to "
@ -523,10 +908,6 @@ msgstr "Campos a exportar"
msgid "Save fields list"
msgstr "Guardar lista de campos"
#: addons/web/static/src/xml/base.xml:0
msgid "Remove"
msgstr "Eliminar"
#: addons/web/static/src/xml/base.xml:0
msgid "Remove All"
msgstr "Borrar todo"
@ -543,10 +924,6 @@ msgstr "&nbsp;"
msgid "Save as:"
msgstr "Guardar Como:"
#: addons/web/static/src/xml/base.xml:0
msgid "Ok"
msgstr "Ok"
#: addons/web/static/src/xml/base.xml:0
msgid "Saved exports:"
msgstr "Exportaciones guardadas:"
@ -563,10 +940,6 @@ msgstr "Nueva Password:"
msgid "Confirm Password:"
msgstr "Confirmar Password:"
#: addons/web/static/src/xml/base.xml:0
msgid "Import"
msgstr "Importar"
#: addons/web/static/src/xml/base.xml:0
msgid "1. Import a .CSV file"
msgstr "1. Importar a archivo .CSV"

View File

@ -7,54 +7,399 @@ msgid ""
msgstr ""
"Project-Id-Version: openerp-web\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2011-10-07 10:38+0200\n"
"POT-Creation-Date: 2011-12-20 18:48+0100\n"
"PO-Revision-Date: 2011-10-10 18:30+0000\n"
"Last-Translator: Aare Vesi <Unknown>\n"
"Language-Team: Estonian <et@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: 2011-11-21 05:50+0000\n"
"X-Generator: Launchpad (build 14299)\n"
"X-Launchpad-Export-Date: 2011-12-21 05:27+0000\n"
"X-Generator: Launchpad (build 14538)\n"
#: addons/web/static/src/js/view_form.js:355
#: addons/web/static/src/js/chrome.js:162
#: addons/web/static/src/js/chrome.js:175
#: addons/web/static/src/js/chrome.js:369
#: addons/web/static/src/js/view_form.js:358
#: addons/web/static/src/js/view_form.js:1078
#: addons/web/static/src/xml/base.xml:0
msgid "Ok"
msgstr "Ok"
#: addons/web/static/src/js/chrome.js:668
msgid "About"
msgstr ""
#: addons/web/static/src/js/chrome.js:748
msgid "Preferences"
msgstr ""
#: addons/web/static/src/js/chrome.js:752
msgid "Change password"
msgstr ""
#: addons/web/static/src/js/chrome.js:753
#: addons/web/static/src/js/search.js:235
#: addons/web/static/src/js/search.js:276
#: addons/web/static/src/js/view_editor.js:97
#: addons/web/static/src/js/view_editor.js:778
#: addons/web/static/src/js/view_editor.js:907
#: addons/web/static/src/js/view_form.js:1085
#: addons/web/static/src/xml/base.xml:0
msgid "Cancel"
msgstr "Tühista"
#: addons/web/static/src/js/chrome.js:754
#: addons/web/static/src/js/view_editor.js:75
#: addons/web/static/src/js/views.js:871 addons/web/static/src/xml/base.xml:0
msgid "Save"
msgstr "Salvesta"
#: addons/web/static/src/js/chrome.js:774 addons/web/static/src/xml/base.xml:0
msgid "Change Password"
msgstr ""
#: addons/web/static/src/js/data_export.js:6
msgid "Export Data"
msgstr ""
#: addons/web/static/src/js/data_export.js:23
#: addons/web/static/src/js/data_import.js:73
#: addons/web/static/src/js/view_editor.js:49
#: addons/web/static/src/js/view_editor.js:387
#: addons/web/static/src/js/view_form.js:2775
#: addons/web/static/src/js/views.js:872
msgid "Close"
msgstr ""
#: addons/web/static/src/js/data_export.js:24
msgid "Export To File"
msgstr ""
#: addons/web/static/src/js/data_import.js:34
msgid "Import Data"
msgstr ""
#: addons/web/static/src/js/data_import.js:74
msgid "Import File"
msgstr ""
#: addons/web/static/src/js/data_import.js:109
msgid "External ID"
msgstr ""
#: addons/web/static/src/js/search.js:233
msgid "Filter Entry"
msgstr ""
#: addons/web/static/src/js/search.js:238
#: addons/web/static/src/js/search.js:279
msgid "OK"
msgstr ""
#: addons/web/static/src/js/search.js:274 addons/web/static/src/xml/base.xml:0
msgid "Add to Dashboard"
msgstr ""
#: addons/web/static/src/js/search.js:403
msgid "Invalid Search"
msgstr ""
#: addons/web/static/src/js/search.js:403
msgid "triggered from search view"
msgstr ""
#: addons/web/static/src/js/search.js:490
#, python-format
msgid "Incorrect value for field %(fieldname)s: [%(value)s] is %(message)s"
msgstr ""
#: addons/web/static/src/js/search.js:822
msgid "not a valid integer"
msgstr ""
#: addons/web/static/src/js/search.js:836
msgid "not a valid number"
msgstr ""
#: addons/web/static/src/js/search.js:898
msgid "Yes"
msgstr ""
#: addons/web/static/src/js/search.js:899
msgid "No"
msgstr ""
#: addons/web/static/src/js/search.js:1252
msgid "contains"
msgstr ""
#: addons/web/static/src/js/search.js:1253
msgid "doesn't contain"
msgstr ""
#: addons/web/static/src/js/search.js:1254
#: addons/web/static/src/js/search.js:1269
#: addons/web/static/src/js/search.js:1289
#: addons/web/static/src/js/search.js:1309
#: addons/web/static/src/js/search.js:1331
msgid "is equal to"
msgstr ""
#: addons/web/static/src/js/search.js:1255
#: addons/web/static/src/js/search.js:1270
#: addons/web/static/src/js/search.js:1290
#: addons/web/static/src/js/search.js:1310
#: addons/web/static/src/js/search.js:1332
msgid "is not equal to"
msgstr ""
#: addons/web/static/src/js/search.js:1256
#: addons/web/static/src/js/search.js:1271
#: addons/web/static/src/js/search.js:1291
#: addons/web/static/src/js/search.js:1311
#: addons/web/static/src/js/search.js:1333
msgid "greater than"
msgstr ""
#: addons/web/static/src/js/search.js:1257
#: addons/web/static/src/js/search.js:1272
#: addons/web/static/src/js/search.js:1292
#: addons/web/static/src/js/search.js:1312
#: addons/web/static/src/js/search.js:1334
msgid "less than"
msgstr ""
#: addons/web/static/src/js/search.js:1258
#: addons/web/static/src/js/search.js:1273
#: addons/web/static/src/js/search.js:1293
#: addons/web/static/src/js/search.js:1313
#: addons/web/static/src/js/search.js:1335
msgid "greater or equal than"
msgstr ""
#: addons/web/static/src/js/search.js:1259
#: addons/web/static/src/js/search.js:1274
#: addons/web/static/src/js/search.js:1294
#: addons/web/static/src/js/search.js:1314
#: addons/web/static/src/js/search.js:1336
msgid "less or equal than"
msgstr ""
#: addons/web/static/src/js/search.js:1325
#: addons/web/static/src/js/search.js:1350
msgid "is"
msgstr ""
#: addons/web/static/src/js/search.js:1351
msgid "is not"
msgstr ""
#: addons/web/static/src/js/search.js:1364
msgid "is true"
msgstr ""
#: addons/web/static/src/js/search.js:1365
msgid "is false"
msgstr ""
#: addons/web/static/src/js/view_editor.js:42
msgid "ViewEditor"
msgstr ""
#: addons/web/static/src/js/view_editor.js:46
#: addons/web/static/src/js/view_list.js:17
#: addons/web/static/src/xml/base.xml:0
msgid "Create"
msgstr "Loo"
#: addons/web/static/src/js/view_editor.js:47
#: addons/web/static/src/xml/base.xml:0
msgid "Edit"
msgstr ""
#: addons/web/static/src/js/view_editor.js:48
#: addons/web/static/src/xml/base.xml:0
msgid "Remove"
msgstr "Eemalda"
#: addons/web/static/src/js/view_editor.js:71
#, python-format
msgid "Create a view (%s)"
msgstr ""
#: addons/web/static/src/js/view_editor.js:170
msgid "Do you really want to remove this view?"
msgstr ""
#: addons/web/static/src/js/view_editor.js:367
#, python-format
msgid "View Editor %d - %s"
msgstr ""
#: addons/web/static/src/js/view_editor.js:371
msgid "Preview"
msgstr ""
#: addons/web/static/src/js/view_editor.js:442
msgid "Do you really want to remove this node?"
msgstr ""
#: addons/web/static/src/js/view_editor.js:756
#: addons/web/static/src/js/view_editor.js:883
msgid "Properties"
msgstr ""
#: addons/web/static/src/js/view_editor.js:760
#: addons/web/static/src/js/view_editor.js:887
msgid "Update"
msgstr ""
#: addons/web/static/src/js/view_form.js:17
msgid "Form"
msgstr ""
#: addons/web/static/src/js/view_form.js:401
msgid ""
"Warning, the record has been modified, your changes will be discarded."
msgstr ""
#: addons/web/static/src/js/view_form.js:1659
#: addons/web/static/src/js/view_form.js:612
msgid "Attachments"
msgstr ""
#: addons/web/static/src/js/view_form.js:650
#, python-format
msgid "Do you really want to delete the attachment %s?"
msgstr ""
#: addons/web/static/src/js/view_form.js:1075
msgid "Confirm"
msgstr ""
#: addons/web/static/src/js/view_form.js:1838
msgid "<em>   Search More...</em>"
msgstr ""
#: addons/web/static/src/js/view_form.js:1672
#: addons/web/static/src/js/view_form.js:1851
#, python-format
msgid "<em>   Create \"<strong>%s</strong>\"</em>"
msgstr ""
#: addons/web/static/src/js/view_form.js:1678
#: addons/web/static/src/js/view_form.js:1857
msgid "<em>   Create and Edit...</em>"
msgstr ""
#: addons/web/static/src/js/views.js:568
#: addons/web/static/src/js/view_form.js:2404
#: addons/web/static/src/xml/base.xml:0
msgid "Add"
msgstr "Lisa"
#: addons/web/static/src/js/view_list.js:8
msgid "List"
msgstr ""
#: addons/web/static/src/js/view_list.js:269
msgid "Unlimited"
msgstr ""
#: addons/web/static/src/js/view_list.js:516
msgid "Do you really want to remove these records?"
msgstr ""
#: addons/web/static/src/js/view_list.js:1202
msgid "Undefined"
msgstr ""
#: addons/web/static/src/js/view_page.js:8
msgid "Page"
msgstr ""
#: addons/web/static/src/js/view_page.js:52
msgid "Do you really want to delete this record?"
msgstr ""
#: addons/web/static/src/js/view_page.js:227
msgid "Download"
msgstr ""
#: addons/web/static/src/js/view_tree.js:11
msgid "Tree"
msgstr ""
#: addons/web/static/src/js/views.js:590
msgid "Search: "
msgstr ""
#: addons/web/static/src/js/views.js:710
msgid "Customize"
msgstr ""
#: addons/web/static/src/js/views.js:713
msgid "Manage Views"
msgstr ""
#: addons/web/static/src/js/views.js:715 addons/web/static/src/js/views.js:719
#: addons/web/static/src/js/views.js:724
msgid "Manage views of the current object"
msgstr ""
#: addons/web/static/src/js/views.js:717
msgid "Edit Workflow"
msgstr ""
#: addons/web/static/src/js/views.js:722
msgid "Customize Object"
msgstr ""
#: addons/web/static/src/js/views.js:726
msgid "Translate"
msgstr ""
#: addons/web/static/src/js/views.js:728
msgid "Technical translation"
msgstr ""
#: addons/web/static/src/js/views.js:733
msgid "Other Options"
msgstr ""
#: addons/web/static/src/js/views.js:736 addons/web/static/src/xml/base.xml:0
msgid "Import"
msgstr "Import"
#: addons/web/static/src/js/views.js:739 addons/web/static/src/xml/base.xml:0
msgid "Export"
msgstr "Eksport"
#: addons/web/static/src/js/views.js:742
msgid "View Log"
msgstr ""
#: addons/web/static/src/js/views.js:751
msgid "Reports"
msgstr ""
#: addons/web/static/src/js/views.js:751
msgid "Actions"
msgstr ""
#: addons/web/static/src/js/views.js:751
msgid "Links"
msgstr ""
#: addons/web/static/src/js/views.js:831
msgid "You must choose at least one record."
msgstr ""
#: addons/web/static/src/js/views.js:569
#: addons/web/static/src/js/views.js:832
msgid "Warning"
msgstr "Hoiatus"
#: addons/web/static/src/js/views.js:609
#: addons/web/static/src/js/views.js:866
msgid "Translations"
msgstr "Tõlked"
#: addons/web/static/src/js/views.js:614 addons/web/static/src/xml/base.xml:0
msgid "Save"
msgstr "Salvesta"
#: addons/web/static/src/js/views.js:615
msgid "Close"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "x"
msgstr ""
@ -83,10 +428,6 @@ msgstr ""
msgid "Loading..."
msgstr "Laadimine..."
#: addons/web/static/src/xml/base.xml:0
msgid "Create"
msgstr "Loo"
#: addons/web/static/src/xml/base.xml:0
msgid "Drop"
msgstr "Hülga"
@ -267,19 +608,31 @@ msgid "Disable all tips"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "View#"
msgid "More…"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Fields"
msgstr "Väljad"
#: addons/web/static/src/xml/base.xml:0
msgid "View labels"
msgid "Debug View#"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Sidebar Relates"
msgid "- Fields View Get"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "- Edit"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "View"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "- Edit SearchView"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "- Edit Action"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
@ -290,62 +643,10 @@ msgstr "Väli"
msgid ":"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Translate view"
msgstr "Tõlke vaade"
#: addons/web/static/src/xml/base.xml:0
msgid "Translate sidebar"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Delete"
msgstr "Kustuta"
#: addons/web/static/src/xml/base.xml:0
msgid "First"
msgstr "Esimene"
#: addons/web/static/src/xml/base.xml:0
msgid "<"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid ">"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Last"
msgstr "Viimane"
#: addons/web/static/src/xml/base.xml:0
msgid "♻"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Save & Edit"
msgstr "Salvesta & Muuda"
#: addons/web/static/src/xml/base.xml:0
msgid "Create & Edit"
msgstr "Loo & Muuda"
#: addons/web/static/src/xml/base.xml:0
msgid "New"
msgstr "Uus"
#: addons/web/static/src/xml/base.xml:0
msgid "Duplicate"
msgstr "Tee koopia"
#: addons/web/static/src/xml/base.xml:0
msgid "Readonly/Editable"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "<<"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "0"
msgstr ""
@ -355,28 +656,88 @@ msgid "/"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid ">>"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Add"
msgstr "Lisa"
msgid "Duplicate"
msgstr "Tee koopia"
#: addons/web/static/src/xml/base.xml:0
msgid "Unhandled widget"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Notebook Page \""
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "\""
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Modifiers:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "?"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "#"
msgid "(nolabel)"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Done"
msgstr "Valmis"
msgid "Field:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Object:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Type:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Widget:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Size:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Context:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Domain:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "On change:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Relation:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Selection:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "["
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "]"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "-"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "#"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Open..."
@ -410,18 +771,38 @@ msgstr "Salvesta kui"
msgid "Clear"
msgstr "Tühjenda"
#: addons/web/static/src/xml/base.xml:0
msgid "Button"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "(no string)"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Special:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Button Type:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Method:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Action ID:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Search"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Advanced Filter"
msgstr "Täiustatud filter"
#: addons/web/static/src/xml/base.xml:0
msgid "-- Filters --"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "-- Actions --"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Save Filter"
msgstr "Salvesta filter"
@ -438,6 +819,18 @@ msgstr ""
msgid "(Any existing filter with the same name will be replaced)"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Select Dashboard to add this filter to:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Title of new Dashboard item:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Advanced Filters"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Any of the following conditions must match"
msgstr ""
@ -458,10 +851,6 @@ msgstr "Lisa tingimus"
msgid "and"
msgstr "ja"
#: addons/web/static/src/xml/base.xml:0
msgid "Cancel"
msgstr "Tühista"
#: addons/web/static/src/xml/base.xml:0
msgid "Save & New"
msgstr ""
@ -470,10 +859,6 @@ msgstr ""
msgid "Save & Close"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Export"
msgstr "Eksport"
#: addons/web/static/src/xml/base.xml:0
msgid ""
"This wizard will export all data that matches the current search criteria to "
@ -510,10 +895,6 @@ msgstr ""
msgid "Save fields list"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Remove"
msgstr "Eemalda"
#: addons/web/static/src/xml/base.xml:0
msgid "Remove All"
msgstr "Eemalda kõik"
@ -530,10 +911,6 @@ msgstr ""
msgid "Save as:"
msgstr "Salvesta kui:"
#: addons/web/static/src/xml/base.xml:0
msgid "Ok"
msgstr "Ok"
#: addons/web/static/src/xml/base.xml:0
msgid "Saved exports:"
msgstr ""
@ -550,10 +927,6 @@ msgstr "Uus salasõna:"
msgid "Confirm Password:"
msgstr "Kinnita salasõna:"
#: addons/web/static/src/xml/base.xml:0
msgid "Import"
msgstr "Import"
#: addons/web/static/src/xml/base.xml:0
msgid "1. Import a .CSV file"
msgstr ""

View File

@ -7,55 +7,400 @@ msgid ""
msgstr ""
"Project-Id-Version: openerp-web\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2011-10-07 10:38+0200\n"
"PO-Revision-Date: 2011-10-23 12:20+0000\n"
"POT-Creation-Date: 2011-12-20 18:48+0100\n"
"PO-Revision-Date: 2011-12-05 16:17+0000\n"
"Last-Translator: Xavier (Open ERP) <Unknown>\n"
"Language-Team: French <fr@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: 2011-11-21 05:50+0000\n"
"X-Generator: Launchpad (build 14299)\n"
"X-Launchpad-Export-Date: 2011-12-21 05:27+0000\n"
"X-Generator: Launchpad (build 14538)\n"
#: addons/web/static/src/js/view_form.js:355
#: addons/web/static/src/js/chrome.js:162
#: addons/web/static/src/js/chrome.js:175
#: addons/web/static/src/js/chrome.js:369
#: addons/web/static/src/js/view_form.js:358
#: addons/web/static/src/js/view_form.js:1078
#: addons/web/static/src/xml/base.xml:0
msgid "Ok"
msgstr ""
#: addons/web/static/src/js/chrome.js:668
msgid "About"
msgstr ""
#: addons/web/static/src/js/chrome.js:748
msgid "Preferences"
msgstr ""
#: addons/web/static/src/js/chrome.js:752
msgid "Change password"
msgstr ""
#: addons/web/static/src/js/chrome.js:753
#: addons/web/static/src/js/search.js:235
#: addons/web/static/src/js/search.js:276
#: addons/web/static/src/js/view_editor.js:97
#: addons/web/static/src/js/view_editor.js:778
#: addons/web/static/src/js/view_editor.js:907
#: addons/web/static/src/js/view_form.js:1085
#: addons/web/static/src/xml/base.xml:0
msgid "Cancel"
msgstr ""
#: addons/web/static/src/js/chrome.js:754
#: addons/web/static/src/js/view_editor.js:75
#: addons/web/static/src/js/views.js:871 addons/web/static/src/xml/base.xml:0
msgid "Save"
msgstr "Enregistrer"
#: addons/web/static/src/js/chrome.js:774 addons/web/static/src/xml/base.xml:0
msgid "Change Password"
msgstr ""
#: addons/web/static/src/js/data_export.js:6
msgid "Export Data"
msgstr ""
#: addons/web/static/src/js/data_export.js:23
#: addons/web/static/src/js/data_import.js:73
#: addons/web/static/src/js/view_editor.js:49
#: addons/web/static/src/js/view_editor.js:387
#: addons/web/static/src/js/view_form.js:2775
#: addons/web/static/src/js/views.js:872
msgid "Close"
msgstr "Fermer"
#: addons/web/static/src/js/data_export.js:24
msgid "Export To File"
msgstr ""
#: addons/web/static/src/js/data_import.js:34
msgid "Import Data"
msgstr ""
#: addons/web/static/src/js/data_import.js:74
msgid "Import File"
msgstr ""
#: addons/web/static/src/js/data_import.js:109
msgid "External ID"
msgstr ""
#: addons/web/static/src/js/search.js:233
msgid "Filter Entry"
msgstr ""
#: addons/web/static/src/js/search.js:238
#: addons/web/static/src/js/search.js:279
msgid "OK"
msgstr ""
#: addons/web/static/src/js/search.js:274 addons/web/static/src/xml/base.xml:0
msgid "Add to Dashboard"
msgstr ""
#: addons/web/static/src/js/search.js:403
msgid "Invalid Search"
msgstr ""
#: addons/web/static/src/js/search.js:403
msgid "triggered from search view"
msgstr ""
#: addons/web/static/src/js/search.js:490
#, python-format
msgid "Incorrect value for field %(fieldname)s: [%(value)s] is %(message)s"
msgstr ""
#: addons/web/static/src/js/search.js:822
msgid "not a valid integer"
msgstr ""
#: addons/web/static/src/js/search.js:836
msgid "not a valid number"
msgstr ""
#: addons/web/static/src/js/search.js:898
msgid "Yes"
msgstr ""
#: addons/web/static/src/js/search.js:899
msgid "No"
msgstr ""
#: addons/web/static/src/js/search.js:1252
msgid "contains"
msgstr ""
#: addons/web/static/src/js/search.js:1253
msgid "doesn't contain"
msgstr ""
#: addons/web/static/src/js/search.js:1254
#: addons/web/static/src/js/search.js:1269
#: addons/web/static/src/js/search.js:1289
#: addons/web/static/src/js/search.js:1309
#: addons/web/static/src/js/search.js:1331
msgid "is equal to"
msgstr ""
#: addons/web/static/src/js/search.js:1255
#: addons/web/static/src/js/search.js:1270
#: addons/web/static/src/js/search.js:1290
#: addons/web/static/src/js/search.js:1310
#: addons/web/static/src/js/search.js:1332
msgid "is not equal to"
msgstr ""
#: addons/web/static/src/js/search.js:1256
#: addons/web/static/src/js/search.js:1271
#: addons/web/static/src/js/search.js:1291
#: addons/web/static/src/js/search.js:1311
#: addons/web/static/src/js/search.js:1333
msgid "greater than"
msgstr ""
#: addons/web/static/src/js/search.js:1257
#: addons/web/static/src/js/search.js:1272
#: addons/web/static/src/js/search.js:1292
#: addons/web/static/src/js/search.js:1312
#: addons/web/static/src/js/search.js:1334
msgid "less than"
msgstr ""
#: addons/web/static/src/js/search.js:1258
#: addons/web/static/src/js/search.js:1273
#: addons/web/static/src/js/search.js:1293
#: addons/web/static/src/js/search.js:1313
#: addons/web/static/src/js/search.js:1335
msgid "greater or equal than"
msgstr ""
#: addons/web/static/src/js/search.js:1259
#: addons/web/static/src/js/search.js:1274
#: addons/web/static/src/js/search.js:1294
#: addons/web/static/src/js/search.js:1314
#: addons/web/static/src/js/search.js:1336
msgid "less or equal than"
msgstr ""
#: addons/web/static/src/js/search.js:1325
#: addons/web/static/src/js/search.js:1350
msgid "is"
msgstr ""
#: addons/web/static/src/js/search.js:1351
msgid "is not"
msgstr ""
#: addons/web/static/src/js/search.js:1364
msgid "is true"
msgstr ""
#: addons/web/static/src/js/search.js:1365
msgid "is false"
msgstr ""
#: addons/web/static/src/js/view_editor.js:42
msgid "ViewEditor"
msgstr ""
#: addons/web/static/src/js/view_editor.js:46
#: addons/web/static/src/js/view_list.js:17
#: addons/web/static/src/xml/base.xml:0
msgid "Create"
msgstr "Créer"
#: addons/web/static/src/js/view_editor.js:47
#: addons/web/static/src/xml/base.xml:0
msgid "Edit"
msgstr ""
#: addons/web/static/src/js/view_editor.js:48
#: addons/web/static/src/xml/base.xml:0
msgid "Remove"
msgstr ""
#: addons/web/static/src/js/view_editor.js:71
#, python-format
msgid "Create a view (%s)"
msgstr ""
#: addons/web/static/src/js/view_editor.js:170
msgid "Do you really want to remove this view?"
msgstr ""
#: addons/web/static/src/js/view_editor.js:367
#, python-format
msgid "View Editor %d - %s"
msgstr ""
#: addons/web/static/src/js/view_editor.js:371
msgid "Preview"
msgstr ""
#: addons/web/static/src/js/view_editor.js:442
msgid "Do you really want to remove this node?"
msgstr ""
#: addons/web/static/src/js/view_editor.js:756
#: addons/web/static/src/js/view_editor.js:883
msgid "Properties"
msgstr ""
#: addons/web/static/src/js/view_editor.js:760
#: addons/web/static/src/js/view_editor.js:887
msgid "Update"
msgstr ""
#: addons/web/static/src/js/view_form.js:17
msgid "Form"
msgstr ""
#: addons/web/static/src/js/view_form.js:401
msgid ""
"Warning, the record has been modified, your changes will be discarded."
msgstr ""
"Attention, l'enregistrement a été modifié, vos changements seront perdus."
#: addons/web/static/src/js/view_form.js:1659
#: addons/web/static/src/js/view_form.js:612
msgid "Attachments"
msgstr ""
#: addons/web/static/src/js/view_form.js:650
#, python-format
msgid "Do you really want to delete the attachment %s?"
msgstr ""
#: addons/web/static/src/js/view_form.js:1075
msgid "Confirm"
msgstr ""
#: addons/web/static/src/js/view_form.js:1838
msgid "<em>   Search More...</em>"
msgstr ""
#: addons/web/static/src/js/view_form.js:1672
#: addons/web/static/src/js/view_form.js:1851
#, python-format
msgid "<em>   Create \"<strong>%s</strong>\"</em>"
msgstr ""
#: addons/web/static/src/js/view_form.js:1678
#: addons/web/static/src/js/view_form.js:1857
msgid "<em>   Create and Edit...</em>"
msgstr ""
#: addons/web/static/src/js/views.js:568
#: addons/web/static/src/js/view_form.js:2404
#: addons/web/static/src/xml/base.xml:0
msgid "Add"
msgstr ""
#: addons/web/static/src/js/view_list.js:8
msgid "List"
msgstr ""
#: addons/web/static/src/js/view_list.js:269
msgid "Unlimited"
msgstr ""
#: addons/web/static/src/js/view_list.js:516
msgid "Do you really want to remove these records?"
msgstr ""
#: addons/web/static/src/js/view_list.js:1202
msgid "Undefined"
msgstr ""
#: addons/web/static/src/js/view_page.js:8
msgid "Page"
msgstr ""
#: addons/web/static/src/js/view_page.js:52
msgid "Do you really want to delete this record?"
msgstr ""
#: addons/web/static/src/js/view_page.js:227
msgid "Download"
msgstr ""
#: addons/web/static/src/js/view_tree.js:11
msgid "Tree"
msgstr ""
#: addons/web/static/src/js/views.js:590
msgid "Search: "
msgstr "Rechercher: "
#: addons/web/static/src/js/views.js:710
msgid "Customize"
msgstr ""
#: addons/web/static/src/js/views.js:713
msgid "Manage Views"
msgstr ""
#: addons/web/static/src/js/views.js:715 addons/web/static/src/js/views.js:719
#: addons/web/static/src/js/views.js:724
msgid "Manage views of the current object"
msgstr ""
#: addons/web/static/src/js/views.js:717
msgid "Edit Workflow"
msgstr ""
#: addons/web/static/src/js/views.js:722
msgid "Customize Object"
msgstr ""
#: addons/web/static/src/js/views.js:726
msgid "Translate"
msgstr ""
#: addons/web/static/src/js/views.js:728
msgid "Technical translation"
msgstr ""
#: addons/web/static/src/js/views.js:733
msgid "Other Options"
msgstr ""
#: addons/web/static/src/js/views.js:736 addons/web/static/src/xml/base.xml:0
msgid "Import"
msgstr ""
#: addons/web/static/src/js/views.js:739 addons/web/static/src/xml/base.xml:0
msgid "Export"
msgstr ""
#: addons/web/static/src/js/views.js:742
msgid "View Log"
msgstr ""
#: addons/web/static/src/js/views.js:751
msgid "Reports"
msgstr ""
#: addons/web/static/src/js/views.js:751
msgid "Actions"
msgstr ""
#: addons/web/static/src/js/views.js:751
msgid "Links"
msgstr ""
#: addons/web/static/src/js/views.js:831
msgid "You must choose at least one record."
msgstr "Vous devez choisir au moins un enregistrement"
#: addons/web/static/src/js/views.js:569
#: addons/web/static/src/js/views.js:832
msgid "Warning"
msgstr "Attention"
#: addons/web/static/src/js/views.js:609
#: addons/web/static/src/js/views.js:866
msgid "Translations"
msgstr "Traductions"
#: addons/web/static/src/js/views.js:614 addons/web/static/src/xml/base.xml:0
msgid "Save"
msgstr "Enregistrer"
#: addons/web/static/src/js/views.js:615
msgid "Close"
msgstr "Fermer"
#: addons/web/static/src/xml/base.xml:0
msgid "x"
msgstr "x"
@ -84,10 +429,6 @@ msgstr "."
msgid "Loading..."
msgstr "Chargement..."
#: addons/web/static/src/xml/base.xml:0
msgid "Create"
msgstr "Créer"
#: addons/web/static/src/xml/base.xml:0
msgid "Drop"
msgstr ""
@ -268,19 +609,31 @@ msgid "Disable all tips"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "View#"
msgid "More…"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Fields"
msgid "Debug View#"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "View labels"
msgid "- Fields View Get"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Sidebar Relates"
msgid "- Edit"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "View"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "- Edit SearchView"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "- Edit Action"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
@ -291,62 +644,10 @@ msgstr ""
msgid ":"
msgstr ":"
#: addons/web/static/src/xml/base.xml:0
msgid "Translate view"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Translate sidebar"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Delete"
msgstr "Supprimer"
#: addons/web/static/src/xml/base.xml:0
msgid "First"
msgstr "Premier"
#: addons/web/static/src/xml/base.xml:0
msgid "<"
msgstr "<"
#: addons/web/static/src/xml/base.xml:0
msgid ">"
msgstr ">"
#: addons/web/static/src/xml/base.xml:0
msgid "Last"
msgstr "Dernier"
#: addons/web/static/src/xml/base.xml:0
msgid "♻"
msgstr "♻"
#: addons/web/static/src/xml/base.xml:0
msgid "Save & Edit"
msgstr "Enregistrer et éditer"
#: addons/web/static/src/xml/base.xml:0
msgid "Create & Edit"
msgstr "Créer et éditer"
#: addons/web/static/src/xml/base.xml:0
msgid "New"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Duplicate"
msgstr "Dupliquer"
#: addons/web/static/src/xml/base.xml:0
msgid "Readonly/Editable"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "<<"
msgstr "<<"
#: addons/web/static/src/xml/base.xml:0
msgid "0"
msgstr "0"
@ -356,28 +657,88 @@ msgid "/"
msgstr "/"
#: addons/web/static/src/xml/base.xml:0
msgid ">>"
msgstr ">>"
#: addons/web/static/src/xml/base.xml:0
msgid "Add"
msgstr ""
msgid "Duplicate"
msgstr "Dupliquer"
#: addons/web/static/src/xml/base.xml:0
msgid "Unhandled widget"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Notebook Page \""
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "\""
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Modifiers:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "?"
msgstr "?"
#: addons/web/static/src/xml/base.xml:0
msgid "#"
msgid "(nolabel)"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Done"
msgstr "Terminé"
msgid "Field:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Object:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Type:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Widget:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Size:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Context:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Domain:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "On change:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Relation:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Selection:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "["
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "]"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "-"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "#"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Open..."
@ -411,18 +772,38 @@ msgstr ""
msgid "Clear"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Button"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "(no string)"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Special:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Button Type:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Method:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Action ID:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Search"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Advanced Filter"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "-- Filters --"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "-- Actions --"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Save Filter"
msgstr ""
@ -439,6 +820,18 @@ msgstr ""
msgid "(Any existing filter with the same name will be replaced)"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Select Dashboard to add this filter to:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Title of new Dashboard item:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Advanced Filters"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Any of the following conditions must match"
msgstr ""
@ -459,10 +852,6 @@ msgstr ""
msgid "and"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Cancel"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Save & New"
msgstr ""
@ -471,10 +860,6 @@ msgstr ""
msgid "Save & Close"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Export"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid ""
"This wizard will export all data that matches the current search criteria to "
@ -511,10 +896,6 @@ msgstr ""
msgid "Save fields list"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Remove"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Remove All"
msgstr ""
@ -531,10 +912,6 @@ msgstr ""
msgid "Save as:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Ok"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Saved exports:"
msgstr ""
@ -551,10 +928,6 @@ msgstr ""
msgid "Confirm Password:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Import"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "1. Import a .CSV file"
msgstr ""

View File

@ -7,54 +7,399 @@ msgid ""
msgstr ""
"Project-Id-Version: openerp-web\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2011-10-07 10:38+0200\n"
"POT-Creation-Date: 2011-12-20 18:48+0100\n"
"PO-Revision-Date: 2011-10-19 07:54+0000\n"
"Last-Translator: Amós Oviedo <Unknown>\n"
"Language-Team: Galician <gl@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: 2011-11-21 05:50+0000\n"
"X-Generator: Launchpad (build 14299)\n"
"X-Launchpad-Export-Date: 2011-12-21 05:27+0000\n"
"X-Generator: Launchpad (build 14538)\n"
#: addons/web/static/src/js/view_form.js:355
#: addons/web/static/src/js/chrome.js:162
#: addons/web/static/src/js/chrome.js:175
#: addons/web/static/src/js/chrome.js:369
#: addons/web/static/src/js/view_form.js:358
#: addons/web/static/src/js/view_form.js:1078
#: addons/web/static/src/xml/base.xml:0
msgid "Ok"
msgstr "Ok"
#: addons/web/static/src/js/chrome.js:668
msgid "About"
msgstr ""
#: addons/web/static/src/js/chrome.js:748
msgid "Preferences"
msgstr ""
#: addons/web/static/src/js/chrome.js:752
msgid "Change password"
msgstr ""
#: addons/web/static/src/js/chrome.js:753
#: addons/web/static/src/js/search.js:235
#: addons/web/static/src/js/search.js:276
#: addons/web/static/src/js/view_editor.js:97
#: addons/web/static/src/js/view_editor.js:778
#: addons/web/static/src/js/view_editor.js:907
#: addons/web/static/src/js/view_form.js:1085
#: addons/web/static/src/xml/base.xml:0
msgid "Cancel"
msgstr "Cancelar"
#: addons/web/static/src/js/chrome.js:754
#: addons/web/static/src/js/view_editor.js:75
#: addons/web/static/src/js/views.js:871 addons/web/static/src/xml/base.xml:0
msgid "Save"
msgstr "Gardar"
#: addons/web/static/src/js/chrome.js:774 addons/web/static/src/xml/base.xml:0
msgid "Change Password"
msgstr ""
#: addons/web/static/src/js/data_export.js:6
msgid "Export Data"
msgstr ""
#: addons/web/static/src/js/data_export.js:23
#: addons/web/static/src/js/data_import.js:73
#: addons/web/static/src/js/view_editor.js:49
#: addons/web/static/src/js/view_editor.js:387
#: addons/web/static/src/js/view_form.js:2775
#: addons/web/static/src/js/views.js:872
msgid "Close"
msgstr "Pechar"
#: addons/web/static/src/js/data_export.js:24
msgid "Export To File"
msgstr ""
#: addons/web/static/src/js/data_import.js:34
msgid "Import Data"
msgstr ""
#: addons/web/static/src/js/data_import.js:74
msgid "Import File"
msgstr ""
#: addons/web/static/src/js/data_import.js:109
msgid "External ID"
msgstr ""
#: addons/web/static/src/js/search.js:233
msgid "Filter Entry"
msgstr ""
#: addons/web/static/src/js/search.js:238
#: addons/web/static/src/js/search.js:279
msgid "OK"
msgstr ""
#: addons/web/static/src/js/search.js:274 addons/web/static/src/xml/base.xml:0
msgid "Add to Dashboard"
msgstr ""
#: addons/web/static/src/js/search.js:403
msgid "Invalid Search"
msgstr ""
#: addons/web/static/src/js/search.js:403
msgid "triggered from search view"
msgstr ""
#: addons/web/static/src/js/search.js:490
#, python-format
msgid "Incorrect value for field %(fieldname)s: [%(value)s] is %(message)s"
msgstr ""
#: addons/web/static/src/js/search.js:822
msgid "not a valid integer"
msgstr ""
#: addons/web/static/src/js/search.js:836
msgid "not a valid number"
msgstr ""
#: addons/web/static/src/js/search.js:898
msgid "Yes"
msgstr ""
#: addons/web/static/src/js/search.js:899
msgid "No"
msgstr ""
#: addons/web/static/src/js/search.js:1252
msgid "contains"
msgstr ""
#: addons/web/static/src/js/search.js:1253
msgid "doesn't contain"
msgstr ""
#: addons/web/static/src/js/search.js:1254
#: addons/web/static/src/js/search.js:1269
#: addons/web/static/src/js/search.js:1289
#: addons/web/static/src/js/search.js:1309
#: addons/web/static/src/js/search.js:1331
msgid "is equal to"
msgstr ""
#: addons/web/static/src/js/search.js:1255
#: addons/web/static/src/js/search.js:1270
#: addons/web/static/src/js/search.js:1290
#: addons/web/static/src/js/search.js:1310
#: addons/web/static/src/js/search.js:1332
msgid "is not equal to"
msgstr ""
#: addons/web/static/src/js/search.js:1256
#: addons/web/static/src/js/search.js:1271
#: addons/web/static/src/js/search.js:1291
#: addons/web/static/src/js/search.js:1311
#: addons/web/static/src/js/search.js:1333
msgid "greater than"
msgstr ""
#: addons/web/static/src/js/search.js:1257
#: addons/web/static/src/js/search.js:1272
#: addons/web/static/src/js/search.js:1292
#: addons/web/static/src/js/search.js:1312
#: addons/web/static/src/js/search.js:1334
msgid "less than"
msgstr ""
#: addons/web/static/src/js/search.js:1258
#: addons/web/static/src/js/search.js:1273
#: addons/web/static/src/js/search.js:1293
#: addons/web/static/src/js/search.js:1313
#: addons/web/static/src/js/search.js:1335
msgid "greater or equal than"
msgstr ""
#: addons/web/static/src/js/search.js:1259
#: addons/web/static/src/js/search.js:1274
#: addons/web/static/src/js/search.js:1294
#: addons/web/static/src/js/search.js:1314
#: addons/web/static/src/js/search.js:1336
msgid "less or equal than"
msgstr ""
#: addons/web/static/src/js/search.js:1325
#: addons/web/static/src/js/search.js:1350
msgid "is"
msgstr ""
#: addons/web/static/src/js/search.js:1351
msgid "is not"
msgstr ""
#: addons/web/static/src/js/search.js:1364
msgid "is true"
msgstr ""
#: addons/web/static/src/js/search.js:1365
msgid "is false"
msgstr ""
#: addons/web/static/src/js/view_editor.js:42
msgid "ViewEditor"
msgstr ""
#: addons/web/static/src/js/view_editor.js:46
#: addons/web/static/src/js/view_list.js:17
#: addons/web/static/src/xml/base.xml:0
msgid "Create"
msgstr "Crear"
#: addons/web/static/src/js/view_editor.js:47
#: addons/web/static/src/xml/base.xml:0
msgid "Edit"
msgstr ""
#: addons/web/static/src/js/view_editor.js:48
#: addons/web/static/src/xml/base.xml:0
msgid "Remove"
msgstr "Eliminar"
#: addons/web/static/src/js/view_editor.js:71
#, python-format
msgid "Create a view (%s)"
msgstr ""
#: addons/web/static/src/js/view_editor.js:170
msgid "Do you really want to remove this view?"
msgstr ""
#: addons/web/static/src/js/view_editor.js:367
#, python-format
msgid "View Editor %d - %s"
msgstr ""
#: addons/web/static/src/js/view_editor.js:371
msgid "Preview"
msgstr ""
#: addons/web/static/src/js/view_editor.js:442
msgid "Do you really want to remove this node?"
msgstr ""
#: addons/web/static/src/js/view_editor.js:756
#: addons/web/static/src/js/view_editor.js:883
msgid "Properties"
msgstr ""
#: addons/web/static/src/js/view_editor.js:760
#: addons/web/static/src/js/view_editor.js:887
msgid "Update"
msgstr ""
#: addons/web/static/src/js/view_form.js:17
msgid "Form"
msgstr ""
#: addons/web/static/src/js/view_form.js:401
msgid ""
"Warning, the record has been modified, your changes will be discarded."
msgstr "Advertencia, o rexistro modificouse, os cambios serán descartados."
#: addons/web/static/src/js/view_form.js:1659
#: addons/web/static/src/js/view_form.js:612
msgid "Attachments"
msgstr ""
#: addons/web/static/src/js/view_form.js:650
#, python-format
msgid "Do you really want to delete the attachment %s?"
msgstr ""
#: addons/web/static/src/js/view_form.js:1075
msgid "Confirm"
msgstr ""
#: addons/web/static/src/js/view_form.js:1838
msgid "<em>   Search More...</em>"
msgstr "<em>   Buscar máis...</em>"
#: addons/web/static/src/js/view_form.js:1672
#: addons/web/static/src/js/view_form.js:1851
#, python-format
msgid "<em>   Create \"<strong>%s</strong>\"</em>"
msgstr "<em>   Crear \"<strong>%s</strong>\"</em>"
#: addons/web/static/src/js/view_form.js:1678
#: addons/web/static/src/js/view_form.js:1857
msgid "<em>   Create and Edit...</em>"
msgstr "<em>   Crear e Editar...</em>"
#: addons/web/static/src/js/views.js:568
#: addons/web/static/src/js/view_form.js:2404
#: addons/web/static/src/xml/base.xml:0
msgid "Add"
msgstr "Engadir"
#: addons/web/static/src/js/view_list.js:8
msgid "List"
msgstr ""
#: addons/web/static/src/js/view_list.js:269
msgid "Unlimited"
msgstr ""
#: addons/web/static/src/js/view_list.js:516
msgid "Do you really want to remove these records?"
msgstr ""
#: addons/web/static/src/js/view_list.js:1202
msgid "Undefined"
msgstr ""
#: addons/web/static/src/js/view_page.js:8
msgid "Page"
msgstr ""
#: addons/web/static/src/js/view_page.js:52
msgid "Do you really want to delete this record?"
msgstr ""
#: addons/web/static/src/js/view_page.js:227
msgid "Download"
msgstr ""
#: addons/web/static/src/js/view_tree.js:11
msgid "Tree"
msgstr ""
#: addons/web/static/src/js/views.js:590
msgid "Search: "
msgstr ""
#: addons/web/static/src/js/views.js:710
msgid "Customize"
msgstr ""
#: addons/web/static/src/js/views.js:713
msgid "Manage Views"
msgstr ""
#: addons/web/static/src/js/views.js:715 addons/web/static/src/js/views.js:719
#: addons/web/static/src/js/views.js:724
msgid "Manage views of the current object"
msgstr ""
#: addons/web/static/src/js/views.js:717
msgid "Edit Workflow"
msgstr ""
#: addons/web/static/src/js/views.js:722
msgid "Customize Object"
msgstr ""
#: addons/web/static/src/js/views.js:726
msgid "Translate"
msgstr ""
#: addons/web/static/src/js/views.js:728
msgid "Technical translation"
msgstr ""
#: addons/web/static/src/js/views.js:733
msgid "Other Options"
msgstr ""
#: addons/web/static/src/js/views.js:736 addons/web/static/src/xml/base.xml:0
msgid "Import"
msgstr "Importar"
#: addons/web/static/src/js/views.js:739 addons/web/static/src/xml/base.xml:0
msgid "Export"
msgstr "Exportar"
#: addons/web/static/src/js/views.js:742
msgid "View Log"
msgstr ""
#: addons/web/static/src/js/views.js:751
msgid "Reports"
msgstr ""
#: addons/web/static/src/js/views.js:751
msgid "Actions"
msgstr ""
#: addons/web/static/src/js/views.js:751
msgid "Links"
msgstr ""
#: addons/web/static/src/js/views.js:831
msgid "You must choose at least one record."
msgstr "Debe seleccionar polo menos un rexistro."
#: addons/web/static/src/js/views.js:569
#: addons/web/static/src/js/views.js:832
msgid "Warning"
msgstr "Advertencia"
#: addons/web/static/src/js/views.js:609
#: addons/web/static/src/js/views.js:866
msgid "Translations"
msgstr "Traducións"
#: addons/web/static/src/js/views.js:614 addons/web/static/src/xml/base.xml:0
msgid "Save"
msgstr "Gardar"
#: addons/web/static/src/js/views.js:615
msgid "Close"
msgstr "Pechar"
#: addons/web/static/src/xml/base.xml:0
msgid "x"
msgstr "x"
@ -83,10 +428,6 @@ msgstr "."
msgid "Loading..."
msgstr "Cargando…"
#: addons/web/static/src/xml/base.xml:0
msgid "Create"
msgstr "Crear"
#: addons/web/static/src/xml/base.xml:0
msgid "Drop"
msgstr "Eliminar"
@ -275,20 +616,32 @@ msgid "Disable all tips"
msgstr "Desactivar todas as suxerencias"
#: addons/web/static/src/xml/base.xml:0
msgid "View#"
msgstr "Vista#"
msgid "More…"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Fields"
msgstr "Campos"
msgid "Debug View#"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "View labels"
msgstr "Ver etiquetas"
msgid "- Fields View Get"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Sidebar Relates"
msgstr "Relaciónase coa barra lateral"
msgid "- Edit"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "View"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "- Edit SearchView"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "- Edit Action"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Field"
@ -298,62 +651,10 @@ msgstr "Campo"
msgid ":"
msgstr ":"
#: addons/web/static/src/xml/base.xml:0
msgid "Translate view"
msgstr "Traducir vista"
#: addons/web/static/src/xml/base.xml:0
msgid "Translate sidebar"
msgstr "Traducir barra lateral"
#: addons/web/static/src/xml/base.xml:0
msgid "Delete"
msgstr "Borrar"
#: addons/web/static/src/xml/base.xml:0
msgid "First"
msgstr "Primeiro"
#: addons/web/static/src/xml/base.xml:0
msgid "<"
msgstr "<"
#: addons/web/static/src/xml/base.xml:0
msgid ">"
msgstr ">"
#: addons/web/static/src/xml/base.xml:0
msgid "Last"
msgstr "Último"
#: addons/web/static/src/xml/base.xml:0
msgid "♻"
msgstr "♻"
#: addons/web/static/src/xml/base.xml:0
msgid "Save & Edit"
msgstr "Gardar e Editar"
#: addons/web/static/src/xml/base.xml:0
msgid "Create & Edit"
msgstr "Crear e Editar"
#: addons/web/static/src/xml/base.xml:0
msgid "New"
msgstr "Novo"
#: addons/web/static/src/xml/base.xml:0
msgid "Duplicate"
msgstr "Duplicar"
#: addons/web/static/src/xml/base.xml:0
msgid "Readonly/Editable"
msgstr "Só Lectura/Editable"
#: addons/web/static/src/xml/base.xml:0
msgid "<<"
msgstr "<<"
#: addons/web/static/src/xml/base.xml:0
msgid "0"
msgstr "0"
@ -363,28 +664,88 @@ msgid "/"
msgstr "/"
#: addons/web/static/src/xml/base.xml:0
msgid ">>"
msgstr ">>"
#: addons/web/static/src/xml/base.xml:0
msgid "Add"
msgstr "Engadir"
msgid "Duplicate"
msgstr "Duplicar"
#: addons/web/static/src/xml/base.xml:0
msgid "Unhandled widget"
msgstr "Widget non controlado"
#: addons/web/static/src/xml/base.xml:0
msgid "Notebook Page \""
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "\""
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Modifiers:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "?"
msgstr "?"
#: addons/web/static/src/xml/base.xml:0
msgid "#"
msgstr "#"
msgid "(nolabel)"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Done"
msgstr "Feito"
msgid "Field:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Object:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Type:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Widget:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Size:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Context:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Domain:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "On change:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Relation:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Selection:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "["
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "]"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "-"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "#"
msgstr "#"
#: addons/web/static/src/xml/base.xml:0
msgid "Open..."
@ -418,18 +779,38 @@ msgstr "Gardar como"
msgid "Clear"
msgstr "Limpar"
#: addons/web/static/src/xml/base.xml:0
msgid "Button"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "(no string)"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Special:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Button Type:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Method:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Action ID:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Search"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Advanced Filter"
msgstr "Filtro Avanzado"
#: addons/web/static/src/xml/base.xml:0
msgid "-- Filters --"
msgstr "-- Filtros --"
#: addons/web/static/src/xml/base.xml:0
msgid "-- Actions --"
msgstr "-- Accións --"
#: addons/web/static/src/xml/base.xml:0
msgid "Save Filter"
msgstr "Gardar Filtro"
@ -446,6 +827,18 @@ msgstr "Nome do Filtro"
msgid "(Any existing filter with the same name will be replaced)"
msgstr "(Calquer filtro existente co mesmo nome será reemplazado)"
#: addons/web/static/src/xml/base.xml:0
msgid "Select Dashboard to add this filter to:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Title of new Dashboard item:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Advanced Filters"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Any of the following conditions must match"
msgstr "Calquera das condicións seguintes deben coincidir"
@ -466,10 +859,6 @@ msgstr "Engadir condición"
msgid "and"
msgstr "e"
#: addons/web/static/src/xml/base.xml:0
msgid "Cancel"
msgstr "Cancelar"
#: addons/web/static/src/xml/base.xml:0
msgid "Save & New"
msgstr "Gardar e Novo"
@ -478,10 +867,6 @@ msgstr "Gardar e Novo"
msgid "Save & Close"
msgstr "Gardar e Pechar"
#: addons/web/static/src/xml/base.xml:0
msgid "Export"
msgstr "Exportar"
#: addons/web/static/src/xml/base.xml:0
msgid ""
"This wizard will export all data that matches the current search criteria to "
@ -522,10 +907,6 @@ msgstr "Campos a exportar"
msgid "Save fields list"
msgstr "Gardar lista de campos"
#: addons/web/static/src/xml/base.xml:0
msgid "Remove"
msgstr "Eliminar"
#: addons/web/static/src/xml/base.xml:0
msgid "Remove All"
msgstr "Eliminar Todo"
@ -542,10 +923,6 @@ msgstr "&nbsp;"
msgid "Save as:"
msgstr "Gardar como:"
#: addons/web/static/src/xml/base.xml:0
msgid "Ok"
msgstr "Ok"
#: addons/web/static/src/xml/base.xml:0
msgid "Saved exports:"
msgstr "Exportacións gardadas:"
@ -562,10 +939,6 @@ msgstr "Contrasinal nova:"
msgid "Confirm Password:"
msgstr "Confirmar contrasinal:"
#: addons/web/static/src/xml/base.xml:0
msgid "Import"
msgstr "Importar"
#: addons/web/static/src/xml/base.xml:0
msgid "1. Import a .CSV file"
msgstr "1. Importar un arquivo .CSV"

1051
addons/web/po/hr.po Normal file

File diff suppressed because it is too large Load Diff

View File

@ -7,56 +7,401 @@ msgid ""
msgstr ""
"Project-Id-Version: openerp-web\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2011-10-07 10:38+0200\n"
"POT-Creation-Date: 2011-12-20 18:48+0100\n"
"PO-Revision-Date: 2011-10-08 13:39+0000\n"
"Last-Translator: Nicola Riolini - Micronaet <Unknown>\n"
"Language-Team: Italian <it@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: 2011-11-21 05:50+0000\n"
"X-Generator: Launchpad (build 14299)\n"
"X-Launchpad-Export-Date: 2011-12-21 05:27+0000\n"
"X-Generator: Launchpad (build 14538)\n"
#: addons/web/static/src/js/view_form.js:355
#: addons/web/static/src/js/chrome.js:162
#: addons/web/static/src/js/chrome.js:175
#: addons/web/static/src/js/chrome.js:369
#: addons/web/static/src/js/view_form.js:358
#: addons/web/static/src/js/view_form.js:1078
#: addons/web/static/src/xml/base.xml:0
msgid "Ok"
msgstr "Ok"
#: addons/web/static/src/js/chrome.js:668
msgid "About"
msgstr ""
#: addons/web/static/src/js/chrome.js:748
msgid "Preferences"
msgstr ""
#: addons/web/static/src/js/chrome.js:752
msgid "Change password"
msgstr ""
#: addons/web/static/src/js/chrome.js:753
#: addons/web/static/src/js/search.js:235
#: addons/web/static/src/js/search.js:276
#: addons/web/static/src/js/view_editor.js:97
#: addons/web/static/src/js/view_editor.js:778
#: addons/web/static/src/js/view_editor.js:907
#: addons/web/static/src/js/view_form.js:1085
#: addons/web/static/src/xml/base.xml:0
msgid "Cancel"
msgstr "Annulla"
#: addons/web/static/src/js/chrome.js:754
#: addons/web/static/src/js/view_editor.js:75
#: addons/web/static/src/js/views.js:871 addons/web/static/src/xml/base.xml:0
msgid "Save"
msgstr "Salva"
#: addons/web/static/src/js/chrome.js:774 addons/web/static/src/xml/base.xml:0
msgid "Change Password"
msgstr ""
#: addons/web/static/src/js/data_export.js:6
msgid "Export Data"
msgstr ""
#: addons/web/static/src/js/data_export.js:23
#: addons/web/static/src/js/data_import.js:73
#: addons/web/static/src/js/view_editor.js:49
#: addons/web/static/src/js/view_editor.js:387
#: addons/web/static/src/js/view_form.js:2775
#: addons/web/static/src/js/views.js:872
msgid "Close"
msgstr "Chiudi"
#: addons/web/static/src/js/data_export.js:24
msgid "Export To File"
msgstr ""
#: addons/web/static/src/js/data_import.js:34
msgid "Import Data"
msgstr ""
#: addons/web/static/src/js/data_import.js:74
msgid "Import File"
msgstr ""
#: addons/web/static/src/js/data_import.js:109
msgid "External ID"
msgstr ""
#: addons/web/static/src/js/search.js:233
msgid "Filter Entry"
msgstr ""
#: addons/web/static/src/js/search.js:238
#: addons/web/static/src/js/search.js:279
msgid "OK"
msgstr ""
#: addons/web/static/src/js/search.js:274 addons/web/static/src/xml/base.xml:0
msgid "Add to Dashboard"
msgstr ""
#: addons/web/static/src/js/search.js:403
msgid "Invalid Search"
msgstr ""
#: addons/web/static/src/js/search.js:403
msgid "triggered from search view"
msgstr ""
#: addons/web/static/src/js/search.js:490
#, python-format
msgid "Incorrect value for field %(fieldname)s: [%(value)s] is %(message)s"
msgstr ""
#: addons/web/static/src/js/search.js:822
msgid "not a valid integer"
msgstr ""
#: addons/web/static/src/js/search.js:836
msgid "not a valid number"
msgstr ""
#: addons/web/static/src/js/search.js:898
msgid "Yes"
msgstr ""
#: addons/web/static/src/js/search.js:899
msgid "No"
msgstr ""
#: addons/web/static/src/js/search.js:1252
msgid "contains"
msgstr ""
#: addons/web/static/src/js/search.js:1253
msgid "doesn't contain"
msgstr ""
#: addons/web/static/src/js/search.js:1254
#: addons/web/static/src/js/search.js:1269
#: addons/web/static/src/js/search.js:1289
#: addons/web/static/src/js/search.js:1309
#: addons/web/static/src/js/search.js:1331
msgid "is equal to"
msgstr ""
#: addons/web/static/src/js/search.js:1255
#: addons/web/static/src/js/search.js:1270
#: addons/web/static/src/js/search.js:1290
#: addons/web/static/src/js/search.js:1310
#: addons/web/static/src/js/search.js:1332
msgid "is not equal to"
msgstr ""
#: addons/web/static/src/js/search.js:1256
#: addons/web/static/src/js/search.js:1271
#: addons/web/static/src/js/search.js:1291
#: addons/web/static/src/js/search.js:1311
#: addons/web/static/src/js/search.js:1333
msgid "greater than"
msgstr ""
#: addons/web/static/src/js/search.js:1257
#: addons/web/static/src/js/search.js:1272
#: addons/web/static/src/js/search.js:1292
#: addons/web/static/src/js/search.js:1312
#: addons/web/static/src/js/search.js:1334
msgid "less than"
msgstr ""
#: addons/web/static/src/js/search.js:1258
#: addons/web/static/src/js/search.js:1273
#: addons/web/static/src/js/search.js:1293
#: addons/web/static/src/js/search.js:1313
#: addons/web/static/src/js/search.js:1335
msgid "greater or equal than"
msgstr ""
#: addons/web/static/src/js/search.js:1259
#: addons/web/static/src/js/search.js:1274
#: addons/web/static/src/js/search.js:1294
#: addons/web/static/src/js/search.js:1314
#: addons/web/static/src/js/search.js:1336
msgid "less or equal than"
msgstr ""
#: addons/web/static/src/js/search.js:1325
#: addons/web/static/src/js/search.js:1350
msgid "is"
msgstr ""
#: addons/web/static/src/js/search.js:1351
msgid "is not"
msgstr ""
#: addons/web/static/src/js/search.js:1364
msgid "is true"
msgstr ""
#: addons/web/static/src/js/search.js:1365
msgid "is false"
msgstr ""
#: addons/web/static/src/js/view_editor.js:42
msgid "ViewEditor"
msgstr ""
#: addons/web/static/src/js/view_editor.js:46
#: addons/web/static/src/js/view_list.js:17
#: addons/web/static/src/xml/base.xml:0
msgid "Create"
msgstr "Crea"
#: addons/web/static/src/js/view_editor.js:47
#: addons/web/static/src/xml/base.xml:0
msgid "Edit"
msgstr ""
#: addons/web/static/src/js/view_editor.js:48
#: addons/web/static/src/xml/base.xml:0
msgid "Remove"
msgstr "Rimuovi"
#: addons/web/static/src/js/view_editor.js:71
#, python-format
msgid "Create a view (%s)"
msgstr ""
#: addons/web/static/src/js/view_editor.js:170
msgid "Do you really want to remove this view?"
msgstr ""
#: addons/web/static/src/js/view_editor.js:367
#, python-format
msgid "View Editor %d - %s"
msgstr ""
#: addons/web/static/src/js/view_editor.js:371
msgid "Preview"
msgstr ""
#: addons/web/static/src/js/view_editor.js:442
msgid "Do you really want to remove this node?"
msgstr ""
#: addons/web/static/src/js/view_editor.js:756
#: addons/web/static/src/js/view_editor.js:883
msgid "Properties"
msgstr ""
#: addons/web/static/src/js/view_editor.js:760
#: addons/web/static/src/js/view_editor.js:887
msgid "Update"
msgstr ""
#: addons/web/static/src/js/view_form.js:17
msgid "Form"
msgstr ""
#: addons/web/static/src/js/view_form.js:401
msgid ""
"Warning, the record has been modified, your changes will be discarded."
msgstr ""
"Attenzione, il record è stato modificato, i vostri cambiamenti verranno "
"scartati."
#: addons/web/static/src/js/view_form.js:1659
#: addons/web/static/src/js/view_form.js:612
msgid "Attachments"
msgstr ""
#: addons/web/static/src/js/view_form.js:650
#, python-format
msgid "Do you really want to delete the attachment %s?"
msgstr ""
#: addons/web/static/src/js/view_form.js:1075
msgid "Confirm"
msgstr ""
#: addons/web/static/src/js/view_form.js:1838
msgid "<em>   Search More...</em>"
msgstr "<em>   Cerca ancora...</em>"
#: addons/web/static/src/js/view_form.js:1672
#: addons/web/static/src/js/view_form.js:1851
#, python-format
msgid "<em>   Create \"<strong>%s</strong>\"</em>"
msgstr "<em>   Crea \"<strong>%s</strong>\"</em>"
#: addons/web/static/src/js/view_form.js:1678
#: addons/web/static/src/js/view_form.js:1857
msgid "<em>   Create and Edit...</em>"
msgstr "<em>   Crea e modifica...</em>"
#: addons/web/static/src/js/views.js:568
#: addons/web/static/src/js/view_form.js:2404
#: addons/web/static/src/xml/base.xml:0
msgid "Add"
msgstr "Aggiungi"
#: addons/web/static/src/js/view_list.js:8
msgid "List"
msgstr ""
#: addons/web/static/src/js/view_list.js:269
msgid "Unlimited"
msgstr ""
#: addons/web/static/src/js/view_list.js:516
msgid "Do you really want to remove these records?"
msgstr ""
#: addons/web/static/src/js/view_list.js:1202
msgid "Undefined"
msgstr ""
#: addons/web/static/src/js/view_page.js:8
msgid "Page"
msgstr ""
#: addons/web/static/src/js/view_page.js:52
msgid "Do you really want to delete this record?"
msgstr ""
#: addons/web/static/src/js/view_page.js:227
msgid "Download"
msgstr ""
#: addons/web/static/src/js/view_tree.js:11
msgid "Tree"
msgstr ""
#: addons/web/static/src/js/views.js:590
msgid "Search: "
msgstr ""
#: addons/web/static/src/js/views.js:710
msgid "Customize"
msgstr ""
#: addons/web/static/src/js/views.js:713
msgid "Manage Views"
msgstr ""
#: addons/web/static/src/js/views.js:715 addons/web/static/src/js/views.js:719
#: addons/web/static/src/js/views.js:724
msgid "Manage views of the current object"
msgstr ""
#: addons/web/static/src/js/views.js:717
msgid "Edit Workflow"
msgstr ""
#: addons/web/static/src/js/views.js:722
msgid "Customize Object"
msgstr ""
#: addons/web/static/src/js/views.js:726
msgid "Translate"
msgstr ""
#: addons/web/static/src/js/views.js:728
msgid "Technical translation"
msgstr ""
#: addons/web/static/src/js/views.js:733
msgid "Other Options"
msgstr ""
#: addons/web/static/src/js/views.js:736 addons/web/static/src/xml/base.xml:0
msgid "Import"
msgstr "Importa"
#: addons/web/static/src/js/views.js:739 addons/web/static/src/xml/base.xml:0
msgid "Export"
msgstr "Esporta"
#: addons/web/static/src/js/views.js:742
msgid "View Log"
msgstr ""
#: addons/web/static/src/js/views.js:751
msgid "Reports"
msgstr ""
#: addons/web/static/src/js/views.js:751
msgid "Actions"
msgstr ""
#: addons/web/static/src/js/views.js:751
msgid "Links"
msgstr ""
#: addons/web/static/src/js/views.js:831
msgid "You must choose at least one record."
msgstr "E' necessario selezionare almeno un record."
#: addons/web/static/src/js/views.js:569
#: addons/web/static/src/js/views.js:832
msgid "Warning"
msgstr "Attenzione"
#: addons/web/static/src/js/views.js:609
#: addons/web/static/src/js/views.js:866
msgid "Translations"
msgstr "Traduzioni"
#: addons/web/static/src/js/views.js:614 addons/web/static/src/xml/base.xml:0
msgid "Save"
msgstr "Salva"
#: addons/web/static/src/js/views.js:615
msgid "Close"
msgstr "Chiudi"
#: addons/web/static/src/xml/base.xml:0
msgid "x"
msgstr "x"
@ -85,10 +430,6 @@ msgstr "."
msgid "Loading..."
msgstr "Caricamento..."
#: addons/web/static/src/xml/base.xml:0
msgid "Create"
msgstr "Crea"
#: addons/web/static/src/xml/base.xml:0
msgid "Drop"
msgstr "Elimina"
@ -277,19 +618,31 @@ msgid "Disable all tips"
msgstr "Disabilita tutti i consigli"
#: addons/web/static/src/xml/base.xml:0
msgid "View#"
msgstr "Vista à"
msgid "More…"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Fields"
msgstr "Campi"
msgid "Debug View#"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "View labels"
msgstr "Visualizza etichette"
msgid "- Fields View Get"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Sidebar Relates"
msgid "- Edit"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "View"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "- Edit SearchView"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "- Edit Action"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
@ -300,62 +653,10 @@ msgstr "Campo"
msgid ":"
msgstr ":"
#: addons/web/static/src/xml/base.xml:0
msgid "Translate view"
msgstr "Traduci vista"
#: addons/web/static/src/xml/base.xml:0
msgid "Translate sidebar"
msgstr "Traduci barra laterale"
#: addons/web/static/src/xml/base.xml:0
msgid "Delete"
msgstr "Elimina"
#: addons/web/static/src/xml/base.xml:0
msgid "First"
msgstr "Primo"
#: addons/web/static/src/xml/base.xml:0
msgid "<"
msgstr "<"
#: addons/web/static/src/xml/base.xml:0
msgid ">"
msgstr ">"
#: addons/web/static/src/xml/base.xml:0
msgid "Last"
msgstr "Ultimo"
#: addons/web/static/src/xml/base.xml:0
msgid "♻"
msgstr "♻"
#: addons/web/static/src/xml/base.xml:0
msgid "Save & Edit"
msgstr "Salva & Modifica"
#: addons/web/static/src/xml/base.xml:0
msgid "Create & Edit"
msgstr "Crea & Modifica"
#: addons/web/static/src/xml/base.xml:0
msgid "New"
msgstr "Nuovo"
#: addons/web/static/src/xml/base.xml:0
msgid "Duplicate"
msgstr "Duplica"
#: addons/web/static/src/xml/base.xml:0
msgid "Readonly/Editable"
msgstr "Sola lettura / Modificabile"
#: addons/web/static/src/xml/base.xml:0
msgid "<<"
msgstr "<<"
#: addons/web/static/src/xml/base.xml:0
msgid "0"
msgstr "0"
@ -365,28 +666,88 @@ msgid "/"
msgstr "/"
#: addons/web/static/src/xml/base.xml:0
msgid ">>"
msgstr ">>"
#: addons/web/static/src/xml/base.xml:0
msgid "Add"
msgstr "Aggiungi"
msgid "Duplicate"
msgstr "Duplica"
#: addons/web/static/src/xml/base.xml:0
msgid "Unhandled widget"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Notebook Page \""
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "\""
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Modifiers:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "?"
msgstr "?"
#: addons/web/static/src/xml/base.xml:0
msgid "#"
msgstr "#"
msgid "(nolabel)"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Done"
msgstr "Completato"
msgid "Field:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Object:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Type:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Widget:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Size:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Context:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Domain:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "On change:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Relation:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Selection:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "["
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "]"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "-"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "#"
msgstr "#"
#: addons/web/static/src/xml/base.xml:0
msgid "Open..."
@ -420,18 +781,38 @@ msgstr "Salva come"
msgid "Clear"
msgstr "Pulisci"
#: addons/web/static/src/xml/base.xml:0
msgid "Button"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "(no string)"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Special:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Button Type:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Method:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Action ID:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Search"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Advanced Filter"
msgstr "Filtro avanzato"
#: addons/web/static/src/xml/base.xml:0
msgid "-- Filters --"
msgstr "-- Filtri --"
#: addons/web/static/src/xml/base.xml:0
msgid "-- Actions --"
msgstr "-- Azioni --"
#: addons/web/static/src/xml/base.xml:0
msgid "Save Filter"
msgstr "Salva Filtro"
@ -448,6 +829,18 @@ msgstr "Nome filtro:"
msgid "(Any existing filter with the same name will be replaced)"
msgstr "(Eventuali filtri esistenti con lo stesso nome saranno rimpiazzati)"
#: addons/web/static/src/xml/base.xml:0
msgid "Select Dashboard to add this filter to:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Title of new Dashboard item:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Advanced Filters"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Any of the following conditions must match"
msgstr ""
@ -468,10 +861,6 @@ msgstr "Aggiungi condizione"
msgid "and"
msgstr "e"
#: addons/web/static/src/xml/base.xml:0
msgid "Cancel"
msgstr "Annulla"
#: addons/web/static/src/xml/base.xml:0
msgid "Save & New"
msgstr "Salva & Nuovo"
@ -480,10 +869,6 @@ msgstr "Salva & Nuovo"
msgid "Save & Close"
msgstr "Salva & Chiudi"
#: addons/web/static/src/xml/base.xml:0
msgid "Export"
msgstr "Esporta"
#: addons/web/static/src/xml/base.xml:0
msgid ""
"This wizard will export all data that matches the current search criteria to "
@ -520,10 +905,6 @@ msgstr "Campi da esportare"
msgid "Save fields list"
msgstr "Salva l'elenco dei campi"
#: addons/web/static/src/xml/base.xml:0
msgid "Remove"
msgstr "Rimuovi"
#: addons/web/static/src/xml/base.xml:0
msgid "Remove All"
msgstr "Rimuovi tutto"
@ -540,10 +921,6 @@ msgstr "&nbsp;"
msgid "Save as:"
msgstr "Salva come:"
#: addons/web/static/src/xml/base.xml:0
msgid "Ok"
msgstr "Ok"
#: addons/web/static/src/xml/base.xml:0
msgid "Saved exports:"
msgstr "Esportazioni salvate:"
@ -560,10 +937,6 @@ msgstr "Nuova password:"
msgid "Confirm Password:"
msgstr "Conferma password:"
#: addons/web/static/src/xml/base.xml:0
msgid "Import"
msgstr "Importa"
#: addons/web/static/src/xml/base.xml:0
msgid "1. Import a .CSV file"
msgstr "1. Importa un file .CSV"

1082
addons/web/po/nl.po Normal file

File diff suppressed because it is too large Load Diff

View File

@ -7,56 +7,401 @@ msgid ""
msgstr ""
"Project-Id-Version: openerp-web\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2011-10-07 10:38+0200\n"
"POT-Creation-Date: 2011-12-20 18:48+0100\n"
"PO-Revision-Date: 2011-10-07 12:50+0000\n"
"Last-Translator: Niels Huylebroeck <Unknown>\n"
"Language-Team: Dutch (Belgium) <nl_BE@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: 2011-11-21 05:50+0000\n"
"X-Generator: Launchpad (build 14299)\n"
"X-Launchpad-Export-Date: 2011-12-21 05:27+0000\n"
"X-Generator: Launchpad (build 14538)\n"
#: addons/web/static/src/js/view_form.js:355
#: addons/web/static/src/js/chrome.js:162
#: addons/web/static/src/js/chrome.js:175
#: addons/web/static/src/js/chrome.js:369
#: addons/web/static/src/js/view_form.js:358
#: addons/web/static/src/js/view_form.js:1078
#: addons/web/static/src/xml/base.xml:0
msgid "Ok"
msgstr "Ok"
#: addons/web/static/src/js/chrome.js:668
msgid "About"
msgstr ""
#: addons/web/static/src/js/chrome.js:748
msgid "Preferences"
msgstr ""
#: addons/web/static/src/js/chrome.js:752
msgid "Change password"
msgstr ""
#: addons/web/static/src/js/chrome.js:753
#: addons/web/static/src/js/search.js:235
#: addons/web/static/src/js/search.js:276
#: addons/web/static/src/js/view_editor.js:97
#: addons/web/static/src/js/view_editor.js:778
#: addons/web/static/src/js/view_editor.js:907
#: addons/web/static/src/js/view_form.js:1085
#: addons/web/static/src/xml/base.xml:0
msgid "Cancel"
msgstr "Annuleren"
#: addons/web/static/src/js/chrome.js:754
#: addons/web/static/src/js/view_editor.js:75
#: addons/web/static/src/js/views.js:871 addons/web/static/src/xml/base.xml:0
msgid "Save"
msgstr "Opslaan"
#: addons/web/static/src/js/chrome.js:774 addons/web/static/src/xml/base.xml:0
msgid "Change Password"
msgstr ""
#: addons/web/static/src/js/data_export.js:6
msgid "Export Data"
msgstr ""
#: addons/web/static/src/js/data_export.js:23
#: addons/web/static/src/js/data_import.js:73
#: addons/web/static/src/js/view_editor.js:49
#: addons/web/static/src/js/view_editor.js:387
#: addons/web/static/src/js/view_form.js:2775
#: addons/web/static/src/js/views.js:872
msgid "Close"
msgstr "Sluiten"
#: addons/web/static/src/js/data_export.js:24
msgid "Export To File"
msgstr ""
#: addons/web/static/src/js/data_import.js:34
msgid "Import Data"
msgstr ""
#: addons/web/static/src/js/data_import.js:74
msgid "Import File"
msgstr ""
#: addons/web/static/src/js/data_import.js:109
msgid "External ID"
msgstr ""
#: addons/web/static/src/js/search.js:233
msgid "Filter Entry"
msgstr ""
#: addons/web/static/src/js/search.js:238
#: addons/web/static/src/js/search.js:279
msgid "OK"
msgstr ""
#: addons/web/static/src/js/search.js:274 addons/web/static/src/xml/base.xml:0
msgid "Add to Dashboard"
msgstr ""
#: addons/web/static/src/js/search.js:403
msgid "Invalid Search"
msgstr ""
#: addons/web/static/src/js/search.js:403
msgid "triggered from search view"
msgstr ""
#: addons/web/static/src/js/search.js:490
#, python-format
msgid "Incorrect value for field %(fieldname)s: [%(value)s] is %(message)s"
msgstr ""
#: addons/web/static/src/js/search.js:822
msgid "not a valid integer"
msgstr ""
#: addons/web/static/src/js/search.js:836
msgid "not a valid number"
msgstr ""
#: addons/web/static/src/js/search.js:898
msgid "Yes"
msgstr ""
#: addons/web/static/src/js/search.js:899
msgid "No"
msgstr ""
#: addons/web/static/src/js/search.js:1252
msgid "contains"
msgstr ""
#: addons/web/static/src/js/search.js:1253
msgid "doesn't contain"
msgstr ""
#: addons/web/static/src/js/search.js:1254
#: addons/web/static/src/js/search.js:1269
#: addons/web/static/src/js/search.js:1289
#: addons/web/static/src/js/search.js:1309
#: addons/web/static/src/js/search.js:1331
msgid "is equal to"
msgstr ""
#: addons/web/static/src/js/search.js:1255
#: addons/web/static/src/js/search.js:1270
#: addons/web/static/src/js/search.js:1290
#: addons/web/static/src/js/search.js:1310
#: addons/web/static/src/js/search.js:1332
msgid "is not equal to"
msgstr ""
#: addons/web/static/src/js/search.js:1256
#: addons/web/static/src/js/search.js:1271
#: addons/web/static/src/js/search.js:1291
#: addons/web/static/src/js/search.js:1311
#: addons/web/static/src/js/search.js:1333
msgid "greater than"
msgstr ""
#: addons/web/static/src/js/search.js:1257
#: addons/web/static/src/js/search.js:1272
#: addons/web/static/src/js/search.js:1292
#: addons/web/static/src/js/search.js:1312
#: addons/web/static/src/js/search.js:1334
msgid "less than"
msgstr ""
#: addons/web/static/src/js/search.js:1258
#: addons/web/static/src/js/search.js:1273
#: addons/web/static/src/js/search.js:1293
#: addons/web/static/src/js/search.js:1313
#: addons/web/static/src/js/search.js:1335
msgid "greater or equal than"
msgstr ""
#: addons/web/static/src/js/search.js:1259
#: addons/web/static/src/js/search.js:1274
#: addons/web/static/src/js/search.js:1294
#: addons/web/static/src/js/search.js:1314
#: addons/web/static/src/js/search.js:1336
msgid "less or equal than"
msgstr ""
#: addons/web/static/src/js/search.js:1325
#: addons/web/static/src/js/search.js:1350
msgid "is"
msgstr ""
#: addons/web/static/src/js/search.js:1351
msgid "is not"
msgstr ""
#: addons/web/static/src/js/search.js:1364
msgid "is true"
msgstr ""
#: addons/web/static/src/js/search.js:1365
msgid "is false"
msgstr ""
#: addons/web/static/src/js/view_editor.js:42
msgid "ViewEditor"
msgstr ""
#: addons/web/static/src/js/view_editor.js:46
#: addons/web/static/src/js/view_list.js:17
#: addons/web/static/src/xml/base.xml:0
msgid "Create"
msgstr "Creër"
#: addons/web/static/src/js/view_editor.js:47
#: addons/web/static/src/xml/base.xml:0
msgid "Edit"
msgstr ""
#: addons/web/static/src/js/view_editor.js:48
#: addons/web/static/src/xml/base.xml:0
msgid "Remove"
msgstr "Verwijderen"
#: addons/web/static/src/js/view_editor.js:71
#, python-format
msgid "Create a view (%s)"
msgstr ""
#: addons/web/static/src/js/view_editor.js:170
msgid "Do you really want to remove this view?"
msgstr ""
#: addons/web/static/src/js/view_editor.js:367
#, python-format
msgid "View Editor %d - %s"
msgstr ""
#: addons/web/static/src/js/view_editor.js:371
msgid "Preview"
msgstr ""
#: addons/web/static/src/js/view_editor.js:442
msgid "Do you really want to remove this node?"
msgstr ""
#: addons/web/static/src/js/view_editor.js:756
#: addons/web/static/src/js/view_editor.js:883
msgid "Properties"
msgstr ""
#: addons/web/static/src/js/view_editor.js:760
#: addons/web/static/src/js/view_editor.js:887
msgid "Update"
msgstr ""
#: addons/web/static/src/js/view_form.js:17
msgid "Form"
msgstr ""
#: addons/web/static/src/js/view_form.js:401
msgid ""
"Warning, the record has been modified, your changes will be discarded."
msgstr ""
"Opgelet, het record werd gewijzigd, uw veranderingen zullen niet opgeslagen "
"worden."
#: addons/web/static/src/js/view_form.js:1659
#: addons/web/static/src/js/view_form.js:612
msgid "Attachments"
msgstr ""
#: addons/web/static/src/js/view_form.js:650
#, python-format
msgid "Do you really want to delete the attachment %s?"
msgstr ""
#: addons/web/static/src/js/view_form.js:1075
msgid "Confirm"
msgstr ""
#: addons/web/static/src/js/view_form.js:1838
msgid "<em>   Search More...</em>"
msgstr "<em>   Uitgebreid zoeken...</em>"
#: addons/web/static/src/js/view_form.js:1672
#: addons/web/static/src/js/view_form.js:1851
#, python-format
msgid "<em>   Create \"<strong>%s</strong>\"</em>"
msgstr "<em>   Creër \"<strong>%s</strong>\"</em>"
#: addons/web/static/src/js/view_form.js:1678
#: addons/web/static/src/js/view_form.js:1857
msgid "<em>   Create and Edit...</em>"
msgstr "<em>   Creër en bewerk...</em>"
#: addons/web/static/src/js/views.js:568
#: addons/web/static/src/js/view_form.js:2404
#: addons/web/static/src/xml/base.xml:0
msgid "Add"
msgstr "Toevoegen"
#: addons/web/static/src/js/view_list.js:8
msgid "List"
msgstr ""
#: addons/web/static/src/js/view_list.js:269
msgid "Unlimited"
msgstr ""
#: addons/web/static/src/js/view_list.js:516
msgid "Do you really want to remove these records?"
msgstr ""
#: addons/web/static/src/js/view_list.js:1202
msgid "Undefined"
msgstr ""
#: addons/web/static/src/js/view_page.js:8
msgid "Page"
msgstr ""
#: addons/web/static/src/js/view_page.js:52
msgid "Do you really want to delete this record?"
msgstr ""
#: addons/web/static/src/js/view_page.js:227
msgid "Download"
msgstr ""
#: addons/web/static/src/js/view_tree.js:11
msgid "Tree"
msgstr ""
#: addons/web/static/src/js/views.js:590
msgid "Search: "
msgstr ""
#: addons/web/static/src/js/views.js:710
msgid "Customize"
msgstr ""
#: addons/web/static/src/js/views.js:713
msgid "Manage Views"
msgstr ""
#: addons/web/static/src/js/views.js:715 addons/web/static/src/js/views.js:719
#: addons/web/static/src/js/views.js:724
msgid "Manage views of the current object"
msgstr ""
#: addons/web/static/src/js/views.js:717
msgid "Edit Workflow"
msgstr ""
#: addons/web/static/src/js/views.js:722
msgid "Customize Object"
msgstr ""
#: addons/web/static/src/js/views.js:726
msgid "Translate"
msgstr ""
#: addons/web/static/src/js/views.js:728
msgid "Technical translation"
msgstr ""
#: addons/web/static/src/js/views.js:733
msgid "Other Options"
msgstr ""
#: addons/web/static/src/js/views.js:736 addons/web/static/src/xml/base.xml:0
msgid "Import"
msgstr "Importeren"
#: addons/web/static/src/js/views.js:739 addons/web/static/src/xml/base.xml:0
msgid "Export"
msgstr "Exporteren"
#: addons/web/static/src/js/views.js:742
msgid "View Log"
msgstr ""
#: addons/web/static/src/js/views.js:751
msgid "Reports"
msgstr ""
#: addons/web/static/src/js/views.js:751
msgid "Actions"
msgstr ""
#: addons/web/static/src/js/views.js:751
msgid "Links"
msgstr ""
#: addons/web/static/src/js/views.js:831
msgid "You must choose at least one record."
msgstr "U moet minstens een record selecteren."
#: addons/web/static/src/js/views.js:569
#: addons/web/static/src/js/views.js:832
msgid "Warning"
msgstr "Waarschuwing"
#: addons/web/static/src/js/views.js:609
#: addons/web/static/src/js/views.js:866
msgid "Translations"
msgstr "Vertalingen"
#: addons/web/static/src/js/views.js:614 addons/web/static/src/xml/base.xml:0
msgid "Save"
msgstr "Opslaan"
#: addons/web/static/src/js/views.js:615
msgid "Close"
msgstr "Sluiten"
#: addons/web/static/src/xml/base.xml:0
msgid "x"
msgstr "x"
@ -85,10 +430,6 @@ msgstr "."
msgid "Loading..."
msgstr "Laden..."
#: addons/web/static/src/xml/base.xml:0
msgid "Create"
msgstr "Creër"
#: addons/web/static/src/xml/base.xml:0
msgid "Drop"
msgstr "Drop"
@ -277,19 +618,31 @@ msgid "Disable all tips"
msgstr "Verberg alle tips"
#: addons/web/static/src/xml/base.xml:0
msgid "View#"
msgstr "View#"
msgid "More…"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Fields"
msgstr "Velden"
msgid "Debug View#"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "View labels"
msgstr "Toon labels"
msgid "- Fields View Get"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Sidebar Relates"
msgid "- Edit"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "View"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "- Edit SearchView"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "- Edit Action"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
@ -300,62 +653,10 @@ msgstr "Veld"
msgid ":"
msgstr ":"
#: addons/web/static/src/xml/base.xml:0
msgid "Translate view"
msgstr "Vertaal scherm"
#: addons/web/static/src/xml/base.xml:0
msgid "Translate sidebar"
msgstr "Vertaal balk"
#: addons/web/static/src/xml/base.xml:0
msgid "Delete"
msgstr "Verwijder"
#: addons/web/static/src/xml/base.xml:0
msgid "First"
msgstr "Eerste"
#: addons/web/static/src/xml/base.xml:0
msgid "<"
msgstr "<"
#: addons/web/static/src/xml/base.xml:0
msgid ">"
msgstr ">"
#: addons/web/static/src/xml/base.xml:0
msgid "Last"
msgstr "Laatste"
#: addons/web/static/src/xml/base.xml:0
msgid "♻"
msgstr "♻"
#: addons/web/static/src/xml/base.xml:0
msgid "Save & Edit"
msgstr "Opslaan & Bewerken"
#: addons/web/static/src/xml/base.xml:0
msgid "Create & Edit"
msgstr "Creër & Bewerk"
#: addons/web/static/src/xml/base.xml:0
msgid "New"
msgstr "Nieuw"
#: addons/web/static/src/xml/base.xml:0
msgid "Duplicate"
msgstr "Dupliceer"
#: addons/web/static/src/xml/base.xml:0
msgid "Readonly/Editable"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "<<"
msgstr "<<"
#: addons/web/static/src/xml/base.xml:0
msgid "0"
msgstr "0"
@ -365,28 +666,88 @@ msgid "/"
msgstr "/"
#: addons/web/static/src/xml/base.xml:0
msgid ">>"
msgstr ">>"
#: addons/web/static/src/xml/base.xml:0
msgid "Add"
msgstr "Toevoegen"
msgid "Duplicate"
msgstr "Dupliceer"
#: addons/web/static/src/xml/base.xml:0
msgid "Unhandled widget"
msgstr "Niet-verwerkbare widget"
#: addons/web/static/src/xml/base.xml:0
msgid "Notebook Page \""
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "\""
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Modifiers:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "?"
msgstr "?"
#: addons/web/static/src/xml/base.xml:0
msgid "#"
msgstr "#"
msgid "(nolabel)"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Done"
msgstr "Voltooid"
msgid "Field:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Object:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Type:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Widget:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Size:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Context:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Domain:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "On change:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Relation:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Selection:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "["
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "]"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "-"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "#"
msgstr "#"
#: addons/web/static/src/xml/base.xml:0
msgid "Open..."
@ -420,18 +781,38 @@ msgstr "Opslaan als"
msgid "Clear"
msgstr "Leegmaken"
#: addons/web/static/src/xml/base.xml:0
msgid "Button"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "(no string)"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Special:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Button Type:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Method:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Action ID:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Search"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Advanced Filter"
msgstr "Geavanceerde filter"
#: addons/web/static/src/xml/base.xml:0
msgid "-- Filters --"
msgstr "-- Filters --"
#: addons/web/static/src/xml/base.xml:0
msgid "-- Actions --"
msgstr "-- Acties --"
#: addons/web/static/src/xml/base.xml:0
msgid "Save Filter"
msgstr "Filter opslaan"
@ -448,6 +829,18 @@ msgstr "Filternaam:"
msgid "(Any existing filter with the same name will be replaced)"
msgstr "(Bestaande filters met dezelfde naam worden overschreven)"
#: addons/web/static/src/xml/base.xml:0
msgid "Select Dashboard to add this filter to:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Title of new Dashboard item:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Advanced Filters"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Any of the following conditions must match"
msgstr "Een van de volgende voorwaarden moet overeenstemmen"
@ -468,10 +861,6 @@ msgstr "Voorwaarde toevoegen"
msgid "and"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Cancel"
msgstr "Annuleren"
#: addons/web/static/src/xml/base.xml:0
msgid "Save & New"
msgstr "Opslaan & Nieuwe"
@ -480,10 +869,6 @@ msgstr "Opslaan & Nieuwe"
msgid "Save & Close"
msgstr "Opslaan & Sluiten"
#: addons/web/static/src/xml/base.xml:0
msgid "Export"
msgstr "Exporteren"
#: addons/web/static/src/xml/base.xml:0
msgid ""
"This wizard will export all data that matches the current search criteria to "
@ -520,10 +905,6 @@ msgstr "Te exporteren velden"
msgid "Save fields list"
msgstr "Export definitie opslaan"
#: addons/web/static/src/xml/base.xml:0
msgid "Remove"
msgstr "Verwijderen"
#: addons/web/static/src/xml/base.xml:0
msgid "Remove All"
msgstr "Alles verwijderen"
@ -540,10 +921,6 @@ msgstr "&nbsp;"
msgid "Save as:"
msgstr "Opslaan als:"
#: addons/web/static/src/xml/base.xml:0
msgid "Ok"
msgstr "Ok"
#: addons/web/static/src/xml/base.xml:0
msgid "Saved exports:"
msgstr "Export definities"
@ -560,10 +937,6 @@ msgstr "Nieuw wachtwoord:"
msgid "Confirm Password:"
msgstr "Bevestig wachtwoord:"
#: addons/web/static/src/xml/base.xml:0
msgid "Import"
msgstr "Importeren"
#: addons/web/static/src/xml/base.xml:0
msgid "1. Import a .CSV file"
msgstr "1. Importeer een .CSV bestand"

View File

@ -7,54 +7,399 @@ msgid ""
msgstr ""
"Project-Id-Version: openerp-web\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2011-10-07 10:38+0200\n"
"POT-Creation-Date: 2011-12-20 18:48+0100\n"
"PO-Revision-Date: 2011-11-04 16:44+0000\n"
"Last-Translator: Grzegorz Grzelak (OpenGLOBE.pl) <grzegorz@openglobe.pl>\n"
"Language-Team: Polish <pl@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: 2011-11-21 05:50+0000\n"
"X-Generator: Launchpad (build 14299)\n"
"X-Launchpad-Export-Date: 2011-12-21 05:27+0000\n"
"X-Generator: Launchpad (build 14538)\n"
#: addons/web/static/src/js/view_form.js:355
#: addons/web/static/src/js/chrome.js:162
#: addons/web/static/src/js/chrome.js:175
#: addons/web/static/src/js/chrome.js:369
#: addons/web/static/src/js/view_form.js:358
#: addons/web/static/src/js/view_form.js:1078
#: addons/web/static/src/xml/base.xml:0
msgid "Ok"
msgstr ""
#: addons/web/static/src/js/chrome.js:668
msgid "About"
msgstr ""
#: addons/web/static/src/js/chrome.js:748
msgid "Preferences"
msgstr ""
#: addons/web/static/src/js/chrome.js:752
msgid "Change password"
msgstr ""
#: addons/web/static/src/js/chrome.js:753
#: addons/web/static/src/js/search.js:235
#: addons/web/static/src/js/search.js:276
#: addons/web/static/src/js/view_editor.js:97
#: addons/web/static/src/js/view_editor.js:778
#: addons/web/static/src/js/view_editor.js:907
#: addons/web/static/src/js/view_form.js:1085
#: addons/web/static/src/xml/base.xml:0
msgid "Cancel"
msgstr "Anuluj"
#: addons/web/static/src/js/chrome.js:754
#: addons/web/static/src/js/view_editor.js:75
#: addons/web/static/src/js/views.js:871 addons/web/static/src/xml/base.xml:0
msgid "Save"
msgstr "Zapisz"
#: addons/web/static/src/js/chrome.js:774 addons/web/static/src/xml/base.xml:0
msgid "Change Password"
msgstr ""
#: addons/web/static/src/js/data_export.js:6
msgid "Export Data"
msgstr ""
#: addons/web/static/src/js/data_export.js:23
#: addons/web/static/src/js/data_import.js:73
#: addons/web/static/src/js/view_editor.js:49
#: addons/web/static/src/js/view_editor.js:387
#: addons/web/static/src/js/view_form.js:2775
#: addons/web/static/src/js/views.js:872
msgid "Close"
msgstr "Zamknij"
#: addons/web/static/src/js/data_export.js:24
msgid "Export To File"
msgstr ""
#: addons/web/static/src/js/data_import.js:34
msgid "Import Data"
msgstr ""
#: addons/web/static/src/js/data_import.js:74
msgid "Import File"
msgstr ""
#: addons/web/static/src/js/data_import.js:109
msgid "External ID"
msgstr ""
#: addons/web/static/src/js/search.js:233
msgid "Filter Entry"
msgstr ""
#: addons/web/static/src/js/search.js:238
#: addons/web/static/src/js/search.js:279
msgid "OK"
msgstr ""
#: addons/web/static/src/js/search.js:274 addons/web/static/src/xml/base.xml:0
msgid "Add to Dashboard"
msgstr ""
#: addons/web/static/src/js/search.js:403
msgid "Invalid Search"
msgstr ""
#: addons/web/static/src/js/search.js:403
msgid "triggered from search view"
msgstr ""
#: addons/web/static/src/js/search.js:490
#, python-format
msgid "Incorrect value for field %(fieldname)s: [%(value)s] is %(message)s"
msgstr ""
#: addons/web/static/src/js/search.js:822
msgid "not a valid integer"
msgstr ""
#: addons/web/static/src/js/search.js:836
msgid "not a valid number"
msgstr ""
#: addons/web/static/src/js/search.js:898
msgid "Yes"
msgstr ""
#: addons/web/static/src/js/search.js:899
msgid "No"
msgstr ""
#: addons/web/static/src/js/search.js:1252
msgid "contains"
msgstr ""
#: addons/web/static/src/js/search.js:1253
msgid "doesn't contain"
msgstr ""
#: addons/web/static/src/js/search.js:1254
#: addons/web/static/src/js/search.js:1269
#: addons/web/static/src/js/search.js:1289
#: addons/web/static/src/js/search.js:1309
#: addons/web/static/src/js/search.js:1331
msgid "is equal to"
msgstr ""
#: addons/web/static/src/js/search.js:1255
#: addons/web/static/src/js/search.js:1270
#: addons/web/static/src/js/search.js:1290
#: addons/web/static/src/js/search.js:1310
#: addons/web/static/src/js/search.js:1332
msgid "is not equal to"
msgstr ""
#: addons/web/static/src/js/search.js:1256
#: addons/web/static/src/js/search.js:1271
#: addons/web/static/src/js/search.js:1291
#: addons/web/static/src/js/search.js:1311
#: addons/web/static/src/js/search.js:1333
msgid "greater than"
msgstr ""
#: addons/web/static/src/js/search.js:1257
#: addons/web/static/src/js/search.js:1272
#: addons/web/static/src/js/search.js:1292
#: addons/web/static/src/js/search.js:1312
#: addons/web/static/src/js/search.js:1334
msgid "less than"
msgstr ""
#: addons/web/static/src/js/search.js:1258
#: addons/web/static/src/js/search.js:1273
#: addons/web/static/src/js/search.js:1293
#: addons/web/static/src/js/search.js:1313
#: addons/web/static/src/js/search.js:1335
msgid "greater or equal than"
msgstr ""
#: addons/web/static/src/js/search.js:1259
#: addons/web/static/src/js/search.js:1274
#: addons/web/static/src/js/search.js:1294
#: addons/web/static/src/js/search.js:1314
#: addons/web/static/src/js/search.js:1336
msgid "less or equal than"
msgstr ""
#: addons/web/static/src/js/search.js:1325
#: addons/web/static/src/js/search.js:1350
msgid "is"
msgstr ""
#: addons/web/static/src/js/search.js:1351
msgid "is not"
msgstr ""
#: addons/web/static/src/js/search.js:1364
msgid "is true"
msgstr ""
#: addons/web/static/src/js/search.js:1365
msgid "is false"
msgstr ""
#: addons/web/static/src/js/view_editor.js:42
msgid "ViewEditor"
msgstr ""
#: addons/web/static/src/js/view_editor.js:46
#: addons/web/static/src/js/view_list.js:17
#: addons/web/static/src/xml/base.xml:0
msgid "Create"
msgstr "Utwórz"
#: addons/web/static/src/js/view_editor.js:47
#: addons/web/static/src/xml/base.xml:0
msgid "Edit"
msgstr ""
#: addons/web/static/src/js/view_editor.js:48
#: addons/web/static/src/xml/base.xml:0
msgid "Remove"
msgstr "Usuń"
#: addons/web/static/src/js/view_editor.js:71
#, python-format
msgid "Create a view (%s)"
msgstr ""
#: addons/web/static/src/js/view_editor.js:170
msgid "Do you really want to remove this view?"
msgstr ""
#: addons/web/static/src/js/view_editor.js:367
#, python-format
msgid "View Editor %d - %s"
msgstr ""
#: addons/web/static/src/js/view_editor.js:371
msgid "Preview"
msgstr ""
#: addons/web/static/src/js/view_editor.js:442
msgid "Do you really want to remove this node?"
msgstr ""
#: addons/web/static/src/js/view_editor.js:756
#: addons/web/static/src/js/view_editor.js:883
msgid "Properties"
msgstr ""
#: addons/web/static/src/js/view_editor.js:760
#: addons/web/static/src/js/view_editor.js:887
msgid "Update"
msgstr ""
#: addons/web/static/src/js/view_form.js:17
msgid "Form"
msgstr ""
#: addons/web/static/src/js/view_form.js:401
msgid ""
"Warning, the record has been modified, your changes will be discarded."
msgstr "Uwaga, rekord został zmodyfikowany, twoje zmiany zostaną odrzucone."
#: addons/web/static/src/js/view_form.js:1659
#: addons/web/static/src/js/view_form.js:612
msgid "Attachments"
msgstr ""
#: addons/web/static/src/js/view_form.js:650
#, python-format
msgid "Do you really want to delete the attachment %s?"
msgstr ""
#: addons/web/static/src/js/view_form.js:1075
msgid "Confirm"
msgstr ""
#: addons/web/static/src/js/view_form.js:1838
msgid "<em>   Search More...</em>"
msgstr "<em>   Szukaj dalej...</em>"
#: addons/web/static/src/js/view_form.js:1672
#: addons/web/static/src/js/view_form.js:1851
#, python-format
msgid "<em>   Create \"<strong>%s</strong>\"</em>"
msgstr "<em>   Utwórz \"<strong>%s</strong>\"</em>"
#: addons/web/static/src/js/view_form.js:1678
#: addons/web/static/src/js/view_form.js:1857
msgid "<em>   Create and Edit...</em>"
msgstr "<em>   Utwórz i edytuj...</em>"
#: addons/web/static/src/js/views.js:568
#: addons/web/static/src/js/view_form.js:2404
#: addons/web/static/src/xml/base.xml:0
msgid "Add"
msgstr "Dodaj"
#: addons/web/static/src/js/view_list.js:8
msgid "List"
msgstr ""
#: addons/web/static/src/js/view_list.js:269
msgid "Unlimited"
msgstr ""
#: addons/web/static/src/js/view_list.js:516
msgid "Do you really want to remove these records?"
msgstr ""
#: addons/web/static/src/js/view_list.js:1202
msgid "Undefined"
msgstr ""
#: addons/web/static/src/js/view_page.js:8
msgid "Page"
msgstr ""
#: addons/web/static/src/js/view_page.js:52
msgid "Do you really want to delete this record?"
msgstr ""
#: addons/web/static/src/js/view_page.js:227
msgid "Download"
msgstr ""
#: addons/web/static/src/js/view_tree.js:11
msgid "Tree"
msgstr ""
#: addons/web/static/src/js/views.js:590
msgid "Search: "
msgstr ""
#: addons/web/static/src/js/views.js:710
msgid "Customize"
msgstr ""
#: addons/web/static/src/js/views.js:713
msgid "Manage Views"
msgstr ""
#: addons/web/static/src/js/views.js:715 addons/web/static/src/js/views.js:719
#: addons/web/static/src/js/views.js:724
msgid "Manage views of the current object"
msgstr ""
#: addons/web/static/src/js/views.js:717
msgid "Edit Workflow"
msgstr ""
#: addons/web/static/src/js/views.js:722
msgid "Customize Object"
msgstr ""
#: addons/web/static/src/js/views.js:726
msgid "Translate"
msgstr ""
#: addons/web/static/src/js/views.js:728
msgid "Technical translation"
msgstr ""
#: addons/web/static/src/js/views.js:733
msgid "Other Options"
msgstr ""
#: addons/web/static/src/js/views.js:736 addons/web/static/src/xml/base.xml:0
msgid "Import"
msgstr "Importuj"
#: addons/web/static/src/js/views.js:739 addons/web/static/src/xml/base.xml:0
msgid "Export"
msgstr "Eksportuj"
#: addons/web/static/src/js/views.js:742
msgid "View Log"
msgstr ""
#: addons/web/static/src/js/views.js:751
msgid "Reports"
msgstr ""
#: addons/web/static/src/js/views.js:751
msgid "Actions"
msgstr ""
#: addons/web/static/src/js/views.js:751
msgid "Links"
msgstr ""
#: addons/web/static/src/js/views.js:831
msgid "You must choose at least one record."
msgstr "Musisz wybrac co najmniej jeden rekord."
#: addons/web/static/src/js/views.js:569
#: addons/web/static/src/js/views.js:832
msgid "Warning"
msgstr "Ostrzeżenie"
#: addons/web/static/src/js/views.js:609
#: addons/web/static/src/js/views.js:866
msgid "Translations"
msgstr "Tłumaczenia"
#: addons/web/static/src/js/views.js:614 addons/web/static/src/xml/base.xml:0
msgid "Save"
msgstr "Zapisz"
#: addons/web/static/src/js/views.js:615
msgid "Close"
msgstr "Zamknij"
#: addons/web/static/src/xml/base.xml:0
msgid "x"
msgstr ""
@ -83,10 +428,6 @@ msgstr ""
msgid "Loading..."
msgstr "Wczytywanie..."
#: addons/web/static/src/xml/base.xml:0
msgid "Create"
msgstr "Utwórz"
#: addons/web/static/src/xml/base.xml:0
msgid "Drop"
msgstr "Usuń bazę danych"
@ -270,19 +611,31 @@ msgid "Disable all tips"
msgstr "Wyłącz wszystkie wskazówki"
#: addons/web/static/src/xml/base.xml:0
msgid "View#"
msgid "More…"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Fields"
msgstr "Pola"
msgid "Debug View#"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "View labels"
msgstr "Pokaż etykiety"
msgid "- Fields View Get"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Sidebar Relates"
msgid "- Edit"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "View"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "- Edit SearchView"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "- Edit Action"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
@ -293,62 +646,10 @@ msgstr "Pole"
msgid ":"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Translate view"
msgstr "Przetłumacz widok"
#: addons/web/static/src/xml/base.xml:0
msgid "Translate sidebar"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Delete"
msgstr "Usuń"
#: addons/web/static/src/xml/base.xml:0
msgid "First"
msgstr "Pierwsze"
#: addons/web/static/src/xml/base.xml:0
msgid "<"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid ">"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Last"
msgstr "Ostatnie"
#: addons/web/static/src/xml/base.xml:0
msgid "♻"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Save & Edit"
msgstr "Zapisz i edytuj"
#: addons/web/static/src/xml/base.xml:0
msgid "Create & Edit"
msgstr "Utwórz i edytuj"
#: addons/web/static/src/xml/base.xml:0
msgid "New"
msgstr "Nowy"
#: addons/web/static/src/xml/base.xml:0
msgid "Duplicate"
msgstr "Duplikuj"
#: addons/web/static/src/xml/base.xml:0
msgid "Readonly/Editable"
msgstr "Tylko odczyt/Edytowalne"
#: addons/web/static/src/xml/base.xml:0
msgid "<<"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "0"
msgstr ""
@ -358,28 +659,88 @@ msgid "/"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid ">>"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Add"
msgstr "Dodaj"
msgid "Duplicate"
msgstr "Duplikuj"
#: addons/web/static/src/xml/base.xml:0
msgid "Unhandled widget"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Notebook Page \""
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "\""
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Modifiers:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "?"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "#"
msgid "(nolabel)"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Done"
msgstr "Wykonano"
msgid "Field:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Object:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Type:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Widget:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Size:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Context:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Domain:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "On change:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Relation:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Selection:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "["
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "]"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "-"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "#"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Open..."
@ -413,18 +774,38 @@ msgstr "Zapisz jako"
msgid "Clear"
msgstr "Wyczyść"
#: addons/web/static/src/xml/base.xml:0
msgid "Button"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "(no string)"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Special:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Button Type:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Method:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Action ID:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Search"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Advanced Filter"
msgstr "Zaawansowany filtr"
#: addons/web/static/src/xml/base.xml:0
msgid "-- Filters --"
msgstr "-- Filtry --"
#: addons/web/static/src/xml/base.xml:0
msgid "-- Actions --"
msgstr "-- Akcje --"
#: addons/web/static/src/xml/base.xml:0
msgid "Save Filter"
msgstr "Zapisz filtr"
@ -441,6 +822,18 @@ msgstr "Nazwa filtra:"
msgid "(Any existing filter with the same name will be replaced)"
msgstr "(Każdy filtr o tej samej nazwie zostanie zamazany)"
#: addons/web/static/src/xml/base.xml:0
msgid "Select Dashboard to add this filter to:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Title of new Dashboard item:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Advanced Filters"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Any of the following conditions must match"
msgstr "Jeden z tych warunków musi być spełniony"
@ -461,10 +854,6 @@ msgstr "Dodaj warunek"
msgid "and"
msgstr "i"
#: addons/web/static/src/xml/base.xml:0
msgid "Cancel"
msgstr "Anuluj"
#: addons/web/static/src/xml/base.xml:0
msgid "Save & New"
msgstr "Zapisz i nowy"
@ -473,10 +862,6 @@ msgstr "Zapisz i nowy"
msgid "Save & Close"
msgstr "Zapisz i zamknij"
#: addons/web/static/src/xml/base.xml:0
msgid "Export"
msgstr "Eksportuj"
#: addons/web/static/src/xml/base.xml:0
msgid ""
"This wizard will export all data that matches the current search criteria to "
@ -517,10 +902,6 @@ msgstr "Pola do eksportu"
msgid "Save fields list"
msgstr "Zapisz listę pól"
#: addons/web/static/src/xml/base.xml:0
msgid "Remove"
msgstr "Usuń"
#: addons/web/static/src/xml/base.xml:0
msgid "Remove All"
msgstr "Usuń wszystko"
@ -537,10 +918,6 @@ msgstr ""
msgid "Save as:"
msgstr "Zapisz jako:"
#: addons/web/static/src/xml/base.xml:0
msgid "Ok"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Saved exports:"
msgstr "Zapisane eksporty"
@ -557,10 +934,6 @@ msgstr "Nowe hasło:"
msgid "Confirm Password:"
msgstr "Potwierdź hasło:"
#: addons/web/static/src/xml/base.xml:0
msgid "Import"
msgstr "Importuj"
#: addons/web/static/src/xml/base.xml:0
msgid "1. Import a .CSV file"
msgstr "1. Importuj plik .CSV"

View File

@ -7,55 +7,400 @@ msgid ""
msgstr ""
"Project-Id-Version: openerp-web\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2011-10-07 10:38+0200\n"
"POT-Creation-Date: 2011-12-20 18:48+0100\n"
"PO-Revision-Date: 2011-11-21 22:22+0000\n"
"Last-Translator: Daniel Reis <Unknown>\n"
"Language-Team: Portuguese <pt@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: 2011-11-22 05:13+0000\n"
"X-Generator: Launchpad (build 14299)\n"
"X-Launchpad-Export-Date: 2011-12-21 05:27+0000\n"
"X-Generator: Launchpad (build 14538)\n"
#: addons/web/static/src/js/view_form.js:355
#: addons/web/static/src/js/chrome.js:162
#: addons/web/static/src/js/chrome.js:175
#: addons/web/static/src/js/chrome.js:369
#: addons/web/static/src/js/view_form.js:358
#: addons/web/static/src/js/view_form.js:1078
#: addons/web/static/src/xml/base.xml:0
msgid "Ok"
msgstr "Ok"
#: addons/web/static/src/js/chrome.js:668
msgid "About"
msgstr ""
#: addons/web/static/src/js/chrome.js:748
msgid "Preferences"
msgstr ""
#: addons/web/static/src/js/chrome.js:752
msgid "Change password"
msgstr ""
#: addons/web/static/src/js/chrome.js:753
#: addons/web/static/src/js/search.js:235
#: addons/web/static/src/js/search.js:276
#: addons/web/static/src/js/view_editor.js:97
#: addons/web/static/src/js/view_editor.js:778
#: addons/web/static/src/js/view_editor.js:907
#: addons/web/static/src/js/view_form.js:1085
#: addons/web/static/src/xml/base.xml:0
msgid "Cancel"
msgstr "Cancelar"
#: addons/web/static/src/js/chrome.js:754
#: addons/web/static/src/js/view_editor.js:75
#: addons/web/static/src/js/views.js:871 addons/web/static/src/xml/base.xml:0
msgid "Save"
msgstr "Guardar"
#: addons/web/static/src/js/chrome.js:774 addons/web/static/src/xml/base.xml:0
msgid "Change Password"
msgstr ""
#: addons/web/static/src/js/data_export.js:6
msgid "Export Data"
msgstr ""
#: addons/web/static/src/js/data_export.js:23
#: addons/web/static/src/js/data_import.js:73
#: addons/web/static/src/js/view_editor.js:49
#: addons/web/static/src/js/view_editor.js:387
#: addons/web/static/src/js/view_form.js:2775
#: addons/web/static/src/js/views.js:872
msgid "Close"
msgstr "Fechar"
#: addons/web/static/src/js/data_export.js:24
msgid "Export To File"
msgstr ""
#: addons/web/static/src/js/data_import.js:34
msgid "Import Data"
msgstr ""
#: addons/web/static/src/js/data_import.js:74
msgid "Import File"
msgstr ""
#: addons/web/static/src/js/data_import.js:109
msgid "External ID"
msgstr ""
#: addons/web/static/src/js/search.js:233
msgid "Filter Entry"
msgstr ""
#: addons/web/static/src/js/search.js:238
#: addons/web/static/src/js/search.js:279
msgid "OK"
msgstr ""
#: addons/web/static/src/js/search.js:274 addons/web/static/src/xml/base.xml:0
msgid "Add to Dashboard"
msgstr ""
#: addons/web/static/src/js/search.js:403
msgid "Invalid Search"
msgstr ""
#: addons/web/static/src/js/search.js:403
msgid "triggered from search view"
msgstr ""
#: addons/web/static/src/js/search.js:490
#, python-format
msgid "Incorrect value for field %(fieldname)s: [%(value)s] is %(message)s"
msgstr ""
#: addons/web/static/src/js/search.js:822
msgid "not a valid integer"
msgstr ""
#: addons/web/static/src/js/search.js:836
msgid "not a valid number"
msgstr ""
#: addons/web/static/src/js/search.js:898
msgid "Yes"
msgstr ""
#: addons/web/static/src/js/search.js:899
msgid "No"
msgstr ""
#: addons/web/static/src/js/search.js:1252
msgid "contains"
msgstr ""
#: addons/web/static/src/js/search.js:1253
msgid "doesn't contain"
msgstr ""
#: addons/web/static/src/js/search.js:1254
#: addons/web/static/src/js/search.js:1269
#: addons/web/static/src/js/search.js:1289
#: addons/web/static/src/js/search.js:1309
#: addons/web/static/src/js/search.js:1331
msgid "is equal to"
msgstr ""
#: addons/web/static/src/js/search.js:1255
#: addons/web/static/src/js/search.js:1270
#: addons/web/static/src/js/search.js:1290
#: addons/web/static/src/js/search.js:1310
#: addons/web/static/src/js/search.js:1332
msgid "is not equal to"
msgstr ""
#: addons/web/static/src/js/search.js:1256
#: addons/web/static/src/js/search.js:1271
#: addons/web/static/src/js/search.js:1291
#: addons/web/static/src/js/search.js:1311
#: addons/web/static/src/js/search.js:1333
msgid "greater than"
msgstr ""
#: addons/web/static/src/js/search.js:1257
#: addons/web/static/src/js/search.js:1272
#: addons/web/static/src/js/search.js:1292
#: addons/web/static/src/js/search.js:1312
#: addons/web/static/src/js/search.js:1334
msgid "less than"
msgstr ""
#: addons/web/static/src/js/search.js:1258
#: addons/web/static/src/js/search.js:1273
#: addons/web/static/src/js/search.js:1293
#: addons/web/static/src/js/search.js:1313
#: addons/web/static/src/js/search.js:1335
msgid "greater or equal than"
msgstr ""
#: addons/web/static/src/js/search.js:1259
#: addons/web/static/src/js/search.js:1274
#: addons/web/static/src/js/search.js:1294
#: addons/web/static/src/js/search.js:1314
#: addons/web/static/src/js/search.js:1336
msgid "less or equal than"
msgstr ""
#: addons/web/static/src/js/search.js:1325
#: addons/web/static/src/js/search.js:1350
msgid "is"
msgstr ""
#: addons/web/static/src/js/search.js:1351
msgid "is not"
msgstr ""
#: addons/web/static/src/js/search.js:1364
msgid "is true"
msgstr ""
#: addons/web/static/src/js/search.js:1365
msgid "is false"
msgstr ""
#: addons/web/static/src/js/view_editor.js:42
msgid "ViewEditor"
msgstr ""
#: addons/web/static/src/js/view_editor.js:46
#: addons/web/static/src/js/view_list.js:17
#: addons/web/static/src/xml/base.xml:0
msgid "Create"
msgstr "Criar"
#: addons/web/static/src/js/view_editor.js:47
#: addons/web/static/src/xml/base.xml:0
msgid "Edit"
msgstr ""
#: addons/web/static/src/js/view_editor.js:48
#: addons/web/static/src/xml/base.xml:0
msgid "Remove"
msgstr "Remover"
#: addons/web/static/src/js/view_editor.js:71
#, python-format
msgid "Create a view (%s)"
msgstr ""
#: addons/web/static/src/js/view_editor.js:170
msgid "Do you really want to remove this view?"
msgstr ""
#: addons/web/static/src/js/view_editor.js:367
#, python-format
msgid "View Editor %d - %s"
msgstr ""
#: addons/web/static/src/js/view_editor.js:371
msgid "Preview"
msgstr ""
#: addons/web/static/src/js/view_editor.js:442
msgid "Do you really want to remove this node?"
msgstr ""
#: addons/web/static/src/js/view_editor.js:756
#: addons/web/static/src/js/view_editor.js:883
msgid "Properties"
msgstr ""
#: addons/web/static/src/js/view_editor.js:760
#: addons/web/static/src/js/view_editor.js:887
msgid "Update"
msgstr ""
#: addons/web/static/src/js/view_form.js:17
msgid "Form"
msgstr ""
#: addons/web/static/src/js/view_form.js:401
msgid ""
"Warning, the record has been modified, your changes will be discarded."
msgstr ""
"Atenção, o o registo foi modificado, as suas alterações serão descartadas."
#: addons/web/static/src/js/view_form.js:1659
#: addons/web/static/src/js/view_form.js:612
msgid "Attachments"
msgstr ""
#: addons/web/static/src/js/view_form.js:650
#, python-format
msgid "Do you really want to delete the attachment %s?"
msgstr ""
#: addons/web/static/src/js/view_form.js:1075
msgid "Confirm"
msgstr ""
#: addons/web/static/src/js/view_form.js:1838
msgid "<em>   Search More...</em>"
msgstr ""
#: addons/web/static/src/js/view_form.js:1672
#: addons/web/static/src/js/view_form.js:1851
#, python-format
msgid "<em>   Create \"<strong>%s</strong>\"</em>"
msgstr ""
#: addons/web/static/src/js/view_form.js:1678
#: addons/web/static/src/js/view_form.js:1857
msgid "<em>   Create and Edit...</em>"
msgstr ""
#: addons/web/static/src/js/views.js:568
#: addons/web/static/src/js/view_form.js:2404
#: addons/web/static/src/xml/base.xml:0
msgid "Add"
msgstr "Acrescentar"
#: addons/web/static/src/js/view_list.js:8
msgid "List"
msgstr ""
#: addons/web/static/src/js/view_list.js:269
msgid "Unlimited"
msgstr ""
#: addons/web/static/src/js/view_list.js:516
msgid "Do you really want to remove these records?"
msgstr ""
#: addons/web/static/src/js/view_list.js:1202
msgid "Undefined"
msgstr ""
#: addons/web/static/src/js/view_page.js:8
msgid "Page"
msgstr ""
#: addons/web/static/src/js/view_page.js:52
msgid "Do you really want to delete this record?"
msgstr ""
#: addons/web/static/src/js/view_page.js:227
msgid "Download"
msgstr ""
#: addons/web/static/src/js/view_tree.js:11
msgid "Tree"
msgstr ""
#: addons/web/static/src/js/views.js:590
msgid "Search: "
msgstr ""
#: addons/web/static/src/js/views.js:710
msgid "Customize"
msgstr ""
#: addons/web/static/src/js/views.js:713
msgid "Manage Views"
msgstr ""
#: addons/web/static/src/js/views.js:715 addons/web/static/src/js/views.js:719
#: addons/web/static/src/js/views.js:724
msgid "Manage views of the current object"
msgstr ""
#: addons/web/static/src/js/views.js:717
msgid "Edit Workflow"
msgstr ""
#: addons/web/static/src/js/views.js:722
msgid "Customize Object"
msgstr ""
#: addons/web/static/src/js/views.js:726
msgid "Translate"
msgstr ""
#: addons/web/static/src/js/views.js:728
msgid "Technical translation"
msgstr ""
#: addons/web/static/src/js/views.js:733
msgid "Other Options"
msgstr ""
#: addons/web/static/src/js/views.js:736 addons/web/static/src/xml/base.xml:0
msgid "Import"
msgstr "Importar"
#: addons/web/static/src/js/views.js:739 addons/web/static/src/xml/base.xml:0
msgid "Export"
msgstr "Exportar"
#: addons/web/static/src/js/views.js:742
msgid "View Log"
msgstr ""
#: addons/web/static/src/js/views.js:751
msgid "Reports"
msgstr ""
#: addons/web/static/src/js/views.js:751
msgid "Actions"
msgstr ""
#: addons/web/static/src/js/views.js:751
msgid "Links"
msgstr ""
#: addons/web/static/src/js/views.js:831
msgid "You must choose at least one record."
msgstr "Escolha pelo menos um registo."
#: addons/web/static/src/js/views.js:569
#: addons/web/static/src/js/views.js:832
msgid "Warning"
msgstr "Aviso"
#: addons/web/static/src/js/views.js:609
#: addons/web/static/src/js/views.js:866
msgid "Translations"
msgstr "Traduções"
#: addons/web/static/src/js/views.js:614 addons/web/static/src/xml/base.xml:0
msgid "Save"
msgstr "Guardar"
#: addons/web/static/src/js/views.js:615
msgid "Close"
msgstr "Fechar"
#: addons/web/static/src/xml/base.xml:0
msgid "x"
msgstr "x"
@ -84,10 +429,6 @@ msgstr ""
msgid "Loading..."
msgstr "A carregar ..."
#: addons/web/static/src/xml/base.xml:0
msgid "Create"
msgstr "Criar"
#: addons/web/static/src/xml/base.xml:0
msgid "Drop"
msgstr "Excluir"
@ -276,19 +617,31 @@ msgid "Disable all tips"
msgstr "Desativar todas as dicas"
#: addons/web/static/src/xml/base.xml:0
msgid "View#"
msgid "More…"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Fields"
msgstr "Campos"
msgid "Debug View#"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "View labels"
msgstr "Ver etiquetas"
msgid "- Fields View Get"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Sidebar Relates"
msgid "- Edit"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "View"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "- Edit SearchView"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "- Edit Action"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
@ -299,62 +652,10 @@ msgstr "Campo"
msgid ":"
msgstr ":"
#: addons/web/static/src/xml/base.xml:0
msgid "Translate view"
msgstr "Traduzir vista"
#: addons/web/static/src/xml/base.xml:0
msgid "Translate sidebar"
msgstr "Traduzir barra lateral"
#: addons/web/static/src/xml/base.xml:0
msgid "Delete"
msgstr "Apagar"
#: addons/web/static/src/xml/base.xml:0
msgid "First"
msgstr "Primeiro"
#: addons/web/static/src/xml/base.xml:0
msgid "<"
msgstr "<"
#: addons/web/static/src/xml/base.xml:0
msgid ">"
msgstr ">"
#: addons/web/static/src/xml/base.xml:0
msgid "Last"
msgstr "Último"
#: addons/web/static/src/xml/base.xml:0
msgid "♻"
msgstr "♻"
#: addons/web/static/src/xml/base.xml:0
msgid "Save & Edit"
msgstr "Gravar & Editar"
#: addons/web/static/src/xml/base.xml:0
msgid "Create & Edit"
msgstr "Criar & Editar"
#: addons/web/static/src/xml/base.xml:0
msgid "New"
msgstr "Novo"
#: addons/web/static/src/xml/base.xml:0
msgid "Duplicate"
msgstr "Duplicar"
#: addons/web/static/src/xml/base.xml:0
msgid "Readonly/Editable"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "<<"
msgstr "<<"
#: addons/web/static/src/xml/base.xml:0
msgid "0"
msgstr ""
@ -364,28 +665,88 @@ msgid "/"
msgstr "/"
#: addons/web/static/src/xml/base.xml:0
msgid ">>"
msgstr ">>"
#: addons/web/static/src/xml/base.xml:0
msgid "Add"
msgstr "Acrescentar"
msgid "Duplicate"
msgstr "Duplicar"
#: addons/web/static/src/xml/base.xml:0
msgid "Unhandled widget"
msgstr "Widget não tratado"
#: addons/web/static/src/xml/base.xml:0
msgid "Notebook Page \""
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "\""
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Modifiers:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "?"
msgstr "?"
#: addons/web/static/src/xml/base.xml:0
msgid "#"
msgstr "#"
msgid "(nolabel)"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Done"
msgstr "Concluído"
msgid "Field:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Object:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Type:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Widget:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Size:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Context:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Domain:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "On change:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Relation:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Selection:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "["
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "]"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "-"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "#"
msgstr "#"
#: addons/web/static/src/xml/base.xml:0
msgid "Open..."
@ -419,18 +780,38 @@ msgstr "Guardar como"
msgid "Clear"
msgstr "Limpar"
#: addons/web/static/src/xml/base.xml:0
msgid "Button"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "(no string)"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Special:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Button Type:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Method:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Action ID:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Search"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Advanced Filter"
msgstr "Filtro avançados"
#: addons/web/static/src/xml/base.xml:0
msgid "-- Filters --"
msgstr "-- Filtros --"
#: addons/web/static/src/xml/base.xml:0
msgid "-- Actions --"
msgstr "-- Ações --"
#: addons/web/static/src/xml/base.xml:0
msgid "Save Filter"
msgstr "Guardar filtro"
@ -447,6 +828,18 @@ msgstr "Nome do filtro:"
msgid "(Any existing filter with the same name will be replaced)"
msgstr "(filtros existentes com esse nome serão substituídos)"
#: addons/web/static/src/xml/base.xml:0
msgid "Select Dashboard to add this filter to:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Title of new Dashboard item:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Advanced Filters"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Any of the following conditions must match"
msgstr "Deve satisfazer alguma das seguintes condições"
@ -467,10 +860,6 @@ msgstr "Acrescentar condição"
msgid "and"
msgstr "e"
#: addons/web/static/src/xml/base.xml:0
msgid "Cancel"
msgstr "Cancelar"
#: addons/web/static/src/xml/base.xml:0
msgid "Save & New"
msgstr "Guardar & Novo"
@ -479,10 +868,6 @@ msgstr "Guardar & Novo"
msgid "Save & Close"
msgstr "Guardar & Fechar"
#: addons/web/static/src/xml/base.xml:0
msgid "Export"
msgstr "Exportar"
#: addons/web/static/src/xml/base.xml:0
msgid ""
"This wizard will export all data that matches the current search criteria to "
@ -519,10 +904,6 @@ msgstr "Campos a exportar"
msgid "Save fields list"
msgstr "Gravar lista de campos"
#: addons/web/static/src/xml/base.xml:0
msgid "Remove"
msgstr "Remover"
#: addons/web/static/src/xml/base.xml:0
msgid "Remove All"
msgstr "Remover tudo"
@ -539,10 +920,6 @@ msgstr "&nbsp;"
msgid "Save as:"
msgstr "Guardar como:"
#: addons/web/static/src/xml/base.xml:0
msgid "Ok"
msgstr "Ok"
#: addons/web/static/src/xml/base.xml:0
msgid "Saved exports:"
msgstr "Exportações guardadas:"
@ -559,10 +936,6 @@ msgstr "Nova senha:"
msgid "Confirm Password:"
msgstr "Confirme a senha:"
#: addons/web/static/src/xml/base.xml:0
msgid "Import"
msgstr "Importar"
#: addons/web/static/src/xml/base.xml:0
msgid "1. Import a .CSV file"
msgstr "1. Importar um ficheiro .CSV"

View File

@ -7,54 +7,399 @@ msgid ""
msgstr ""
"Project-Id-Version: openerp-web\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2011-10-07 10:38+0200\n"
"POT-Creation-Date: 2011-12-20 18:48+0100\n"
"PO-Revision-Date: 2011-11-12 18:57+0000\n"
"Last-Translator: Cristiano Gavião <Unknown>\n"
"Language-Team: Brazilian Portuguese <pt_BR@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: 2011-11-21 05:50+0000\n"
"X-Generator: Launchpad (build 14299)\n"
"X-Launchpad-Export-Date: 2011-12-21 05:27+0000\n"
"X-Generator: Launchpad (build 14538)\n"
#: addons/web/static/src/js/view_form.js:355
#: addons/web/static/src/js/chrome.js:162
#: addons/web/static/src/js/chrome.js:175
#: addons/web/static/src/js/chrome.js:369
#: addons/web/static/src/js/view_form.js:358
#: addons/web/static/src/js/view_form.js:1078
#: addons/web/static/src/xml/base.xml:0
msgid "Ok"
msgstr "Ok"
#: addons/web/static/src/js/chrome.js:668
msgid "About"
msgstr ""
#: addons/web/static/src/js/chrome.js:748
msgid "Preferences"
msgstr ""
#: addons/web/static/src/js/chrome.js:752
msgid "Change password"
msgstr ""
#: addons/web/static/src/js/chrome.js:753
#: addons/web/static/src/js/search.js:235
#: addons/web/static/src/js/search.js:276
#: addons/web/static/src/js/view_editor.js:97
#: addons/web/static/src/js/view_editor.js:778
#: addons/web/static/src/js/view_editor.js:907
#: addons/web/static/src/js/view_form.js:1085
#: addons/web/static/src/xml/base.xml:0
msgid "Cancel"
msgstr "Cancelar"
#: addons/web/static/src/js/chrome.js:754
#: addons/web/static/src/js/view_editor.js:75
#: addons/web/static/src/js/views.js:871 addons/web/static/src/xml/base.xml:0
msgid "Save"
msgstr ""
#: addons/web/static/src/js/chrome.js:774 addons/web/static/src/xml/base.xml:0
msgid "Change Password"
msgstr ""
#: addons/web/static/src/js/data_export.js:6
msgid "Export Data"
msgstr ""
#: addons/web/static/src/js/data_export.js:23
#: addons/web/static/src/js/data_import.js:73
#: addons/web/static/src/js/view_editor.js:49
#: addons/web/static/src/js/view_editor.js:387
#: addons/web/static/src/js/view_form.js:2775
#: addons/web/static/src/js/views.js:872
msgid "Close"
msgstr "Fechar"
#: addons/web/static/src/js/data_export.js:24
msgid "Export To File"
msgstr ""
#: addons/web/static/src/js/data_import.js:34
msgid "Import Data"
msgstr ""
#: addons/web/static/src/js/data_import.js:74
msgid "Import File"
msgstr ""
#: addons/web/static/src/js/data_import.js:109
msgid "External ID"
msgstr ""
#: addons/web/static/src/js/search.js:233
msgid "Filter Entry"
msgstr ""
#: addons/web/static/src/js/search.js:238
#: addons/web/static/src/js/search.js:279
msgid "OK"
msgstr ""
#: addons/web/static/src/js/search.js:274 addons/web/static/src/xml/base.xml:0
msgid "Add to Dashboard"
msgstr ""
#: addons/web/static/src/js/search.js:403
msgid "Invalid Search"
msgstr ""
#: addons/web/static/src/js/search.js:403
msgid "triggered from search view"
msgstr ""
#: addons/web/static/src/js/search.js:490
#, python-format
msgid "Incorrect value for field %(fieldname)s: [%(value)s] is %(message)s"
msgstr ""
#: addons/web/static/src/js/search.js:822
msgid "not a valid integer"
msgstr ""
#: addons/web/static/src/js/search.js:836
msgid "not a valid number"
msgstr ""
#: addons/web/static/src/js/search.js:898
msgid "Yes"
msgstr ""
#: addons/web/static/src/js/search.js:899
msgid "No"
msgstr ""
#: addons/web/static/src/js/search.js:1252
msgid "contains"
msgstr ""
#: addons/web/static/src/js/search.js:1253
msgid "doesn't contain"
msgstr ""
#: addons/web/static/src/js/search.js:1254
#: addons/web/static/src/js/search.js:1269
#: addons/web/static/src/js/search.js:1289
#: addons/web/static/src/js/search.js:1309
#: addons/web/static/src/js/search.js:1331
msgid "is equal to"
msgstr ""
#: addons/web/static/src/js/search.js:1255
#: addons/web/static/src/js/search.js:1270
#: addons/web/static/src/js/search.js:1290
#: addons/web/static/src/js/search.js:1310
#: addons/web/static/src/js/search.js:1332
msgid "is not equal to"
msgstr ""
#: addons/web/static/src/js/search.js:1256
#: addons/web/static/src/js/search.js:1271
#: addons/web/static/src/js/search.js:1291
#: addons/web/static/src/js/search.js:1311
#: addons/web/static/src/js/search.js:1333
msgid "greater than"
msgstr ""
#: addons/web/static/src/js/search.js:1257
#: addons/web/static/src/js/search.js:1272
#: addons/web/static/src/js/search.js:1292
#: addons/web/static/src/js/search.js:1312
#: addons/web/static/src/js/search.js:1334
msgid "less than"
msgstr ""
#: addons/web/static/src/js/search.js:1258
#: addons/web/static/src/js/search.js:1273
#: addons/web/static/src/js/search.js:1293
#: addons/web/static/src/js/search.js:1313
#: addons/web/static/src/js/search.js:1335
msgid "greater or equal than"
msgstr ""
#: addons/web/static/src/js/search.js:1259
#: addons/web/static/src/js/search.js:1274
#: addons/web/static/src/js/search.js:1294
#: addons/web/static/src/js/search.js:1314
#: addons/web/static/src/js/search.js:1336
msgid "less or equal than"
msgstr ""
#: addons/web/static/src/js/search.js:1325
#: addons/web/static/src/js/search.js:1350
msgid "is"
msgstr ""
#: addons/web/static/src/js/search.js:1351
msgid "is not"
msgstr ""
#: addons/web/static/src/js/search.js:1364
msgid "is true"
msgstr ""
#: addons/web/static/src/js/search.js:1365
msgid "is false"
msgstr ""
#: addons/web/static/src/js/view_editor.js:42
msgid "ViewEditor"
msgstr ""
#: addons/web/static/src/js/view_editor.js:46
#: addons/web/static/src/js/view_list.js:17
#: addons/web/static/src/xml/base.xml:0
msgid "Create"
msgstr "Criar"
#: addons/web/static/src/js/view_editor.js:47
#: addons/web/static/src/xml/base.xml:0
msgid "Edit"
msgstr ""
#: addons/web/static/src/js/view_editor.js:48
#: addons/web/static/src/xml/base.xml:0
msgid "Remove"
msgstr "Remover"
#: addons/web/static/src/js/view_editor.js:71
#, python-format
msgid "Create a view (%s)"
msgstr ""
#: addons/web/static/src/js/view_editor.js:170
msgid "Do you really want to remove this view?"
msgstr ""
#: addons/web/static/src/js/view_editor.js:367
#, python-format
msgid "View Editor %d - %s"
msgstr ""
#: addons/web/static/src/js/view_editor.js:371
msgid "Preview"
msgstr ""
#: addons/web/static/src/js/view_editor.js:442
msgid "Do you really want to remove this node?"
msgstr ""
#: addons/web/static/src/js/view_editor.js:756
#: addons/web/static/src/js/view_editor.js:883
msgid "Properties"
msgstr ""
#: addons/web/static/src/js/view_editor.js:760
#: addons/web/static/src/js/view_editor.js:887
msgid "Update"
msgstr ""
#: addons/web/static/src/js/view_form.js:17
msgid "Form"
msgstr ""
#: addons/web/static/src/js/view_form.js:401
msgid ""
"Warning, the record has been modified, your changes will be discarded."
msgstr "Aviso, o registro foi modificado, suas alterações serão descartadas."
#: addons/web/static/src/js/view_form.js:1659
#: addons/web/static/src/js/view_form.js:612
msgid "Attachments"
msgstr ""
#: addons/web/static/src/js/view_form.js:650
#, python-format
msgid "Do you really want to delete the attachment %s?"
msgstr ""
#: addons/web/static/src/js/view_form.js:1075
msgid "Confirm"
msgstr ""
#: addons/web/static/src/js/view_form.js:1838
msgid "<em>   Search More...</em>"
msgstr "<em>   Procurar Mais...</em>"
#: addons/web/static/src/js/view_form.js:1672
#: addons/web/static/src/js/view_form.js:1851
#, python-format
msgid "<em>   Create \"<strong>%s</strong>\"</em>"
msgstr ""
#: addons/web/static/src/js/view_form.js:1678
#: addons/web/static/src/js/view_form.js:1857
msgid "<em>   Create and Edit...</em>"
msgstr ""
#: addons/web/static/src/js/views.js:568
#: addons/web/static/src/js/view_form.js:2404
#: addons/web/static/src/xml/base.xml:0
msgid "Add"
msgstr "Adicionar"
#: addons/web/static/src/js/view_list.js:8
msgid "List"
msgstr ""
#: addons/web/static/src/js/view_list.js:269
msgid "Unlimited"
msgstr ""
#: addons/web/static/src/js/view_list.js:516
msgid "Do you really want to remove these records?"
msgstr ""
#: addons/web/static/src/js/view_list.js:1202
msgid "Undefined"
msgstr ""
#: addons/web/static/src/js/view_page.js:8
msgid "Page"
msgstr ""
#: addons/web/static/src/js/view_page.js:52
msgid "Do you really want to delete this record?"
msgstr ""
#: addons/web/static/src/js/view_page.js:227
msgid "Download"
msgstr ""
#: addons/web/static/src/js/view_tree.js:11
msgid "Tree"
msgstr ""
#: addons/web/static/src/js/views.js:590
msgid "Search: "
msgstr ""
#: addons/web/static/src/js/views.js:710
msgid "Customize"
msgstr ""
#: addons/web/static/src/js/views.js:713
msgid "Manage Views"
msgstr ""
#: addons/web/static/src/js/views.js:715 addons/web/static/src/js/views.js:719
#: addons/web/static/src/js/views.js:724
msgid "Manage views of the current object"
msgstr ""
#: addons/web/static/src/js/views.js:717
msgid "Edit Workflow"
msgstr ""
#: addons/web/static/src/js/views.js:722
msgid "Customize Object"
msgstr ""
#: addons/web/static/src/js/views.js:726
msgid "Translate"
msgstr ""
#: addons/web/static/src/js/views.js:728
msgid "Technical translation"
msgstr ""
#: addons/web/static/src/js/views.js:733
msgid "Other Options"
msgstr ""
#: addons/web/static/src/js/views.js:736 addons/web/static/src/xml/base.xml:0
msgid "Import"
msgstr "Importar"
#: addons/web/static/src/js/views.js:739 addons/web/static/src/xml/base.xml:0
msgid "Export"
msgstr "Exportar"
#: addons/web/static/src/js/views.js:742
msgid "View Log"
msgstr ""
#: addons/web/static/src/js/views.js:751
msgid "Reports"
msgstr ""
#: addons/web/static/src/js/views.js:751
msgid "Actions"
msgstr ""
#: addons/web/static/src/js/views.js:751
msgid "Links"
msgstr ""
#: addons/web/static/src/js/views.js:831
msgid "You must choose at least one record."
msgstr ""
#: addons/web/static/src/js/views.js:569
#: addons/web/static/src/js/views.js:832
msgid "Warning"
msgstr ""
#: addons/web/static/src/js/views.js:609
#: addons/web/static/src/js/views.js:866
msgid "Translations"
msgstr ""
#: addons/web/static/src/js/views.js:614 addons/web/static/src/xml/base.xml:0
msgid "Save"
msgstr ""
#: addons/web/static/src/js/views.js:615
msgid "Close"
msgstr "Fechar"
#: addons/web/static/src/xml/base.xml:0
msgid "x"
msgstr ""
@ -83,10 +428,6 @@ msgstr ""
msgid "Loading..."
msgstr "Carregando..."
#: addons/web/static/src/xml/base.xml:0
msgid "Create"
msgstr "Criar"
#: addons/web/static/src/xml/base.xml:0
msgid "Drop"
msgstr "Soltar"
@ -273,19 +614,31 @@ msgid "Disable all tips"
msgstr "Desligar todas as dicas"
#: addons/web/static/src/xml/base.xml:0
msgid "View#"
msgid "More…"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Fields"
msgid "Debug View#"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "View labels"
msgid "- Fields View Get"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Sidebar Relates"
msgid "- Edit"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "View"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "- Edit SearchView"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "- Edit Action"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
@ -296,62 +649,10 @@ msgstr ""
msgid ":"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Translate view"
msgstr "Visão de Tradução"
#: addons/web/static/src/xml/base.xml:0
msgid "Translate sidebar"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Delete"
msgstr "Excluir"
#: addons/web/static/src/xml/base.xml:0
msgid "First"
msgstr "Primeiro"
#: addons/web/static/src/xml/base.xml:0
msgid "<"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid ">"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Last"
msgstr "Último"
#: addons/web/static/src/xml/base.xml:0
msgid "♻"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Save & Edit"
msgstr "Salvar & Editar"
#: addons/web/static/src/xml/base.xml:0
msgid "Create & Edit"
msgstr "Criar & Editar"
#: addons/web/static/src/xml/base.xml:0
msgid "New"
msgstr "Novo"
#: addons/web/static/src/xml/base.xml:0
msgid "Duplicate"
msgstr "Duplicar"
#: addons/web/static/src/xml/base.xml:0
msgid "Readonly/Editable"
msgstr "Apenas Leitura/Editável"
#: addons/web/static/src/xml/base.xml:0
msgid "<<"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "0"
msgstr ""
@ -361,28 +662,88 @@ msgid "/"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid ">>"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Add"
msgstr "Adicionar"
msgid "Duplicate"
msgstr "Duplicar"
#: addons/web/static/src/xml/base.xml:0
msgid "Unhandled widget"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Notebook Page \""
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "\""
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Modifiers:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "?"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "#"
msgid "(nolabel)"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Done"
msgstr "Concluído"
msgid "Field:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Object:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Type:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Widget:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Size:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Context:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Domain:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "On change:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Relation:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Selection:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "["
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "]"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "-"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "#"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Open..."
@ -416,18 +777,38 @@ msgstr "Salvar como"
msgid "Clear"
msgstr "Limpar"
#: addons/web/static/src/xml/base.xml:0
msgid "Button"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "(no string)"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Special:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Button Type:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Method:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Action ID:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Search"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Advanced Filter"
msgstr "Filtro Avançado"
#: addons/web/static/src/xml/base.xml:0
msgid "-- Filters --"
msgstr "-- Filtros --"
#: addons/web/static/src/xml/base.xml:0
msgid "-- Actions --"
msgstr "-- Ações --"
#: addons/web/static/src/xml/base.xml:0
msgid "Save Filter"
msgstr "Salvar filtro"
@ -444,6 +825,18 @@ msgstr "Nome do Filtro"
msgid "(Any existing filter with the same name will be replaced)"
msgstr "(Qualquer filtro existente com o mesmo nome será substituído)"
#: addons/web/static/src/xml/base.xml:0
msgid "Select Dashboard to add this filter to:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Title of new Dashboard item:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Advanced Filters"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Any of the following conditions must match"
msgstr "Qualquer das seguintes condições deve ser verdadeira"
@ -464,10 +857,6 @@ msgstr "Adicionar condição"
msgid "and"
msgstr "e"
#: addons/web/static/src/xml/base.xml:0
msgid "Cancel"
msgstr "Cancelar"
#: addons/web/static/src/xml/base.xml:0
msgid "Save & New"
msgstr "Salvar & Novo"
@ -476,10 +865,6 @@ msgstr "Salvar & Novo"
msgid "Save & Close"
msgstr "Salvar & Fechar"
#: addons/web/static/src/xml/base.xml:0
msgid "Export"
msgstr "Exportar"
#: addons/web/static/src/xml/base.xml:0
msgid ""
"This wizard will export all data that matches the current search criteria to "
@ -516,10 +901,6 @@ msgstr "Campos para exportar"
msgid "Save fields list"
msgstr "Salvar lista de campos"
#: addons/web/static/src/xml/base.xml:0
msgid "Remove"
msgstr "Remover"
#: addons/web/static/src/xml/base.xml:0
msgid "Remove All"
msgstr "Remover Tudo"
@ -536,10 +917,6 @@ msgstr "&nbsp;"
msgid "Save as:"
msgstr "Salvar como:"
#: addons/web/static/src/xml/base.xml:0
msgid "Ok"
msgstr "Ok"
#: addons/web/static/src/xml/base.xml:0
msgid "Saved exports:"
msgstr ""
@ -556,10 +933,6 @@ msgstr "Nova Senha:"
msgid "Confirm Password:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Import"
msgstr "Importar"
#: addons/web/static/src/xml/base.xml:0
msgid "1. Import a .CSV file"
msgstr "Importar um arquivo CSV."

1050
addons/web/po/ru.po Normal file

File diff suppressed because it is too large Load Diff

View File

@ -7,55 +7,400 @@ msgid ""
msgstr ""
"Project-Id-Version: openerp-web\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2011-10-07 10:38+0200\n"
"POT-Creation-Date: 2011-12-20 18:48+0100\n"
"PO-Revision-Date: 2011-10-19 07:07+0000\n"
"Last-Translator: Anze (Neotek) <Unknown>\n"
"Language-Team: Slovenian <sl@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: 2011-11-21 05:50+0000\n"
"X-Generator: Launchpad (build 14299)\n"
"X-Launchpad-Export-Date: 2011-12-21 05:27+0000\n"
"X-Generator: Launchpad (build 14538)\n"
#: addons/web/static/src/js/view_form.js:355
#: addons/web/static/src/js/chrome.js:162
#: addons/web/static/src/js/chrome.js:175
#: addons/web/static/src/js/chrome.js:369
#: addons/web/static/src/js/view_form.js:358
#: addons/web/static/src/js/view_form.js:1078
#: addons/web/static/src/xml/base.xml:0
msgid "Ok"
msgstr "Vredu"
#: addons/web/static/src/js/chrome.js:668
msgid "About"
msgstr ""
#: addons/web/static/src/js/chrome.js:748
msgid "Preferences"
msgstr ""
#: addons/web/static/src/js/chrome.js:752
msgid "Change password"
msgstr ""
#: addons/web/static/src/js/chrome.js:753
#: addons/web/static/src/js/search.js:235
#: addons/web/static/src/js/search.js:276
#: addons/web/static/src/js/view_editor.js:97
#: addons/web/static/src/js/view_editor.js:778
#: addons/web/static/src/js/view_editor.js:907
#: addons/web/static/src/js/view_form.js:1085
#: addons/web/static/src/xml/base.xml:0
msgid "Cancel"
msgstr "Prekliči"
#: addons/web/static/src/js/chrome.js:754
#: addons/web/static/src/js/view_editor.js:75
#: addons/web/static/src/js/views.js:871 addons/web/static/src/xml/base.xml:0
msgid "Save"
msgstr "Shrani"
#: addons/web/static/src/js/chrome.js:774 addons/web/static/src/xml/base.xml:0
msgid "Change Password"
msgstr ""
#: addons/web/static/src/js/data_export.js:6
msgid "Export Data"
msgstr ""
#: addons/web/static/src/js/data_export.js:23
#: addons/web/static/src/js/data_import.js:73
#: addons/web/static/src/js/view_editor.js:49
#: addons/web/static/src/js/view_editor.js:387
#: addons/web/static/src/js/view_form.js:2775
#: addons/web/static/src/js/views.js:872
msgid "Close"
msgstr "Zapri"
#: addons/web/static/src/js/data_export.js:24
msgid "Export To File"
msgstr ""
#: addons/web/static/src/js/data_import.js:34
msgid "Import Data"
msgstr ""
#: addons/web/static/src/js/data_import.js:74
msgid "Import File"
msgstr ""
#: addons/web/static/src/js/data_import.js:109
msgid "External ID"
msgstr ""
#: addons/web/static/src/js/search.js:233
msgid "Filter Entry"
msgstr ""
#: addons/web/static/src/js/search.js:238
#: addons/web/static/src/js/search.js:279
msgid "OK"
msgstr ""
#: addons/web/static/src/js/search.js:274 addons/web/static/src/xml/base.xml:0
msgid "Add to Dashboard"
msgstr ""
#: addons/web/static/src/js/search.js:403
msgid "Invalid Search"
msgstr ""
#: addons/web/static/src/js/search.js:403
msgid "triggered from search view"
msgstr ""
#: addons/web/static/src/js/search.js:490
#, python-format
msgid "Incorrect value for field %(fieldname)s: [%(value)s] is %(message)s"
msgstr ""
#: addons/web/static/src/js/search.js:822
msgid "not a valid integer"
msgstr ""
#: addons/web/static/src/js/search.js:836
msgid "not a valid number"
msgstr ""
#: addons/web/static/src/js/search.js:898
msgid "Yes"
msgstr ""
#: addons/web/static/src/js/search.js:899
msgid "No"
msgstr ""
#: addons/web/static/src/js/search.js:1252
msgid "contains"
msgstr ""
#: addons/web/static/src/js/search.js:1253
msgid "doesn't contain"
msgstr ""
#: addons/web/static/src/js/search.js:1254
#: addons/web/static/src/js/search.js:1269
#: addons/web/static/src/js/search.js:1289
#: addons/web/static/src/js/search.js:1309
#: addons/web/static/src/js/search.js:1331
msgid "is equal to"
msgstr ""
#: addons/web/static/src/js/search.js:1255
#: addons/web/static/src/js/search.js:1270
#: addons/web/static/src/js/search.js:1290
#: addons/web/static/src/js/search.js:1310
#: addons/web/static/src/js/search.js:1332
msgid "is not equal to"
msgstr ""
#: addons/web/static/src/js/search.js:1256
#: addons/web/static/src/js/search.js:1271
#: addons/web/static/src/js/search.js:1291
#: addons/web/static/src/js/search.js:1311
#: addons/web/static/src/js/search.js:1333
msgid "greater than"
msgstr ""
#: addons/web/static/src/js/search.js:1257
#: addons/web/static/src/js/search.js:1272
#: addons/web/static/src/js/search.js:1292
#: addons/web/static/src/js/search.js:1312
#: addons/web/static/src/js/search.js:1334
msgid "less than"
msgstr ""
#: addons/web/static/src/js/search.js:1258
#: addons/web/static/src/js/search.js:1273
#: addons/web/static/src/js/search.js:1293
#: addons/web/static/src/js/search.js:1313
#: addons/web/static/src/js/search.js:1335
msgid "greater or equal than"
msgstr ""
#: addons/web/static/src/js/search.js:1259
#: addons/web/static/src/js/search.js:1274
#: addons/web/static/src/js/search.js:1294
#: addons/web/static/src/js/search.js:1314
#: addons/web/static/src/js/search.js:1336
msgid "less or equal than"
msgstr ""
#: addons/web/static/src/js/search.js:1325
#: addons/web/static/src/js/search.js:1350
msgid "is"
msgstr ""
#: addons/web/static/src/js/search.js:1351
msgid "is not"
msgstr ""
#: addons/web/static/src/js/search.js:1364
msgid "is true"
msgstr ""
#: addons/web/static/src/js/search.js:1365
msgid "is false"
msgstr ""
#: addons/web/static/src/js/view_editor.js:42
msgid "ViewEditor"
msgstr ""
#: addons/web/static/src/js/view_editor.js:46
#: addons/web/static/src/js/view_list.js:17
#: addons/web/static/src/xml/base.xml:0
msgid "Create"
msgstr "Ustvari"
#: addons/web/static/src/js/view_editor.js:47
#: addons/web/static/src/xml/base.xml:0
msgid "Edit"
msgstr ""
#: addons/web/static/src/js/view_editor.js:48
#: addons/web/static/src/xml/base.xml:0
msgid "Remove"
msgstr "Odstrani"
#: addons/web/static/src/js/view_editor.js:71
#, python-format
msgid "Create a view (%s)"
msgstr ""
#: addons/web/static/src/js/view_editor.js:170
msgid "Do you really want to remove this view?"
msgstr ""
#: addons/web/static/src/js/view_editor.js:367
#, python-format
msgid "View Editor %d - %s"
msgstr ""
#: addons/web/static/src/js/view_editor.js:371
msgid "Preview"
msgstr ""
#: addons/web/static/src/js/view_editor.js:442
msgid "Do you really want to remove this node?"
msgstr ""
#: addons/web/static/src/js/view_editor.js:756
#: addons/web/static/src/js/view_editor.js:883
msgid "Properties"
msgstr ""
#: addons/web/static/src/js/view_editor.js:760
#: addons/web/static/src/js/view_editor.js:887
msgid "Update"
msgstr ""
#: addons/web/static/src/js/view_form.js:17
msgid "Form"
msgstr ""
#: addons/web/static/src/js/view_form.js:401
msgid ""
"Warning, the record has been modified, your changes will be discarded."
msgstr ""
"Opozorilo, zapis je bil spremenjen, zato bodo vaše spremembe zavržene."
#: addons/web/static/src/js/view_form.js:1659
#: addons/web/static/src/js/view_form.js:612
msgid "Attachments"
msgstr ""
#: addons/web/static/src/js/view_form.js:650
#, python-format
msgid "Do you really want to delete the attachment %s?"
msgstr ""
#: addons/web/static/src/js/view_form.js:1075
msgid "Confirm"
msgstr ""
#: addons/web/static/src/js/view_form.js:1838
msgid "<em>   Search More...</em>"
msgstr "<em>   Iskanje več...</em>"
#: addons/web/static/src/js/view_form.js:1672
#: addons/web/static/src/js/view_form.js:1851
#, python-format
msgid "<em>   Create \"<strong>%s</strong>\"</em>"
msgstr "<em>   Ustvari \"<strong>%s</strong>\"</em>"
#: addons/web/static/src/js/view_form.js:1678
#: addons/web/static/src/js/view_form.js:1857
msgid "<em>   Create and Edit...</em>"
msgstr "<em>   Ustvari in uredi...</em>"
#: addons/web/static/src/js/views.js:568
#: addons/web/static/src/js/view_form.js:2404
#: addons/web/static/src/xml/base.xml:0
msgid "Add"
msgstr "Dodaj"
#: addons/web/static/src/js/view_list.js:8
msgid "List"
msgstr ""
#: addons/web/static/src/js/view_list.js:269
msgid "Unlimited"
msgstr ""
#: addons/web/static/src/js/view_list.js:516
msgid "Do you really want to remove these records?"
msgstr ""
#: addons/web/static/src/js/view_list.js:1202
msgid "Undefined"
msgstr ""
#: addons/web/static/src/js/view_page.js:8
msgid "Page"
msgstr ""
#: addons/web/static/src/js/view_page.js:52
msgid "Do you really want to delete this record?"
msgstr ""
#: addons/web/static/src/js/view_page.js:227
msgid "Download"
msgstr ""
#: addons/web/static/src/js/view_tree.js:11
msgid "Tree"
msgstr ""
#: addons/web/static/src/js/views.js:590
msgid "Search: "
msgstr ""
#: addons/web/static/src/js/views.js:710
msgid "Customize"
msgstr ""
#: addons/web/static/src/js/views.js:713
msgid "Manage Views"
msgstr ""
#: addons/web/static/src/js/views.js:715 addons/web/static/src/js/views.js:719
#: addons/web/static/src/js/views.js:724
msgid "Manage views of the current object"
msgstr ""
#: addons/web/static/src/js/views.js:717
msgid "Edit Workflow"
msgstr ""
#: addons/web/static/src/js/views.js:722
msgid "Customize Object"
msgstr ""
#: addons/web/static/src/js/views.js:726
msgid "Translate"
msgstr ""
#: addons/web/static/src/js/views.js:728
msgid "Technical translation"
msgstr ""
#: addons/web/static/src/js/views.js:733
msgid "Other Options"
msgstr ""
#: addons/web/static/src/js/views.js:736 addons/web/static/src/xml/base.xml:0
msgid "Import"
msgstr "Uvozi"
#: addons/web/static/src/js/views.js:739 addons/web/static/src/xml/base.xml:0
msgid "Export"
msgstr "Izvozi"
#: addons/web/static/src/js/views.js:742
msgid "View Log"
msgstr ""
#: addons/web/static/src/js/views.js:751
msgid "Reports"
msgstr ""
#: addons/web/static/src/js/views.js:751
msgid "Actions"
msgstr ""
#: addons/web/static/src/js/views.js:751
msgid "Links"
msgstr ""
#: addons/web/static/src/js/views.js:831
msgid "You must choose at least one record."
msgstr "Izbrati morate vsaj en zapis."
#: addons/web/static/src/js/views.js:569
#: addons/web/static/src/js/views.js:832
msgid "Warning"
msgstr "Opozorilo"
#: addons/web/static/src/js/views.js:609
#: addons/web/static/src/js/views.js:866
msgid "Translations"
msgstr "Prevodi"
#: addons/web/static/src/js/views.js:614 addons/web/static/src/xml/base.xml:0
msgid "Save"
msgstr "Shrani"
#: addons/web/static/src/js/views.js:615
msgid "Close"
msgstr "Zapri"
#: addons/web/static/src/xml/base.xml:0
msgid "x"
msgstr "x"
@ -84,10 +429,6 @@ msgstr "."
msgid "Loading..."
msgstr "Nalaganje …"
#: addons/web/static/src/xml/base.xml:0
msgid "Create"
msgstr "Ustvari"
#: addons/web/static/src/xml/base.xml:0
msgid "Drop"
msgstr "Izbriši"
@ -274,20 +615,32 @@ msgid "Disable all tips"
msgstr "Onemogoči vse namige"
#: addons/web/static/src/xml/base.xml:0
msgid "View#"
msgstr "Ogled#"
msgid "More…"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Fields"
msgstr "Polja"
msgid "Debug View#"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "View labels"
msgstr "Ogled oznak"
msgid "- Fields View Get"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Sidebar Relates"
msgstr "Sorodne stranske vrstice"
msgid "- Edit"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "View"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "- Edit SearchView"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "- Edit Action"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Field"
@ -297,62 +650,10 @@ msgstr "Polje"
msgid ":"
msgstr ":"
#: addons/web/static/src/xml/base.xml:0
msgid "Translate view"
msgstr "Preveden pogled"
#: addons/web/static/src/xml/base.xml:0
msgid "Translate sidebar"
msgstr "Prevedi stransko vrstico"
#: addons/web/static/src/xml/base.xml:0
msgid "Delete"
msgstr "Izbriši"
#: addons/web/static/src/xml/base.xml:0
msgid "First"
msgstr "Začetek"
#: addons/web/static/src/xml/base.xml:0
msgid "<"
msgstr "<"
#: addons/web/static/src/xml/base.xml:0
msgid ">"
msgstr ">"
#: addons/web/static/src/xml/base.xml:0
msgid "Last"
msgstr "Konec"
#: addons/web/static/src/xml/base.xml:0
msgid "♻"
msgstr "♻"
#: addons/web/static/src/xml/base.xml:0
msgid "Save & Edit"
msgstr "Shrani & Uredi"
#: addons/web/static/src/xml/base.xml:0
msgid "Create & Edit"
msgstr "Ustvari & Uredi"
#: addons/web/static/src/xml/base.xml:0
msgid "New"
msgstr "Novo"
#: addons/web/static/src/xml/base.xml:0
msgid "Duplicate"
msgstr "Podvoji"
#: addons/web/static/src/xml/base.xml:0
msgid "Readonly/Editable"
msgstr "Samo za branje/možno urejanje"
#: addons/web/static/src/xml/base.xml:0
msgid "<<"
msgstr "<<"
#: addons/web/static/src/xml/base.xml:0
msgid "0"
msgstr "0"
@ -362,28 +663,88 @@ msgid "/"
msgstr "/"
#: addons/web/static/src/xml/base.xml:0
msgid ">>"
msgstr ">>"
#: addons/web/static/src/xml/base.xml:0
msgid "Add"
msgstr "Dodaj"
msgid "Duplicate"
msgstr "Podvoji"
#: addons/web/static/src/xml/base.xml:0
msgid "Unhandled widget"
msgstr "Neobravnavani gradnik"
#: addons/web/static/src/xml/base.xml:0
msgid "Notebook Page \""
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "\""
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Modifiers:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "?"
msgstr "?"
#: addons/web/static/src/xml/base.xml:0
msgid "#"
msgstr "#"
msgid "(nolabel)"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Done"
msgstr "Končano"
msgid "Field:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Object:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Type:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Widget:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Size:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Context:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Domain:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "On change:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Relation:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Selection:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "["
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "]"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "-"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "#"
msgstr "#"
#: addons/web/static/src/xml/base.xml:0
msgid "Open..."
@ -417,18 +778,38 @@ msgstr "Shrani kot"
msgid "Clear"
msgstr "Počisti"
#: addons/web/static/src/xml/base.xml:0
msgid "Button"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "(no string)"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Special:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Button Type:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Method:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Action ID:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Search"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Advanced Filter"
msgstr "Napredni filter"
#: addons/web/static/src/xml/base.xml:0
msgid "-- Filters --"
msgstr "-- Filtr i--"
#: addons/web/static/src/xml/base.xml:0
msgid "-- Actions --"
msgstr "-- Dejanja --"
#: addons/web/static/src/xml/base.xml:0
msgid "Save Filter"
msgstr "Shrani filter"
@ -445,6 +826,18 @@ msgstr "Ime filtra:"
msgid "(Any existing filter with the same name will be replaced)"
msgstr "(Vsak obstoječ filter z istim imenom bo zamenjan)"
#: addons/web/static/src/xml/base.xml:0
msgid "Select Dashboard to add this filter to:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Title of new Dashboard item:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Advanced Filters"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Any of the following conditions must match"
msgstr "Vsak od teh pogojev se mora ujemati"
@ -465,10 +858,6 @@ msgstr "Dodaj pogoj"
msgid "and"
msgstr "in"
#: addons/web/static/src/xml/base.xml:0
msgid "Cancel"
msgstr "Prekliči"
#: addons/web/static/src/xml/base.xml:0
msgid "Save & New"
msgstr "Shrani & Novo"
@ -477,10 +866,6 @@ msgstr "Shrani & Novo"
msgid "Save & Close"
msgstr "Shrani & Zapri"
#: addons/web/static/src/xml/base.xml:0
msgid "Export"
msgstr "Izvozi"
#: addons/web/static/src/xml/base.xml:0
msgid ""
"This wizard will export all data that matches the current search criteria to "
@ -521,10 +906,6 @@ msgstr "Polja za izvoz"
msgid "Save fields list"
msgstr "Shrani seznam polj"
#: addons/web/static/src/xml/base.xml:0
msgid "Remove"
msgstr "Odstrani"
#: addons/web/static/src/xml/base.xml:0
msgid "Remove All"
msgstr "Odstrani vse"
@ -541,10 +922,6 @@ msgstr "&nbsp;"
msgid "Save as:"
msgstr "Shrani kot:"
#: addons/web/static/src/xml/base.xml:0
msgid "Ok"
msgstr "Vredu"
#: addons/web/static/src/xml/base.xml:0
msgid "Saved exports:"
msgstr "Shranjeni izvozi:"
@ -561,10 +938,6 @@ msgstr "Novo geslo:"
msgid "Confirm Password:"
msgstr "Potrditev gesla:"
#: addons/web/static/src/xml/base.xml:0
msgid "Import"
msgstr "Uvozi"
#: addons/web/static/src/xml/base.xml:0
msgid "1. Import a .CSV file"
msgstr "1. Uvozi .CSV datoteko"

View File

@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2011-10-07 10:38+0200\n"
"POT-Creation-Date: 2011-12-20 18:48+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -17,43 +17,388 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 0.9.6\n"
#: addons/web/static/src/js/view_form.js:355
#: addons/web/static/src/js/chrome.js:162
#: addons/web/static/src/js/chrome.js:175
#: addons/web/static/src/js/chrome.js:369
#: addons/web/static/src/js/view_form.js:358
#: addons/web/static/src/js/view_form.js:1078
#: addons/web/static/src/xml/base.xml:0
msgid "Ok"
msgstr ""
#: addons/web/static/src/js/chrome.js:668
msgid "About"
msgstr ""
#: addons/web/static/src/js/chrome.js:748
msgid "Preferences"
msgstr ""
#: addons/web/static/src/js/chrome.js:752
msgid "Change password"
msgstr ""
#: addons/web/static/src/js/chrome.js:753
#: addons/web/static/src/js/search.js:235
#: addons/web/static/src/js/search.js:276
#: addons/web/static/src/js/view_editor.js:97
#: addons/web/static/src/js/view_editor.js:778
#: addons/web/static/src/js/view_editor.js:907
#: addons/web/static/src/js/view_form.js:1085
#: addons/web/static/src/xml/base.xml:0
msgid "Cancel"
msgstr ""
#: addons/web/static/src/js/chrome.js:754
#: addons/web/static/src/js/view_editor.js:75
#: addons/web/static/src/js/views.js:871 addons/web/static/src/xml/base.xml:0
msgid "Save"
msgstr ""
#: addons/web/static/src/js/chrome.js:774 addons/web/static/src/xml/base.xml:0
msgid "Change Password"
msgstr ""
#: addons/web/static/src/js/data_export.js:6
msgid "Export Data"
msgstr ""
#: addons/web/static/src/js/data_export.js:23
#: addons/web/static/src/js/data_import.js:73
#: addons/web/static/src/js/view_editor.js:49
#: addons/web/static/src/js/view_editor.js:387
#: addons/web/static/src/js/view_form.js:2775
#: addons/web/static/src/js/views.js:872
msgid "Close"
msgstr ""
#: addons/web/static/src/js/data_export.js:24
msgid "Export To File"
msgstr ""
#: addons/web/static/src/js/data_import.js:34
msgid "Import Data"
msgstr ""
#: addons/web/static/src/js/data_import.js:74
msgid "Import File"
msgstr ""
#: addons/web/static/src/js/data_import.js:109
msgid "External ID"
msgstr ""
#: addons/web/static/src/js/search.js:233
msgid "Filter Entry"
msgstr ""
#: addons/web/static/src/js/search.js:238
#: addons/web/static/src/js/search.js:279
msgid "OK"
msgstr ""
#: addons/web/static/src/js/search.js:274 addons/web/static/src/xml/base.xml:0
msgid "Add to Dashboard"
msgstr ""
#: addons/web/static/src/js/search.js:403
msgid "Invalid Search"
msgstr ""
#: addons/web/static/src/js/search.js:403
msgid "triggered from search view"
msgstr ""
#: addons/web/static/src/js/search.js:490
#, python-format
msgid "Incorrect value for field %(fieldname)s: [%(value)s] is %(message)s"
msgstr ""
#: addons/web/static/src/js/search.js:822
msgid "not a valid integer"
msgstr ""
#: addons/web/static/src/js/search.js:836
msgid "not a valid number"
msgstr ""
#: addons/web/static/src/js/search.js:898
msgid "Yes"
msgstr ""
#: addons/web/static/src/js/search.js:899
msgid "No"
msgstr ""
#: addons/web/static/src/js/search.js:1252
msgid "contains"
msgstr ""
#: addons/web/static/src/js/search.js:1253
msgid "doesn't contain"
msgstr ""
#: addons/web/static/src/js/search.js:1254
#: addons/web/static/src/js/search.js:1269
#: addons/web/static/src/js/search.js:1289
#: addons/web/static/src/js/search.js:1309
#: addons/web/static/src/js/search.js:1331
msgid "is equal to"
msgstr ""
#: addons/web/static/src/js/search.js:1255
#: addons/web/static/src/js/search.js:1270
#: addons/web/static/src/js/search.js:1290
#: addons/web/static/src/js/search.js:1310
#: addons/web/static/src/js/search.js:1332
msgid "is not equal to"
msgstr ""
#: addons/web/static/src/js/search.js:1256
#: addons/web/static/src/js/search.js:1271
#: addons/web/static/src/js/search.js:1291
#: addons/web/static/src/js/search.js:1311
#: addons/web/static/src/js/search.js:1333
msgid "greater than"
msgstr ""
#: addons/web/static/src/js/search.js:1257
#: addons/web/static/src/js/search.js:1272
#: addons/web/static/src/js/search.js:1292
#: addons/web/static/src/js/search.js:1312
#: addons/web/static/src/js/search.js:1334
msgid "less than"
msgstr ""
#: addons/web/static/src/js/search.js:1258
#: addons/web/static/src/js/search.js:1273
#: addons/web/static/src/js/search.js:1293
#: addons/web/static/src/js/search.js:1313
#: addons/web/static/src/js/search.js:1335
msgid "greater or equal than"
msgstr ""
#: addons/web/static/src/js/search.js:1259
#: addons/web/static/src/js/search.js:1274
#: addons/web/static/src/js/search.js:1294
#: addons/web/static/src/js/search.js:1314
#: addons/web/static/src/js/search.js:1336
msgid "less or equal than"
msgstr ""
#: addons/web/static/src/js/search.js:1325
#: addons/web/static/src/js/search.js:1350
msgid "is"
msgstr ""
#: addons/web/static/src/js/search.js:1351
msgid "is not"
msgstr ""
#: addons/web/static/src/js/search.js:1364
msgid "is true"
msgstr ""
#: addons/web/static/src/js/search.js:1365
msgid "is false"
msgstr ""
#: addons/web/static/src/js/view_editor.js:42
msgid "ViewEditor"
msgstr ""
#: addons/web/static/src/js/view_editor.js:46
#: addons/web/static/src/js/view_list.js:17
#: addons/web/static/src/xml/base.xml:0
msgid "Create"
msgstr ""
#: addons/web/static/src/js/view_editor.js:47
#: addons/web/static/src/xml/base.xml:0
msgid "Edit"
msgstr ""
#: addons/web/static/src/js/view_editor.js:48
#: addons/web/static/src/xml/base.xml:0
msgid "Remove"
msgstr ""
#: addons/web/static/src/js/view_editor.js:71
#, python-format
msgid "Create a view (%s)"
msgstr ""
#: addons/web/static/src/js/view_editor.js:170
msgid "Do you really want to remove this view?"
msgstr ""
#: addons/web/static/src/js/view_editor.js:367
#, python-format
msgid "View Editor %d - %s"
msgstr ""
#: addons/web/static/src/js/view_editor.js:371
msgid "Preview"
msgstr ""
#: addons/web/static/src/js/view_editor.js:442
msgid "Do you really want to remove this node?"
msgstr ""
#: addons/web/static/src/js/view_editor.js:756
#: addons/web/static/src/js/view_editor.js:883
msgid "Properties"
msgstr ""
#: addons/web/static/src/js/view_editor.js:760
#: addons/web/static/src/js/view_editor.js:887
msgid "Update"
msgstr ""
#: addons/web/static/src/js/view_form.js:17
msgid "Form"
msgstr ""
#: addons/web/static/src/js/view_form.js:401
msgid "Warning, the record has been modified, your changes will be discarded."
msgstr ""
#: addons/web/static/src/js/view_form.js:1659
#: addons/web/static/src/js/view_form.js:612
msgid "Attachments"
msgstr ""
#: addons/web/static/src/js/view_form.js:650
#, python-format
msgid "Do you really want to delete the attachment %s?"
msgstr ""
#: addons/web/static/src/js/view_form.js:1075
msgid "Confirm"
msgstr ""
#: addons/web/static/src/js/view_form.js:1838
msgid "<em>   Search More...</em>"
msgstr ""
#: addons/web/static/src/js/view_form.js:1672
#: addons/web/static/src/js/view_form.js:1851
#, python-format
msgid "<em>   Create \"<strong>%s</strong>\"</em>"
msgstr ""
#: addons/web/static/src/js/view_form.js:1678
#: addons/web/static/src/js/view_form.js:1857
msgid "<em>   Create and Edit...</em>"
msgstr ""
#: addons/web/static/src/js/views.js:568
#: addons/web/static/src/js/view_form.js:2404
#: addons/web/static/src/xml/base.xml:0
msgid "Add"
msgstr ""
#: addons/web/static/src/js/view_list.js:8
msgid "List"
msgstr ""
#: addons/web/static/src/js/view_list.js:269
msgid "Unlimited"
msgstr ""
#: addons/web/static/src/js/view_list.js:516
msgid "Do you really want to remove these records?"
msgstr ""
#: addons/web/static/src/js/view_list.js:1202
msgid "Undefined"
msgstr ""
#: addons/web/static/src/js/view_page.js:8
msgid "Page"
msgstr ""
#: addons/web/static/src/js/view_page.js:52
msgid "Do you really want to delete this record?"
msgstr ""
#: addons/web/static/src/js/view_page.js:227
msgid "Download"
msgstr ""
#: addons/web/static/src/js/view_tree.js:11
msgid "Tree"
msgstr ""
#: addons/web/static/src/js/views.js:590
msgid "Search: "
msgstr ""
#: addons/web/static/src/js/views.js:710
msgid "Customize"
msgstr ""
#: addons/web/static/src/js/views.js:713
msgid "Manage Views"
msgstr ""
#: addons/web/static/src/js/views.js:715 addons/web/static/src/js/views.js:719
#: addons/web/static/src/js/views.js:724
msgid "Manage views of the current object"
msgstr ""
#: addons/web/static/src/js/views.js:717
msgid "Edit Workflow"
msgstr ""
#: addons/web/static/src/js/views.js:722
msgid "Customize Object"
msgstr ""
#: addons/web/static/src/js/views.js:726
msgid "Translate"
msgstr ""
#: addons/web/static/src/js/views.js:728
msgid "Technical translation"
msgstr ""
#: addons/web/static/src/js/views.js:733
msgid "Other Options"
msgstr ""
#: addons/web/static/src/js/views.js:736 addons/web/static/src/xml/base.xml:0
msgid "Import"
msgstr ""
#: addons/web/static/src/js/views.js:739 addons/web/static/src/xml/base.xml:0
msgid "Export"
msgstr ""
#: addons/web/static/src/js/views.js:742
msgid "View Log"
msgstr ""
#: addons/web/static/src/js/views.js:751
msgid "Reports"
msgstr ""
#: addons/web/static/src/js/views.js:751
msgid "Actions"
msgstr ""
#: addons/web/static/src/js/views.js:751
msgid "Links"
msgstr ""
#: addons/web/static/src/js/views.js:831
msgid "You must choose at least one record."
msgstr ""
#: addons/web/static/src/js/views.js:569
#: addons/web/static/src/js/views.js:832
msgid "Warning"
msgstr ""
#: addons/web/static/src/js/views.js:609
#: addons/web/static/src/js/views.js:866
msgid "Translations"
msgstr ""
#: addons/web/static/src/js/views.js:614 addons/web/static/src/xml/base.xml:0
msgid "Save"
msgstr ""
#: addons/web/static/src/js/views.js:615
msgid "Close"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "x"
msgstr ""
@ -82,10 +427,6 @@ msgstr ""
msgid "Loading..."
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Create"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Drop"
msgstr ""
@ -265,19 +606,31 @@ msgid "Disable all tips"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "View#"
msgid "More…"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Fields"
msgid "Debug View#"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "View labels"
msgid "- Fields View Get"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Sidebar Relates"
msgid "- Edit"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "View"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "- Edit SearchView"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "- Edit Action"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
@ -288,62 +641,10 @@ msgstr ""
msgid ":"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Translate view"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Translate sidebar"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Delete"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "First"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "<"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid ">"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Last"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "♻"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Save & Edit"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Create & Edit"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "New"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Duplicate"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Readonly/Editable"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "<<"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "0"
msgstr ""
@ -353,27 +654,87 @@ msgid "/"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid ">>"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Add"
msgid "Duplicate"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Unhandled widget"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Notebook Page \""
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "\""
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Modifiers:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "?"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "#"
msgid "(nolabel)"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Done"
msgid "Field:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Object:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Type:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Widget:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Size:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Context:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Domain:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "On change:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Relation:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Selection:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "["
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "]"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "-"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "#"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
@ -408,18 +769,38 @@ msgstr ""
msgid "Clear"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Button"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "(no string)"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Special:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Button Type:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Method:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Action ID:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Search"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Advanced Filter"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "-- Filters --"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "-- Actions --"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Save Filter"
msgstr ""
@ -436,6 +817,18 @@ msgstr ""
msgid "(Any existing filter with the same name will be replaced)"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Select Dashboard to add this filter to:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Title of new Dashboard item:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Advanced Filters"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Any of the following conditions must match"
msgstr ""
@ -456,10 +849,6 @@ msgstr ""
msgid "and"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Cancel"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Save & New"
msgstr ""
@ -468,10 +857,6 @@ msgstr ""
msgid "Save & Close"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Export"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid ""
"This wizard will export all data that matches the current search criteria"
@ -508,10 +893,6 @@ msgstr ""
msgid "Save fields list"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Remove"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Remove All"
msgstr ""
@ -528,10 +909,6 @@ msgstr ""
msgid "Save as:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Ok"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Saved exports:"
msgstr ""
@ -548,10 +925,6 @@ msgstr ""
msgid "Confirm Password:"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "Import"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "1. Import a .CSV file"
msgstr ""

1050
addons/web/po/zh_TW.po Normal file

File diff suppressed because it is too large Load Diff

View File

@ -1,6 +1,16 @@
--- jquery.tipTip_old.js 2011-11-14 21:40:55.000000000 +0100
+++ jquery.tipTip.js 2011-11-15 10:09:35.000000000 +0100
@@ -31,7 +31,7 @@
--- jquery.tipTip_old.js 2011-12-01 14:15:35.000000000 +0100
+++ jquery.tipTip.js 2011-12-07 12:32:32.000000000 +0100
@@ -20,6 +20,9 @@
*/
(function($){
+ $.tipTipClear = function() {
+ $("#tiptip_holder").remove();
+ }
$.fn.tipTip = function(options) {
var defaults = {
activation: "hover",
@@ -31,7 +34,7 @@
fadeIn: 200,
fadeOut: 200,
attribute: "title",
@ -9,7 +19,7 @@
enter: function(){},
exit: function(){}
};
@@ -51,12 +51,7 @@
@@ -51,12 +54,7 @@
return this.each(function(){
var org_elem = $(this);
@ -23,24 +33,20 @@
if(!opts.content){
org_elem.removeAttr(opts.attribute); //remove original Attribute
}
@@ -99,6 +94,8 @@
@@ -99,6 +97,8 @@
function active_tiptip(){
opts.enter.call(this);
+ var org_title = typeof opts.content === 'function' ? opts.content() : opts.content;
+ var org_title = typeof opts.content === 'function' ? opts.content.call(org_elem, opts) : opts.content;
+ org_title = org_title || org_elem.attr(opts.attribute);
tiptip_content.html(org_title);
tiptip_holder.hide().removeAttr("class").css("margin","0");
tiptip_arrow.removeAttr("style");
@@ -176,8 +173,15 @@
tiptip_arrow.css({"margin-left": arrow_left+"px", "margin-top": arrow_top+"px"});
@@ -177,7 +177,12 @@
tiptip_holder.css({"margin-left": marg_left+"px", "margin-top": marg_top+"px"}).attr("class","tip"+t_class);
- if (timeout){ clearTimeout(timeout); }
if (timeout){ clearTimeout(timeout); }
- timeout = setTimeout(function(){ tiptip_holder.stop(true,true).fadeIn(opts.fadeIn); }, opts.delay);
+ if (timeout) {
+ clearTimeout(timeout);
+ }
+ timeout = setTimeout(function() {
+ tiptip_holder.stop(true,true);
+ if ($.contains(document.documentElement, org_elem[0])) {

View File

@ -20,6 +20,9 @@
*/
(function($){
$.tipTipClear = function() {
$("#tiptip_holder").remove();
}
$.fn.tipTip = function(options) {
var defaults = {
activation: "hover",
@ -94,7 +97,7 @@
function active_tiptip(){
opts.enter.call(this);
var org_title = typeof opts.content === 'function' ? opts.content() : opts.content;
var org_title = typeof opts.content === 'function' ? opts.content.call(org_elem, opts) : opts.content;
org_title = org_title || org_elem.attr(opts.attribute);
tiptip_content.html(org_title);
tiptip_holder.hide().removeAttr("class").css("margin","0");

View File

@ -1,5 +1,5 @@
/*!
* jQuery JavaScript Library v1.6.2
* jQuery JavaScript Library v1.6.4
* http://jquery.com/
*
* Copyright 2011, John Resig
@ -11,7 +11,7 @@
* Copyright 2011, The Dojo Foundation
* Released under the MIT, BSD, and GPL Licenses.
*
* Date: Thu Jun 30 14:16:56 2011 -0400
* Date: Mon Sep 12 18:54:48 2011 -0400
*/
(function( window, undefined ) {
@ -37,8 +37,8 @@ var jQuery = function( selector, context ) {
rootjQuery,
// A simple way to check for HTML strings or ID strings
// (both of which we optimize for)
quickExpr = /^(?:[^<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,
// Prioritize #id over <tag> to avoid XSS via location.hash (#9521)
quickExpr = /^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,
// Check if a string has a non-whitespace character in it
rnotwhite = /\S/,
@ -66,11 +66,12 @@ var jQuery = function( selector, context ) {
rmozilla = /(mozilla)(?:.*? rv:([\w.]+))?/,
// Matches dashed string for camelizing
rdashAlpha = /-([a-z])/ig,
rdashAlpha = /-([a-z]|[0-9])/ig,
rmsPrefix = /^-ms-/,
// Used by jQuery.camelCase as callback to replace()
fcamelCase = function( all, letter ) {
return letter.toUpperCase();
return ( letter + "" ).toUpperCase();
},
// Keep a UserAgent string for use with jQuery.browser
@ -212,7 +213,7 @@ jQuery.fn = jQuery.prototype = {
selector: "",
// The current version of jQuery being used
jquery: "1.6.2",
jquery: "1.6.4",
// The default length of a jQuery object is 0
length: 0,
@ -521,10 +522,15 @@ jQuery.extend({
return false;
}
// Not own constructor property must be Object
if ( obj.constructor &&
!hasOwn.call(obj, "constructor") &&
!hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) {
try {
// Not own constructor property must be Object
if ( obj.constructor &&
!hasOwn.call(obj, "constructor") &&
!hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) {
return false;
}
} catch ( e ) {
// IE8,9 Will throw exceptions on certain host objects #9897
return false;
}
@ -574,24 +580,23 @@ jQuery.extend({
},
// Cross-browser xml parsing
// (xml & tmp used internally)
parseXML: function( data , xml , tmp ) {
if ( window.DOMParser ) { // Standard
tmp = new DOMParser();
xml = tmp.parseFromString( data , "text/xml" );
} else { // IE
xml = new ActiveXObject( "Microsoft.XMLDOM" );
xml.async = "false";
xml.loadXML( data );
parseXML: function( data ) {
var xml, tmp;
try {
if ( window.DOMParser ) { // Standard
tmp = new DOMParser();
xml = tmp.parseFromString( data , "text/xml" );
} else { // IE
xml = new ActiveXObject( "Microsoft.XMLDOM" );
xml.async = "false";
xml.loadXML( data );
}
} catch( e ) {
xml = undefined;
}
tmp = xml.documentElement;
if ( ! tmp || ! tmp.nodeName || tmp.nodeName === "parsererror" ) {
if ( !xml || !xml.documentElement || xml.getElementsByTagName( "parsererror" ).length ) {
jQuery.error( "Invalid XML: " + data );
}
return xml;
},
@ -611,10 +616,10 @@ jQuery.extend({
}
},
// Converts a dashed string to camelCased string;
// Used by both the css and data modules
// Convert dashed to camelCase; used by the css and data modules
// Microsoft forgot to hump their vendor prefix (#9572)
camelCase: function( string ) {
return string.replace( rdashAlpha, fcamelCase );
return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
},
nodeName: function( elem, name ) {
@ -699,6 +704,9 @@ jQuery.extend({
},
inArray: function( elem, array ) {
if ( !array ) {
return -1;
}
if ( indexOf ) {
return indexOf.call( array, elem );
@ -1071,7 +1079,7 @@ jQuery.extend({
if ( returned && jQuery.isFunction( returned.promise ) ) {
returned.promise().then( newDefer.resolve, newDefer.reject );
} else {
newDefer[ action ]( returned );
newDefer[ action + "With" ]( this === deferred ? newDefer : this, [ returned ] );
}
});
} else {
@ -1173,6 +1181,7 @@ jQuery.support = (function() {
div.setAttribute("className", "t");
div.innerHTML = " <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>";
all = div.getElementsByTagName( "*" );
a = div.getElementsByTagName( "a" )[ 0 ];
@ -1293,13 +1302,14 @@ jQuery.support = (function() {
width: 0,
height: 0,
border: 0,
margin: 0
margin: 0,
background: "none"
};
if ( body ) {
jQuery.extend( testElementStyle, {
position: "absolute",
left: -1000,
top: -1000
left: "-1000px",
top: "-1000px"
});
}
for ( i in testElementStyle ) {
@ -1404,7 +1414,7 @@ jQuery.boxModel = jQuery.support.boxModel;
var rbrace = /^(?:\{.*\}|\[.*\])$/,
rmultiDash = /([a-z])([A-Z])/g;
rmultiDash = /([A-Z])/g;
jQuery.extend({
cache: {},
@ -1436,7 +1446,9 @@ jQuery.extend({
return;
}
var internalKey = jQuery.expando, getByName = typeof name === "string", thisCache,
var thisCache, ret,
internalKey = jQuery.expando,
getByName = typeof name === "string",
// We have to handle DOM nodes and JS objects differently because IE6-7
// can't GC object references properly across the DOM-JS boundary
@ -1452,7 +1464,7 @@ jQuery.extend({
// Avoid doing any more work than we need to when trying to get data on an
// object that has no data at all
if ( (!id || (pvt && id && !cache[ id ][ internalKey ])) && getByName && data === undefined ) {
if ( (!id || (pvt && id && (cache[ id ] && !cache[ id ][ internalKey ]))) && getByName && data === undefined ) {
return;
}
@ -1511,10 +1523,24 @@ jQuery.extend({
return thisCache[ internalKey ] && thisCache[ internalKey ].events;
}
return getByName ?
// Check for both converted-to-camel and non-converted data property names
thisCache[ jQuery.camelCase( name ) ] || thisCache[ name ] :
thisCache;
// Check for both converted-to-camel and non-converted data property names
// If a data property was specified
if ( getByName ) {
// First Try to find as-is property data
ret = thisCache[ name ];
// Test for null|undefined property data
if ( ret == null ) {
// Try to find the camelCased property
ret = thisCache[ jQuery.camelCase( name ) ];
}
} else {
ret = thisCache;
}
return ret;
},
removeData: function( elem, name, pvt /* Internal Use Only */ ) {
@ -1522,7 +1548,12 @@ jQuery.extend({
return;
}
var internalKey = jQuery.expando, isNode = elem.nodeType,
var thisCache,
// Reference to internal data cache key
internalKey = jQuery.expando,
isNode = elem.nodeType,
// See jQuery.data for more information
cache = isNode ? jQuery.cache : elem,
@ -1537,9 +1568,16 @@ jQuery.extend({
}
if ( name ) {
var thisCache = pvt ? cache[ id ][ internalKey ] : cache[ id ];
thisCache = pvt ? cache[ id ][ internalKey ] : cache[ id ];
if ( thisCache ) {
// Support interoperable removal of hyphenated or camelcased keys
if ( !thisCache[ name ] ) {
name = jQuery.camelCase( name );
}
delete thisCache[ name ];
// If there is no data left in the cache, we want to continue
@ -1566,7 +1604,8 @@ jQuery.extend({
// Browsers that fail expando deletion also refuse to delete expandos on
// the window, but it will allow it on all other JS objects; other browsers
// don't care
if ( jQuery.support.deleteExpando || cache != window ) {
// Ensure that `cache` is not a window object #10080
if ( jQuery.support.deleteExpando || !cache.setInterval ) {
delete cache[ id ];
} else {
cache[ id ] = null;
@ -1690,7 +1729,8 @@ function dataAttr( elem, key, data ) {
// If nothing was found internally, try to fetch any
// data from the HTML5 data-* attribute
if ( data === undefined && elem.nodeType === 1 ) {
var name = "data-" + key.replace( rmultiDash, "$1-$2" ).toLowerCase();
var name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase();
data = elem.getAttribute( name );
@ -1910,8 +1950,7 @@ var rclass = /[\n\t\r]/g,
rfocusable = /^(?:button|input|object|select|textarea)$/i,
rclickable = /^a(?:rea)?$/i,
rboolean = /^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,
rinvalidChar = /\:|^on/,
formHook, boolHook;
nodeHook, boolHook;
jQuery.fn.extend({
attr: function( name, value ) {
@ -2049,7 +2088,7 @@ jQuery.fn.extend({
hasClass: function( selector ) {
var className = " " + selector + " ";
for ( var i = 0, l = this.length; i < l; i++ ) {
if ( (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) > -1 ) {
if ( this[i].nodeType === 1 && (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) > -1 ) {
return true;
}
}
@ -2229,14 +2268,11 @@ jQuery.extend({
if ( !hooks ) {
// Use boolHook for boolean attributes
if ( rboolean.test( name ) ) {
hooks = boolHook;
// Use formHook for forms and if the name contains certain characters
} else if ( formHook && name !== "className" &&
(jQuery.nodeName( elem, "form" ) || rinvalidChar.test( name )) ) {
hooks = formHook;
// Use nodeHook if available( IE6/7 )
} else if ( nodeHook ) {
hooks = nodeHook;
}
}
}
@ -2273,14 +2309,9 @@ jQuery.extend({
var propName;
if ( elem.nodeType === 1 ) {
name = jQuery.attrFix[ name ] || name;
if ( jQuery.support.getSetAttribute ) {
// Use removeAttribute in browsers that support it
elem.removeAttribute( name );
} else {
jQuery.attr( elem, name, "" );
elem.removeAttributeNode( elem.getAttributeNode( name ) );
}
jQuery.attr( elem, name, "" );
elem.removeAttribute( name );
// Set corresponding property to false for boolean attributes
if ( rboolean.test( name ) && (propName = jQuery.propFix[ name ] || name) in elem ) {
@ -2308,33 +2339,20 @@ jQuery.extend({
}
}
},
tabIndex: {
get: function( elem ) {
// elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set
// http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
var attributeNode = elem.getAttributeNode("tabIndex");
return attributeNode && attributeNode.specified ?
parseInt( attributeNode.value, 10 ) :
rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ?
0 :
undefined;
}
},
// Use the value property for back compat
// Use the formHook for button elements in IE6/7 (#1954)
// Use the nodeHook for button elements in IE6/7 (#1954)
value: {
get: function( elem, name ) {
if ( formHook && jQuery.nodeName( elem, "button" ) ) {
return formHook.get( elem, name );
if ( nodeHook && jQuery.nodeName( elem, "button" ) ) {
return nodeHook.get( elem, name );
}
return name in elem ?
elem.value :
null;
},
set: function( elem, value, name ) {
if ( formHook && jQuery.nodeName( elem, "button" ) ) {
return formHook.set( elem, value, name );
if ( nodeHook && jQuery.nodeName( elem, "button" ) ) {
return nodeHook.set( elem, value, name );
}
// Does not return so that setAttribute is also used
elem.value = value;
@ -2383,7 +2401,7 @@ jQuery.extend({
}
} else {
if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== undefined ) {
if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) {
return ret;
} else {
@ -2392,14 +2410,33 @@ jQuery.extend({
}
},
propHooks: {}
propHooks: {
tabIndex: {
get: function( elem ) {
// elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set
// http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
var attributeNode = elem.getAttributeNode("tabindex");
return attributeNode && attributeNode.specified ?
parseInt( attributeNode.value, 10 ) :
rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ?
0 :
undefined;
}
}
}
});
// Add the tabindex propHook to attrHooks for back-compat
jQuery.attrHooks.tabIndex = jQuery.propHooks.tabIndex;
// Hook for boolean attributes
boolHook = {
get: function( elem, name ) {
// Align boolean attributes with corresponding properties
return jQuery.prop( elem, name ) ?
// Fall back to attribute presence where some booleans are not supported
var attrNode;
return jQuery.prop( elem, name ) === true || ( attrNode = elem.getAttributeNode( name ) ) && attrNode.nodeValue !== false ?
name.toLowerCase() :
undefined;
},
@ -2425,12 +2462,10 @@ boolHook = {
// IE6/7 do not support getting/setting some attributes with get/setAttribute
if ( !jQuery.support.getSetAttribute ) {
// propFix is more comprehensive and contains all fixes
jQuery.attrFix = jQuery.propFix;
// Use this for any attribute on a form in IE6/7
formHook = jQuery.attrHooks.name = jQuery.attrHooks.title = jQuery.valHooks.button = {
// Use this for any attribute in IE6/7
// This fixes almost every IE6/7 issue
nodeHook = jQuery.valHooks.button = {
get: function( elem, name ) {
var ret;
ret = elem.getAttributeNode( name );
@ -2440,13 +2475,13 @@ if ( !jQuery.support.getSetAttribute ) {
undefined;
},
set: function( elem, value, name ) {
// Check form objects in IE (multiple bugs related)
// Only use nodeValue if the attribute node exists on the form
// Set the existing or create a new attribute node
var ret = elem.getAttributeNode( name );
if ( ret ) {
ret.nodeValue = value;
return value;
if ( !ret ) {
ret = document.createAttribute( name );
elem.setAttributeNode( ret );
}
return (ret.nodeValue = value + "");
}
};
@ -2505,6 +2540,7 @@ if ( !jQuery.support.optSelected ) {
parent.parentNode.selectedIndex;
}
}
return null;
}
});
}
@ -2980,7 +3016,7 @@ jQuery.event = {
return event.result;
},
props: "altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),
props: "altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode metaKey newValue offsetX offsetY pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),
fix: function( event ) {
if ( event[ jQuery.expando ] ) {
@ -3235,8 +3271,9 @@ if ( !jQuery.support.submitBubbles ) {
setup: function( data, namespaces ) {
if ( !jQuery.nodeName( this, "form" ) ) {
jQuery.event.add(this, "click.specialSubmit", function( e ) {
// Avoid triggering error on non-existent type attribute in IE VML (#7071)
var elem = e.target,
type = elem.type;
type = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? elem.type : "";
if ( (type === "submit" || type === "image") && jQuery( elem ).closest("form").length ) {
trigger( "submit", this, arguments );
@ -3245,7 +3282,7 @@ if ( !jQuery.support.submitBubbles ) {
jQuery.event.add(this, "keypress.specialSubmit", function( e ) {
var elem = e.target,
type = elem.type;
type = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? elem.type : "";
if ( (type === "text" || type === "password") && jQuery( elem ).closest("form").length && e.keyCode === 13 ) {
trigger( "submit", this, arguments );
@ -3270,7 +3307,8 @@ if ( !jQuery.support.changeBubbles ) {
var changeFilters,
getVal = function( elem ) {
var type = elem.type, val = elem.value;
var type = jQuery.nodeName( elem, "input" ) ? elem.type : "",
val = elem.value;
if ( type === "radio" || type === "checkbox" ) {
val = elem.checked;
@ -5295,12 +5333,17 @@ jQuery.fn.extend({
// Determine the position of an element within
// the matched set of elements
index: function( elem ) {
if ( !elem || typeof elem === "string" ) {
return jQuery.inArray( this[0],
// If it receives a string, the selector is used
// If it receives nothing, the siblings are used
elem ? jQuery( elem ) : this.parent().children() );
// No argument, return index in parent
if ( !elem ) {
return ( this[0] && this[0].parentNode ) ? this.prevAll().length : -1;
}
// index in selector
if ( typeof elem === "string" ) {
return jQuery.inArray( this[0], jQuery( elem ) );
}
// Locate the position of the desired element
return jQuery.inArray(
// If it receives a jQuery object, the first element is used
@ -6048,7 +6091,10 @@ jQuery.extend({
// with an element if you are cloning the body and one of the
// elements on the page has a name or id of "length"
for ( i = 0; srcElements[i]; ++i ) {
cloneFixAttributes( srcElements[i], destElements[i] );
// Ensure that the destination node is not null; Fixes #9587
if ( destElements[i] ) {
cloneFixAttributes( srcElements[i], destElements[i] );
}
}
}
@ -6248,14 +6294,14 @@ function evalScript( i, elem ) {
var ralpha = /alpha\([^)]*\)/i,
ropacity = /opacity=([^)]*)/,
// fixed for IE9, see #8346
rupper = /([A-Z]|^ms)/g,
rnumpx = /^-?\d+(?:px)?$/i,
rnum = /^-?\d/,
rrelNum = /^[+\-]=/,
rrelNumFilter = /[^+\-\.\de]+/g,
rrelNum = /^([\-+])=([\-+.\de]+)/,
cssShow = { position: "absolute", visibility: "hidden", display: "block" },
cssWidth = [ "Left", "Right" ],
@ -6332,18 +6378,18 @@ jQuery.extend({
if ( value !== undefined ) {
type = typeof value;
// Make sure that NaN and null values aren't set. See: #7116
if ( type === "number" && isNaN( value ) || value == null ) {
return;
}
// convert relative number strings (+= or -=) to relative numbers. #7345
if ( type === "string" && rrelNum.test( value ) ) {
value = +value.replace( rrelNumFilter, "" ) + parseFloat( jQuery.css( elem, name ) );
if ( type === "string" && (ret = rrelNum.exec( value )) ) {
value = ( +( ret[1] + 1) * +ret[2] ) + parseFloat( jQuery.css( elem, name ) );
// Fixes bug #9237
type = "number";
}
// Make sure that NaN and null values aren't set. See: #7116
if ( value == null || type === "number" && isNaN( value ) ) {
return;
}
// If a number was passed in, add 'px' to the (except for certain CSS properties)
if ( type === "number" && !jQuery.cssNumber[ origName ] ) {
value += "px";
@ -6459,18 +6505,29 @@ if ( !jQuery.support.opacity ) {
set: function( elem, value ) {
var style = elem.style,
currentStyle = elem.currentStyle;
currentStyle = elem.currentStyle,
opacity = jQuery.isNaN( value ) ? "" : "alpha(opacity=" + value * 100 + ")",
filter = currentStyle && currentStyle.filter || style.filter || "";
// IE has trouble with opacity if it does not have layout
// Force it by setting the zoom level
style.zoom = 1;
// Set the alpha filter to set the opacity
var opacity = jQuery.isNaN( value ) ?
"" :
"alpha(opacity=" + value * 100 + ")",
filter = currentStyle && currentStyle.filter || style.filter || "";
// if setting opacity to 1, and no other filters exist - attempt to remove filter attribute #6652
if ( value >= 1 && jQuery.trim( filter.replace( ralpha, "" ) ) === "" ) {
// Setting style.filter to null, "" & " " still leave "filter:" in the cssText
// if "filter:" is present at all, clearType is disabled, we want to avoid this
// style.removeAttribute is IE Only, but so apparently is this code path...
style.removeAttribute( "filter" );
// if there there is no filter style applied in a css rule, we are done
if ( currentStyle && !currentStyle.filter ) {
return;
}
}
// otherwise, set new filter values
style.filter = ralpha.test( filter ) ?
filter.replace( ralpha, opacity ) :
filter + " " + opacity;
@ -6625,9 +6682,9 @@ var r20 = /%20/g,
rCRLF = /\r?\n/g,
rhash = /#.*$/,
rheaders = /^(.*?):[ \t]*([^\r\n]*)\r?$/mg, // IE leaves an \r character at EOL
rinput = /^(?:color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,
rinput = /^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,
// #7653, #8125, #8152: local protocol detection
rlocalProtocol = /^(?:about|app|app\-storage|.+\-extension|file|widget):$/,
rlocalProtocol = /^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,
rnoContent = /^(?:GET|HEAD)$/,
rprotocol = /^\/\//,
rquery = /\?/,
@ -6662,7 +6719,10 @@ var r20 = /%20/g,
ajaxLocation,
// Document location segments
ajaxLocParts;
ajaxLocParts,
// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression
allTypes = ["*/"] + ["*"];
// #8138, IE may throw an exception when accessing
// a field from window.location if document.domain has been set
@ -6755,6 +6815,22 @@ function inspectPrefiltersOrTransports( structure, options, originalOptions, jqX
return selection;
}
// A special extend for ajax options
// that takes "flat" options (not to be deep extended)
// Fixes #9887
function ajaxExtend( target, src ) {
var key, deep,
flatOptions = jQuery.ajaxSettings.flatOptions || {};
for( key in src ) {
if ( src[ key ] !== undefined ) {
( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];
}
}
if ( deep ) {
jQuery.extend( true, target, deep );
}
}
jQuery.fn.extend({
load: function( url, params, callback ) {
if ( typeof url !== "string" && _load ) {
@ -6898,23 +6974,16 @@ jQuery.extend({
// Creates a full fledged settings object into target
// with both ajaxSettings and settings fields.
// If target is omitted, writes into ajaxSettings.
ajaxSetup: function ( target, settings ) {
if ( !settings ) {
// Only one parameter, we extend ajaxSettings
settings = target;
target = jQuery.extend( true, jQuery.ajaxSettings, settings );
ajaxSetup: function( target, settings ) {
if ( settings ) {
// Building a settings object
ajaxExtend( target, jQuery.ajaxSettings );
} else {
// target was provided, we extend into it
jQuery.extend( true, target, jQuery.ajaxSettings, settings );
}
// Flatten fields we don't want deep extended
for( var field in { context: 1, url: 1 } ) {
if ( field in settings ) {
target[ field ] = settings[ field ];
} else if( field in jQuery.ajaxSettings ) {
target[ field ] = jQuery.ajaxSettings[ field ];
}
// Extending ajaxSettings
settings = target;
target = jQuery.ajaxSettings;
}
ajaxExtend( target, settings );
return target;
},
@ -6942,7 +7011,7 @@ jQuery.extend({
html: "text/html",
text: "text/plain",
json: "application/json, text/javascript",
"*": "*/*"
"*": allTypes
},
contents: {
@ -6972,6 +7041,15 @@ jQuery.extend({
// Parse text as xml
"text xml": jQuery.parseXML
},
// For options that shouldn't be deep extended:
// you can add your own custom options here if
// and when you create one that shouldn't be
// deep extended (see ajaxExtend)
flatOptions: {
context: true,
url: true
}
},
@ -7082,7 +7160,7 @@ jQuery.extend({
// Callback for when everything is done
// It is defined here because jslint complains if it is declared
// at the end of the function (which would be more logical and readable)
function done( status, statusText, responses, headers ) {
function done( status, nativeStatusText, responses, headers ) {
// Called once
if ( state === 2 ) {
@ -7105,11 +7183,12 @@ jQuery.extend({
responseHeadersString = headers || "";
// Set readyState
jqXHR.readyState = status ? 4 : 0;
jqXHR.readyState = status > 0 ? 4 : 0;
var isSuccess,
success,
error,
statusText = nativeStatusText,
response = responses ? ajaxHandleResponses( s, jqXHR, responses ) : undefined,
lastModified,
etag;
@ -7161,7 +7240,7 @@ jQuery.extend({
// Set data for the fake xhr object
jqXHR.status = status;
jqXHR.statusText = statusText;
jqXHR.statusText = "" + ( nativeStatusText || statusText );
// Success/Error
if ( isSuccess ) {
@ -7183,7 +7262,7 @@ jQuery.extend({
completeDeferred.resolveWith( callbackContext, [ jqXHR, statusText ] );
if ( fireGlobals ) {
globalEventContext.trigger( "ajaxComplete", [ jqXHR, s] );
globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] );
// Handle the global AJAX counter
if ( !( --jQuery.active ) ) {
jQuery.event.trigger( "ajaxStop" );
@ -7264,6 +7343,8 @@ jQuery.extend({
// If data is available, append data to url
if ( s.data ) {
s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.data;
// #9682: remove data so that it's not used in an eventual retry
delete s.data;
}
// Get ifModifiedKey before adding the anti-cache parameter
@ -7301,7 +7382,7 @@ jQuery.extend({
jqXHR.setRequestHeader(
"Accept",
s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[0] ] ?
s.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== "*" ? ", */*; q=0.01" : "" ) :
s.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) :
s.accepts[ "*" ]
);
@ -7347,7 +7428,7 @@ jQuery.extend({
transport.send( requestHeaders, done );
} catch (e) {
// Propagate exception as error if not done
if ( status < 2 ) {
if ( state < 2 ) {
done( -1, e );
// Simply rethrow otherwise
} else {
@ -7995,10 +8076,7 @@ var elemdisplay = {},
// opacity animations
[ "opacity" ]
],
fxNow,
requestAnimationFrame = window.webkitRequestAnimationFrame ||
window.mozRequestAnimationFrame ||
window.oRequestAnimationFrame;
fxNow;
jQuery.fn.extend({
show: function( speed, easing, callback ) {
@ -8374,8 +8452,7 @@ jQuery.fx.prototype = {
// Start an animation from one number to another
custom: function( from, to, unit ) {
var self = this,
fx = jQuery.fx,
raf;
fx = jQuery.fx;
this.startTime = fxNow || createFxNow();
this.start = from;
@ -8391,20 +8468,7 @@ jQuery.fx.prototype = {
t.elem = this.elem;
if ( t() && jQuery.timers.push(t) && !timerId ) {
// Use requestAnimationFrame instead of setInterval if available
if ( requestAnimationFrame ) {
timerId = true;
raf = function() {
// When timerId gets set to null at any point, this stops
if ( timerId ) {
requestAnimationFrame( raf );
fx.tick();
}
};
requestAnimationFrame( raf );
} else {
timerId = setInterval( fx.tick, fx.interval );
}
timerId = setInterval( fx.tick, fx.interval );
}
},
@ -8947,9 +9011,10 @@ jQuery.each([ "Height", "Width" ], function( i, name ) {
if ( jQuery.isWindow( elem ) ) {
// Everyone else use document.documentElement or document.body depending on Quirks vs Standards mode
// 3rd condition allows Nokia support, as it supports the docElem prop but not CSS1Compat
var docElemProp = elem.document.documentElement[ "client" + name ];
var docElemProp = elem.document.documentElement[ "client" + name ],
body = elem.document.body;
return elem.document.compatMode === "CSS1Compat" && docElemProp ||
elem.document.body[ "client" + name ] || docElemProp;
body && body[ "client" + name ] || docElemProp;
// Get document width or height
} else if ( elem.nodeType === 9 ) {

View File

@ -334,7 +334,7 @@ var py = {};
},
number: function (str, index) {
var character = str[index];
if (!NUMBER.test(character)) {
if (!(character == '.' || NUMBER.test(character))) {
this.tokens.push(create(symbols['(number)'], {
value: parseFloat(this.builder(true).join(''))
}));

View File

@ -1,248 +0,0 @@
/** Font Family and Sizes */
#qunit-tests, #qunit-header, #qunit-banner, #qunit-testrunner-toolbar, #qunit-userAgent, #qunit-testresult {
font-family: "Helvetica Neue Light", "HelveticaNeue-Light", "Helvetica Neue", Calibri, Helvetica, Arial;
}
#qunit-testrunner-toolbar, #qunit-userAgent, #qunit-testresult, #qunit-tests li {
font-size: small;
}
#qunit-tests {
font-size: smaller;
}
/** Resets */
#qunit-tests, #qunit-tests ol, #qunit-header, #qunit-banner, #qunit-userAgent, #qunit-testresult {
margin: 0;
padding: 0;
}
/** Header */
#qunit-header {
padding: 0.5em 0 0.5em 1em;
color: #8699a4;
background-color: #0d3349;
font-size: 1.5em;
line-height: 1em;
font-weight: normal;
border-radius: 15px 15px 0 0;
-moz-border-radius: 15px 15px 0 0;
-webkit-border-top-right-radius: 15px;
-webkit-border-top-left-radius: 15px;
}
#qunit-header a {
text-decoration: none;
color: #c2ccd1;
}
#qunit-header a:hover,
#qunit-header a:focus {
color: #fff;
}
#qunit-banner {
height: 5px;
}
#qunit-testrunner-toolbar {
padding: 0.5em 0 0.5em 2em;
color: #5E740B;
background-color: #eee;
}
#qunit-userAgent {
padding: 0.5em 0 0.5em 2.5em;
background-color: #2b81af;
color: #fff;
text-shadow: rgba(0, 0, 0, 0.5) 2px 2px 1px;
}
/** Tests: Pass/Fail */
#qunit-tests {
list-style-position: inside;
}
#qunit-tests li {
padding: 0.4em 0.5em 0.4em 2.5em;
border-bottom: 1px solid #fff;
list-style-position: inside;
}
#qunit-tests.hidepass li.pass, #qunit-tests.hidepass li.running {
display: none;
}
#qunit-tests li strong {
cursor: pointer;
}
#qunit-tests li a {
padding: 0.5em;
color: #c2ccd1;
text-decoration: none;
}
#qunit-tests li a:hover,
#qunit-tests li a:focus {
color: #000;
}
#qunit-tests ol {
margin-top: 0.5em;
padding: 0.5em;
background-color: #fff;
border-radius: 15px;
-moz-border-radius: 15px;
-webkit-border-radius: 15px;
box-shadow: inset 0px 2px 13px #999;
-moz-box-shadow: inset 0px 2px 13px #999;
-webkit-box-shadow: inset 0px 2px 13px #999;
}
#qunit-tests table {
border-collapse: collapse;
margin-top: .2em;
}
#qunit-tests th {
text-align: right;
vertical-align: top;
padding: 0 .5em 0 0;
}
#qunit-tests td {
vertical-align: top;
}
#qunit-tests pre {
margin: 0;
white-space: pre-wrap;
word-wrap: break-word;
}
#qunit-tests del {
background-color: #e0f2be;
color: #374e0c;
text-decoration: none;
}
#qunit-tests ins {
background-color: #ffcaca;
color: #500;
text-decoration: none;
}
/*** Test Counts */
#qunit-tests b.counts {
color: black;
}
#qunit-tests b.passed {
color: #5E740B;
}
#qunit-tests b.failed {
color: #710909;
}
#qunit-tests li li {
margin: 0.5em;
padding: 0.4em 0.5em 0.4em 0.5em;
background-color: #fff;
border-bottom: none;
list-style-position: inside;
}
/*** Passing Styles */
#qunit-tests li li.pass {
color: #5E740B;
background-color: #fff;
border-left: 26px solid #C6E746;
}
#qunit-tests .pass {
color: #528CE0;
background-color: #D2E0E6;
}
#qunit-tests .pass .test-name {
color: #366097;
}
#qunit-tests .pass .test-actual,
#qunit-tests .pass .test-expected {
color: #999999;
}
#qunit-banner.qunit-pass {
background-color: #C6E746;
}
/*** Failing Styles */
#qunit-tests li li.fail {
color: #710909;
background-color: #fff;
border-left: 26px solid #EE5757;
}
#qunit-tests > li:last-child {
border-radius: 0 0 15px 15px;
-moz-border-radius: 0 0 15px 15px;
-webkit-border-bottom-right-radius: 15px;
-webkit-border-bottom-left-radius: 15px;
}
#qunit-tests .fail {
color: #000000;
background-color: #EE5757;
}
#qunit-tests .fail .test-name,
#qunit-tests .fail .module-name {
color: #000000;
}
#qunit-tests .fail .test-actual {
color: #EE5757;
}
#qunit-tests .fail .test-expected {
color: green;
}
#qunit-banner.qunit-fail {
background-color: #EE5757;
}
/** Result */
#qunit-testresult {
padding: 0.5em 0.5em 0.5em 2.5em;
color: #2b81af;
background-color: #D2E0E6;
border-bottom: 1px solid white;
}
/** Fixture */
#qunit-fixture {
position: absolute;
top: -10000px;
left: -10000px;
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,226 @@
/**
* QUnit v1.2.0 - A JavaScript Unit Testing Framework
*
* http://docs.jquery.com/QUnit
*
* Copyright (c) 2011 John Resig, Jörn Zaefferer
* Dual licensed under the MIT (MIT-LICENSE.txt)
* or GPL (GPL-LICENSE.txt) licenses.
*/
/** Font Family and Sizes */
#qunit-tests, #qunit-header, #qunit-banner, #qunit-testrunner-toolbar, #qunit-userAgent, #qunit-testresult {
font-family: "Helvetica Neue Light", "HelveticaNeue-Light", "Helvetica Neue", Calibri, Helvetica, Arial, sans-serif;
}
#qunit-testrunner-toolbar, #qunit-userAgent, #qunit-testresult, #qunit-tests li { font-size: small; }
#qunit-tests { font-size: smaller; }
/** Resets */
#qunit-tests, #qunit-tests ol, #qunit-header, #qunit-banner, #qunit-userAgent, #qunit-testresult {
margin: 0;
padding: 0;
}
/** Header */
#qunit-header {
padding: 0.5em 0 0.5em 1em;
color: #8699a4;
background-color: #0d3349;
font-size: 1.5em;
line-height: 1em;
font-weight: normal;
border-radius: 15px 15px 0 0;
-moz-border-radius: 15px 15px 0 0;
-webkit-border-top-right-radius: 15px;
-webkit-border-top-left-radius: 15px;
}
#qunit-header a {
text-decoration: none;
color: #c2ccd1;
}
#qunit-header a:hover,
#qunit-header a:focus {
color: #fff;
}
#qunit-banner {
height: 5px;
}
#qunit-testrunner-toolbar {
padding: 0.5em 0 0.5em 2em;
color: #5E740B;
background-color: #eee;
}
#qunit-userAgent {
padding: 0.5em 0 0.5em 2.5em;
background-color: #2b81af;
color: #fff;
text-shadow: rgba(0, 0, 0, 0.5) 2px 2px 1px;
}
/** Tests: Pass/Fail */
#qunit-tests {
list-style-position: inside;
}
#qunit-tests li {
padding: 0.4em 0.5em 0.4em 2.5em;
border-bottom: 1px solid #fff;
list-style-position: inside;
}
#qunit-tests.hidepass li.pass, #qunit-tests.hidepass li.running {
display: none;
}
#qunit-tests li strong {
cursor: pointer;
}
#qunit-tests li a {
padding: 0.5em;
color: #c2ccd1;
text-decoration: none;
}
#qunit-tests li a:hover,
#qunit-tests li a:focus {
color: #000;
}
#qunit-tests ol {
margin-top: 0.5em;
padding: 0.5em;
background-color: #fff;
border-radius: 15px;
-moz-border-radius: 15px;
-webkit-border-radius: 15px;
box-shadow: inset 0px 2px 13px #999;
-moz-box-shadow: inset 0px 2px 13px #999;
-webkit-box-shadow: inset 0px 2px 13px #999;
}
#qunit-tests table {
border-collapse: collapse;
margin-top: .2em;
}
#qunit-tests th {
text-align: right;
vertical-align: top;
padding: 0 .5em 0 0;
}
#qunit-tests td {
vertical-align: top;
}
#qunit-tests pre {
margin: 0;
white-space: pre-wrap;
word-wrap: break-word;
}
#qunit-tests del {
background-color: #e0f2be;
color: #374e0c;
text-decoration: none;
}
#qunit-tests ins {
background-color: #ffcaca;
color: #500;
text-decoration: none;
}
/*** Test Counts */
#qunit-tests b.counts { color: black; }
#qunit-tests b.passed { color: #5E740B; }
#qunit-tests b.failed { color: #710909; }
#qunit-tests li li {
margin: 0.5em;
padding: 0.4em 0.5em 0.4em 0.5em;
background-color: #fff;
border-bottom: none;
list-style-position: inside;
}
/*** Passing Styles */
#qunit-tests li li.pass {
color: #5E740B;
background-color: #fff;
border-left: 26px solid #C6E746;
}
#qunit-tests .pass { color: #528CE0; background-color: #D2E0E6; }
#qunit-tests .pass .test-name { color: #366097; }
#qunit-tests .pass .test-actual,
#qunit-tests .pass .test-expected { color: #999999; }
#qunit-banner.qunit-pass { background-color: #C6E746; }
/*** Failing Styles */
#qunit-tests li li.fail {
color: #710909;
background-color: #fff;
border-left: 26px solid #EE5757;
white-space: pre;
}
#qunit-tests > li:last-child {
border-radius: 0 0 15px 15px;
-moz-border-radius: 0 0 15px 15px;
-webkit-border-bottom-right-radius: 15px;
-webkit-border-bottom-left-radius: 15px;
}
#qunit-tests .fail { color: #000000; background-color: #EE5757; }
#qunit-tests .fail .test-name,
#qunit-tests .fail .module-name { color: #000000; }
#qunit-tests .fail .test-actual { color: #EE5757; }
#qunit-tests .fail .test-expected { color: green; }
#qunit-banner.qunit-fail { background-color: #EE5757; }
/** Result */
#qunit-testresult {
padding: 0.5em 0.5em 0.5em 2.5em;
color: #2b81af;
background-color: #D2E0E6;
border-bottom: 1px solid white;
}
/** Fixture */
#qunit-fixture {
position: absolute;
top: -10000px;
left: -10000px;
}

File diff suppressed because it is too large Load Diff

View File

@ -373,6 +373,12 @@ QWeb2.Engine = (function() {
if (!this.jQuery) {
return this.tools.exception("Can't extend template " + template + " without jQuery");
}
var template_dest = this.templates[template],
msie_trololo = false;
if (template_dest.xml !== undefined) {
template_dest = this.jQuery(template_dest.xml);
msie_trololo = true;
}
for (var i = 0, ilen = extend_node.childNodes.length; i < ilen; i++) {
var child = extend_node.childNodes[i];
if (child.nodeType === 1) {
@ -382,7 +388,7 @@ QWeb2.Engine = (function() {
target,
error_msg = "Error while extending template '" + template;
if (jquery) {
target = this.jQuery(jquery, this.templates[template]);
target = this.jQuery(jquery, template_dest);
} else if (xpath) {
// NOTE: due to the XPath implementation, extending a template will only work once
// when using XPath because XPathResult won't match objects with other constructor than 'Element'
@ -415,6 +421,9 @@ QWeb2.Engine = (function() {
}
}
}
if (msie_trololo) {
this.templates[template] = template_dest[0];
}
}
});
return Engine;

File diff suppressed because it is too large Load Diff

View File

@ -27,7 +27,7 @@
.openerp .oe-import fieldset.oe-closed table {
display: none;
}
.openerp .separator.horizontal {
.openerp .oe-import .separator.horizontal {
font-weight: bold;
border-bottom-width: 1px;
margin: 6px 4px 6px 1px;

View File

Before

Width:  |  Height:  |  Size: 918 B

After

Width:  |  Height:  |  Size: 918 B

View File

Before

Width:  |  Height:  |  Size: 882 B

After

Width:  |  Height:  |  Size: 882 B

View File

Before

Width:  |  Height:  |  Size: 692 B

After

Width:  |  Height:  |  Size: 692 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 379 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 498 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 189 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 98 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 129 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

@ -59,7 +59,7 @@ openerp.web = function(instance) {
openerp.web.formats(instance);
openerp.web.chrome(instance);
openerp.web.data(instance);
var files = ["views","search","list","form","list_editable","web_mobile","view_tree","data_export","data_import","view_editor"];
var files = ["views","search","list","form", "page","list_editable","web_mobile","view_tree","data_export","data_import","view_editor"];
for(var i=0; i<files.length; i++) {
if(openerp.web[files[i]]) {
openerp.web[files[i]](instance);

View File

@ -2,7 +2,8 @@
* OpenERP Web chrome
*---------------------------------------------------------*/
openerp.web.chrome = function(openerp) {
var QWeb = openerp.web.qweb;
var QWeb = openerp.web.qweb,
_t = openerp.web._t;
openerp.web.Notification = openerp.web.Widget.extend(/** @lends openerp.web.Notification# */{
template: 'Notification',
@ -30,8 +31,6 @@ openerp.web.Notification = openerp.web.Widget.extend(/** @lends openerp.web.Not
this.$element.notify('create', 'oe_notification_alert', {
title: title,
text: text
}, {
expires: false
});
}
@ -52,15 +51,19 @@ openerp.web.Dialog = openerp.web.OldWidget.extend(/** @lends openerp.web.Dialog#
this._super(parent);
this.dialog_options = {
modal: true,
width: 'auto',
destroy_on_close: true,
width: $(window).width() * (($(window).width() > 1024) ? 0.5 : 0.75),
min_width: 0,
max_width: '100%',
max_width: '95%',
height: 'auto',
min_height: 0,
max_height: '100%',
max_height: '95%',
autoOpen: false,
position: [false, 50],
autoResize : 'auto',
buttons: {},
beforeClose: function () { self.on_close(); }
beforeClose: function () { self.on_close(); },
resizeStop: this.on_resized
};
for (var f in this) {
if (f.substr(0, 10) == 'on_button_') {
@ -78,7 +81,7 @@ openerp.web.Dialog = openerp.web.OldWidget.extend(/** @lends openerp.web.Dialog#
options.max_width = this.get_width(options.max_width || this.dialog_options.max_width);
options.height = this.get_height(options.height || this.dialog_options.height);
options.min_height = this.get_height(options.min_height || this.dialog_options.min_height);
options.max_height = this.get_height(options.max_height || this.dialog_options.max_width);
options.max_height = this.get_height(options.max_height || this.dialog_options.max_height);
if (options.width !== 'auto') {
if (options.width > options.max_width) options.width = options.max_width;
@ -109,7 +112,7 @@ openerp.web.Dialog = openerp.web.OldWidget.extend(/** @lends openerp.web.Dialog#
}
},
start: function () {
this.$dialog = $(this.$element).dialog(this.dialog_options);
this.$element.dialog(this.dialog_options);
this._super();
return this;
},
@ -119,19 +122,26 @@ openerp.web.Dialog = openerp.web.OldWidget.extend(/** @lends openerp.web.Dialog#
this.$element.html(this.render());
}
this.set_options(dialog_options);
this.$dialog.dialog(this.dialog_options).dialog('open');
this.$element.dialog(this.dialog_options).dialog('open');
return this;
},
close: function() {
// Closes the dialog but leave it in a state where it could be opened again.
this.$dialog.dialog('close');
this.$element.dialog('close');
},
on_close: function() {
if (this.dialog_options.destroy_on_close) {
this.$element.dialog('destroy');
}
},
on_resized: function() {
if (openerp.connection.debug) {
console.log("Dialog resized to %d x %d", this.$element.width(), this.$element.height());
}
},
stop: function () {
// Destroy widget
this.close();
this.$dialog.dialog('destroy');
this.$element.dialog('destroy');
this._super();
}
});
@ -159,26 +169,18 @@ openerp.web.CrashManager = openerp.web.CallbackEnabled.extend({
on_managed_error: function(error) {
$('<div>' + QWeb.render('DialogWarning', {error: error}) + '</div>').dialog({
title: "OpenERP " + _.str.capitalize(error.type),
buttons: {
Ok: function() {
$(this).dialog("close");
}
}
buttons: [
{text: _t("Ok"), click: function() { $(this).dialog("close"); }}
]
});
},
on_traceback: function(error) {
var dialog = new openerp.web.Dialog(this, {
title: "OpenERP " + _.str.capitalize(error.type),
autoOpen: true,
width: '90%',
height: '90%',
min_width: '800px',
min_height: '600px',
buttons: {
Ok: function() {
$(this).dialog("close");
}
}
buttons: [
{text: _t("Ok"), click: function() { $(this).dialog("close"); }}
]
}).start();
dialog.$element.html(QWeb.render('DialogTraceback', {error: error}));
}
@ -242,6 +244,7 @@ openerp.web.Database = openerp.web.Widget.extend(/** @lends openerp.web.Database
init: function(parent, element_id, option_id) {
this._super(parent, element_id);
this.$option_id = $('#' + option_id);
this.unblockUIFunction = $.unblockUI;
},
start: function() {
this._super();
@ -337,10 +340,26 @@ openerp.web.Database = openerp.web.Widget.extend(/** @lends openerp.web.Database
self.widget_parent.do_login(
info.db, admin.login, admin.password);
self.stop();
$.unblockUI();
self.unblockUI();
});
});
},
/**
* Blocks UI and replaces $.unblockUI by a noop to prevent third parties
* from unblocking the UI
*/
blockUI: function () {
$.blockUI();
$.unblockUI = function () {};
},
/**
* Reinstates $.unblockUI so third parties can play with blockUI, and
* unblocks the UI
*/
unblockUI: function () {
$.unblockUI = this.unblockUIFunction;
$.unblockUI();
},
/**
* Displays an error dialog resulting from the various RPC communications
* failing over themselves
@ -353,11 +372,9 @@ openerp.web.Database = openerp.web.Widget.extend(/** @lends openerp.web.Database
return $('<div>').dialog({
modal: true,
title: error.title,
buttons: {
Ok: function() {
$(this).dialog("close");
}
}
buttons: [
{text: _t("Ok"), click: function() { $(this).dialog("close"); }}
]
}).html(error.error);
},
do_create: function() {
@ -366,10 +383,10 @@ openerp.web.Database = openerp.web.Widget.extend(/** @lends openerp.web.Database
self.$option_id.find("form[name=create_db_form]").validate({
submitHandler: function (form) {
var fields = $(form).serializeArray();
$.blockUI();
self.blockUI();
self.rpc("/web/database/create", {'fields': fields}, function(result) {
if (result.error) {
$.unblockUI();
self.unblockUI();
self.display_error(result);
return;
}
@ -417,7 +434,7 @@ openerp.web.Database = openerp.web.Widget.extend(/** @lends openerp.web.Database
.html(QWeb.render("BackupDB", self))
.find("form[name=backup_db_form]").validate({
submitHandler: function (form) {
$.blockUI();
self.blockUI();
self.session.get_file({
form: form,
error: function (body) {
@ -427,7 +444,7 @@ openerp.web.Database = openerp.web.Widget.extend(/** @lends openerp.web.Database
error: error[1]
});
},
complete: $.unblockUI
complete: $.proxy(self, 'unblockUI')
});
}
});
@ -438,7 +455,7 @@ openerp.web.Database = openerp.web.Widget.extend(/** @lends openerp.web.Database
self.$option_id.find("form[name=restore_db_form]").validate({
submitHandler: function (form) {
$.blockUI();
self.blockUI();
$(form).ajaxSubmit({
url: '/web/database/restore',
type: 'POST',
@ -463,9 +480,7 @@ openerp.web.Database = openerp.web.Widget.extend(/** @lends openerp.web.Database
})
}
},
complete: function () {
$.unblockUI();
}
complete: $.proxy(self, 'unblockUI')
});
}
});
@ -524,15 +539,6 @@ openerp.web.Login = openerp.web.Widget.extend(/** @lends openerp.web.Login# */{
this.selected_password = localStorage.getItem('last_password_login_success');
}
}
var qs = jQuery.deparam(jQuery.param.querystring());
if (qs.db) {
this.selected_db = qs.db;
}
if (qs.login) {
this.selected_login = qs.login;
}
},
start: function() {
var self = this;
@ -572,7 +578,9 @@ openerp.web.Login = openerp.web.Widget.extend(/** @lends openerp.web.Login# */{
this.$element.closest(".openerp").removeClass("login-mode");
},
on_submit: function(ev) {
ev.preventDefault();
if(ev) {
ev.preventDefault();
}
var $e = this.$element;
var db = $e.find("form [name=db]").val();
var login = $e.find("form input[name=login]").val();
@ -589,7 +597,7 @@ openerp.web.Login = openerp.web.Widget.extend(/** @lends openerp.web.Login# */{
*/
do_login: function (db, login, password) {
var self = this;
this.session.session_login(db, login, password, function() {
this.session.session_authenticate(db, login, password).then(function() {
if(self.session.session_is_valid()) {
if (self.has_local_storage) {
if(self.remember_credentials) {
@ -621,9 +629,6 @@ openerp.web.Login = openerp.web.Widget.extend(/** @lends openerp.web.Login# */{
callback: continuation || function() {}
});
},
on_logout: function() {
this.session.logout();
}
});
openerp.web.Header = openerp.web.Widget.extend(/** @lends openerp.web.Header# */{
@ -650,7 +655,7 @@ openerp.web.Header = openerp.web.Widget.extend(/** @lends openerp.web.Header# *
self.$content.remove();
if (!self.session.uid)
return;
var func = new openerp.web.Model(self.session, "res.users").get_func("read");
var func = new openerp.web.Model("res.users").get_func("read");
return func(self.session.uid, ["name", "company_id"]).pipe(function(res) {
self.$content = $(QWeb.render("Header-content", {widget: self, user: res}));
self.$content.appendTo(self.$element);
@ -667,7 +672,7 @@ openerp.web.Header = openerp.web.Widget.extend(/** @lends openerp.web.Header# *
self.rpc("/web/webclient/version_info", {}).then(function(res) {
var $help = $(QWeb.render("About-Page", {version_info: res}));
$help.dialog({autoOpen: true,
modal: true, width: 960, title: "About"});
modal: true, width: 960, title: _t("About")});
});
},
shortcut_load :function(){
@ -746,26 +751,21 @@ openerp.web.Header = openerp.web.Widget.extend(/** @lends openerp.web.Header# *
});
});
this.dialog = new openerp.web.Dialog(this,{
modal: true,
title: 'Preferences',
width: 600,
height: 500,
buttons: {
"Change password": function(){
self.change_password();
},
Cancel: function(){
$(this).dialog('destroy');
},
Save: function(){
var inner_viewmanager = action_manager.inner_viewmanager;
inner_viewmanager.views[inner_viewmanager.active_view].controller.do_save()
.then(function() {
self.dialog.stop();
window.location.reload();
});
title: _t("Preferences"),
width: '700px',
buttons: [
{text: _t("Change password"), click: function(){ self.change_password(); }},
{text: _t("Cancel"), click: function(){ $(this).dialog('destroy'); }},
{text: _t("Save"), click: function(){
var inner_viewmanager = action_manager.inner_viewmanager;
inner_viewmanager.views[inner_viewmanager.active_view].controller.do_save()
.then(function() {
self.dialog.stop();
window.location.reload();
});
}
}
}
]
});
this.dialog.start().open();
action_manager.appendTo(this.dialog);
@ -774,11 +774,9 @@ openerp.web.Header = openerp.web.Widget.extend(/** @lends openerp.web.Header# *
change_password :function() {
var self = this;
this.dialog = new openerp.web.Dialog(this,{
modal : true,
title : 'Change Password',
width : 'auto',
height : 'auto'
this.dialog = new openerp.web.Dialog(this, {
title: _t("Change Password"),
width : 'auto'
});
this.dialog.start().open();
this.dialog.$element.html(QWeb.render("Change_Pwd", self));
@ -801,11 +799,9 @@ openerp.web.Header = openerp.web.Widget.extend(/** @lends openerp.web.Header# *
return $('<div>').dialog({
modal: true,
title: error.title,
buttons: {
Ok: function() {
$(this).dialog("close");
}
}
buttons: [
{text: _("Ok"), click: function() { $(this).dialog("close"); }}
]
}).html(error.error);
},
on_logout: function() {
@ -824,7 +820,7 @@ openerp.web.Menu = openerp.web.Widget.extend(/** @lends openerp.web.Menu# */{
init: function(parent, element_id, secondary_menu_id) {
this._super(parent, element_id);
this.secondary_menu_id = secondary_menu_id;
this.$secondary_menu = $("#" + secondary_menu_id).hide();
this.$secondary_menu = $("#" + secondary_menu_id);
this.menu = false;
this.folded = false;
if (window.localStorage) {
@ -836,7 +832,7 @@ openerp.web.Menu = openerp.web.Widget.extend(/** @lends openerp.web.Menu# */{
this.$secondary_menu.addClass(this.folded ? 'oe_folded' : 'oe_unfolded');
},
do_reload: function() {
this.rpc("/web/menu/load", {}, this.on_loaded);
return this.rpc("/web/menu/load", {}, this.on_loaded);
},
on_loaded: function(data) {
this.data = data;
@ -898,11 +894,13 @@ openerp.web.Menu = openerp.web.Widget.extend(/** @lends openerp.web.Menu# */{
sub_menu_visible = $sub_menu.is(':visible');
this.$secondary_menu.find('.oe_secondary_menu').hide();
$('.active', this.$element.add(this.$secondary_menu.show())).removeClass('active');
$('.active', this.$element.add(this.$secondary_menu)).removeClass('active');
$main_menu.add($clicked_menu).add($sub_menu).addClass('active');
if (!(this.folded && manual)) {
this.do_show_secondary($sub_menu, $main_menu);
} else {
this.do_show_secondary();
}
if ($main_menu != $clicked_menu) {
@ -928,8 +926,15 @@ openerp.web.Menu = openerp.web.Widget.extend(/** @lends openerp.web.Menu# */{
}
return false;
},
do_hide_secondary: function() {
this.$secondary_menu.hide();
},
do_show_secondary: function($sub_menu, $main_menu) {
var self = this;
this.$secondary_menu.show();
if (!arguments.length) {
return;
}
if (this.folded) {
var css = $main_menu.position(),
fold_width = this.$secondary_menu.width() + 2,
@ -944,13 +949,16 @@ openerp.web.Menu = openerp.web.Widget.extend(/** @lends openerp.web.Menu# */{
$sub_menu.css(css);
$sub_menu.mouseenter(function() {
clearTimeout($sub_menu.data('timeoutId'));
$sub_menu.data('timeoutId', null);
return false;
}).mouseleave(function(evt) {
var timeoutId = setTimeout(function() {
if (self.folded) {
$sub_menu.hide();
if (self.folded && $sub_menu.data('timeoutId')) {
$sub_menu.hide().unbind('mouseenter').unbind('mouseleave');
}
}, self.float_timeout);
$sub_menu.data('timeoutId', timeoutId);
return false;
});
}
$sub_menu.show();
@ -959,7 +967,10 @@ openerp.web.Menu = openerp.web.Widget.extend(/** @lends openerp.web.Menu# */{
var self = this;
if (data.action.length) {
var action = data.action[0][2];
action.from_menu = true;
self.on_action(action);
} else {
self.on_action({type: 'null_action'});
}
},
on_action: function(action) {
@ -974,49 +985,60 @@ openerp.web.WebClient = openerp.web.Widget.extend(/** @lends openerp.web.WebClie
* @param element_id
*/
init: function(element_id) {
var self = this;
this._super(null, element_id);
openerp.webclient = this;
var params = {};
if(jQuery.param != undefined && jQuery.deparam(jQuery.param.querystring()).kitten != undefined) {
this.$element.addClass("kitten-mode-activated");
}
this.$element.html(QWeb.render("Interface", params));
this.notification = new openerp.web.Notification(this);
this.loading = new openerp.web.Loading(this);
this.crashmanager = new openerp.web.CrashManager();
this.header = new openerp.web.Header(this);
this.login = new openerp.web.Login(this);
this.header.on_logout.add(this.login.on_logout);
this.header.on_logout.add(this.on_logout);
this.header.on_action.add(this.on_menu_action);
this.session.on_session_invalid.add(this.login.do_ask_login);
this.session.on_session_valid.add_last(this.header.do_update);
this.session.on_session_invalid.add_last(this.header.do_update);
this.session.on_session_valid.add_last(this.on_logged);
this.menu = new openerp.web.Menu(this, "oe_menu", "oe_secondary_menu");
this.menu.on_action.add(this.on_menu_action);
this.url_internal_hashchange = false;
this.url_external_hashchange = false;
jQuery(window).bind('hashchange', this.on_url_hashchange);
this._current_state = null;
},
start: function() {
this._super.apply(this, arguments);
this.notification.prependTo(this.$element);
this.loading.appendTo($('#oe_loading'));
this.header.appendTo($("#oe_header"));
this.session.start();
this.login.appendTo($('#oe_login'));
this.menu.start();
var self = this;
this.session.bind().then(function() {
var params = {};
if (jQuery.param != undefined && jQuery.deparam(jQuery.param.querystring()).kitten != undefined) {
this.$element.addClass("kitten-mode-activated");
this.$element.delegate('img.oe-record-edit-link-img', 'hover', function(e) {
self.$element.toggleClass('clark-gable');
});
}
self.$element.html(QWeb.render("Interface", params));
self.menu = new openerp.web.Menu(self, "oe_menu", "oe_secondary_menu");
self.menu.on_action.add(self.on_menu_action);
self.notification.prependTo(self.$element);
self.loading.appendTo($('#oe_loading'));
self.header.appendTo($("#oe_header"));
self.login.appendTo($('#oe_login'));
self.menu.start();
if(self.session.session_is_valid()) {
self.login.on_login_valid();
} else {
self.login.on_login_invalid();
}
});
this.session.ready.then(function() {
self.login.on_login_valid();
self.header.do_update();
self.menu.do_reload();
if(self.action_manager)
self.action_manager.stop();
self.action_manager = new openerp.web.ActionManager(self);
self.action_manager.appendTo($("#oe_app"));
self.bind_hashchange();
});
},
do_reload: function() {
this.session.session_restore();
this.menu.do_reload();
return this.session.session_init().pipe(_.bind(function() {this.menu.do_reload();}, this));
},
do_notify: function() {
var n = this.notification;
@ -1026,98 +1048,101 @@ openerp.web.WebClient = openerp.web.Widget.extend(/** @lends openerp.web.WebClie
var n = this.notification;
n.warn.apply(n, arguments);
},
on_logged: function() {
this.menu.do_reload();
on_logout: function() {
this.session.session_logout();
this.login.on_login_invalid();
this.header.do_update();
$(window).unbind('hashchange', this.on_hashchange);
this.do_push_state({});
if(this.action_manager)
this.action_manager.stop();
this.action_manager = new openerp.web.ActionManager(this);
this.action_manager.appendTo($("#oe_app"));
this.action_manager.do_url_set_hash.add_last(this.do_url_set_hash);
this.action_manager = null;
},
bind_hashchange: function() {
$(window).bind('hashchange', this.on_hashchange);
// if using saved actions, load the action and give it to action manager
var parameters = jQuery.deparam(jQuery.param.querystring());
if (parameters["s_action"] != undefined) {
var key = parseInt(parameters["s_action"], 10);
var self = this;
this.rpc("/web/session/get_session_action", {key:key}, function(action) {
self.action_manager.do_action(action);
});
} else if (openerp._modules_loaded) { // TODO: find better option than this
this.load_url_state()
var state = $.bbq.getState(true);
if (! _.isEmpty(state)) {
$(window).trigger('hashchange');
} else {
this.session.on_modules_loaded.add({
callback: $.proxy(this, 'load_url_state'),
unique: true,
position: 'last'
})
this.action_manager.do_action({type: 'ir.actions.client', tag: 'default_home'});
}
},
/**
* Loads state from URL if any, or checks if there is a home action and
* loads that, assuming we're at the index
*/
load_url_state: function () {
var self = this;
// TODO: add actual loading if there is url state to unpack, test on window.location.hash
// not logged in
if (!this.session.uid) { return; }
var ds = new openerp.web.DataSetSearch(this, 'res.users');
ds.read_ids([this.session.uid], ['action_id'], function (users) {
var home_action = users[0].action_id;
if (!home_action) {
self.default_home();
return;
}
self.execute_home_action(home_action[0], ds);
})
},
default_home: function () {
},
/**
* Bundles the execution of the home action
*
* @param {Number} action action id
* @param {openerp.web.DataSet} dataset action executor
*/
execute_home_action: function (action, dataset) {
var self = this;
this.rpc('/web/action/load', {
action_id: action,
context: dataset.get_context()
}, function (meh) {
var action = meh.result;
action.context = _.extend(action.context || {}, {
active_id: false,
active_ids: [false],
active_model: dataset.model
});
self.action_manager.do_action(action);
});
},
do_url_set_hash: function(url) {
if(!this.url_external_hashchange) {
this.url_internal_hashchange = true;
jQuery.bbq.pushState(url);
on_hashchange: function(event) {
var state = event.getState(true);
if (!_.isEqual(this._current_state, state)) {
this.action_manager.do_load_state(state);
}
this._current_state = state;
},
on_url_hashchange: function() {
if(this.url_internal_hashchange) {
this.url_internal_hashchange = false;
} else {
var url = jQuery.deparam.fragment();
this.url_external_hashchange = true;
this.action_manager.on_url_hashchange(url);
this.url_external_hashchange = false;
}
do_push_state: function(state) {
var url = '#' + $.param(state);
this._current_state = _.clone(state);
$.bbq.pushState(url);
},
on_menu_action: function(action) {
this.action_manager.do_action(action);
},
do_about: function() {
}
do_action: function(action) {
var self = this;
// TODO replace by client action menuclick
if(action.menu_id) {
this.do_reload().then(function () {
self.menu.on_menu_click(null, action.menu_id);
});
}
},
});
openerp.web.EmbeddedClient = openerp.web.Widget.extend({
template: 'EmptyComponent',
init: function(action_id, options) {
this._super();
// TODO take the xmlid of a action instead of its id
this.action_id = action_id;
this.options = options || {};
this.am = new openerp.web.ActionManager(this);
},
start: function() {
var self = this;
this.am.appendTo(this.$element.addClass('openerp'));
return this.rpc("/web/action/load", { action_id: this.action_id }, function(result) {
var action = result.result;
action.flags = _.extend({
//views_switcher : false,
search_view : false,
action_buttons : false,
sidebar : false
//pager : false
}, self.options, action.flags || {});
self.am.do_action(action);
});
},
});
openerp.web.embed = function (origin, dbname, login, key, action, options) {
$('head').append($('<link>', {
'rel': 'stylesheet',
'type': 'text/css',
'href': origin +'/web/webclient/css'
}));
var currentScript = document.currentScript;
if (!currentScript) {
var sc = document.getElementsByTagName('script');
currentScript = sc[sc.length-1];
}
openerp.connection.bind(origin).then(function () {
openerp.connection.session_authenticate(dbname, login, key, true).then(function () {
var client = new openerp.web.EmbeddedClient(action, options);
client.insertAfter(currentScript);
});
});
}
};
// vim:et fdc=0 fdl=0 foldnestmax=3 fdm=syntax:

View File

@ -254,14 +254,16 @@ openerp.web.Registry = openerp.web.Class.extend( /** @lends openerp.web.Registry
* Retrieves the object matching the provided key string.
*
* @param {String} key the key to fetch the object for
* @param {Boolean} [silent_error=false] returns undefined if the key or object is not found, rather than throwing an exception
* @returns {Class} the stored class, to initialize
*
* @throws {openerp.web.KeyNotFound} if the object was not in the mapping
* @throws {openerp.web.ObjectNotFound} if the object path was invalid
*/
get_object: function (key) {
get_object: function (key, silent_error) {
var path_string = this.map[key];
if (path_string === undefined) {
if (silent_error) { return void 'nooo'; }
throw new openerp.web.KeyNotFound(key);
}
@ -272,6 +274,7 @@ openerp.web.Registry = openerp.web.Class.extend( /** @lends openerp.web.Registry
object_match = object_match[path[i]];
if (object_match === undefined) {
if (silent_error) { return void 'noooooo'; }
throw new openerp.web.ObjectNotFound(path_string);
}
}
@ -350,12 +353,21 @@ openerp.web.Connection = openerp.web.CallbackEnabled.extend( /** @lends openerp.
* @param {String} [server] JSON-RPC endpoint hostname
* @param {String} [port] JSON-RPC endpoint port
*/
init: function(server, port) {
init: function() {
this._super();
this.server = (server == undefined) ? location.hostname : server;
this.port = (port == undefined) ? location.port : port;
this.rpc_mode = (server == location.hostname) ? "ajax" : "jsonp";
this.debug = (window.location.search.indexOf('?debug') !== -1);
this.server = null;
this.debug = ($.deparam($.param.querystring()).debug != undefined);
// TODO: session store in cookie should be optional
this.name = openerp._session_id;
this.qweb_mutex = new $.Mutex();
},
bind: function(origin) {
var window_origin = location.protocol+"//"+location.host;
this.origin = origin ? _.str.rtrim(origin,'/') : window_origin;
this.prefix = this.origin;
this.server = this.origin; // keep chs happy
openerp.web.qweb.default_dict['_s'] = this.origin;
this.rpc_function = (this.origin == window_origin) ? this.rpc_json : this.rpc_jsonp;
this.session_id = false;
this.uid = false;
this.username = false;
@ -366,14 +378,8 @@ openerp.web.Connection = openerp.web.CallbackEnabled.extend( /** @lends openerp.
this.context = {};
this.shortcuts = [];
this.active_id = null;
// TODO: session should have an optional name indicating that they'll
// be saved to (and revived from) cookies
this.name = 'session';
this.do_load_qweb(['/web/webclient/qweb']);
},
start: function() {
this.session_restore();
this.ready = $.Deferred();
return this.session_init();
},
/**
* Executes an RPC call, registering the provided callbacks.
@ -390,82 +396,137 @@ openerp.web.Connection = openerp.web.CallbackEnabled.extend( /** @lends openerp.
*/
rpc: function(url, params, success_callback, error_callback) {
var self = this;
// url can be an $.ajax option object
if (_.isString(url)) {
url = { url: url };
}
// Construct a JSON-RPC2 request, method is currently unused
params.session_id = this.session_id;
if (this.debug)
params.debug = 1;
// Call using the rpc_mode
var deferred = $.Deferred();
this.rpc_ajax(url, {
jsonrpc: "2.0",
method: "call",
var payload = {
jsonrpc: '2.0',
method: 'call',
params: params,
id: _.uniqueId('browser-client-')
}).then(function () {deferred.resolve.apply(deferred, arguments);},
function(error) {deferred.reject(error, $.Event());});
return deferred.fail(function() {
id: _.uniqueId('r')
};
var deferred = $.Deferred();
this.on_rpc_request();
this.rpc_function(url, payload).then(
function (response, textStatus, jqXHR) {
self.on_rpc_response();
if (!response.error) {
deferred.resolve(response["result"], textStatus, jqXHR);
} else if (response.error.data.type === "session_invalid") {
self.uid = false;
// TODO deprecate or use a deferred on login.do_ask_login()
self.on_session_invalid(function() {
self.rpc(url, payload.params,
function() { deferred.resolve.apply(deferred, arguments); },
function() { deferred.reject.apply(deferred, arguments); });
});
} else {
deferred.reject(response.error, $.Event());
}
},
function(jqXHR, textStatus, errorThrown) {
self.on_rpc_response();
var error = {
code: -32098,
message: "XmlHttpRequestError " + errorThrown,
data: {type: "xhr"+textStatus, debug: jqXHR.responseText, objects: [jqXHR, errorThrown] }
};
deferred.reject(error, $.Event());
});
// Allow deferred user to disable on_rpc_error in fail
deferred.fail(function() {
deferred.fail(function(error, event) {
if (!event.isDefaultPrevented()) {
self.on_rpc_error(error, event);
}
});
}).then(success_callback, error_callback).promise();
return deferred;
},
/**
* Raw JSON-RPC call
*
* @returns {jQuery.Deferred} ajax-webd deferred object
*/
rpc_ajax: function(url, payload) {
rpc_json: function(url, payload) {
var self = this;
this.on_rpc_request();
// url can be an $.ajax option object
if (_.isString(url)) {
url = {
url: url
}
}
var ajax = _.extend({
type: "POST",
url: url,
dataType: 'json',
contentType: 'application/json',
data: JSON.stringify(payload),
processData: false
processData: false,
}, url);
var deferred = $.Deferred();
$.ajax(ajax).done(function(response, textStatus, jqXHR) {
self.on_rpc_response();
if (!response.error) {
deferred.resolve(response["result"], textStatus, jqXHR);
return;
}
if (response.error.data.type !== "session_invalid") {
deferred.reject(response.error);
return;
}
self.uid = false;
self.on_session_invalid(function() {
self.rpc(url, payload.params,
function() {
deferred.resolve.apply(deferred, arguments);
},
function(error, event) {
event.preventDefault();
deferred.reject.apply(deferred, arguments);
});
});
}).fail(function(jqXHR, textStatus, errorThrown) {
self.on_rpc_response();
var error = {
code: -32098,
message: "XmlHttpRequestError " + errorThrown,
data: {type: "xhr"+textStatus, debug: jqXHR.responseText, objects: [jqXHR, errorThrown] }
if (this.synch)
ajax.async = false;
return $.ajax(ajax);
},
rpc_jsonp: function(url, payload) {
var self = this;
// extracted from payload to set on the url
var data = {
session_id: this.session_id,
id: payload.id,
};
url.url = this.get_url(url.url);
var ajax = _.extend({
type: "GET",
dataType: 'jsonp',
jsonp: 'jsonp',
cache: false,
data: data
}, url);
if (this.synch)
ajax.async = false;
var payload_str = JSON.stringify(payload);
var payload_url = $.param({r:payload_str});
if(payload_url.length < 2000) {
// Direct jsonp request
ajax.data.r = payload_str;
return $.ajax(ajax);
} else {
// Indirect jsonp request
var ifid = _.uniqueId('oe_rpc_iframe');
var display = options.openerp.debug ? 'block' : 'none';
var $iframe = $(_.str.sprintf("<iframe src='javascript:false;' name='%s' id='%s' style='display:%s'></iframe>", ifid, ifid, display));
var $form = $('<form>')
.attr('method', 'POST')
.attr('target', ifid)
.attr('enctype', "multipart/form-data")
.attr('action', ajax.url + '?' + $.param(data))
.append($('<input type="hidden" name="r" />').attr('value', payload_str))
.hide()
.appendTo($('body'));
var cleanUp = function() {
if ($iframe) {
$iframe.unbind("load").attr("src", "javascript:false;").remove();
}
$form.remove();
};
deferred.reject(error);
});
return deferred.promise();
var deferred = $.Deferred();
// the first bind is fired up when the iframe is added to the DOM
$iframe.bind('load', function() {
// the second bind is fired up when the result of the form submission is received
$iframe.unbind('load').bind('load', function() {
$.ajax(ajax).always(function() {
cleanUp();
}).then(
function() { deferred.resolve.apply(deferred, arguments); },
function() { deferred.reject.apply(deferred, arguments); }
);
});
// now that the iframe can receive data, we fill and submit the form
$form.submit();
});
// append the iframe to the DOM (will trigger the first load)
$form.after($iframe);
return deferred;
}
},
on_rpc_request: function() {
},
@ -474,76 +535,63 @@ openerp.web.Connection = openerp.web.CallbackEnabled.extend( /** @lends openerp.
on_rpc_error: function(error) {
},
/**
* The session is validated either by login or by restoration of a previous session
* Init a session, reloads from cookie, if it exists
*/
on_session_valid: function() {
if(!openerp._modules_loaded)
this.load_modules();
},
on_session_invalid: function(contination) {
},
session_is_valid: function() {
return this.uid;
},
session_login: function(db, login, password, success_callback) {
var self = this;
var params = { db: db, login: login, password: password };
return this.rpc("/web/session/login", params, function(result) {
_.extend(self, {
session_id: result.session_id,
uid: result.uid,
user_context: result.context,
db: result.db,
username: result.login
});
self.session_save();
self.on_session_valid();
return true;
}).then(success_callback);
},
login: function() { this.session_login.apply(this, arguments); },
/**
* Reloads uid and session_id from local storage, if they exist
*/
session_restore: function () {
session_init: function () {
var self = this;
// TODO: session store in cookie should be optional
this.session_id = this.get_cookie('session_id');
return this.rpc("/web/session/get_session_info", {}).then(function(result) {
return this.rpc("/web/session/get_session_info", {}).pipe(function(result) {
// If immediately follows a login (triggered by trying to restore
// an invalid session or no session at all), refresh session data
// (should not change, but just in case...) but should not call
// on_session_valid again as it triggers reloading the menu
var already_logged = self.uid;
// (should not change, but just in case...)
_.extend(self, {
uid: result.uid,
user_context: result.context,
db: result.db,
username: result.login
username: result.login,
uid: result.uid,
user_context: result.context
});
if (!already_logged) {
if (self.uid) {
self.on_session_valid();
} else {
self.on_session_invalid();
}
var deferred = self.do_load_qweb(['/web/webclient/qweb']);
if(self.session_is_valid()) {
return deferred.pipe(_.bind(function() { this.load_modules(); }, self));
}
}, function() {
self.on_session_invalid();
return deferred;
});
},
session_is_valid: function() {
return !!this.uid;
},
/**
* Saves the session id and uid locally
* The session is validated either by login or by restoration of a previous session
*/
session_save: function () {
this.set_cookie('session_id', this.session_id);
session_authenticate: function(db, login, password, volatile) {
var self = this;
var base_location = document.location.protocol + '//' + document.location.host;
var params = { db: db, login: login, password: password, base_location: base_location };
return this.rpc("/web/session/authenticate", params).pipe(function(result) {
_.extend(self, {
session_id: result.session_id,
db: result.db,
username: result.login,
uid: result.uid,
user_context: result.context
});
if (!volatile) {
self.set_cookie('session_id', self.session_id);
}
return self.load_modules();
});
},
logout: function() {
session_logout: function() {
this.set_cookie('session_id', '');
this.reload_client();
},
reload_client: function() {
window.location.reload();
},
/**
* Called when a rpc call fail due to an invalid session.
* By default, it's a noop
*/
on_session_invalid: function(retry_callback) {
},
/**
* Fetches a cookie stored by an openerp session
*
@ -585,23 +633,26 @@ openerp.web.Connection = openerp.web.CallbackEnabled.extend( /** @lends openerp.
*/
load_modules: function() {
var self = this;
this.rpc('/web/session/modules', {}, function(result) {
if(openerp._modules_loaded) {
return $.when();
}
return this.rpc('/web/session/modules', {}).pipe(function(result) {
self.module_list = result;
var lang = self.user_context.lang;
var params = { mods: ["web"].concat(result), lang: lang};
self.rpc('/web/webclient/translations',params).then(function(transs) {
openerp.web._t.database.set_bundle(transs);
var modules = self.module_list.join(',');
var file_list = ["/web/static/lib/datejs/globalization/" +
self.user_context.lang.replace("_", "-") + ".js"
];
self.rpc('/web/webclient/csslist', {"mods": modules}, self.do_load_css);
self.rpc('/web/webclient/jslist', {"mods": modules}, function(files) {
self.do_load_js(file_list.concat(files));
});
self.rpc('/web/webclient/qweblist', {"mods": modules}, self.do_load_qweb);
openerp._modules_loaded = true;
var modules = self.module_list.join(',');
return $.when(
self.rpc('/web/webclient/csslist', {mods: modules}, self.do_load_css),
self.rpc('/web/webclient/qweblist', {mods: modules}).pipe(self.do_load_qweb),
self.rpc('/web/webclient/translations', params).pipe(function(trans) {
openerp.web._t.database.set_bundle(trans);
var file_list = ["/web/static/lib/datejs/globalization/" + lang.replace("_", "-") + ".js"];
return self.rpc('/web/webclient/jslist', {mods: modules}).pipe(function(files) {
return self.do_load_js(file_list.concat(files));
});
})
).then(function() {
self.ready.resolve();
});
});
},
@ -609,7 +660,7 @@ openerp.web.Connection = openerp.web.CallbackEnabled.extend( /** @lends openerp.
var self = this;
_.each(files, function (file) {
$('head').append($('<link>', {
'href': file,
'href': self.get_url(file),
'rel': 'stylesheet',
'type': 'text/css'
}));
@ -617,28 +668,38 @@ openerp.web.Connection = openerp.web.CallbackEnabled.extend( /** @lends openerp.
},
do_load_js: function(files) {
var self = this;
var d = $.Deferred();
if(files.length != 0) {
var file = files.shift();
var tag = document.createElement('script');
tag.type = 'text/javascript';
tag.src = file;
tag.src = self.get_url(file);
tag.onload = tag.onreadystatechange = function() {
if ( (tag.readyState && tag.readyState != "loaded" && tag.readyState != "complete") || tag.onload_done )
return;
tag.onload_done = true;
self.do_load_js(files);
self.do_load_js(files).then(function () {
d.resolve();
});
};
var head = document.head || document.getElementsByTagName('head')[0];
head.appendChild(tag);
} else {
this.on_modules_loaded();
self.on_modules_loaded();
d.resolve();
}
return d;
},
do_load_qweb: function(files) {
var self = this;
_.each(files, function(file) {
openerp.web.qweb.add_template(file);
self.qweb_mutex.exec(function() {
return self.rpc('/web/proxy/load', {path: file}).pipe(function(xml) {
openerp.web.qweb.add_template(_.str.trim(xml));
});
});
});
return self.qweb_mutex.def;
},
on_modules_loaded: function() {
for(var j=0; j<this.module_list.length; j++) {
@ -653,6 +714,9 @@ openerp.web.Connection = openerp.web.CallbackEnabled.extend( /** @lends openerp.
}
}
},
get_url: function (file) {
return this.prefix + file;
},
/**
* Cooperative file download implementation, for ajaxy APIs.
*
@ -743,7 +807,16 @@ openerp.web.Connection = openerp.web.CallbackEnabled.extend( /** @lends openerp.
}
};
timer = setTimeout(waitLoop, CHECK_INTERVAL);
}
},
synchronized_mode: function(to_execute) {
var synch = this.synch;
this.synch = true;
try {
return to_execute();
} finally {
this.synch = synch;
}
},
});
/**
@ -985,6 +1058,7 @@ openerp.web.Widget = openerp.web.CallbackEnabled.extend(/** @lends openerp.web.W
}
return false;
},
rpc: function(url, data, success, error) {
var def = $.Deferred().then(success, error);
var self = this;
@ -1029,7 +1103,8 @@ openerp.web.TranslationDataBase = openerp.web.Class.extend(/** @lends openerp.we
set_bundle: function(translation_bundle) {
var self = this;
this.db = {};
var modules = _.keys(translation_bundle.modules).sort();
var modules = _.keys(translation_bundle.modules);
modules.sort();
if (_.include(modules, "web")) {
modules = ["web"].concat(_.without(modules, "web"));
}
@ -1066,6 +1141,7 @@ openerp.web.TranslationDataBase = openerp.web.Class.extend(/** @lends openerp.we
}
});
/** Configure blockui */
if ($.blockUI) {
$.blockUI.defaults.baseZ = 1100;
$.blockUI.defaults.message = '<img src="/web/static/src/img/throbber2.gif">';
@ -1073,11 +1149,26 @@ if ($.blockUI) {
/** Configure default qweb */
openerp.web._t = new openerp.web.TranslationDataBase().build_translation_function();
/**
* Lazy translation function, only performs the translation when actually
* printed (e.g. inserted into a template)
*
* Useful when defining translatable strings in code evaluated before the
* translation database is loaded, as class attributes or at the top-level of
* an OpenERP Web module
*
* @param {String} s string to translate
* @returns {Object} lazy translation object
*/
openerp.web._lt = function (s) {
return {toString: function () { return openerp.web._t(s); }}
};
openerp.web.qweb = new QWeb2.Engine();
openerp.web.qweb.debug = (window.location.search.indexOf('?debug') !== -1);
openerp.web.qweb.default_dict = {
'_' : _
}
'_' : _,
'_t' : openerp.web._t
};
openerp.web.qweb.format_text_node = function(s) {
// Note that 'this' is the Qweb Node of the text
var translation = this.node.parentNode.attributes['t-translation'];
@ -1092,8 +1183,62 @@ openerp.web.qweb.format_text_node = function(s) {
return tr === ts ? s : tr;
}
/** Jquery extentions */
$.Mutex = (function() {
function Mutex() {
this.def = $.Deferred().resolve();
};
Mutex.prototype.exec = function(action) {
var current = this.def;
var next = this.def = $.Deferred();
return current.pipe(function() {
return $.when(action()).always(function() {
next.resolve();
});
});
};
return Mutex;
})();
/** Setup default connection */
openerp.connection = new openerp.web.Connection();
openerp.web.qweb.default_dict['__debug__'] = openerp.connection.debug;
$.async_when = function() {
var async = false;
var def = $.Deferred();
$.when.apply($, arguments).then(function() {
var args = arguments;
var action = function() {
def.resolve.apply(def, args);
};
if (async)
action();
else
setTimeout(action, 0);
}, function() {
var args = arguments;
var action = function() {
def.reject.apply(def, args);
};
if (async)
action();
else
setTimeout(action, 0);
});
async = true;
return def;
};
// special tweak for the web client
var old_async_when = $.async_when;
$.async_when = function() {
if (openerp.connection.synch)
return $.when.apply(this, arguments);
else
return old_async_when.apply(this, arguments);
};
};

View File

@ -252,27 +252,42 @@ openerp.web.DataSet = openerp.web.Widget.extend( /** @lends openerp.web.DataSet
},
previous: function () {
this.index -= 1;
if (this.index < 0) {
if (!this.ids.length) {
this.index = null;
} else if (this.index < 0) {
this.index = this.ids.length - 1;
}
return this;
},
next: function () {
this.index += 1;
if (this.index >= this.ids.length) {
if (!this.ids.length) {
this.index = null;
} else if (this.index >= this.ids.length) {
this.index = 0;
}
return this;
},
select_id: function(id) {
var idx = _.indexOf(this.ids, id);
if (idx === -1) {
var idx = this.get_id_index(id);
if (idx === null) {
return false;
} else {
this.index = idx;
return true;
}
},
get_id_index: function(id) {
for (var i=0, ii=this.ids.length; i<ii; i++) {
// Here we use type coercion because of the mess potentially caused by
// OpenERP ids fetched from the DOM as string. (eg: dhtmlxcalendar)
// OpenERP ids can be non-numeric too ! (eg: recursive events in calendar)
if (id == this.ids[i]) {
return i;
}
}
return null;
},
/**
* Read records.
*
@ -414,8 +429,8 @@ openerp.web.DataSet = openerp.web.Widget.extend( /** @lends openerp.web.DataSet
return this.rpc('/web/dataset/call', {
model: this.model,
method: method,
domain_id: domain_index || null,
context_id: context_index || null,
domain_id: domain_index == undefined ? null : domain_index,
context_id: context_index == undefined ? null : context_index,
args: args || []
}, callback, error_callback);
},
@ -433,7 +448,7 @@ openerp.web.DataSet = openerp.web.Widget.extend( /** @lends openerp.web.DataSet
model: this.model,
method: method,
domain_id: null,
context_id: 1,
context_id: args.length - 1,
args: args || []
}, callback, error_callback);
},
@ -499,9 +514,10 @@ openerp.web.DataSetStatic = openerp.web.DataSet.extend({
},
set_ids: function (ids) {
this.ids = ids;
if (this.index !== null) {
this.index = this.index <= this.ids.length - 1 ?
this.index : (this.ids.length > 0 ? this.length - 1 : 0);
if (ids.length === 0) {
this.index = null;
} else if (this.index >= ids.length - 1) {
this.index = ids.length - 1;
}
},
unlink: function(ids) {
@ -673,7 +689,7 @@ openerp.web.BufferedDataSet = openerp.web.DataSetStatic.extend({
this.set_ids(_.without.apply(_, [this.ids].concat(ids)));
this.on_change();
var to_return = $.Deferred().then(callback);
setTimeout(function () {to_return.resolve({result: true});}, 0);
$.async_when().then(function () {to_return.resolve({result: true});});
return to_return.promise();
},
reset_ids: function(ids) {
@ -772,7 +788,7 @@ openerp.web.ProxyDataSet = openerp.web.DataSetSearch.extend({
} else {
console.warn("trying to create a record using default proxy dataset behavior");
var to_return = $.Deferred().then(callback);
setTimeout(function () {to_return.resolve({"result": undefined});}, 0);
$.async_when().then(function () {to_return.resolve({"result": undefined});});
return to_return.promise();
}
},
@ -784,7 +800,7 @@ openerp.web.ProxyDataSet = openerp.web.DataSetSearch.extend({
} else {
console.warn("trying to write a record using default proxy dataset behavior");
var to_return = $.Deferred().then(callback);
setTimeout(function () {to_return.resolve({"result": true});}, 0);
$.async_when().then(function () {to_return.resolve({"result": true});});
return to_return.promise();
}
},
@ -793,14 +809,14 @@ openerp.web.ProxyDataSet = openerp.web.DataSetSearch.extend({
this.on_unlink(ids);
console.warn("trying to unlink a record using default proxy dataset behavior");
var to_return = $.Deferred().then(callback);
setTimeout(function () {to_return.resolve({"result": true});}, 0);
$.async_when().then(function () {to_return.resolve({"result": true});});
return to_return.promise();
},
on_unlink: function(ids) {}
});
openerp.web.Model = openerp.web.CallbackEnabled.extend({
init: function(_, model_name) {
init: function(model_name) {
this._super();
this.model_name = model_name;
},

View File

@ -1,8 +1,9 @@
openerp.web.data_export = function(openerp) {
var QWeb = openerp.web.qweb;
var QWeb = openerp.web.qweb,
_t = openerp.web._t;
openerp.web.DataExport = openerp.web.Dialog.extend({
template: 'ExportTreeView',
dialog_title: 'Export Data',
dialog_title: {toString: function () { return _t("Export Data"); }},
init: function(parent, dataset) {
this._super(parent);
this.records = {};
@ -14,18 +15,10 @@ openerp.web.DataExport = openerp.web.Dialog.extend({
var self = this;
this._super.apply(this, arguments);
this.open({
modal: true,
width: '55%',
height: 'auto',
position: 'top',
buttons : {
"Close" : function() {
self.close();
},
"Export To File" : function() {
self.on_click_export_data();
}
},
buttons : [
{text: _t("Close"), click: function() { self.close(); }},
{text: _t("Export To File"), click: function() { self.on_click_export_data(); }}
],
close: function(event, ui){ self.close();}
});
self.$element.removeClass('ui-dialog-content ui-widget-content');
@ -388,7 +381,7 @@ openerp.web.DataExport = openerp.web.Dialog.extend({
});
},
close: function() {
$(this.$dialog).remove();
this.$element.remove();
this._super();
}
});

View File

@ -31,7 +31,7 @@ function jsonp(form, attributes, callback) {
openerp.web.DataImport = openerp.web.Dialog.extend({
template: 'ImportDataView',
dialog_title: "Import Data",
dialog_title: {toString: function () { return _t("Import Data"); }},
init: function(parent, dataset){
var self = this;
this._super(parent, {});
@ -65,10 +65,6 @@ openerp.web.DataImport = openerp.web.Dialog.extend({
var self = this;
this._super();
this.open({
modal: true,
width: '70%',
height: 'auto',
position: 'top',
buttons: [
{text: _t("Close"), click: function() { self.stop(); }},
{text: _t("Import File"), click: function() { self.do_import(); }, 'class': 'oe-dialog-import-button'}
@ -111,7 +107,11 @@ openerp.web.DataImport = openerp.web.Dialog.extend({
});
}
_(fields).each(function (field, field_name) {
if (field_name === 'id') { return; }
// Ignore spec for id field
// Don't import function fields (function and related)
if (field_name === 'id' || 'function' in field) {
return;
}
var f = {
id: field_name,
name: field_name,
@ -140,7 +140,7 @@ openerp.web.DataImport = openerp.web.Dialog.extend({
});
},
toggle_import_button: function (newstate) {
this.$dialog.dialog('widget')
this.$element.dialog('widget')
.find('.oe-dialog-import-button')
.button('option', 'disabled', !newstate);
},
@ -183,6 +183,20 @@ openerp.web.DataImport = openerp.web.Dialog.extend({
this.$element.find('#result').empty();
var headers, result_node = this.$element.find("#result");
if (results['error']) {
result_node.append(QWeb.render('ImportView.error', {
'error': results['error']}));
this.$element.find('fieldset').removeClass('oe-closed');
return;
}
if (results['success']) {
if (this.widget_parent.widget_parent.active_view == "list") {
this.widget_parent.reload_content();
}
this.stop();
return;
}
if (results['records']) {
var lines_to_skip = parseInt(this.$element.find('#csv_skip').val(), 10),
with_headers = this.$element.find('#file_has_headers').prop('checked');
@ -195,16 +209,6 @@ openerp.web.DataImport = openerp.web.Dialog.extend({
: results.records
}));
this.$element.find('fieldset').addClass('oe-closed');
} else if (results['error']) {
result_node.append(QWeb.render('ImportView.error', {
'error': results['error']}));
this.$element.find('fieldset').removeClass('oe-closed');
} else if (results['success']) {
if (this.widget_parent.widget_parent.active_view == "list") {
this.widget_parent.reload_content();
}
this.stop();
return;
}
this.$element.find('form').removeClass('oe-import-no-result');
@ -344,7 +348,7 @@ openerp.web.DataImport = openerp.web.Dialog.extend({
return true;
},
stop: function() {
$(this.$dialog).remove();
this.$element.remove();
this._super();
}
});

View File

@ -20,7 +20,7 @@ openerp.web.str_to_datetime = function(str) {
if ( !res ) {
throw new Error("'" + str + "' is not a valid datetime");
}
var obj = Date.parse(res[1] + " GMT");
var obj = Date.parseExact(res[1] + " UTC", 'yyyy-MM-dd HH:mm:ss zzz');
if (! obj) {
throw new Error("'" + str + "' is not a valid datetime");
}
@ -43,7 +43,7 @@ openerp.web.str_to_date = function(str) {
if ( !res ) {
throw new Error("'" + str + "' is not a valid date");
}
var obj = Date.parse(str);
var obj = Date.parseExact(str + ' UTC', 'yyyy-MM-dd zzz');
if (! obj) {
throw new Error("'" + str + "' is not a valid date");
}
@ -66,7 +66,7 @@ openerp.web.str_to_time = function(str) {
if ( !res ) {
throw new Error("'" + str + "' is not a valid time");
}
var obj = Date.parse(res[1]);
var obj = Date.parseExact(res[1] + ' UTC', 'HH:mm:ss zzz');
if (! obj) {
throw new Error("'" + str + "' is not a valid time");
}

View File

@ -158,16 +158,17 @@ openerp.web.parse_value = function (value, descriptor, value_if_empty) {
var tmp = Number(value);
if (!isNaN(tmp))
return tmp;
tmp = value.replace(openerp.web._t.database.parameters.decimal_point, ".");
var tmp2 = tmp;
var tmp2 = value;
do {
tmp = tmp2;
tmp2 = tmp.replace(openerp.web._t.database.parameters.thousands_sep, "");
} while(tmp !== tmp2);
tmp = Number(tmp);
if (isNaN(tmp))
var reformatted_value = tmp.replace(openerp.web._t.database.parameters.decimal_point, ".");
var parsed = Number(reformatted_value);
if (isNaN(parsed))
throw new Error(value + " is not a correct float");
return tmp;
return parsed;
case 'float_time':
var float_time_pair = value.split(":");
if (float_time_pair.length != 2)
@ -253,7 +254,7 @@ openerp.web.format_cell = function (row_data, column, value_if_empty, process_mo
if (column.tag === 'button') {
return [
'<button type="button" title="', column.string || '', '">',
'<img src="/web/static/src/img/icons/', column.icon, '.png"',
'<img src="', openerp.connection.prefix, '/web/static/src/img/icons/', column.icon, '.png"',
' alt="', column.string || '', '"/>',
'</button>'
].join('')

View File

@ -1,13 +1,14 @@
openerp.web.search = function(openerp) {
var QWeb = openerp.web.qweb,
_t = openerp.web._t;
_t = openerp.web._t,
_lt = openerp.web._lt;
openerp.web.SearchView = openerp.web.Widget.extend(/** @lends openerp.web.SearchView# */{
template: "EmptyComponent",
/**
* @constructs openerp.web.SearchView
* @extends openerp.web.Widget
*
*
* @param parent
* @param element_id
* @param dataset
@ -68,7 +69,6 @@ openerp.web.SearchView = openerp.web.Widget.extend(/** @lends openerp.web.Search
rows.push(row);
var filters = [];
_.each(items, function (item) {
if (item.attrs.invisible === '1') { return; }
if (filters.length && item.tag !== 'filter') {
row.push(
new openerp.web.search.FilterGroup(
@ -139,6 +139,7 @@ openerp.web.SearchView = openerp.web.Widget.extend(/** @lends openerp.web.Search
}
},
on_loaded: function(data) {
this.fields_view = data.fields_view;
if (data.fields_view.type !== 'search' ||
data.fields_view.arch.tag !== 'search') {
throw new Error(_.str.sprintf(
@ -154,7 +155,8 @@ openerp.web.SearchView = openerp.web.Widget.extend(/** @lends openerp.web.Search
var ext = new openerp.web.search.ExtendedSearch(this, this.model);
lines.push([ext]);
this.inputs.push(ext);
this.extended_search = ext;
var render = QWeb.render("SearchView", {
'view': data.fields_view['arch'],
'lines': lines,
@ -162,7 +164,6 @@ openerp.web.SearchView = openerp.web.Widget.extend(/** @lends openerp.web.Search
});
this.$element.html(render);
this.$element.find(".oe_search-view-custom-filter-btn").click(ext.on_activate);
var f = this.$element.find('form');
this.$element.find('form')
@ -176,7 +177,7 @@ openerp.web.SearchView = openerp.web.Widget.extend(/** @lends openerp.web.Search
$.when.apply(null, widget_starts).then(function () {
self.ready.resolve();
});
this.reload_managed_filters();
},
reload_managed_filters: function() {
@ -197,18 +198,25 @@ openerp.web.SearchView = openerp.web.Widget.extend(/** @lends openerp.web.Search
var self = this;
var select = this.$element.find(".oe_search-view-filters-management");
var val = select.val();
if (val.slice(0,1) == "_") { // useless action
select.val("_filters");
return;
}
if (val.slice(0, "get:".length) == "get:") {
val = val.slice("get:".length);
val = parseInt(val);
var filter = this.managed_filters[val];
this.on_search([filter.domain], [filter.context], []);
} else if (val == "save_filter") {
select.val("_filters");
switch(val) {
case 'advanced_filter':
this.extended_search.on_activate();
break;
case 'add_to_dashboard':
this.on_add_to_dashboard();
break;
case 'manage_filters':
this.do_action({
res_model: 'ir.filters',
views: [[false, 'list'], [false, 'form']],
type: 'ir.actions.act_window',
context: {"search_default_user_id": this.session.uid,
"search_default_model_id": this.dataset.model},
target: "current",
limit : 80
});
break;
case 'save_filter':
var data = this.build_search_data();
var context = new openerp.web.CompoundContext();
_.each(data.contexts, function(x) {
@ -241,19 +249,63 @@ openerp.web.SearchView = openerp.web.Widget.extend(/** @lends openerp.web.Search
}}
]
});
} else { // manage_filters
select.val("_filters");
this.do_action({
res_model: 'ir.filters',
views: [[false, 'list'], [false, 'form']],
type: 'ir.actions.act_window',
context: {"search_default_user_id": this.session.uid,
"search_default_model_id": this.dataset.model},
target: "current",
limit : 80,
auto_search : true
});
break;
}
if (val.slice(0, 4) == "get:") {
val = val.slice(4);
val = parseInt(val, 10);
var filter = this.managed_filters[val];
this.on_search([filter.domain], [filter.context], []);
} else {
select.val('');
}
},
on_add_to_dashboard: function() {
this.$element.find(".oe_search-view-filters-management")[0].selectedIndex = 0;
var self = this,
menu = openerp.webclient.menu,
$dialog = $(QWeb.render("SearchView.add_to_dashboard", {
dashboards : menu.data.data.children,
selected_menu_id : menu.$element.find('a.active').data('menu')
}));
$dialog.find('input').val(this.fields_view.name);
$dialog.dialog({
modal: true,
title: _t("Add to Dashboard"),
buttons: [
{text: _t("Cancel"), click: function() {
$(this).dialog("close");
}},
{text: _t("OK"), click: function() {
$(this).dialog("close");
var menu_id = $(this).find("select").val(),
title = $(this).find("input").val(),
data = self.build_search_data(),
context = new openerp.web.CompoundContext(),
domain = new openerp.web.CompoundDomain();
_.each(data.contexts, function(x) {
context.add(x);
});
_.each(data.domains, function(x) {
domain.add(x);
});
self.rpc('/web/searchview/add_to_dashboard', {
menu_id: menu_id,
action_id: self.widget_parent.action.id,
context_to_save: context,
domain: domain,
view_mode: self.widget_parent.active_view,
name: title
}, function(r) {
if (r === false) {
self.do_warn("Could not add filter to dashboard");
} else {
self.do_notify("Filter added to dashboard", '');
}
});
}}
]
});
},
/**
* Performs the search view collection of widget data.
@ -360,6 +412,11 @@ openerp.web.SearchView = openerp.web.Widget.extend(/** @lends openerp.web.Search
this.$element.find('table:last').hide();
$('.searchview_extended_groups_list').empty();
_.each(this.inputs, function (input) {
if(input.datewidget && input.datewidget.value) {
input.datewidget.set_value(false);
}
});
setTimeout(this.on_clear, 0);
},
/**
@ -527,6 +584,7 @@ openerp.web.search.Input = openerp.web.search.Widget.extend( /** @lends openerp.
init: function (view) {
this._super(view);
this.view.inputs.push(this);
this.style = undefined;
},
get_context: function () {
throw new Error(
@ -535,6 +593,16 @@ openerp.web.search.Input = openerp.web.search.Widget.extend( /** @lends openerp.
get_domain: function () {
throw new Error(
"get_domain not implemented for widget " + this.attrs.type);
},
load_attrs: function (attrs) {
if (attrs.modifiers) {
attrs.modifiers = JSON.parse(attrs.modifiers);
attrs.invisible = attrs.modifiers.invisible || false;
if (attrs.invisible) {
this.style = 'display: none;'
}
}
this.attrs = attrs;
}
});
openerp.web.search.FilterGroup = openerp.web.search.Input.extend(/** @lends openerp.web.search.FilterGroup# */{
@ -595,7 +663,7 @@ openerp.web.search.Filter = openerp.web.search.Input.extend(/** @lends openerp.w
*/
init: function (node, view) {
this._super(view);
this.attrs = node.attrs;
this.load_attrs(node.attrs);
this.classes = [this.attrs.string ? 'filter_label' : 'filter_icon'];
this.make_id('filter', this.attrs.name);
},
@ -653,8 +721,8 @@ openerp.web.search.Field = openerp.web.search.Input.extend( /** @lends openerp.w
*/
init: function (view_section, field, view) {
this._super(view);
this.attrs = _.extend({}, field, view_section.attrs);
this.filters = new openerp.web.search.FilterGroup(_.map(
this.load_attrs(_.extend({}, field, view_section.attrs));
this.filters = new openerp.web.search.FilterGroup(_.compact(_.map(
view_section.children, function (filter_node) {
if (filter_node.attrs.string &&
typeof console !== 'undefined' && console.debug) {
@ -664,7 +732,7 @@ openerp.web.search.Field = openerp.web.search.Input.extend( /** @lends openerp.w
delete filter_node.attrs.string;
return new openerp.web.search.Filter(
filter_node, view);
}), view);
})), view);
this.make_id('input', field.type, this.attrs.name);
},
start: function () {
@ -827,8 +895,8 @@ openerp.web.search.BooleanField = openerp.web.search.SelectionField.extend(/** @
init: function () {
this._super.apply(this, arguments);
this.attrs.selection = [
['true', 'Yes'],
['false', 'No']
['true', _t("Yes")],
['false', _t("No")]
];
},
/**
@ -1126,7 +1194,7 @@ openerp.web.search.ExtendedSearchProposition = openerp.web.OldWidget.extend(/**
* @param field a field descriptor object (as returned by fields_get, augmented by the field name)
*/
select_field: function(field) {
var _this = this;
var self = this;
if(this.attrs.selected != null) {
this.value.stop();
this.value = null;
@ -1153,14 +1221,14 @@ openerp.web.search.ExtendedSearchProposition = openerp.web.OldWidget.extend(/**
this.value.set_field(field);
}
_.each(this.value.operators, function(operator) {
var option = jQuery('<option>', {value: operator.value})
.text(operator.text)
.appendTo(_this.$element.find('.searchview_extended_prop_op'));
$('<option>', {value: operator.value})
.text(String(operator.text))
.appendTo(self.$element.find('.searchview_extended_prop_op'));
});
this.$element.find('.searchview_extended_prop_value').html(
this.value.render({}));
this.value.start();
},
get_proposition: function() {
if ( this.attrs.selected == null)
@ -1181,14 +1249,14 @@ openerp.web.search.ExtendedSearchProposition.Char = openerp.web.search.ExtendedS
template: 'SearchView.extended_search.proposition.char',
identifier_prefix: 'extended-search-proposition-char',
operators: [
{value: "ilike", text: _t("contains")},
{value: "not ilike", text: _t("doesn't contain")},
{value: "=", text: _t("is equal to")},
{value: "!=", text: _t("is not equal to")},
{value: ">", text: _t("greater than")},
{value: "<", text: _t("less than")},
{value: ">=", text: _t("greater or equal than")},
{value: "<=", text: _t("less or equal than")}
{value: "ilike", text: _lt("contains")},
{value: "not ilike", text: _lt("doesn't contain")},
{value: "=", text: _lt("is equal to")},
{value: "!=", text: _lt("is not equal to")},
{value: ">", text: _lt("greater than")},
{value: "<", text: _lt("less than")},
{value: ">=", text: _lt("greater or equal than")},
{value: "<=", text: _lt("less or equal than")}
],
get_value: function() {
return this.$element.val();
@ -1198,12 +1266,12 @@ openerp.web.search.ExtendedSearchProposition.DateTime = openerp.web.search.Exten
template: 'SearchView.extended_search.proposition.empty',
identifier_prefix: 'extended-search-proposition-datetime',
operators: [
{value: "=", text: _t("is equal to")},
{value: "!=", text: _t("is not equal to")},
{value: ">", text: _t("greater than")},
{value: "<", text: _t("less than")},
{value: ">=", text: _t("greater or equal than")},
{value: "<=", text: _t("less or equal than")}
{value: "=", text: _lt("is equal to")},
{value: "!=", text: _lt("is not equal to")},
{value: ">", text: _lt("greater than")},
{value: "<", text: _lt("less than")},
{value: ">=", text: _lt("greater or equal than")},
{value: "<=", text: _lt("less or equal than")}
],
get_value: function() {
return this.datewidget.get_value();
@ -1218,12 +1286,12 @@ openerp.web.search.ExtendedSearchProposition.Date = openerp.web.search.ExtendedS
template: 'SearchView.extended_search.proposition.empty',
identifier_prefix: 'extended-search-proposition-date',
operators: [
{value: "=", text: _t("is equal to")},
{value: "!=", text: _t("is not equal to")},
{value: ">", text: _t("greater than")},
{value: "<", text: _t("less than")},
{value: ">=", text: _t("greater or equal than")},
{value: "<=", text: _t("less or equal than")}
{value: "=", text: _lt("is equal to")},
{value: "!=", text: _lt("is not equal to")},
{value: ">", text: _lt("greater than")},
{value: "<", text: _lt("less than")},
{value: ">=", text: _lt("greater or equal than")},
{value: "<=", text: _lt("less or equal than")}
],
get_value: function() {
return this.datewidget.get_value();
@ -1238,12 +1306,12 @@ openerp.web.search.ExtendedSearchProposition.Integer = openerp.web.search.Extend
template: 'SearchView.extended_search.proposition.integer',
identifier_prefix: 'extended-search-proposition-integer',
operators: [
{value: "=", text: _t("is equal to")},
{value: "!=", text: _t("is not equal to")},
{value: ">", text: _t("greater than")},
{value: "<", text: _t("less than")},
{value: ">=", text: _t("greater or equal than")},
{value: "<=", text: _t("less or equal than")}
{value: "=", text: _lt("is equal to")},
{value: "!=", text: _lt("is not equal to")},
{value: ">", text: _lt("greater than")},
{value: "<", text: _lt("less than")},
{value: ">=", text: _lt("greater or equal than")},
{value: "<=", text: _lt("less or equal than")}
],
get_value: function() {
try {
@ -1254,18 +1322,18 @@ openerp.web.search.ExtendedSearchProposition.Integer = openerp.web.search.Extend
}
});
openerp.web.search.ExtendedSearchProposition.Id = openerp.web.search.ExtendedSearchProposition.Integer.extend({
operators: [{value: "=", text: _t("is")}]
operators: [{value: "=", text: _lt("is")}]
});
openerp.web.search.ExtendedSearchProposition.Float = openerp.web.search.ExtendedSearchProposition.Field.extend({
template: 'SearchView.extended_search.proposition.float',
identifier_prefix: 'extended-search-proposition-float',
operators: [
{value: "=", text: _t("is equal to")},
{value: "!=", text: _t("is not equal to")},
{value: ">", text: _t("greater than")},
{value: "<", text: _t("less than")},
{value: ">=", text: _t("greater or equal than")},
{value: "<=", text: _t("less or equal than")}
{value: "=", text: _lt("is equal to")},
{value: "!=", text: _lt("is not equal to")},
{value: ">", text: _lt("greater than")},
{value: "<", text: _lt("less than")},
{value: ">=", text: _lt("greater or equal than")},
{value: "<=", text: _lt("less or equal than")}
],
get_value: function() {
try {
@ -1279,8 +1347,8 @@ openerp.web.search.ExtendedSearchProposition.Selection = openerp.web.search.Exte
template: 'SearchView.extended_search.proposition.selection',
identifier_prefix: 'extended-search-proposition-selection',
operators: [
{value: "=", text: _t("is")},
{value: "!=", text: _t("is not")}
{value: "=", text: _lt("is")},
{value: "!=", text: _lt("is not")}
],
set_field: function(field) {
this.field = field;
@ -1293,8 +1361,8 @@ openerp.web.search.ExtendedSearchProposition.Boolean = openerp.web.search.Extend
template: 'SearchView.extended_search.proposition.boolean',
identifier_prefix: 'extended-search-proposition-boolean',
operators: [
{value: "=", text: _t("is true")},
{value: "!=", text: _t("is false")}
{value: "=", text: _lt("is true")},
{value: "!=", text: _lt("is false")}
],
get_value: function() {
return true;
@ -1307,7 +1375,7 @@ openerp.web.search.custom_filters = new openerp.web.Registry({
'one2many': 'openerp.web.search.ExtendedSearchProposition.Char',
'many2one': 'openerp.web.search.ExtendedSearchProposition.Char',
'many2many': 'openerp.web.search.ExtendedSearchProposition.Char',
'datetime': 'openerp.web.search.ExtendedSearchProposition.DateTime',
'date': 'openerp.web.search.ExtendedSearchProposition.Date',
'integer': 'openerp.web.search.ExtendedSearchProposition.Integer',

View File

@ -26,7 +26,6 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({
type: 'ir.actions.act_window',
target: "current",
limit: this.dataset.limit || 80,
auto_search: true,
flags: {
sidebar: false,
deletable: false,
@ -36,28 +35,17 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({
pager: false,
radio: true,
select_view_id: self.parent.fields_view.view_id
},
}
};
this.view_edit_dialog = new openerp.web.Dialog(this, {
modal: true,
title: 'ViewEditor',
width: 750,
height: 500,
buttons: {
"Create": function(){
self.on_create_view();
},
"Edit": function(){
self.xml_element_id = 0;
self.get_arch();
},
"Remove": function(){
self.do_delete_view();
},
"Close": function(){
self.view_edit_dialog.close();
}
},
title: _t("ViewEditor"),
width: 850,
buttons: [
{text: _t("Create"), click: function() { self.on_create_view(); }},
{text: _t("Edit"), click: function() { self.xml_element_id = 0; self.get_arch(); }},
{text: _t("Remove"), click: function() { self.do_delete_view(); }},
{text: _t("Close"), click: function() { self.view_edit_dialog.close(); }}
]
}).start().open();
this.main_view_id = this.parent.fields_view.view_id;
this.action_manager = new openerp.web.ActionManager(this);
@ -77,37 +65,32 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({
on_create_view: function() {
var self = this;
this.create_view_dialog = new openerp.web.Dialog(this, {
modal: true,
title: _.str.sprintf("Create a view (%s)", self.model),
width: 500,
height: 400,
buttons: {
"Save": function(){
var view_values = {};
var warn = false;
_.each(self.create_view_widget, function(widget) {
if (widget.is_invalid) {
warn = true;
return false;
};
if (widget.dirty && !widget.is_invalid) {
view_values[widget.name] = widget.get_value();
}
});
if (warn) {
self.on_valid_create_view(self.create_view_widget);
} else {
$.when(self.do_save_view(view_values)).then(function() {
self.create_view_dialog.close();
var controller = self.action_manager.inner_viewmanager.views[self.action_manager.inner_viewmanager.active_view].controller;
controller.reload_content();
});
title: _.str.sprintf(_t("Create a view (%s)"), self.model),
buttons: [
{text: _t("Save"), click: function () {
var view_values = {};
var warn = false;
_.each(self.create_view_widget, function(widget) {
if (widget.is_invalid) {
warn = true;
return false;
}
},
"Cancel": function(){
self.create_view_dialog.close();
if (widget.dirty && !widget.is_invalid) {
view_values[widget.name] = widget.get_value();
}
});
if (warn) {
self.on_valid_create_view(self.create_view_widget);
} else {
$.when(self.do_save_view(view_values)).then(function() {
self.create_view_dialog.close();
var controller = self.action_manager.inner_viewmanager.views[self.action_manager.inner_viewmanager.active_view].controller;
controller.reload_content();
});
}
}
}},
{text: _t("Cancel"), click: function () { self.create_view_dialog.close(); }}
]
});
this.create_view_dialog.start().open();
var view_widget = [{'name': 'view_name', 'string':'View Name', 'type': 'char', 'required': true, 'value' : this.model + '.custom_' + Math.round(Math.random() * 1000)},
@ -375,12 +358,10 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({
var self = this;
this.one_object = one_object;
this.edit_xml_dialog = new openerp.web.Dialog(this, {
modal: true,
title: _.str.sprintf("View Editor %d - %s", self.main_view_id, self.model),
width: 750,
height: 500,
buttons: {
"Preview": function() {
title: _.str.sprintf(_t("View Editor %d - %s"), self.main_view_id, self.model),
height: '90%',
buttons: [
{text: _t("Preview"), click: function() {
var action = {
context: self.session.user_context,
res_model: self.model,
@ -390,16 +371,16 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({
flags: {
sidebar: false,
views_switcher: false,
action_buttons: false,
},
action_buttons: false
}
};
var action_manager = new openerp.web.ActionManager(self);
action_manager.do_action(action);
},
"Close": function(){
}},
{text: _t("Close"), click: function(){
self.edit_xml_dialog.close();
}
}
}}
]
}).start().open();
var no_property_att = [];
_.each(_PROPERTIES, function(val, key) {
@ -764,18 +745,16 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({
on_edit_node: function(properties){
var self = this;
this.edit_node_dialog = new openerp.web.Dialog(this,{
modal: true,
title: 'Properties',
width: 500,
height: 400,
buttons: {
"Update": function(){
title: _t("Properties"),
width: 450,
buttons: [
{text: _t("Update"), click: function () {
var warn = false, update_values = [];
_.each(self.edit_widget, function(widget) {
if (widget.is_invalid) {
warn = true;
return false;
};
}
if (widget.dirty && !widget.is_invalid) {
update_values.push([widget.name, widget.get_value()]);
}
@ -786,11 +765,9 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({
self.do_save_update_arch("update_node", update_values);
self.edit_node_dialog.close();
}
},
"Cancel": function(){
self.edit_node_dialog.close();
}
}
}},
{text: _t("Cancel"), click: function () { self.edit_node_dialog.close(); }}
]
});
this.edit_node_dialog.start().open();
var _PROPERTIES_ATTRIBUTES = {
@ -893,33 +870,31 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({
{'name': 'position','selection': ['After','Before','Inside'], 'value': false, 'string': 'Position','type': 'selection'}];
this.add_widget = [];
this.add_node_dialog = new openerp.web.Dialog(this,{
modal: true,
title: 'Properties',
title: _t("Properties"),
width: 450,
height: 190,
buttons: {
"Update": function(){
var check_add_node = true, values = {};
_.each(self.add_widget, function(widget) {
values[widget.name] = widget.get_value() || false;
});
(values.position == "Inside")?
check_add_node =(_.include(_CHILDREN[properties[0]],values.node_type))?true:false:
check_add_node =(_.include(_CHILDREN[properties[1]],values.node_type))?true:false;
if(values.node_type == "field" && check_add_node )
{check_add_node = (values.field_value != " ")?true:false;
}
if(check_add_node){
var tag = (values.node_type == "field")?
_.str.sprintf("<%s name='%s'> </%s>",values.node_type,values.field_value,values.node_type):
_.str.sprintf("<%s> </%s>",values.node_type,values.node_type);
self.do_save_update_arch("add_node", [tag, values.position]);
}else{alert("Can't Update View");}
},
"Cancel": function(){
self.add_node_dialog.close();
buttons: [
{text: _t("Update"), click: function() {
var check_add_node = true, values = {};
_.each(self.add_widget, function(widget) {
values[widget.name] = widget.get_value() || false;
});
(values.position == "Inside")?
check_add_node =(_.include(_CHILDREN[properties[0]],values.node_type))?true:false:
check_add_node =(_.include(_CHILDREN[properties[1]],values.node_type))?true:false;
if(values.node_type == "field" && check_add_node )
{check_add_node = (values.field_value != " ")?true:false;
}
}
if(check_add_node){
var tag = (values.node_type == "field")?
_.str.sprintf("<%s name='%s'> </%s>",values.node_type,values.field_value,values.node_type):
_.str.sprintf("<%s> </%s>",values.node_type,values.node_type);
self.do_save_update_arch("add_node", [tag, values.position]);
} else {
alert("Can't Update View");
}
}},
{text: _t("Cancel"), click: function() { self.add_node_dialog.close(); }}
]
}).start().open();
this.add_node_dialog.$element.append('<table id="rec_table" style="width:420px" class="oe_forms"><tbody><tr></tbody></table>');
var table_selector = self.add_node_dialog.$element.find('table[id=rec_table] tbody');
@ -960,6 +935,7 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({
var action_manager = new openerp.web.ActionManager(self);
$.when(action_manager.do_action(action)).then(function() {
var controller = action_manager.dialog_viewmanager.views['form'].controller;
// TODO NIV: use page view
controller.do_set_readonly.add_last(function(){
action_manager.stop();
new_fields_name = new openerp.web.DataSetSearch(self,'ir.model.fields', null, null);

File diff suppressed because it is too large Load Diff

View File

@ -1,8 +1,11 @@
openerp.web.list = function (openerp) {
var _t = openerp.web._t;
var _t = openerp.web._t,
_lt = openerp.web._lt;
var QWeb = openerp.web.qweb;
openerp.web.views.add('list', 'openerp.web.ListView');
openerp.web.ListView = openerp.web.View.extend( /** @lends openerp.web.ListView# */ {
_template: 'ListView',
display_name: _lt('List'),
defaults: {
// records can be selected one by one
'selectable': true,
@ -11,12 +14,14 @@ openerp.web.ListView = openerp.web.View.extend( /** @lends openerp.web.ListView#
// whether the column headers should be displayed
'header': true,
// display addition button, with that label
'addable': _t("Create"),
'addable': _lt("Create"),
// whether the list view can be sorted, note that once a view has been
// sorted it can not be reordered anymore
'sortable': true,
// whether the view rows can be reordered (via vertical drag & drop)
'reorderable': true
'reorderable': true,
// display an edit icon linking to form view
'isClarkGable': true
},
/**
* Core class for list-type displays.
@ -78,6 +83,7 @@ openerp.web.ListView = openerp.web.View.extend( /** @lends openerp.web.ListView#
self.compute_aggregates();
});
this.no_leaf = false;
},
/**
* Retrieves the view's number of records per page (|| section)
@ -118,8 +124,8 @@ openerp.web.ListView = openerp.web.View.extend( /** @lends openerp.web.ListView#
'action': function (e, action_name, id, callback) {
self.do_button_action(action_name, id, callback);
},
'row_link': function (e, id, dataset) {
self.do_activate_record(dataset.index, id, dataset);
'row_link': function (e, id, dataset, view) {
self.do_activate_record(dataset.index, id, dataset, view);
}
});
},
@ -200,7 +206,7 @@ openerp.web.ListView = openerp.web.View.extend( /** @lends openerp.web.ListView#
this.setup_columns(this.fields_view.fields, grouped);
this.$element.html(QWeb.render("ListView", this));
this.$element.html(QWeb.render(this._template, this));
// Head hook
this.$element.find('.all-record-selector').click(function(){
self.$element.find('.oe-record-selector input').prop('checked',
@ -296,7 +302,11 @@ openerp.web.ListView = openerp.web.View.extend( /** @lends openerp.web.ListView#
last = first + limit;
}
this.$element.find('span.oe-pager-state').empty().text(_.str.sprintf(
"[%d to %d] of %d", first + 1, last, total));
_t("[%(first_record)d to %(last_record)d] of %(records_count)d"), {
first_record: first + 1,
last_record: last,
records_count: total
}));
this.$element
.find('button[data-pager-action=first], button[data-pager-action=previous]')
@ -320,7 +330,7 @@ openerp.web.ListView = openerp.web.View.extend( /** @lends openerp.web.ListView#
var field_to_column = function (field) {
var name = field.attrs.name;
var column = _.extend({id: name, tag: field.tag},
field.attrs, fields[name]);
fields[name], field.attrs);
// modifiers computer
if (column.modifiers) {
var modifiers = JSON.parse(column.modifiers);
@ -334,6 +344,8 @@ openerp.web.ListView = openerp.web.View.extend( /** @lends openerp.web.ListView#
};
if (modifiers['tree_invisible']) {
column.invisible = '1';
} else {
delete column.invisible;
}
} else {
column.modifiers_for = noop;
@ -388,23 +400,23 @@ openerp.web.ListView = openerp.web.View.extend( /** @lends openerp.web.ListView#
* new record.
*
* @param {Number|void} index the record index (in the current dataset) to switch to
* @param {String} [view="form"] the view type to switch to
* @param {String} [view="page"] the view type to switch to
*/
select_record:function (index, view) {
view = view || 'form';
view = view || index == null ? 'form' : 'page';
this.dataset.index = index;
_.delay(_.bind(function () {
this.do_switch_view(view);
}, this));
},
do_show: function () {
this.$element.show();
this._super();
if (this.sidebar) {
this.sidebar.$element.show();
}
},
do_hide: function () {
this.$element.hide();
this._super();
if (this.sidebar) {
this.sidebar.$element.hide();
}
@ -453,8 +465,35 @@ openerp.web.ListView = openerp.web.View.extend( /** @lends openerp.web.ListView#
self.compute_aggregates();
reloaded.resolve();
}));
this.do_push_state({
page: this.page,
limit: this._limit
});
return reloaded.promise();
},
reload: function () {
return this.reload_content();
},
do_load_state: function(state) {
var reload = false;
if (state.page && this.page !== state.page) {
this.page = state.page;
reload = true;
}
if (state.limit) {
if (_.isString(state.limit)) {
state.limit = null;
}
if (state.limit !== this._limit) {
this._limit = state.limit;
reload = true;
}
}
if (reload) {
this.reload_content();
}
},
/**
* Handler for the result of eval_domain_and_context, actually perform the
* searching
@ -462,6 +501,7 @@ openerp.web.ListView = openerp.web.View.extend( /** @lends openerp.web.ListView#
* @param {Object} results results of evaluating domain and process for a search
*/
do_search: function (domain, context, group_by) {
this.page = 0;
this.groups.datagroup = new openerp.web.DataGroup(
this, this.model, domain, context, group_by);
this.groups.datagroup.sort = this.dataset._sort;
@ -469,6 +509,7 @@ openerp.web.ListView = openerp.web.View.extend( /** @lends openerp.web.ListView#
if (_.isEmpty(group_by) && !context['group_by_no_leaf']) {
group_by = null;
}
this.no_leaf = !!context['group_by_no_leaf'];
this.reload_view(!!group_by, context).then(
$.proxy(this, 'reload_content'));
@ -527,6 +568,9 @@ openerp.web.ListView = openerp.web.View.extend( /** @lends openerp.web.ListView#
return field.name === name;
});
if (!action) { return; }
if ('confirm' in action && !window.confirm(action.confirm)) {
return;
}
var c = new openerp.web.CompoundContext();
c.set_eval_context(_.extend({
@ -547,9 +591,9 @@ openerp.web.ListView = openerp.web.View.extend( /** @lends openerp.web.ListView#
* @param {Object} id identifier of the activated record
* @param {openerp.web.DataSet} dataset dataset in which the record is available (may not be the listview's dataset in case of nested groups)
*/
do_activate_record: function (index, id, dataset) {
do_activate_record: function (index, id, dataset, view) {
this.dataset.ids = dataset.ids;
this.select_record(index);
this.select_record(index, view);
},
/**
* Handles signal for the addition of a new record (can be a creation,
@ -661,8 +705,8 @@ openerp.web.ListView = openerp.web.View.extend( /** @lends openerp.web.ListView#
*
* @param {Number} count number of columns to add
* @param {Object} options
* @param {"before"|"after"} [position="after"] insertion position for the new columns
* @param {Object} [except] content row to not pad
* @param {"before"|"after"} [options.position="after"] insertion position for the new columns
* @param {Object} [options.except] content row to not pad
*/
pad_columns: function (count, options) {
options = options || {};
@ -809,15 +853,19 @@ openerp.web.ListView.List = openerp.web.Class.extend( /** @lends openerp.web.Lis
if (!self.dataset.select_id(row_id)) {
throw "Could not find id in dataset"
}
self.row_clicked(e);
var view;
if ($(e.target).is('.oe-record-edit-link-img')) {
view = 'form';
}
self.row_clicked(e, view);
}
});
},
row_clicked: function () {
row_clicked: function (e, view) {
$(this).trigger(
'row_link',
[this.dataset.ids[this.dataset.index],
this.dataset]);
this.dataset, view]);
},
render_cell: function (record, column) {
var value;
@ -878,6 +926,9 @@ openerp.web.ListView.List = openerp.web.Class.extend( /** @lends openerp.web.Lis
if (this.options.selectable) {
cells.push('<th class="oe-record-selector"></td>');
}
if (this.options.isClarkGable) {
cells.push('<th class="oe-record-edit-link"></td>');
}
_(this.columns).each(function(column) {
if (column.invisible === '1') {
return;
@ -1090,7 +1141,12 @@ openerp.web.ListView.Groups = openerp.web.Class.extend( /** @lends openerp.web.L
},
open: function (point_insertion) {
this.render().insertAfter(point_insertion);
this.make_paginator();
var no_subgroups = _(this.datagroup.group_by).isEmpty(),
records_terminated = !this.datagroup.context['group_by_no_leaf'];
if (no_subgroups && records_terminated) {
this.make_paginator();
}
},
close: function () {
this.$row.children().last().empty();
@ -1155,20 +1211,18 @@ openerp.web.ListView.Groups = openerp.web.Class.extend( /** @lends openerp.web.L
return column.id === group.grouped_on; });
try {
$group_column.html(openerp.web.format_cell(
row_data, group_column, _t("Undefined")));
row_data, group_column, _t("Undefined"), false));
} catch (e) {
$group_column.html(row_data[group_column.id].value);
}
if (!group.length) {
if (group.length && group.openable) {
// Make openable if not terminal group & group_by_no_leaf
$group_column.prepend('<span class="ui-icon ui-icon-triangle-1-e" style="float: left;">');
} else {
// Kinda-ugly hack: jquery-ui has no "empty" icon, so set
// wonky background position to ensure nothing is displayed
// there but the rest of the behavior is ui-icon's
$group_column.prepend(
'<span class="ui-icon" style="float: left; background-position: 150px 150px">');
} else if (group.openable) {
// Make openable if not terminal group & group_by_no_leaf
$group_column
.prepend('<span class="ui-icon ui-icon-triangle-1-e" style="float: left;">');
$group_column.prepend('<span class="ui-icon" style="float: left; background-position: 150px 150px">');
}
}
self.indent($group_column, group.level);
@ -1185,14 +1239,8 @@ openerp.web.ListView.Groups = openerp.web.Class.extend( /** @lends openerp.web.L
// do not do anything
} else if (column.id in group.aggregates) {
var value = group.aggregates[column.id];
var format;
if (column.type === 'integer') {
format = "%.0f";
} else if (column.type === 'float') {
format = "%.2f";
}
$('<td>')
.text(_.str.sprintf(format, value))
$('<td class="oe-number">')
.html(openerp.web.format_value(value, column))
.appendTo($row);
} else {
$row.append('<td>');
@ -1240,7 +1288,7 @@ openerp.web.ListView.Groups = openerp.web.Class.extend( /** @lends openerp.web.L
var fields = _.pluck(_.select(this.columns, function(x) {return x.tag == "field"}), 'name');
var options = { offset: page * limit, limit: limit };
//TODO xmo: investigate why we need to put the setTimeout
setTimeout(function() {dataset.read_slice(fields, options , function (records) {
$.async_when().then(function() {dataset.read_slice(fields, options , function (records) {
// FIXME: ignominious hacks, parents (aka form view) should not send two ListView#reload_content concurrently
if (self.records.length) {
self.records.reset(null, {silent: true});
@ -1251,7 +1299,10 @@ openerp.web.ListView.Groups = openerp.web.Class.extend( /** @lends openerp.web.L
var pages = Math.ceil(dataset.ids.length / limit);
self.$row
.find('.oe-pager-state')
.text(_.str.sprintf('%d/%d', page + 1, pages))
.text(_.str.sprintf(_t("%(page)d/%(page_count)d"), {
page: page + 1,
page_count: pages
}))
.end()
.find('button[data-pager-action=previous]')
.attr('disabled', page === 0)
@ -1263,7 +1314,7 @@ openerp.web.ListView.Groups = openerp.web.Class.extend( /** @lends openerp.web.L
self.records.add(records, {silent: true});
list.render();
d.resolve(list);
});}, 0);
});});
return d.promise();
},
setup_resequence_rows: function (list, dataset) {
@ -1278,12 +1329,18 @@ openerp.web.ListView.Groups = openerp.web.Class.extend( /** @lends openerp.web.L
list.$current.sortable({
axis: 'y',
items: '> tr[data-id]',
containment: 'parent',
stop: function (event, ui) {
var to_move = list.records.get(ui.item.data('id')),
target_id = ui.item.prev().data('id');
target_id = ui.item.prev().data('id'),
from_index = list.records.indexOf(to_move),
target = list.records.get(target_id);
if (list.records.at(from_index - 1) == target) {
return;
}
list.records.remove(to_move);
var to = target_id ? list.records.indexOf(list.records.get(target_id)) + 1 : 0;
var to = target_id ? list.records.indexOf(target) + 1 : 0;
list.records.add(to_move, { at: to });
// resequencing time!
@ -1295,7 +1352,14 @@ openerp.web.ListView.Groups = openerp.web.Class.extend( /** @lends openerp.web.L
// write are independent from one another, so we can just
// launch them all at the same time and we don't really
// give a fig about when they're done
dataset.write(record.get('id'), {sequence: seq});
// FIXME: breaks on o2ms (e.g. Accounting > Financial
// Accounting > Taxes > Taxes, child tax accounts)
// when synchronous (without setTimeout)
(function (dataset, id, seq) {
$.async_when().then(function () {
dataset.write(id, {sequence: seq});
});
}(dataset, record.get('id'), seq));
record.set('sequence', seq);
}

View File

@ -116,7 +116,7 @@ openerp.web.list_editable = function (openerp) {
openerp.web.ListView.List.include(/** @lends openerp.web.ListView.List# */{
row_clicked: function (event) {
if (!this.options.editable) {
return this._super(event);
return this._super.apply(this, arguments);
}
this.edit_record($(event.currentTarget).data('id'));
},
@ -166,6 +166,35 @@ openerp.web.list_editable = function (openerp) {
view.arch.attrs.col = 2 * view.arch.children.length;
return view;
},
on_row_keyup: function (e) {
var self = this;
switch (e.which) {
case KEY_RETURN:
this.save_row().then(function (result) {
if (result.created) {
self.new_record();
return;
}
var next_record_id,
next_record = self.records.at(
self.records.indexOf(result.edited_record) + 1);
if (next_record) {
next_record_id = next_record.get('id');
self.dataset.index = _(self.dataset.ids)
.indexOf(next_record_id);
} else {
self.dataset.index = 0;
next_record_id = self.records.at(0).get('id');
}
self.edit_record(next_record_id);
});
break;
case KEY_ESCAPE:
this.cancel_edition();
break;
}
},
render_row_as_form: function (row) {
var self = this;
this.cancel_pending_edition().then(function () {
@ -179,24 +208,10 @@ openerp.web.list_editable = function (openerp) {
.delegate('button.oe-edit-row-save', 'click', function () {
self.save_row();
})
.delegate('button.oe-edit-row-cancel', 'click', function () {
self.cancel_edition();
})
.delegate('button', 'keyup', function (e) {
e.stopImmediatePropagation();
})
.keyup(function (e) {
switch (e.which) {
case KEY_RETURN:
self.save_row(true);
break;
case KEY_ESCAPE:
self.cancel_edition();
break;
default:
return;
}
});
.keyup($.proxy(self, 'on_row_keyup'));
if (row) {
$new_row.replaceAll(row);
} else if (self.options.editable) {
@ -227,24 +242,25 @@ openerp.web.list_editable = function (openerp) {
self.edition_form.appendTo();
$.when(self.edition_form.on_loaded(self.get_form_fields_view())).then(function () {
// put in $.when just in case FormView.on_loaded becomes asynchronous
$new_row.find('td')
$new_row.find('> td')
.addClass('oe-field-cell')
.removeAttr('width')
.end()
.find('td:first').removeClass('oe-field-cell').end()
.find('td:last').removeClass('oe-field-cell').end();
if (self.options.selectable) {
$new_row.prepend('<th>');
}
if (self.options.isClarkGable) {
$new_row.prepend('<th>');
}
// pad in case of groupby
_(self.columns).each(function (column) {
if (column.meta) {
$new_row.prepend('<td>');
}
});
// Add columns for the cancel and save buttons, if
// there are none in the list
if (!self.options.selectable) {
self.view.pad_columns(
1, {except: $new_row, position: 'before'});
}
// Add column for the save, if
// there is none in the list
if (!self.options.deletable) {
self.view.pad_columns(
1, {except: $new_row});
@ -274,53 +290,43 @@ openerp.web.list_editable = function (openerp) {
});
},
/**
* Saves the current row, and triggers the edition of its following
* sibling if asked.
* Saves the current row, and returns a Deferred resolving to an object
* with the following properties:
*
* @param {Boolean} [edit_next=false] should the next row become editable
* @returns {$.Deferred}
* ``created``
* Boolean flag indicating whether the record saved was being created
* (``true`` or edited (``false``)
* ``edited_record``
* The result of saving the record (either the newly created record,
* or the post-edition record), after insertion in the Collection if
* needs be.
*
* @returns {$.Deferred<{created: Boolean, edited_record: Record}>}
*/
save_row: function (edit_next) {
save_row: function () {
//noinspection JSPotentiallyInvalidConstructorUsage
var self = this, done = $.Deferred();
this.edition_form.do_save(function (result) {
if (result.created && !self.edition_id) {
self.records.add({id: result.result},
{at: self.options.editable === 'top' ? 0 : null});
self.edition_id = result.result;
}
var edited_record = self.records.get(self.edition_id),
next_record = self.records.at(
self.records.indexOf(edited_record) + 1);
return this.edition_form
.do_save(null, this.options.editable === 'top')
.pipe(function (result) {
if (result.created && !self.edition_id) {
self.records.add({id: result.result},
{at: self.options.editable === 'top' ? 0 : null});
self.edition_id = result.result;
}
var edited_record = self.records.get(self.edition_id);
$.when(
self.handle_onwrite(self.edition_id),
self.cancel_pending_edition().then(function () {
$(self).trigger('saved', [self.dataset]);
if (!edit_next) {
return;
}
if (result.created) {
self.new_record();
return;
}
var next_record_id;
if (next_record) {
next_record_id = next_record.get('id');
self.dataset.index = _(self.dataset.ids)
.indexOf(next_record_id);
} else {
self.dataset.index = 0;
next_record_id = self.records.at(0).get('id');
}
self.edit_record(next_record_id);
})).then(function () {
done.resolve();
});
}, this.options.editable === 'top').fail(function () {
done.reject();
});
return done.promise();
return $.when(
self.handle_onwrite(self.edition_id),
self.cancel_pending_edition().then(function () {
$(self).trigger('saved', [self.dataset]);
})).pipe(function () {
return {
created: result.created || false,
edited_record: edited_record
};
}, null);
}, null);
},
/**
* If the current list is being edited, ensures it's saved

View File

@ -0,0 +1,253 @@
openerp.web.page = function (openerp) {
var _t = openerp.web._t,
_lt = openerp.web._lt;
openerp.web.views.add('page', 'openerp.web.PageView');
openerp.web.PageView = openerp.web.FormView.extend({
form_template: "PageView",
display_name: _lt('Page'),
init: function () {
this._super.apply(this, arguments);
this.registry = openerp.web.page.readonly;
},
reload: function () {
if (this.dataset.index == null) {
this.do_prev_view();
return $.Deferred().reject().promise();
}
return this._super();
},
on_loaded: function(data) {
this._super(data);
this.$form_header.find('button.oe_form_button_edit').click(this.on_button_edit);
this.$form_header.find('button.oe_form_button_create').click(this.on_button_create);
this.$form_header.find('button.oe_form_button_duplicate').click(this.on_button_duplicate);
this.$form_header.find('button.oe_form_button_delete').click(this.on_button_delete);
},
on_button_edit: function() {
return this.do_switch_view('form');
},
on_button_create: function() {
this.dataset.index = null;
return this.do_switch_view('form');
},
on_button_duplicate: function() {
var self = this;
var def = $.Deferred();
$.when(this.has_been_loaded).then(function() {
self.dataset.call('copy', [self.datarecord.id, {}, self.dataset.context]).then(function(new_id) {
return self.on_created({ result : new_id });
}).then(function() {
return self.do_switch_view('form');
}).then(function() {
def.resolve();
});
});
return def.promise();
},
on_button_delete: function() {
var self = this;
var def = $.Deferred();
$.when(this.has_been_loaded).then(function() {
if (self.datarecord.id && confirm(_t("Do you really want to delete this record?"))) {
self.dataset.unlink([self.datarecord.id]).then(function() {
self.on_pager_action('next');
def.resolve();
});
} else {
$.async_when().then(function () {
def.reject();
})
}
});
return def.promise();
}
});
/** @namespace */
openerp.web.page = {};
openerp.web.page.WidgetFrameReadonly = openerp.web.form.WidgetFrame.extend({
template: 'WidgetFrame.readonly'
});
openerp.web.page.FieldReadonly = openerp.web.form.Field.extend({
});
openerp.web.page.FieldCharReadonly = openerp.web.page.FieldReadonly.extend({
template: 'FieldChar.readonly',
init: function(view, node) {
this._super(view, node);
this.password = this.node.attrs.password === 'True' || this.node.attrs.password === '1';
},
set_value: function (value) {
this._super.apply(this, arguments);
var show_value = openerp.web.format_value(value, this, '');
if (this.password) {
show_value = new Array(show_value.length + 1).join('*');
}
this.$element.find('div').text(show_value);
return show_value;
}
});
openerp.web.page.FieldURIReadonly = openerp.web.page.FieldCharReadonly.extend({
template: 'FieldURI.readonly',
scheme: null,
set_value: function (value) {
var displayed = this._super.apply(this, arguments);
this.$element.find('a')
.attr('href', this.scheme + ':' + displayed)
.text(displayed);
}
});
openerp.web.page.FieldEmailReadonly = openerp.web.page.FieldURIReadonly.extend({
scheme: 'mailto'
});
openerp.web.page.FieldUrlReadonly = openerp.web.page.FieldURIReadonly.extend({
set_value: function (value) {
var s = /(\w+):(.+)/.exec(value);
if (!s || !(s[1] === 'http' || s[1] === 'https')) { return; }
this.scheme = s[1];
this._super(s[2]);
}
});
openerp.web.page.FieldBooleanReadonly = openerp.web.form.FieldBoolean.extend({
update_dom: function() {
this._super.apply(this, arguments);
this.$element.find('input').prop('disabled', true);
}
});
openerp.web.page.FieldSelectionReadonly = openerp.web.page.FieldReadonly.extend({
template: 'FieldChar.readonly',
init: function(view, node) {
// lifted straight from r/w version
var self = this;
this._super(view, node);
this.values = _.clone(this.field.selection);
_.each(this.values, function(v, i) {
if (v[0] === false && v[1] === '') {
self.values.splice(i, 1);
}
});
this.values.unshift([false, '']);
},
set_value: function (value) {
value = value === null ? false : value;
value = value instanceof Array ? value[0] : value;
var option = _(this.values)
.detect(function (record) { return record[0] === value; });
this._super(value);
this.$element.find('div').text(option ? option[1] : this.values[0][1]);
}
});
openerp.web.page.FieldMany2OneReadonly = openerp.web.page.FieldURIReadonly.extend({
set_value: function (value) {
value = value || null;
this.invalid = false;
var self = this;
this.value = value;
self.update_dom();
self.on_value_changed();
var real_set_value = function(rval) {
self.value = rval;
self.$element.find('a')
.unbind('click')
.text(rval ? rval[1] : '')
.click(function () {
self.do_action({
type: 'ir.actions.act_window',
res_model: self.field.relation,
res_id: self.value[0],
context: self.build_context(),
views: [[false, 'page'], [false, 'form']],
target: 'current'
});
return false;
});
};
if (value && !(value instanceof Array)) {
new openerp.web.DataSetStatic(
this, this.field.relation, self.build_context())
.name_get([value], function(data) {
real_set_value(data[0]);
});
} else {
$.async_when().then(function() {real_set_value(value);});
}
},
get_value: function() {
if (!this.value) {
return false;
} else if (this.value instanceof Array) {
return this.value[0];
} else {
return this.value;
}
}
});
openerp.web.page.FieldReferenceReadonly = openerp.web.page.FieldMany2OneReadonly.extend({
set_value: function (value) {
if (!value) {
return this._super(null);
}
var reference = value.split(',');
this.field.relation = reference[0];
var id = parseInt(reference[1], 10);
return this._super(id);
},
get_value: function () {
if (!this.value) {
return null;
}
return _.str.sprintf('%s,%d', this.field.relation, this.value[0]);
}
});
openerp.web.page.FieldMany2ManyReadonly = openerp.web.form.FieldMany2Many.extend({
force_readonly: true
});
openerp.web.page.FieldOne2ManyReadonly = openerp.web.form.FieldOne2Many.extend({
force_readonly: true
});
openerp.web.page.FieldBinaryFileReadonly = openerp.web.form.FieldBinary.extend({
template: 'FieldURI.readonly',
start: function() {
this._super.apply(this, arguments);
var self = this;
this.$element.find('a').click(function() {
if (self.value) {
self.on_save_as();
}
return false;
});
},
set_value: function(value) {
this._super.apply(this, arguments);
this.$element.find('a').show(!!value);
if (value) {
var show_value = _t("Download") + " " + (this.view.datarecord[this.node.attrs.filename] || '');
this.$element.find('a').text(show_value);
}
}
});
openerp.web.page.readonly = openerp.web.form.widgets.clone({
'frame': 'openerp.web.page.WidgetFrameReadonly',
'char': 'openerp.web.page.FieldCharReadonly',
'email': 'openerp.web.page.FieldEmailReadonly',
'url': 'openerp.web.page.FieldUrlReadonly',
'text': 'openerp.web.page.FieldCharReadonly',
'text_wiki' : 'openerp.web.page.FieldCharReadonly',
'date': 'openerp.web.page.FieldCharReadonly',
'datetime': 'openerp.web.page.FieldCharReadonly',
'selection' : 'openerp.web.page.FieldSelectionReadonly',
'many2one': 'openerp.web.page.FieldMany2OneReadonly',
'many2many' : 'openerp.web.page.FieldMany2ManyReadonly',
'one2many' : 'openerp.web.page.FieldOne2ManyReadonly',
'one2many_list' : 'openerp.web.page.FieldOne2ManyReadonly',
'reference': 'openerp.web.page.FieldReferenceReadonly',
'boolean': 'openerp.web.page.FieldBooleanReadonly',
'float': 'openerp.web.page.FieldCharReadonly',
'integer': 'openerp.web.page.FieldCharReadonly',
'float_time': 'openerp.web.page.FieldCharReadonly',
'binary': 'openerp.web.page.FieldBinaryFileReadonly',
});
};

View File

@ -3,10 +3,12 @@
*---------------------------------------------------------*/
openerp.web.view_tree = function(openerp) {
var QWeb = openerp.web.qweb;
var QWeb = openerp.web.qweb,
_lt = openerp.web._lt;
openerp.web.views.add('tree', 'openerp.web.TreeView');
openerp.web.TreeView = openerp.web.View.extend(/** @lends openerp.web.TreeView# */{
display_name: _lt('Tree'),
/**
* Indicates that this view is not searchable, and thus that no search
* view should be displayed (if there is one active).
@ -111,6 +113,9 @@ openerp.web.TreeView = openerp.web.View.extend(/** @lends openerp.web.TreeView#
}
});
// TODO store open nodes in url ?...
this.do_push_state({});
if (!this.fields_view.arch.attrs.colors) {
return;
}

View File

@ -3,8 +3,8 @@
*---------------------------------------------------------*/
openerp.web.views = function(session) {
var _t = session.web._t;
var QWeb = session.web.qweb,
_t = session.web._t;
/**
* Registry for all the client actions key: tag value: widget
@ -20,6 +20,7 @@ session.web.ActionManager = session.web.Widget.extend({
identifier_prefix: "actionmanager",
init: function(parent) {
this._super(parent);
this.inner_action = null;
this.inner_viewmanager = null;
this.dialog = null;
this.dialog_viewmanager = null;
@ -46,35 +47,61 @@ session.web.ActionManager = session.web.Widget.extend({
this.client_widget = null;
}
},
url_update: function(action) {
var url = {};
if(action.id)
url.action_id = action.id;
// this.url = {
// "model": action.res_model,
// "domain": action.domain,
// };
// action.res_model
// action.domain
// action.context
// after
// action.views
// action.res_id
// mode
// menu
this.do_url_set_hash(url);
},
do_url_set_hash: function(url) {
},
on_url_hashchange: function(url) {
var self = this;
if(url && url.action_id) {
self.rpc("/web/action/load", { action_id: url.action_id }, function(result) {
self.do_action(result.result);
});
do_push_state: function(state) {
if (this.widget_parent && this.widget_parent.do_push_state) {
if (this.inner_action) {
if (this.inner_action.id) {
state['action_id'] = this.inner_action.id;
} else {
state['model'] = this.inner_action.res_model;
}
}
this.widget_parent.do_push_state(state);
}
},
do_load_state: function(state) {
var self = this,
action_loaded;
if (state.action_id) {
var run_action = (!this.inner_viewmanager) || this.inner_viewmanager.action.id !== state.action_id;
if (run_action) {
this.null_action();
action_loaded = this.do_action(state.action_id);
}
}
else if (state.model && state.id) {
// TODO handle context & domain ?
this.null_action();
action = {
res_model: state.model,
res_id: state.id,
type: 'ir.actions.act_window',
views: [[false, 'page'], [false, 'form']]
};
action_loaded = this.do_action(action);
}
else if (state.client_action) {
this.null_action();
this.ir_actions_client(state.client_action);
}
$.when(action_loaded || null).then(function() {
if (self.inner_viewmanager) {
self.inner_viewmanager.do_load_state(state);
}
});
},
do_action: function(action, on_close) {
if (_.isNumber(action)) {
var self = this;
return self.rpc("/web/action/load", { action_id: action }, function(result) {
self.do_action(result.result, on_close);
});
}
if (!action.type) {
console.error("No type for action", action);
return;
}
var type = action.type.replace(/\./g,'_');
var popup = action.target === 'new';
action.flags = _.extend({
@ -85,12 +112,25 @@ session.web.ActionManager = session.web.Widget.extend({
pager : !popup
}, action.flags || {});
if (!(type in this)) {
console.log("Action manager can't handle action of type " + action.type, action);
console.error("Action manager can't handle action of type " + action.type, action);
return;
}
return this[type](action, on_close);
},
null_action: function() {
this.dialog_stop();
this.content_stop();
},
ir_actions_act_window: function (action, on_close) {
var self = this;
if (_(['base.module.upgrade', 'base.setup.installer'])
.contains(action.res_model)) {
var old_close = on_close;
on_close = function () {
session.webclient.do_reload();
if (old_close) { old_close(); }
};
}
if (action.target === 'new') {
if (this.dialog == null) {
this.dialog = new session.web.Dialog(this, { title: action.name, width: '80%' });
@ -104,29 +144,20 @@ session.web.ActionManager = session.web.Widget.extend({
this.dialog_viewmanager.appendTo(this.dialog.$element);
this.dialog.open();
} else {
if(action.menu_id) {
return this.widget_parent.do_action(action);
}
this.dialog_stop();
this.content_stop();
this.inner_action = action;
this.inner_viewmanager = new session.web.ViewManagerAction(this, action);
this.inner_viewmanager.appendTo(this.$element);
this.url_update(action);
}
/* new window code
this.rpc("/web/session/save_session_action", { the_action : action}, function(key) {
var url = window.location.protocol + "//" + window.location.host + window.location.pathname + "?" + jQuery.param({ s_action : "" + key });
window.open(url,'_blank');
});
*/
},
ir_actions_act_window_close: function (action, on_closed) {
if (!this.dialog && on_closed) {
on_closed();
}
if (this.dialog && action.context) {
var model = action.context.active_model;
if (model === 'base.module.upgrade' || model === 'base.setup.installer' || model === 'base.module.upgrade') {
session.webclient.do_reload();
}
}
this.dialog_stop();
},
ir_actions_server: function (action, on_closed) {
@ -140,6 +171,7 @@ session.web.ActionManager = session.web.Widget.extend({
},
ir_actions_client: function (action) {
this.content_stop();
this.dialog_stop();
var ClientWidget = session.web.client_actions.get_object(action.tag);
(this.client_widget = new ClientWidget(this, action.params)).appendTo(this);
},
@ -167,6 +199,9 @@ session.web.ActionManager = session.web.Widget.extend({
},
ir_actions_act_url: function (action) {
window.open(action.url, action.target === 'self' ? '_self' : '_blank');
},
ir_ui_menu: function (action) {
this.widget_parent.do_action(action);
}
});
@ -181,17 +216,28 @@ session.web.ViewManager = session.web.Widget.extend(/** @lends session.web.View
* @param dataset
* @param views
*/
init: function(parent, dataset, views) {
init: function(parent, dataset, views, flags) {
this._super(parent);
this.model = dataset ? dataset.model : undefined;
this.dataset = dataset;
this.searchview = null;
this.last_search = false;
this.active_view = null;
this.views_src = _.map(views, function(x) {return x instanceof Array? {view_id: x[0], view_type: x[1]} : x;});
this.views_src = _.map(views, function(x) {
if (x instanceof Array) {
var View = session.web.views.get_object(x[1], true);
return {
view_id: x[0],
view_type: x[1],
label: View ? View.prototype.display_name : (void 'nope')
};
} else {
return x;
}
});
this.views = {};
this.flags = this.flags || {};
this.flags = flags || {};
this.registry = session.web.views;
this.views_history = [];
},
render: function() {
return session.web.qweb.render(this.template, {
@ -211,6 +257,7 @@ session.web.ViewManager = session.web.Widget.extend(/** @lends session.web.View
var views_ids = {};
_.each(this.views_src, function(view) {
self.views[view.view_type] = $.extend({}, view, {
deferred : $.Deferred(),
controller : null,
options : _.extend({
sidebar_id : self.element_id + '_sidebar_' + view.view_type,
@ -223,20 +270,29 @@ session.web.ViewManager = session.web.Widget.extend(/** @lends session.web.View
if (this.flags.views_switcher === false) {
this.$element.find('.oe_vm_switch').hide();
}
// switch to the first one in sequence
return this.on_mode_switch(this.views_src[0].view_type);
// If no default view defined, switch to the first one in sequence
var default_view = this.flags.default_view || this.views_src[0].view_type;
return this.on_mode_switch(default_view);
},
/**
* Asks the view manager to switch visualization mode.
*
* @param {String} view_type type of view to display
* @param {Boolean} [no_store=false] don't store the view being switched to on the switch stack
* @returns {jQuery.Deferred} new view loading promise
*/
on_mode_switch: function(view_type) {
on_mode_switch: function(view_type, no_store) {
var self = this,
view = this.views[view_type],
view_promise;
if(!view)
return $.Deferred().reject();
if (!no_store) {
this.views_history.push(view_type);
}
this.active_view = view_type;
var view = this.views[view_type];
if (!view.controller) {
// Lazy loading of views
var controllerclass = this.registry.get_object(view_type);
@ -245,17 +301,19 @@ session.web.ViewManager = session.web.Widget.extend(/** @lends session.web.View
controller.set_embedded_view(view.embedded_view);
}
controller.do_switch_view.add_last(this.on_mode_switch);
controller.do_prev_view.add_last(this.on_prev_view);
var container = $("#" + this.element_id + '_view_' + view_type);
view_promise = controller.appendTo(container);
this.views[view_type].controller = controller;
this.views[view_type].deferred.resolve(view_type);
$.when(view_promise).then(function() {
self.on_controller_inited(view_type, controller);
if (self.searchview && view.controller.searchable !== false) {
self.do_searchview_search();
self.searchview.ready.then(self.searchview.do_search);
}
});
} else if (this.searchview && view.controller.searchable !== false) {
self.do_searchview_search();
this.searchview.ready.then(this.searchview.do_search);
}
if (this.searchview) {
@ -263,26 +321,45 @@ session.web.ViewManager = session.web.Widget.extend(/** @lends session.web.View
}
this.$element
.find('.views-switchers button').removeAttr('disabled')
.find('.oe_vm_switch button').removeAttr('disabled')
.filter('[data-view-type="' + view_type + '"]')
.attr('disabled', true);
for (var view_name in this.views) {
if (!this.views.hasOwnProperty(view_name)) { continue; }
if (this.views[view_name].controller) {
if (view_name === view_type) {
$.when(view_promise).then(this.views[view_name].controller.do_show);
} else {
this.views[view_name].controller.do_hide();
}
}
}
$.when(view_promise).then(function () {
self.$element.find('.oe_view_title:first').text(
_.each(_.keys(self.views), function(view_name) {
var controller = self.views[view_name].controller;
if (controller) {
if (view_name === view_type) {
controller.do_show();
} else {
controller.do_hide();
}
}
});
self.$element.find('.oe_view_title_text:first').text(
self.display_title());
});
return view_promise;
},
/**
* Returns to the view preceding the caller view in this manager's
* navigation history (the navigation history is appended to via
* on_mode_switch)
*
* @param {Boolean} [created=false] returning from a creation
* @returns {$.Deferred} switching end signal
*/
on_prev_view: function (created) {
var current_view = this.views_history.pop();
var previous_view = this.views_history[this.views_history.length - 1];
// APR special case: "If creation mode from list (and only from a list),
// after saving, go to page view (don't come back in list)"
if (created && current_view === 'form' && previous_view === 'list') {
return this.on_mode_switch('page');
}
return this.on_mode_switch(previous_view, true);
},
/**
* Sets up the current viewmanager's search view.
*
@ -303,21 +380,20 @@ session.web.ViewManager = session.web.Widget.extend(/** @lends session.web.View
},
do_searchview_search: function(domains, contexts, groupbys) {
var self = this,
controller = this.views[this.active_view].controller;
if (domains || contexts) {
this.rpc('/web/session/eval_domain_and_context', {
domains: [this.action.domain || []].concat(domains || []),
contexts: [this.action.context || {}].concat(contexts || []),
group_by_seq: groupbys || []
}, function (results) {
self.dataset.context = results.context;
self.dataset.domain = results.domain;
self.last_search = [results.domain, results.context, results.group_by];
controller.do_search(results.domain, results.context, results.group_by);
});
} else if (this.last_search) {
controller.do_search.apply(controller, this.last_search);
}
controller = this.views[this.active_view].controller,
action_context = this.action.context || {};
this.rpc('/web/session/eval_domain_and_context', {
domains: [this.action.domain || []].concat(domains || []),
contexts: [action_context].concat(contexts || []),
group_by_seq: groupbys || []
}, function (results) {
self.dataset.context = results.context;
self.dataset.domain = results.domain;
var groupby = results.group_by.length
? results.group_by
: action_context.group_by;
controller.do_search(results.domain, results.context, groupby || []);
});
},
/**
* Event launched when a controller has been inited.
@ -341,7 +417,8 @@ session.web.ViewManager = session.web.Widget.extend(/** @lends session.web.View
/**
* Called by children view after executing an action
*/
on_action_executed: function () {},
on_action_executed: function () {
},
display_title: function () {
var view = this.views[this.active_view];
if (view) {
@ -365,7 +442,19 @@ session.web.ViewManagerAction = session.web.ViewManager.extend(/** @lends oepner
// dataset initialization will take the session from ``this``, so if we
// do not have it yet (and we don't, because we've not called our own
// ``_super()``) rpc requests will blow up.
this._super(parent, null, action.views);
var flags = action.flags || {};
if (action.res_model == 'board.board' && action.view_mode === 'form') {
// Special case for Dashboards
_.extend(flags, {
views_switcher : false,
display_title : false,
search_view : false,
pager : false,
sidebar : false,
action_buttons : false
});
}
this._super(parent, null, action.views, flags);
this.session = parent.session;
this.action = action;
var dataset = new session.web.DataSetSearch(this, action.res_model, action.context, action.domain);
@ -374,12 +463,6 @@ session.web.ViewManagerAction = session.web.ViewManager.extend(/** @lends oepner
dataset.index = 0;
}
this.dataset = dataset;
this.flags = this.action.flags || {};
if (action.res_model == 'board.board' && action.views.length == 1 && action.views) {
// Not elegant but allows to avoid form chrome (pager, save/new
// buttons, sidebar, ...) displaying
this.flags.search_view = this.flags.pager = this.flags.sidebar = this.flags.action_buttons = false;
}
// setup storage for session-wise menu hiding
if (this.session.hidden_menutips) {
@ -411,21 +494,13 @@ session.web.ViewManagerAction = session.web.ViewManager.extend(/** @lends oepner
var main_view_loaded = this._super();
var manager_ready = $.when(searchview_loaded, main_view_loaded);
if (searchview_loaded && this.action['auto_search'] !== false) {
// schedule auto_search
manager_ready.then(this.searchview.do_search);
}
this.$element.find('.oe_get_xml_view').click(function () {
// TODO: add search view?
$('<pre>').text(session.web.json_node_to_xml(
self.views[self.active_view].controller.fields_view.arch, true))
.dialog({ width: '95%'});
});
this.$element.find('.oe_debug_view').change(this.on_debug_changed);
if (this.action.help && !this.flags.low_profile) {
var Users = new session.web.DataSet(self, 'res.users'),
header = this.$element.find('.oe-view-manager-header');
header.delegate('blockquote button', 'click', function() {
$tips = this.$element.find('.oe_view_manager_menu_tips');
$tips.delegate('blockquote button', 'click', function() {
var $this = $(this);
//noinspection FallthroughInSwitchStatementJS
switch ($this.attr('name')) {
@ -442,7 +517,7 @@ session.web.ViewManagerAction = session.web.ViewManager.extend(/** @lends oepner
if (!(user && user.id === self.session.uid)) {
return;
}
header.find('blockquote').toggle(user.menu_tips);
$tips.find('blockquote').toggle(user.menu_tips);
});
}
}
@ -459,29 +534,101 @@ session.web.ViewManagerAction = session.web.ViewManager.extend(/** @lends oepner
return manager_ready;
},
on_mode_switch: function (view_type) {
on_debug_changed: function (evt) {
var $sel = $(evt.currentTarget),
$option = $sel.find('option:selected'),
val = $sel.val();
switch (val) {
case 'fvg':
$('<pre>').text(session.web.json_node_to_xml(
this.views[this.active_view].controller.fields_view.arch, true)
).dialog({ width: '95%'});
break;
case 'edit':
var model = $option.data('model'),
id = $option.data('id'),
domain = $option.data('domain'),
action = {
res_model : model,
type : 'ir.actions.act_window',
view_type : 'form',
view_mode : 'form',
target : 'new',
flags : {
action_buttons : true,
form : {
resize_textareas : true
}
}
};
if (id) {
action.res_id = id,
action.views = [[false, 'form']];
} else if (domain) {
action.views = [[false, 'list'], [false, 'form']];
action.domain = domain;
action.flags.views_switcher = true;
}
this.do_action(action);
break;
default:
if (val) {
console.log("No debug handler for ", val);
}
}
evt.currentTarget.selectedIndex = 0;
},
on_mode_switch: function (view_type, no_store) {
var self = this;
return $.when(
this._super(view_type),
this.shortcut_check(this.views[view_type])
).then(function() {
var controller = self.views[self.active_view].controller,
fvg = controller.fields_view,
view_id = (fvg && fvg.view_id) || '--';
self.$element.find('.oe_get_xml_view span').text(view_id);
if (!self.action.name && fvg) {
self.$element.find('.oe_view_title').text(fvg.arch.attrs.string || fvg.name);
}
var $title = self.$element.find('.oe_view_title'),
$search_prefix = $title.find('span.oe_searchable_view');
if (controller.searchable !== false) {
if (!$search_prefix.length) {
$title.prepend('<span class="oe_searchable_view">' + _t("Search: ") + '</span>');
}
} else {
$search_prefix.remove();
return $.when(this._super(view_type, no_store)).then(function () {
self.shortcut_check(self.views[view_type]);
self.$element.find('.oe-view-manager-logs:first')
.addClass('oe-folded').removeClass('oe-has-more')
.find('ul').empty();
var controller = self.views[self.active_view].controller,
fvg = controller.fields_view,
view_id = (fvg && fvg.view_id) || '--';
self.$element.find('.oe_debug_view').html(QWeb.render('ViewManagerDebug', {
view: controller,
view_manager: self
}));
if (!self.action.name && fvg) {
self.$element.find('.oe_view_title_text').text(fvg.arch.attrs.string || fvg.name);
}
var $title = self.$element.find('.oe_view_title_text'),
$search_prefix = $title.find('span.oe_searchable_view');
if (controller.searchable !== false && self.flags.search_view !== false) {
if (!$search_prefix.length) {
$title.prepend('<span class="oe_searchable_view">' + _t("Search: ") + '</span>');
}
} else {
$search_prefix.remove();
}
});
},
do_push_state: function(state) {
if (this.widget_parent && this.widget_parent.do_push_state) {
state["view_type"] = this.active_view;
this.widget_parent.do_push_state(state);
}
},
do_load_state: function(state) {
var self = this,
defs = [];
if (state.view_type && state.view_type !== this.active_view) {
defs.push(
this.views[this.active_view].deferred.pipe(function() {
return self.on_mode_switch(state.view_type, true);
})
);
}
$.when(defs).then(function() {
self.views[self.active_view].controller.do_load_state(state);
});
},
shortcut_check : function(view) {
@ -489,7 +636,7 @@ session.web.ViewManagerAction = session.web.ViewManager.extend(/** @lends oepner
var grandparent = this.widget_parent && this.widget_parent.widget_parent;
// display shortcuts if on the first view for the action
var $shortcut_toggle = this.$element.find('.oe-shortcut-toggle');
if (!(grandparent instanceof session.web.WebClient) ||
if (!this.action.name ||
!(view.view_type === this.views_src[0].view_type
&& view.view_id === this.views_src[0].view_id)) {
$shortcut_toggle.hide();
@ -575,25 +722,29 @@ session.web.Sidebar = session.web.Widget.extend({
});
},
add_default_sections: function() {
var self = this,
view = this.widget_parent,
view_manager = view.widget_parent,
action = view_manager.action;
if (this.session.uid === 1) {
this.add_section(_t('Customize'), 'customize');
this.add_items('customize', [
{
label: _t("Manage Views"),
callback: this.widget_parent.on_sidebar_manage_views,
callback: view.on_sidebar_manage_views,
title: _t("Manage views of the current object")
}, {
label: _t("Edit Workflow"),
callback: this.widget_parent.on_sidebar_edit_workflow,
callback: view.on_sidebar_edit_workflow,
title: _t("Manage views of the current object"),
classname: 'oe_hide oe_sidebar_edit_workflow'
}, {
label: _t("Customize Object"),
callback: this.widget_parent.on_sidebar_customize_object,
callback: view.on_sidebar_customize_object,
title: _t("Manage views of the current object")
}, {
label: _t("Translate"),
callback: this.widget_parent.on_sidebar_translate,
callback: view.on_sidebar_translate,
title: _t("Technical translation")
}
]);
@ -603,13 +754,13 @@ session.web.Sidebar = session.web.Widget.extend({
this.add_items('other', [
{
label: _t("Import"),
callback: this.widget_parent.on_sidebar_import
callback: view.on_sidebar_import
}, {
label: _t("Export"),
callback: this.widget_parent.on_sidebar_export
callback: view.on_sidebar_export
}, {
label: _t("View Log"),
callback: this.widget_parent.on_sidebar_view_log,
callback: view.on_sidebar_view_log,
classname: 'oe_hide oe_sidebar_view_log'
}
]);
@ -716,7 +867,10 @@ session.web.Sidebar = session.web.Widget.extend({
additional_context);
result.result.flags = result.result.flags || {};
result.result.flags.new_window = true;
self.do_action(result.result);
self.do_action(result.result, function () {
// reload view
self.widget_parent.reload();
});
});
});
},
@ -732,7 +886,7 @@ session.web.Sidebar = session.web.Widget.extend({
});
session.web.TranslateDialog = session.web.Dialog.extend({
dialog_title: _t("Translations"),
dialog_title: {toString: function () { return _t("Translations"); }},
init: function(view) {
// TODO fme: should add the language to fields_view_get because between the fields view get
// and the moment the user opens the translation dialog, the user language could have been changed
@ -847,6 +1001,8 @@ session.web.TranslateDialog = session.web.Dialog.extend({
session.web.View = session.web.Widget.extend(/** @lends session.web.View# */{
template: "EmptyComponent",
// name displayed in view switchers
display_name: '',
set_default_options: function(options) {
this.options = options || {};
_.defaults(this.options, {
@ -915,7 +1071,19 @@ session.web.View = session.web.Widget.extend(/** @lends session.web.View# */{
if (action_data.special) {
return handler({result: {"type":"ir.actions.act_window_close"}});
} else if (action_data.type=="object") {
return dataset.call_button(action_data.name, [[record_id], context], handler);
var args = [[record_id]], additional_args = [];
if (action_data.args) {
try {
// Warning: quotes and double quotes problem due to json and xml clash
// Maybe we should force escaping in xml or do a better parse of the args array
additional_args = JSON.parse(action_data.args.replace(/'/g, '"'));
args = args.concat(additional_args);
} catch(e) {
console.error("Could not JSON.parse arguments", action_data.args);
}
}
args.push(context);
return dataset.call_button(action_data.name, args, handler);
} else if (action_data.type=="action") {
return this.rpc('/web/action/load', { action_id: parseInt(action_data.name, 10), context: context, do_not_eval: true}, handler);
} else {
@ -933,11 +1101,33 @@ session.web.View = session.web.Widget.extend(/** @lends session.web.View# */{
this.embedded_view = embedded_view;
this.options.sidebar = false;
},
do_switch_view: function(view) {
do_show: function () {
this.$element.show();
},
do_hide: function () {
this.$element.hide();
},
do_push_state: function(state) {
if (this.widget_parent && this.widget_parent.do_push_state) {
this.widget_parent.do_push_state(state);
}
},
do_load_state: function(state) {
},
/**
* Switches to a specific view type
*
* @param {String} view view type to switch to
*/
do_switch_view: function(view) {
},
/**
* Cancels the switch to the current view, switches to the previous one
*/
do_prev_view: function () {
},
do_search: function(view) {
},
set_common_sidebar_sections: function(sidebar) {
sidebar.add_default_sections();
},
@ -953,7 +1143,14 @@ session.web.View = session.web.Widget.extend(/** @lends session.web.View# */{
console.log('Todo');
},
on_sidebar_customize_object: function() {
console.log('Todo');
var self = this;
this.rpc('/web/dataset/search_read', {
model: 'ir.model',
fields: ['id'],
domain: [['model', '=', self.dataset.model]]
}, function (result) {
self.on_sidebar_edit_resource('ir.model', result.ids[0]);
});
},
on_sidebar_import: function() {
var import_view = new session.web.DataImport(this, this.dataset);
@ -969,15 +1166,42 @@ session.web.View = session.web.Widget.extend(/** @lends session.web.View# */{
domain : [['type', '!=', 'object'], '|', ['name', '=', this.dataset.model], ['name', 'ilike', this.dataset.model + ',']],
views: [[false, 'list'], [false, 'form']],
type : 'ir.actions.act_window',
auto_search : true,
view_type : "list",
view_mode : "list"
});
},
on_sidebar_edit_resource: function(model, id, domain) {
var action = {
res_model : model,
type : 'ir.actions.act_window',
view_type : 'form',
view_mode : 'form',
target : 'new',
flags : {
action_buttons : true
}
}
if (id) {
action.res_id = id,
action.views = [[false, 'form']];
} else if (domain) {
action.views = [[false, 'list'], [false, 'form']];
action.domain = domain;
action.flags.views_switcher = true;
}
this.do_action(action);
},
on_sidebar_view_log: function() {
},
sidebar_context: function () {
return $.Deferred().resolve({}).promise();
return $.when();
},
/**
* Asks the view to reload itself, if the reloading is asynchronous should
* return a {$.Deferred} indicating when the reloading is done.
*/
reload: function () {
return $.when();
}
});

View File

@ -19,6 +19,7 @@
</t>
<t t-name="Interface">
<div id="oe_loading"></div>
<table border="0" cellpadding="0" cellspacing="0" width="100%" height="100%" class="main_table">
<tr>
<td colspan="2" valign="top">
@ -36,15 +37,14 @@
<div id="oe_database" class="database"></div>
</td>
<td valign="top">
<div id="oe_db_options"></div>
<div id="oe_db_options"></div>
</td>
</tr>
<tr>
<td colspan="2" valign="top" height="100%">
<table cellspacing="0" cellpadding="0" border="0" height="100%" width="100%">
<tr>
<td valign="top" id="oe_secondary_menu" class="secondary_menu">
</td>
<td valign="top" id="oe_secondary_menu" class="secondary_menu"></td>
<td valign="top" class="oe-application-container">
<div id="oe_app" class="oe-application">
</div>
@ -119,7 +119,7 @@
equalTo="input[name=create_admin_pwd]"/></td>
</tr>
<tr>
<td colspan="2" align="right"><input type="submit" value="Create"/></td>
<td colspan="2" align="right"><button class="oe_button">Create</button></td>
</tr>
</table>
</form>
@ -149,7 +149,7 @@
<td><input type="password" name="drop_pwd" class="required"/></td>
</tr>
<tr>
<td colspan="2" align="right"><input type="submit" value="Drop"/></td>
<td colspan="2" align="right"><button class="oe_button">Drop</button></td>
</tr>
</table>
</form>
@ -181,7 +181,7 @@
<td><input type="password" name="backup_pwd" class="required"/></td>
</tr>
<tr>
<td colspan="2" align="right"><input type="submit" value="Backup"/></td>
<td colspan="2" align="right"><button class="oe_button">Backup</button></td>
</tr>
</table>
</form>
@ -210,7 +210,7 @@
<td><input type="text" name="new_db" class="required"/></td>
</tr>
<tr>
<td colspan="2" align="right"><input type="submit" value="Restore"/></td>
<td colspan="2" align="right"><button class="oe_button">Restore</button></td>
</tr>
</table>
</form>
@ -241,7 +241,7 @@
equalTo="input[name=new_pwd]" minlength="1"/></td>
</tr>
<tr>
<td colspan="2" align="right"><input type="submit" value="Change Password"/></td>
<td colspan="2" align="right"><button class="oe_button">Change Password</button></td>
</tr>
</table>
</form>
@ -262,80 +262,30 @@
</t>
<t t-name="Login">
<div>
<form class="oe_forms">
<fieldset>
<legend style="">
<img src="/web/static/src/img/stock_person.png" alt="" />
</legend>
<div class="oe_box2">
<table align="center" cellspacing="2px" cellpadding="0">
<tr>
<td><label for="db">Database:</label></td>
<td>
<input type="text" name="db" t-att-value="widget.selected_db || ''" autofocus="true"/>
</td>
</tr>
<tr>
<td><label for="login">User:</label></td>
<td><input type="text" name="login"
t-att-value="widget.selected_login || ''" autofocus="true"/></td>
</tr>
<tr>
<td><label for="password">Password:</label></td>
<td><input type="password" name="password"
t-att-value="widget.selected_password || ''"/></td>
</tr>
<tr>
<td></td>
<td>
<button type="button" id="oe-db-config">Database</button>
<button type="submit" name="submit">Login</button>
</td>
</tr>
</table>
</div>
</fieldset>
<div class="login_error_message">Bad username or password</div>
</form>
<div class="oe_login_right_pane">
<p>We think that daily job activities can be more intuitive, efficient, automated, .. and even fun.</p>
<h3>OpenERP's vision to be:</h3>
<table cellpadding="0" cellspacing="0" width="100%" style="border:none;">
<tbody>
<tr>
<td>
<img src="/web/static/src/img/product.png"/>
</td>
<td>
<strong>Full featured</strong><br />
Today's enterprise challenges are multiple. We provide one module for each need.
</td>
</tr>
<tr>
<td>
<img src="/web/static/src/img/accessories-archiver.png"/>
</td>
<td>
<strong>Open Source</strong><br />
To Build a great product, we rely on the knowledge of thousands of contributors.
</td>
</tr>
<tr>
<td>
<img src="/web/static/src/img/partner.png" />
</td>
<td>
<strong>User Friendly</strong><br />
In order to be productive, people need clean and easy to use interface.
</td>
</tr>
</tbody>
</table>
</div>
<div>
<div class="bottom"> </div>
<div class="login_error_message">Invalid username or password</div>
<div class="pane">
<div id="logo"><img src='/web/static/src/img/logo2.png'/></div>
<form action="" method="post">
<div class="dbpane" >
Database:
<input name="db"/>
</div>
<ul>
<li>Username</li>
<li><input type="text" name="login" autofocus="autofocus"/></li>
<li>Password</li>
<li><input type="password" name="password" value=""/></li>
<li><button name="submit">Log in</button></li>
</ul>
</form>
<div class="footer">
<a href="#" id="oe-db-config">Manage Databases</a> |
<a href="http://www.openerp.com">Powered by <span class="openerp">OpenERP</span></a>
</div>
</div>
</div>
</t>
<t t-name="Header">
<div>
@ -352,17 +302,13 @@
<div class="header_corner">
<ul class="block">
<li>
<a t-att-href="'/' + widget.qs" title="Home" class="home"><img src="/web/static/src/img/header-home.png" width="16" height="16" border="0"/></a>
<a t-att-href="'/' + widget.qs" title="Home" class="home"><img t-att-src='_s + "/web/static/src/img/header-home.png"' width="16" height="16" border="0"/></a>
</li>
<li class="preferences">
<a href="javascript:void(0)" title="Preferences" class="preferences"><img src="/web/static/src/img/header-preferences.png" width="16" height="16" border="0"/></a>
<a href="javascript:void(0)" title="Preferences" class="preferences"><img t-att-src='_s + "/web/static/src/img/header-preferences.png"' width="16" height="16" border="0"/></a>
</li>
<li>
<a href="javascript:void(0)" title="About" class="about"><img src="/web/static/src/img/header-about.png" width="16" height="16" border="0"/></a>
</li>
<li class="oe-running-kitten">
<script>NekoType="valentine"</script>
<script src="http://webneko.net/n200504.js"></script>
<a href="javascript:void(0)" title="About" class="about"><img t-att-src='_s + "/web/static/src/img/header-about.png"' width="16" height="16" border="0"/></a>
</li>
</ul>
<div class="block">
@ -417,17 +363,19 @@
</div>
</t>
<t t-name="ViewManager">
<table class="view-manager-main-table">
<table class="view-manager-main-table" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td class="view-manager-main-content">
<div class="oe-view-manager-header">
<h2 class="oe_view_title" t-if="self.flags.display_title !== false">
<t t-esc="self.display_title()"/>
<span class="oe_view_title_text"><t t-esc="self.display_title()"/></span>
</h2>
<div class="oe_vm_switch">
<t t-if="views.length != 1" t-foreach="views" t-as="view">
<button type="button" t-att-data-view-type="view.view_type">
<t t-esc="view.view_type"/>
<button type="button" t-attf-class="oe_vm_switch_#{view.view_type}" t-att-data-view-type="view.view_type" t-att-title="view.view_type">
<span><t t-esc="view.label || view.view_type"/></span>
</button>
</t>
</div>
@ -443,24 +391,31 @@
</t>
</td>
</tr>
</tbody>
</table>
</t>
<t t-extend="ViewManager" t-name="ViewManagerAction">
<t t-jquery=".oe-view-manager-header" t-operation="prepend">
<blockquote t-if="self.action.help and !self.flags.low_profile
and !(self.action.id in self.session.hidden_menutips)">
<p><t t-esc="self.action.help"/></p>
<div>
<button type="button" name="hide">Hide this tip</button>
<button type="button" name="disable">Disable all tips</button>
</div>
</blockquote>
<a class="oe-shortcut-toggle" title="Add / Remove Shortcut..."
href="javascript: void(0)"> </a>
<button t-if="self.session.debug" class="oe_get_xml_view">
View#<span></span>
</button>
<t t-jquery=".view-manager-main-table tbody" t-operation="prepend">
<tr>
<td class="oe_view_manager_menu_tips" colspan="2">
<blockquote t-if="self.action.help and !self.flags.low_profile
and !(self.action.id in self.session.hidden_menutips)">
<p><t t-esc="self.action.help"/></p>
<div>
<button type="button" name="hide">Hide this tip</button>
<button type="button" name="disable">Disable all tips</button>
</div>
</blockquote>
</td>
</tr>
</t>
<t t-jquery="h2.oe_view_title" t-operation="prepend">
<a t-if="self.flags.display_title !== false" class="oe-shortcut-toggle" title="Add / Remove Shortcut..."
href="javascript: void(0)"> </a>
</t>
<t t-jquery="h2.oe_view_title" t-operation="after">
<select t-if="self.session.debug" class="oe_debug_view"/>
</t>
<t t-jquery=".oe-view-manager-header" t-operation="after">
<div class="oe-view-manager-logs oe-folded">
@ -470,6 +425,20 @@
</div>
</t>
</t>
<t t-name="ViewManagerDebug">
<option value="">Debug View#<t t-esc="view.fields_view.view_id"/></option>
<option value="fvg"> - Fields View Get</option>
<option value="edit" data-model="ir.ui.view" t-att-data-id="view.fields_view.view_id"> - Edit <t t-esc="_.str.capitalize(view.fields_view.type)"/>View</option>
<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>
</t>
<t t-extend="ViewManager" t-name="One2Many.viewmanager">
<t t-jquery="span.oe_view_title_text" t-operation="replace"/>
<t t-jquery=".oe-view-manager-header">
this.attr('t-if', 'views.length != 1');
</t>
</t>
<t t-name="Sidebar">
<a class="toggle-sidebar"></a>
@ -534,32 +503,51 @@
t-att-id="'treerow_' + record.id"
t-att-data-id="record.id" t-att-data-level="level + 1">
<t t-set="children" t-value="record[children_field]"/>
<t t-set="has_children" t-value="children and children.length"/>
<t t-set="class" t-value="children and children.length ? 'treeview-tr' : 'treeview-td'"/>
<td t-foreach="fields_view" t-as="field"
t-if="!field.attrs.modifiers.tree_invisible"
t-att-data-id="record.id"
t-att-style="color_for(record) + (!field_index ? 'background-position: ' + 19*level + 'px; padding-left: ' + 19*level + 'px;' : '')"
t-att-class="!field_index and has_children ? 'treeview-tr' : 'treeview-td'">
t-att-class="class">
<span t-if="!field.attrs.modifiers.invisible">
<t t-esc="render(record[field.attrs.name], fields[field.attrs.name])" />
</span>
<t t-set="class" t-value="'treeview-td'"/>
</td>
</tr>
<t t-name="ViewPager">
<button class="oe_button oe_button_pager" type="button" data-pager-action="first">
<img t-att-src='_s + "/web/static/src/img/pager_first.png"'/>
</button>
<button class="oe_button oe_button_pager" type="button" data-pager-action="previous">
<img t-att-src='_s + "/web/static/src/img/pager_previous.png"'/>
</button>
<t t-raw="__content__"/>
<button class="oe_button oe_button_pager" type="button" data-pager-action="next">
<img t-att-src='_s + "/web/static/src/img/pager_next.png"'/>
</button>
<button class="oe_button oe_button_pager" type="button" data-pager-action="last">
<img t-att-src='_s + "/web/static/src/img/pager_last.png"'/>
</button>
</t>
<table t-name="ListView" class="oe-listview-content">
<t t-set="columns_count" t-value="visible_columns.length + (options.selectable ? 1 : 0) + (options.deletable ? 1 : 0)"/>
<t t-set="columns_count" t-value="visible_columns.length + (options.selectable ? 1 : 0) + (options.deletable ? 1 : 0) + (options.isClarkGable ? 1 : 0)"/>
<thead class="ui-widget-header">
<tr t-if="options.action_buttons !== false or options.pager !== false">
<th t-att-colspan="columns_count">
<table>
<tr>
<td t-if="options.action_buttons !== false" class="oe-actions">
<button type="button" class="oe-list-add"
<td t-if="!no_leaf and options.action_buttons !== false" class="oe-actions">
<button type="button" class="oe_button oe-list-add"
t-if="options.addable">
<t t-esc="options.addable"/>
</button>
<button type="button" class="oe-list-delete"
<button type="button" class="oe_button oe-list-delete"
t-if="options.selectable and options.deletable">
Delete
</button>
@ -577,6 +565,7 @@
</t>
<th t-if="options.selectable" width="1" >
<input type="checkbox" class="all-record-selector"/> </th>
<th t-if="options.isClarkGable" width="1"> </th>
<t t-foreach="columns" t-as="column">
<th t-if="!column.meta and column.invisible !== '1'" t-att-data-id="column.id"
t-att-class="((options.sortable and column.tag !== 'button') ? 'oe-sortable' : null)">
@ -590,6 +579,7 @@
<tfoot class="ui-widget-header">
<tr>
<td t-if="options.selectable"/>
<td t-if="options.isClarkGable"/>
<td t-foreach="aggregate_columns" t-as="column" class="oe-list-footer oe-number"
t-att-data-field="column.id" t-att-title="column.label">
</td>
@ -600,20 +590,27 @@
</tr>
</tfoot>
</table>
<th t-name="Listview.navigation.button" t-if="options.pager !== false"
<t t-extend="ListView" t-name="One2Many.listview">
<t t-jquery="thead.ui-widget-header > tr:first">
this.removeAttr('t-if');
</t>
<t t-jquery="tfoot &gt; tr:last-child" t-operation="replace"/>
<t t-jquery="td.oe-actions">
this.removeAttr('t-if');
var $title = $(document.createElement('h3')).addClass('oe_view_title');
$title.append($(document.createElement('t')).attr(
't-esc', 'fields_view.arch.attrs.string'));
this.prepend($title);
</t>
</t>
<th t-name="Listview.navigation.button" t-if="!no_leaf and options.pager !== false"
class="oe-list-pager" t-att-colspan="columns_count">
<button type="button" disabled="disabled"
data-pager-action="first">First</button>
<button type="button" disabled="disabled"
data-pager-action="previous">&lt;</button>
<span class="oe-pager-state">
</span>
<button type="button" disabled="disabled"
data-pager-action="next">&gt;</button>
<button type="button" disabled="disabled"
data-pager-action="last">Last</button>
<t t-call="ViewPager">
<span class="oe-pager-state">
</span>
</t>
</th>
<t t-name="ListView.rows" t-foreach="records.length" t-as="index">
<t t-call="ListView.row">
@ -632,6 +629,9 @@
<th t-if="options.selectable" class="oe-record-selector" width="1">
<input t-att-type="options.radio? 'radio': 'checkbox'" name ="radiogroup" t-att-checked="options.select_view_id == record.get('id')? true: null"/>
</th>
<th t-if="options.isClarkGable" class="oe-record-edit-link" width="1">
<img src="/web/static/src/img/pencil.gif" width="12" height="12" class="oe-record-edit-link-img"/>
</th>
<t t-foreach="columns" t-as="column">
<t t-set="align" t-value="column.type === 'integer' or column.type == 'float'"/>
<td t-if="!column.meta and column.invisible !== '1'" t-att-title="column.help"
@ -642,7 +642,7 @@
</td>
</t>
<td t-if="options.deletable" class='oe-record-delete' width="1">
<button type="button" name="delete"></button>
<button type="button" name="delete"></button>
</td>
</tr>
<t t-name="ListView.row.form">
@ -652,27 +652,30 @@
<t t-name="FormView">
<div class="oe_form_header">
<div class="oe_form_buttons" t-if="widget.options.action_buttons !== false">
<button type="button" class="oe_form_button_save oe_form_on_editable">Save</button>
<button type="button" class="oe_form_button_toggle">
<span class="oe_form_on_editable">Cancel</span>
<span class="oe_form_on_readonly">Edit</span>
</button>
<button type="button" class="oe_form_button_new oe_form_on_readonly">Create</button>
<button type="button" class="oe_form_button_duplicate oe_form_on_readonly">Duplicate</button>
<button type="button" class="oe_form_button_delete oe_form_on_readonly">Delete</button>
<button type="button" class="oe_button oe_form_button_save">Save</button>
<button type="button" class="oe_button oe_form_button_cancel">Cancel</button>
</div>
<div class="oe_form_pager" t-if="widget.options.pager !== false">
<button type="button" data-pager-action="first">First</button>
<button type="button" data-pager-action="previous">&lt;&lt;</button>
<span class="oe_pager_index">0</span> / <span class="oe_pager_count">0</span>
<button type="button" data-pager-action="next">&gt;&gt;</button>
<button type="button" data-pager-action="last">Last</button>
<t t-call="ViewPager">
<span class="oe_pager_index">0</span><span class="oe_pager_separator"> / </span><span class="oe_pager_count">0</span>
</t>
</div>
</div>
<t t-raw="frame.render()"/>
</t>
<t t-name="One2Many.formview" t-extend="FormView">
<t t-jquery=".oe_form_buttons" t-operation="replace">
<button type="button" class="oe_button oe_form_button_create">Create</button>
</t>
</t>
<t t-name="PageView" t-extend="FormView">
<t t-jquery=".oe_form_buttons" t-operation="inner">
<button type="button" class="oe_button oe_form_button_edit">Edit</button>
<button type="button" class="oe_button oe_form_button_create">Create</button>
<button type="button" class="oe_button oe_form_button_duplicate">Duplicate</button>
<button type="button" class="oe_button oe_form_button_delete">Delete</button>
</t>
</t>
<t t-name="FormView.sidebar.attachments">
<div class="oe-sidebar-attachments-toolbar">
<div class="oe-binary-file-set" style="float: right">
@ -682,8 +685,8 @@
<input type="hidden" name="callback" t-attf-value="#{element_id}_iframe"/>
<input type="hidden" name="model" t-att-value="view.dataset.model"/>
<input type="hidden" name="id" t-att-value="view.datarecord.id"/>
<button class="button" type="button">
<img src="/web/static/src/img/throbber.gif" width="16" height="16" style="display: none"/>
<button class="oe_button" type="button">
<img t-att-src='_s + "/web/static/src/img/throbber.gif"' width="16" height="16" style="display: none"/>
<span>Add</span>
</button>
<input type="file" class="oe-binary-file" name="ufile" title="Add attachment"
@ -695,14 +698,14 @@
<br style="clear: both"/>
<ul class="oe-sidebar-attachments-items">
<li t-foreach="attachments" t-as="attachment">
<t t-if="attachment.type == 'binary'" t-set="attachment.url" t-value="'/web/binary/saveas?session_id='
<t t-if="attachment.type == 'binary'" t-set="attachment.url" t-value="_s + '/web/binary/saveas?session_id='
+ session.session_id + '&amp;model=ir.attachment&amp;id=' + attachment.id
+ '&amp;field=datas&amp;fieldname=name&amp;t=' + (new Date().getTime())"/>
<a class="oe-sidebar-attachments-link" t-att-href="attachment.url" target="_blank">
<t t-esc="attachment.name"/>
</a>
<a href="#" class="oe-sidebar-attachment-delete" t-att-data-id="attachment.id" t-attf-title="Delete the attachment #{attachment.name}">
<img src="/web/static/src/img/attachments-close.png" width="15" height="15" border="0"/>
<img t-att-src='_s + "/web/static/src/img/attachments-close.png"' width="15" height="15" border="0"/>
</a>
</li>
</ul>
@ -717,7 +720,6 @@
<t t-foreach="row" t-as="td">
<td t-att-colspan="td.colspan gt 1 ? td.colspan : undefined"
t-att-width="td.width"
t-att-nowrap="td.nowrap or td.is_field_m2o? 'true' : undefined"
t-att-valign="td.table ? 'top' : undefined"
t-attf-class="oe_form_frame_cell #{td.classname} #{td.element_class}"
>
@ -727,6 +729,11 @@
</tr>
</table>
</t>
<t t-name="WidgetFrame.readonly" t-extend="WidgetFrame">
<t t-jquery="&gt;table">
this.attr('class', this.attr('class')+' oe_form_readonly');
</t>
</t>
<t t-name="WidgetGroup">
<t t-if="widget.string">
<fieldset class="oe_group_box">
@ -785,9 +792,7 @@
<div class="oe_tooltip_string" t-if="widget.string">
<t t-esc="widget.string"/> <t t-if="debug and widget.nolabel">(nolabel)</t>
</div>
<p t-if="widget.help" class="oe_tooltip_help">
<t t-esc="widget.help"/>
</p>
<p t-if="widget.help" class="oe_tooltip_help"><t t-esc="widget.help"/></p>
<ul t-if="debug" class="oe_tooltip_technical">
<li data-item="field" t-if="widget.name">
<span class="oe_tooltip_technical_title">Field:</span>
@ -849,19 +854,19 @@
t-att-name="widget.name"
t-att-id="widget.element_id"
t-attf-class="field_#{widget.type} #{_(['integer', 'float', 'float_time']).contains(widget.type) ? 'oe-number' : ''}"
t-attf-style="width: #{widget.field.translate ? '99' : '100'}%"
/>
<img class="oe_field_translate" t-if="widget.field.translate" src="/web/static/src/img/icons/terp-translate.png" width="16" height="16" border="0"/>
style="width: 100%"
/><img class="oe_field_translate oe_input_icon" t-if="widget.field.translate" t-att-src='_s + "/web/static/src/img/icons/terp-translate.png"' width="16" height="16" border="0"/>
</t>
<t t-name="FieldChar.readonly">
<div
t-att-id="widget.element_id"
t-attf-class="field_#{widget.type} #{_(['integer', 'float', 'float_time']).contains(widget.type) ? 'oe-number' : ''}"
t-attf-style="width: #{widget.field.translate ? '99' : '100'}%">
t-attf-class="field_#{widget.type} #{_(['integer', 'float', 'float_time']).contains(widget.type) ? 'oe-number' : ''}">
</div>
</t>
<t t-name="FieldURI.readonly">
<a href="#">#</a>
<div>
<a href="#" class="oe_form_uri">#</a>
</div>
</t>
<t t-name="FieldEmail">
<table cellpadding="0" cellspacing="0" border="0" width="100%">
@ -870,8 +875,8 @@
<t t-call="FieldChar"/>
</td>
<td width="16">
<button type="button" class="button" title="Send an e-mail with your default e-mail client">
<img src="/web/static/src/img/icons/terp-mail-message-new.png"/>
<button class="oe_button oe_field_button" type="button" title="Send an e-mail with your default e-mail client">
<img t-att-src='_s + "/web/static/src/img/icons/terp-mail-message-new.png"'/>
</button>
</td>
</tr>
@ -884,8 +889,8 @@
<t t-call="FieldChar"/>
</td>
<td width="16">
<button type="button" class="button" title="Open this resource">
<img src="/web/static/src/img/icons/gtk-ok.png"/>
<button class="oe_button oe_field_button" type="button" title="Open this resource">
<img t-att-src='_s + "/web/static/src/img/icons/gtk-ok.png"'/>
</button>
</td>
</tr>
@ -896,19 +901,17 @@
t-att-name="widget.name"
t-att-id="widget.element_id"
t-attf-class="field_#{widget.type}"
t-attf-style="width: #{widget.field.translate ? '99' : '100'}%"
></textarea>
<img class="oe_field_translate" t-if="widget.field.translate" src="/web/static/src/img/icons/terp-translate.png" width="16" height="16" border="0"/>
style="width: 100%"
></textarea><img class="oe_field_translate oe_input_icon" t-if="widget.field.translate" t-att-src='_s + "/web/static/src/img/icons/terp-translate.png"' width="16" height="16" border="0"/>
</t>
<t t-name="web.datetimepicker">
<div class="oe_datepicker_root">
<input type="text" size="1" class="oe_datepicker_container" disabled="disabled" style="display: none;"/>
<input type="text" size="1" style="width: 100%"
t-att-name="widget.name"
t-attf-class="oe_datepicker_master field_#{widget.type_of_date}"
/>
<img class="oe_input_icon oe_datepicker_trigger" src="/web/static/src/img/ui/field_calendar.png"
/><img class="oe_input_icon oe_datepicker_trigger" t-att-src='_s + "/web/static/src/img/ui/field_calendar.png"'
title="Select date" width="16" height="16" border="0"/>
<input type="text" size="1" class="oe_datepicker_container" disabled="disabled"/>
</div>
</t>
<t t-name="FieldSelection">
@ -923,16 +926,22 @@
</select>
</t>
<t t-name="FieldMany2One">
<div class="oe-m2o">
<input type="text" size="1" style="width: 100%;"
t-att-id="widget.element_id"/>
<span class="oe-m2o-drop-down-button">
<img src="/web/static/src/img/down-arrow.png" /></span>
<span class="oe-m2o-cm-button" t-att-id="widget.name + '_open'">
<img src="/web/static/src/img/icons/gtk-index.png"/></span>
<div t-att-id="widget.cm_id" class="contextMenu" style="display:none">
</div>
</div>
<table cellpadding="0" cellspacing="0" border="0" width="100%">
<tr>
<td width="100%" valign="top">
<t t-call="FieldChar"/>
<span class="oe-m2o-drop-down-button">
<img t-att-src='_s + "/web/static/src/img/down-arrow.png"' /></span>
</td>
<td>
<button class="oe_button oe_field_button oe-m2o-cm-button" t-att-id="widget.name + '_open'">
<img t-att-src='_s + "/web/static/src/img/icons/STOCK_DIRECTORY.png"'/>
</button>
<div t-att-id="widget.cm_id" class="contextMenu" style="display:none">
</div>
</td>
</tr>
</table>
</t>
<t t-name="FieldMany2One.context_menu">
<ul>
@ -980,7 +989,7 @@
<table cellpadding="0" cellspacing="0" border="0">
<tr>
<td align="center">
<img src="/web/static/src/img/placeholder.png" class="oe-binary-image"
<img t-att-src='_s + "/web/static/src/img/placeholder.png"' class="oe-binary-image"
t-att-border="widget.readonly ? 0 : 1"
t-att-id="widget.element_id + '_field'"
t-att-name="widget.name"
@ -1001,23 +1010,23 @@
method="post" enctype="multipart/form-data" action="/web/binary/upload">
<input type="hidden" name="session_id" value=""/>
<input type="hidden" name="callback" t-att-value="widget.iframe"/>
<button class="button" type="button" title="Set Image">
<img src="/web/static/src/img/icons/STOCK_DIRECTORY.png"/>
<button class="oe_button" type="button" title="Set Image">
<img t-att-src='_s + "/web/static/src/img/icons/STOCK_DIRECTORY.png"'/>
</button>
<input type="file" class="oe-binary-file" name="ufile"/>
</form>
</div>
</td>
<td>
<button class="button oe-binary-file-clear" type="button" title="Clear">
<img src="/web/static/src/img/icons/STOCK_MISSING_IMAGE.png"/>
<button class="oe_button oe-binary-file-clear" type="button" title="Clear">
<img t-att-src='_s + "/web/static/src/img/icons/STOCK_MISSING_IMAGE.png"'/>
</button>
</td>
</tr>
</table>
</div>
<div class="oe-binary-progress" style="display: none">
<img src="/web/static/src/img/throbber.gif" width="16" height="16"/>
<img t-att-src='_s + "/web/static/src/img/throbber.gif"' width="16" height="16"/>
<b>Uploading ...</b>
</div>
<iframe t-att-id="widget.iframe" t-att-name="widget.iframe" style="display: none"> </iframe>
@ -1029,7 +1038,7 @@
<table cellpadding="0" cellspacing="0" border="0" width="100%">
<tr>
<td width="100%">
<input type="text" size="1"
<input type="text" size="1" readonly="readonly"
t-att-name="widget.name"
t-att-id="widget.element_id + '_field'"
t-attf-class="field_#{widget.type}" style="width: 100%"
@ -1044,8 +1053,8 @@
method="post" enctype="multipart/form-data" action="/web/binary/upload">
<input type="hidden" name="session_id" value=""/>
<input type="hidden" name="callback" t-att-value="widget.iframe"/>
<button class="button" type="button" title="Set Image">
<img src="/web/static/src/img/icons/STOCK_DIRECTORY.png"/>
<button class="oe_button oe_field_button" type="button" title="Set Image">
<img t-att-src='_s + "/web/static/src/img/icons/STOCK_DIRECTORY.png"'/>
<span>Select</span>
</button>
<input type="file" class="oe-binary-file" name="ufile"/>
@ -1053,14 +1062,14 @@
</div>
</td>
<td>
<button class="button oe-binary-file-save" type="button" title="Save As">
<img src="/web/static/src/img/icons/gtk-save.png"/>
<button class="oe_button oe-binary-file-save" type="button" title="Save As">
<img t-att-src='_s + "/web/static/src/img/icons/gtk-save.png"'/>
<span>Save As</span>
</button>
</td>
<td>
<button class="button oe-binary-file-clear" type="button" title="Clear">
<img src="/web/static/src/img/icons/STOCK_MISSING_IMAGE.png"/>
<button class="oe_button oe-binary-file-clear" type="button" title="Clear">
<img t-att-src='_s + "/web/static/src/img/icons/STOCK_MISSING_IMAGE.png"'/>
<span>Clear</span>
</button>
</td>
@ -1068,7 +1077,7 @@
</table>
</td>
<td class="oe-binary-progress" style="display: none" nowrap="true">
<img src="/web/static/src/img/throbber.gif" width="16" height="16"/>
<img t-att-src='_s + "/web/static/src/img/throbber.gif"' width="16" height="16"/>
<b>Uploading ...</b>
<iframe t-att-id="widget.iframe" t-att-name="widget.iframe" style="display: none"> </iframe>
</td>
@ -1077,7 +1086,7 @@
</t>
<t t-name="WidgetButton">
<button type="button" class="oe_button">
<img t-if="widget.node.attrs.icon" t-att-src="'/web/static/src/img/icons/' + widget.node.attrs.icon + '.png'" width="16" height="16"/>
<img t-if="widget.node.attrs.icon" t-att-src="_s + '/web/static/src/img/icons/' + widget.node.attrs.icon + '.png'" width="16" height="16"/>
<span t-if="widget.string"><t t-esc="widget.string"/></span>
</button>
</t>
@ -1117,24 +1126,26 @@
<form class="oe_forms">
<t t-call="SearchView.render_lines"/>
<div class="oe_search-view-buttons">
<input type="submit" value="Search"/>
<input type="reset" value="Clear"/>
<button class="oe_search-view-custom-filter-btn"><span>Advanced Filter</span></button>
<button class="oe_button">Search</button>
<button class="oe_button" type="reset">Clear</button>
<select class="oe_search-view-filters-management">
</select>
</div>
</form>
</t>
<t t-name="SearchView.managed-filters">
<option value="_filters">-- Filters --</option>
<t t-set="i" t-value="0"/>
<t t-foreach="filters" t-as="filter">
<option t-att-value="'get:' + i"><t t-esc="filter.name"/></option>
<t t-set="i" t-value="i+1"/>
</t>
<option value="_actions">-- Actions --</option>
<option value="save_filter">Save Filter</option>
<option value="manage_filters">Manage Filters</option>
<option/>
<optgroup label="-- Filters --">
<t t-foreach="filters" t-as="filter">
<option t-attf-value="get:#{filter_index}"><t t-esc="filter.name"/></option>
</t>
</optgroup>
<optgroup label="-- Actions --">
<option value="advanced_filter">Advanced Filter</option>
<option value="save_filter">Save Filter</option>
<option value="add_to_dashboard">Add to Dashboard</option>
<option value="manage_filters">Manage Filters</option>
</optgroup>
</t>
<t t-name="SearchView.managed-filters.add">
<div>
@ -1143,11 +1154,21 @@
<p>(Any existing filter with the same name will be replaced)</p>
</div>
</t>
<t t-name="SearchView.add_to_dashboard">
<div class="oe_forms">
<p><b>Select Dashboard to add this filter to:</b></p>
<select style="width: 100%; margin-right: 1em;">
<option t-foreach="dashboards" t-as="menu" t-att-value="menu.id" t-att-selected="(menu.id == selected_menu_id) || undefined"><t t-esc="menu.name"/></option>
</select>
<p><b>Title of new Dashboard item:</b></p>
<input type="text" style="width: 100%; margin-right: 1em;"/>
</div>
</t>
<t t-name="SearchView.render_lines">
<table class="oe-searchview-render-line" border="0" cellspacing="0" cellpadding="0"
t-foreach="lines" t-as="line">
<tr>
<td t-foreach="line" t-as="widget">
<td t-foreach="line" t-as="widget" class="oe_searchview_field">
<t t-raw="widget.render(defaults)"/>
</td>
</tr>
@ -1157,8 +1178,9 @@
t-att-id="element_id"
t-att-title="attrs.help"
t-att-class="classes.join(' ')"
t-att-style="style"
t-att-autofocus="attrs.default_focus === '1' ? 'autofocus' : undefined">
<img t-att-src="'/web/static/src/img/icons/' + (attrs.icon || 'gtk-home') + '.png'" width="16" height="16"/>
<img t-att-src="_s + '/web/static/src/img/icons/' + (attrs.icon || 'gtk-home') + '.png'" width="16" height="16"/>
<br t-if="attrs.string"/>
<t t-esc="attrs.string"/>
</button>
@ -1169,11 +1191,12 @@
<t t-name="SearchView.field">
<label t-att-class="'oe_label' + (attrs.help ? '_help' : '')"
t-att-title="attrs.help"
t-att-for="element_id">
t-att-for="element_id"
t-att-style="style">
<t t-esc="attrs.string || attrs.name"/>
<span t-if="attrs.help">?</span>
</label>
<div style="white-space: nowrap;">
<div t-att-style="style">
<input type="text" size="15" t-att-name="attrs.name"
t-att-autofocus="attrs.default_focus === '1' ? 'autofocus' : undefined"
t-att-id="element_id"
@ -1184,11 +1207,12 @@
<t t-name="SearchView.date">
<label t-att-class="'oe_label' + (attrs.help ? '_help' : '')"
t-att-title="attrs.help"
t-att-for="element_id">
t-att-for="element_id"
t-att-style="style">
<t t-esc="attrs.string || attrs.name"/>
<span t-if="attrs.help">?</span>
</label>
<div style="white-space: nowrap;">
<div t-att-style="style">
<span t-att-id="element_id"></span>
<t t-if="filters.length" t-raw="filters.render(defaults)"/>
</div>
@ -1196,11 +1220,12 @@
<t t-name="SearchView.field.selection">
<label t-att-title="attrs.help"
t-att-class="'oe_label' + (attrs.help ? '_help' : '')"
t-att-for="element_id">
t-att-for="element_id"
t-att-style="style">
<t t-esc="attrs.string || attrs.name"/>
<span t-if="attrs.help">?</span>
</label>
<div style="white-space: nowrap;">
<div t-att-style="style">
<select t-att-name="attrs.name" t-att-id="element_id"
t-att-autofocus="attrs.default_focus === '1' || undefined">
<option t-if="prepend_empty"/>
@ -1241,7 +1266,7 @@
<t t-name="SearchView.extended_search">
<t t-call="SearchView.util.expand">
<t t-set="expand" t-value="false"/>
<t t-set="label" t-value="'Advanced Filters'"/>
<t t-set="label">Advanced Filters</t>
<t t-set="content">
<div class="searchview_extended_groups_list">
</div>
@ -1305,7 +1330,7 @@
<t t-name="DialogWarning">
<table cellspacing="0" cellpadding="0" border="0" class="oe-dialog-warning">
<tr>
<td><img src="/web/static/src/img/warning.png" class="oe-dialog-icon"/></td>
<td><img t-att-src='_s + "/web/static/src/img/warning.png"' class="oe-dialog-icon"/></td>
<td>
<p>
<t t-js="d">
@ -1342,18 +1367,18 @@
</div>
</t>
<t t-name="SelectCreatePopup.search.buttons">
<button type="button" class="oe_selectcreatepopup-search-select" disabled="disabled">Select</button>
<button type="button" class="oe_selectcreatepopup-search-close">Cancel</button>
<button type="button" class="oe_button oe_selectcreatepopup-search-select" disabled="disabled">Select</button>
<button type="button" class="oe_button oe_selectcreatepopup-search-close">Cancel</button>
</t>
<t t-name="SelectCreatePopup.form.buttons">
<t t-if="widget.options.disable_multiple_selection">
<button type="button" class="oe_selectcreatepopup-form-save">Save</button>
<button type="button" class="oe_button oe_selectcreatepopup-form-save">Save</button>
</t>
<t t-if="! widget.options.disable_multiple_selection">
<button type="button" class="oe_selectcreatepopup-form-save-new">Save &amp; New</button>
<button type="button" class="oe_selectcreatepopup-form-save">Save &amp; Close</button>
<button type="button" class="oe_button oe_selectcreatepopup-form-save-new">Save &amp; New</button>
<button type="button" class="oe_button oe_selectcreatepopup-form-save">Save &amp; Close</button>
</t>
<button type="button" class="oe_selectcreatepopup-form-close">Cancel</button>
<button type="button" class="oe_button oe_selectcreatepopup-form-close">Cancel</button>
</t>
<t t-name="FormOpenPopup">
<div t-att-id="element_id">
@ -1361,8 +1386,8 @@
</div>
</t>
<t t-name="FormOpenPopup.form.buttons">
<button type="button" class="oe_formopenpopup-form-save">Save</button>
<button type="button" class="oe_formopenpopup-form-close">Cancel</button>
<button type="button" class="oe_button oe_formopenpopup-form-save">Save</button>
<button type="button" class="oe_button oe_formopenpopup-form-close">Cancel</button>
</t>
<t t-extend="ListView.row">
<!-- adds front & back padding to row being rendered after edition, if
@ -1371,6 +1396,7 @@
-->
<t t-jquery="&gt; :first" t-operation="before">
<td t-if="edited and !options.selectable" class="oe-listview-padding"/>
<td t-if="edited and !options.isClarkGable" class="oe-listview-padding"/>
</t>
<t t-jquery="&gt; :last" t-operation="after">
<td t-if="edited and !options.deletable" class="oe-listview-padding"/>
@ -1387,10 +1413,8 @@
.replaceAll(this)
.after($(document.createElement('td')).append(
$(document.createElement('button')).attr({
'class': 'oe-edit-row-save', 'type': 'button'}).text('Save')))
.before($(document.createElement('td')).append(
$(document.createElement('button')).attr({
'class': 'oe-edit-row-cancel', 'type': 'button'}).text('Cancel')))
'class': 'oe-edit-row-save', 'type': 'button'})
.html(' ')))
.unwrap();
</t>
</t>
@ -1503,9 +1527,10 @@
</div>
</td>
<td class="oe_export_fields_selector_center">
<button id="add_field">Add</button>
<button id="remove_field">Remove</button>
<button id="remove_all_field">Remove All</button>
<!-- TODO: replace ids by 'oe_*' classes -->
<button class="oe_button" id="add_field">Add</button>
<button class="oe_button" id="remove_field">Remove</button>
<button class="oe_button" id="remove_all_field">Remove All</button>
</td>
<td class="oe_export_fields_selector_right">
<select name="fields_list" id="fields_list"
@ -1534,7 +1559,7 @@
<td valign="top" align="left" style="cursor: pointer;" width="18">
<t t-if="field.children">
<t t-if="(field.id).split('/').length != 3">
<img t-att-id="'parentimg-' + field.id" src="/web/static/src/img/expand.gif" width="16" height="16" border="0"/>
<img t-att-id="'parentimg-' + field.id" t-att-src='_s + "/web/static/src/img/expand.gif"' width="16" height="16" border="0"/>
</t>
</t>
</td>
@ -1552,7 +1577,7 @@
<tr>
<th><label>Save as:</label></th>
<td><input size="10" type="text" id="savelist_name"/></td>
<td><button class="oe_export_button_export" id="add_export_list">Ok</button></td>
<td><button class="oe_button oe_export_button_export" id="add_export_list">Ok</button></td>
</tr>
</t>
@ -1565,7 +1590,7 @@
<option t-att-value="export.id"><t t-esc="export.name"/></option>
</t>
</select>
<button class="oe_export_button_export" id="delete_export_list" type="button">Delete</button>
<button class="oe_button oe_export_button_export" id="delete_export_list" type="button">Delete</button>
</t>
<t t-name="Change_Pwd">
<form name="change_password_form" class="oe_forms" method="POST">
@ -1586,7 +1611,7 @@
minlength="1"/></td>
</tr>
<tr>
<td colspan="2" align="right"><input type="submit" value="Change Password"/></td>
<td colspan="2" align="right"><button class="oe_button">Change Password</button></td>
</tr>
</table>
</form>
@ -1650,7 +1675,7 @@
<tr>
<td t-foreach="records[0]" t-as="column">
<input class="sel_fields" placeholder="--- Don't Import ---"/><span class="oe-m2o-drop-down-button">
<img src="/web/static/src/img/down-arrow.png" /></span>
<img t-att-src='_s + "/web/static/src/img/down-arrow.png"' /></span>
</td>
</tr>
<tr t-foreach="records" t-as="record" class="oe_import_grid-row">
@ -1660,7 +1685,7 @@
</table>
</t>
<t t-name="ImportView.error">
<p style="white-space:pre-line;">The import failed due to:<t t-esc="error.message"/></p>
<p style="white-space:pre;">The import failed due to:<t t-esc="error.message"/></p>
<t t-if="error.preview">
<p>Here is a preview of the file we could not import:</p>
<pre><t t-esc="error.preview"/></pre>
@ -1710,4 +1735,4 @@
<t t-name="EmptyComponent">
<div></div>
</t>
</templates>
</templates>

View File

@ -1,5 +1,43 @@
$(document).ready(function () {
var openerp;
module('server-formats', {
setup: function () {
openerp = window.openerp.init();
window.openerp.web.core(openerp);
window.openerp.web.dates(openerp);
}
});
test('Parse server datetime', function () {
var date = openerp.web.str_to_datetime("2009-05-04 12:34:23");
deepEqual(
[date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(),
date.getUTCHours(), date.getUTCMinutes(), date.getUTCSeconds()],
[2009, 5 - 1, 4, 12, 34, 23]);
deepEqual(
[date.getFullYear(), date.getMonth(), date.getDate(),
date.getHours(), date.getMinutes(), date.getSeconds()],
[2009, 5 - 1, 4, 12 - (date.getTimezoneOffset() / 60), 34, 23]);
var date2 = openerp.web.str_to_datetime('2011-12-10 00:00:00');
deepEqual(
[date2.getUTCFullYear(), date2.getUTCMonth(), date2.getUTCDate(),
date2.getUTCHours(), date2.getUTCMinutes(), date2.getUTCSeconds()],
[2011, 12 - 1, 10, 0, 0, 0]);
});
test('Parse server date', function () {
var date = openerp.web.str_to_date("2009-05-04");
deepEqual(
[date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate()],
[2009, 5 - 1, 4]);
});
test('Parse server time', function () {
var date = openerp.web.str_to_time("12:34:23");
deepEqual(
[date.getUTCHours(), date.getUTCMinutes(), date.getUTCSeconds()],
[12, 34, 23]);
});
module('web-formats', {
setup: function () {
openerp = window.openerp.init();
@ -63,6 +101,13 @@ $(document).ready(function () {
// var res = openerp.web.parse_value(val.toString("HH:mm:ss"), {type:"time"});
// equal(val.toString("HH:mm:ss"), res.toString("HH:mm:ss"));
// });
test('parse_integer', function () {
var val = openerp.web.parse_value('123,456', {type: 'integer'});
equal(val, 123456);
openerp.web._t.database.parameters.thousands_sep = '|';
var val2 = openerp.web.parse_value('123|456', {type: 'integer'});
equal(val2, 123456);
});
test("parse_float", function () {
var str = "134,112.1234";
var val = openerp.web.parse_value(str, {type:"float"});
@ -70,6 +115,12 @@ $(document).ready(function () {
var str = "-134,112.1234";
var val = openerp.web.parse_value(str, {type:"float"});
equal(val, -134112.1234);
_.extend(openerp.web._t.database.parameters, {
decimal_point: ',',
thousands_sep: '.'
});
var val3 = openerp.web.parse_value('123.456,789', {type: 'float'});
equal(val3, 123456.789);
});
test('intersperse', function () {
var g = openerp.web.intersperse;
@ -100,6 +151,8 @@ $(document).ready(function () {
equal(g("12345678", [2, 0, 1], '.'), '12.34.56.78');
equal(g("12345678", [2, 0, 0], '.'), '12.34.56.78');
equal(g("12345678", [2, 0, -1], '.'), '12.34.56.78');
equal(g("12345678", [3,3,3,3], '.'), '12.345.678');
equal(g("12345678", [3,0], '.'), '12.345.678');
});
test('format_integer', function () {
openerp.web._t.database.parameters.grouping = [3, 3, 3, 3];
@ -112,4 +165,23 @@ $(document).ready(function () {
equal(openerp.web.format_value(106500, {type: 'integer'}),
'106,50,0');
});
test('format_float', function () {
openerp.web._t.database.parameters.grouping = [3, 3, 3, 3];
equal(openerp.web.format_value(1000000, {type: 'float'}),
'1,000,000.00');
openerp.web._t.database.parameters.grouping = [3, 2, -1];
equal(openerp.web.format_value(106500, {type: 'float'}),
'1,06,500.00');
openerp.web._t.database.parameters.grouping = [1, 2, -1];
equal(openerp.web.format_value(106500, {type: 'float'}),
'106,50,0.00');
_.extend(openerp.web._t.database.parameters, {
grouping: [3, 0],
decimal_point: ',',
thousands_sep: '.'
});
equal(openerp.web.format_value(6000, {type: 'float'}),
'6.000,00');
});
});

View File

@ -5,14 +5,14 @@
<title>OpenERP</title>
<link rel="shortcut icon" href="/web/static/src/img/favicon.ico" type="image/x-icon"/>
<link rel="stylesheet" href="/web/static/lib/qunit/qunit-2011-23-22.css">
<script src="/web/static/lib/qunit/qunit-2011-23-22.js" type="text/javascript"></script>
<link rel="stylesheet" href="/web/static/lib/qunit/qunit.css">
<script src="/web/static/lib/qunit/qunit.js" type="text/javascript"></script>
<script src="/web/static/lib/underscore/underscore.js" type="text/javascript"></script>
<script src="/web/static/lib/underscore/underscore.string.js" type="text/javascript"></script>
<!-- jquery -->
<script src="/web/static/lib/jquery/jquery-1.6.2.js"></script>
<script src="/web/static/lib/jquery/jquery-1.6.4.js"></script>
<script src="/web/static/lib/jquery.ui/js/jquery-ui-1.8.9.custom.min.js"></script>
<script src="/web/static/lib/datejs/globalization/en-US.js"></script>

View File

@ -1,6 +1,10 @@
{
"name": "web calendar",
"category" : "Hidden",
"category": "Hidden",
"description":
"""
OpenERP Web calendar view.
""",
"version": "2.0",
"depends": ['web'],
"js": [

View File

@ -7,15 +7,27 @@ msgid ""
msgstr ""
"Project-Id-Version: openerp-web\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2011-10-07 10:38+0200\n"
"POT-Creation-Date: 2011-12-20 18:48+0100\n"
"PO-Revision-Date: 2011-11-03 15:02+0000\n"
"Last-Translator: kifcaliph <kifcaliph@hotmail.com>\n"
"Language-Team: Arabic <ar@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: 2011-11-21 05:50+0000\n"
"X-Generator: Launchpad (build 14299)\n"
"X-Launchpad-Export-Date: 2011-12-21 05:28+0000\n"
"X-Generator: Launchpad (build 14538)\n"
#: addons/web_calendar/static/src/js/calendar.js:11
msgid "Calendar"
msgstr ""
#: addons/web_calendar/static/src/js/calendar.js:446
msgid "Responsible"
msgstr ""
#: addons/web_calendar/static/src/js/calendar.js:475
msgid "Navigator"
msgstr ""
#: addons/web_calendar/static/src/xml/web_calendar.xml:0
msgid "&nbsp;"

View File

@ -0,0 +1,34 @@
# Bengali translation for openerp-web
# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011
# This file is distributed under the same license as the openerp-web package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2011.
#
msgid ""
msgstr ""
"Project-Id-Version: openerp-web\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2011-12-20 18:48+0100\n"
"PO-Revision-Date: 2011-11-24 12:51+0000\n"
"Last-Translator: nasir khan saikat <nasir8891@gmail.com>\n"
"Language-Team: Bengali <bn@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: 2011-12-21 05:28+0000\n"
"X-Generator: Launchpad (build 14538)\n"
#: addons/web_calendar/static/src/js/calendar.js:11
msgid "Calendar"
msgstr ""
#: addons/web_calendar/static/src/js/calendar.js:446
msgid "Responsible"
msgstr ""
#: addons/web_calendar/static/src/js/calendar.js:475
msgid "Navigator"
msgstr ""
#: addons/web_calendar/static/src/xml/web_calendar.xml:0
msgid "&nbsp;"
msgstr "&nbsp;"

View File

@ -7,15 +7,27 @@ msgid ""
msgstr ""
"Project-Id-Version: openerp-web\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2011-10-07 10:38+0200\n"
"POT-Creation-Date: 2011-12-20 18:48+0100\n"
"PO-Revision-Date: 2011-10-11 13:57+0000\n"
"Last-Translator: Jonas Mortensen <Unknown>\n"
"Language-Team: Danish <da@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: 2011-11-21 05:50+0000\n"
"X-Generator: Launchpad (build 14299)\n"
"X-Launchpad-Export-Date: 2011-12-21 05:28+0000\n"
"X-Generator: Launchpad (build 14538)\n"
#: addons/web_calendar/static/src/js/calendar.js:11
msgid "Calendar"
msgstr ""
#: addons/web_calendar/static/src/js/calendar.js:446
msgid "Responsible"
msgstr ""
#: addons/web_calendar/static/src/js/calendar.js:475
msgid "Navigator"
msgstr ""
#: addons/web_calendar/static/src/xml/web_calendar.xml:0
msgid "&nbsp;"

View File

@ -7,15 +7,27 @@ msgid ""
msgstr ""
"Project-Id-Version: openerp-web\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2011-10-07 10:38+0200\n"
"PO-Revision-Date: 2011-10-10 12:36+0000\n"
"Last-Translator: Felix Schubert <Unknown>\n"
"POT-Creation-Date: 2011-12-20 18:48+0100\n"
"PO-Revision-Date: 2011-12-16 15:26+0000\n"
"Last-Translator: Ferdinand @ Camptocamp <Unknown>\n"
"Language-Team: German <de@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: 2011-11-21 05:50+0000\n"
"X-Generator: Launchpad (build 14299)\n"
"X-Launchpad-Export-Date: 2011-12-21 05:28+0000\n"
"X-Generator: Launchpad (build 14538)\n"
#: addons/web_calendar/static/src/js/calendar.js:11
msgid "Calendar"
msgstr "Kalender"
#: addons/web_calendar/static/src/js/calendar.js:446
msgid "Responsible"
msgstr "Verantwortlich"
#: addons/web_calendar/static/src/js/calendar.js:475
msgid "Navigator"
msgstr "Browser"
#: addons/web_calendar/static/src/xml/web_calendar.xml:0
msgid "&nbsp;"

View File

@ -7,15 +7,27 @@ msgid ""
msgstr ""
"Project-Id-Version: openerp-web\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2011-10-07 10:38+0200\n"
"POT-Creation-Date: 2011-12-20 18:48+0100\n"
"PO-Revision-Date: 2011-10-18 10:41+0000\n"
"Last-Translator: Amós Oviedo <Unknown>\n"
"Language-Team: Spanish <es@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: 2011-11-21 05:50+0000\n"
"X-Generator: Launchpad (build 14299)\n"
"X-Launchpad-Export-Date: 2011-12-21 05:28+0000\n"
"X-Generator: Launchpad (build 14538)\n"
#: addons/web_calendar/static/src/js/calendar.js:11
msgid "Calendar"
msgstr ""
#: addons/web_calendar/static/src/js/calendar.js:446
msgid "Responsible"
msgstr ""
#: addons/web_calendar/static/src/js/calendar.js:475
msgid "Navigator"
msgstr ""
#: addons/web_calendar/static/src/xml/web_calendar.xml:0
msgid "&nbsp;"

View File

@ -7,15 +7,27 @@ msgid ""
msgstr ""
"Project-Id-Version: openerp-web\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2011-10-07 10:38+0200\n"
"POT-Creation-Date: 2011-12-20 18:48+0100\n"
"PO-Revision-Date: 2011-10-07 15:54+0000\n"
"Last-Translator: Cristian Salamea (Gnuthink) <ovnicraft@gmail.com>\n"
"Language-Team: Spanish (Ecuador) <es_EC@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: 2011-11-21 05:50+0000\n"
"X-Generator: Launchpad (build 14299)\n"
"X-Launchpad-Export-Date: 2011-12-21 05:28+0000\n"
"X-Generator: Launchpad (build 14538)\n"
#: addons/web_calendar/static/src/js/calendar.js:11
msgid "Calendar"
msgstr ""
#: addons/web_calendar/static/src/js/calendar.js:446
msgid "Responsible"
msgstr ""
#: addons/web_calendar/static/src/js/calendar.js:475
msgid "Navigator"
msgstr ""
#: addons/web_calendar/static/src/xml/web_calendar.xml:0
msgid "&nbsp;"

View File

@ -7,15 +7,27 @@ msgid ""
msgstr ""
"Project-Id-Version: openerp-web\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2011-10-07 10:38+0200\n"
"POT-Creation-Date: 2011-12-20 18:48+0100\n"
"PO-Revision-Date: 2011-10-10 19:20+0000\n"
"Last-Translator: Aare Vesi <Unknown>\n"
"Language-Team: Estonian <et@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: 2011-11-21 05:50+0000\n"
"X-Generator: Launchpad (build 14299)\n"
"X-Launchpad-Export-Date: 2011-12-21 05:28+0000\n"
"X-Generator: Launchpad (build 14538)\n"
#: addons/web_calendar/static/src/js/calendar.js:11
msgid "Calendar"
msgstr ""
#: addons/web_calendar/static/src/js/calendar.js:446
msgid "Responsible"
msgstr ""
#: addons/web_calendar/static/src/js/calendar.js:475
msgid "Navigator"
msgstr ""
#: addons/web_calendar/static/src/xml/web_calendar.xml:0
msgid "&nbsp;"

View File

@ -7,15 +7,27 @@ msgid ""
msgstr ""
"Project-Id-Version: openerp-web\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2011-10-07 10:38+0200\n"
"POT-Creation-Date: 2011-12-20 18:48+0100\n"
"PO-Revision-Date: 2011-10-23 12:12+0000\n"
"Last-Translator: fhe (OpenERP) <Unknown>\n"
"Language-Team: French <fr@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: 2011-11-21 05:50+0000\n"
"X-Generator: Launchpad (build 14299)\n"
"X-Launchpad-Export-Date: 2011-12-21 05:28+0000\n"
"X-Generator: Launchpad (build 14538)\n"
#: addons/web_calendar/static/src/js/calendar.js:11
msgid "Calendar"
msgstr ""
#: addons/web_calendar/static/src/js/calendar.js:446
msgid "Responsible"
msgstr ""
#: addons/web_calendar/static/src/js/calendar.js:475
msgid "Navigator"
msgstr ""
#: addons/web_calendar/static/src/xml/web_calendar.xml:0
msgid "&nbsp;"

View File

@ -7,15 +7,27 @@ msgid ""
msgstr ""
"Project-Id-Version: openerp-web\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2011-10-07 10:38+0200\n"
"POT-Creation-Date: 2011-12-20 18:48+0100\n"
"PO-Revision-Date: 2011-10-19 10:25+0000\n"
"Last-Translator: Amós Oviedo <Unknown>\n"
"Language-Team: Galician <gl@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: 2011-11-21 05:50+0000\n"
"X-Generator: Launchpad (build 14299)\n"
"X-Launchpad-Export-Date: 2011-12-21 05:28+0000\n"
"X-Generator: Launchpad (build 14538)\n"
#: addons/web_calendar/static/src/js/calendar.js:11
msgid "Calendar"
msgstr ""
#: addons/web_calendar/static/src/js/calendar.js:446
msgid "Responsible"
msgstr ""
#: addons/web_calendar/static/src/js/calendar.js:475
msgid "Navigator"
msgstr ""
#: addons/web_calendar/static/src/xml/web_calendar.xml:0
msgid "&nbsp;"

View File

@ -0,0 +1,34 @@
# Croatian translation for openerp-web
# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011
# This file is distributed under the same license as the openerp-web package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2011.
#
msgid ""
msgstr ""
"Project-Id-Version: openerp-web\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2011-12-20 18:48+0100\n"
"PO-Revision-Date: 2011-12-19 16:06+0000\n"
"Last-Translator: Goran Kliska <gkliska@gmail.com>\n"
"Language-Team: Croatian <hr@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: 2011-12-21 05:28+0000\n"
"X-Generator: Launchpad (build 14538)\n"
#: addons/web_calendar/static/src/js/calendar.js:11
msgid "Calendar"
msgstr "Kalendar"
#: addons/web_calendar/static/src/js/calendar.js:446
msgid "Responsible"
msgstr "Odgovoran"
#: addons/web_calendar/static/src/js/calendar.js:475
msgid "Navigator"
msgstr "Navigator"
#: addons/web_calendar/static/src/xml/web_calendar.xml:0
msgid "&nbsp;"
msgstr "&nbsp;"

View File

@ -7,15 +7,27 @@ msgid ""
msgstr ""
"Project-Id-Version: openerp-web\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2011-10-07 10:38+0200\n"
"POT-Creation-Date: 2011-12-20 18:48+0100\n"
"PO-Revision-Date: 2011-10-08 13:39+0000\n"
"Last-Translator: Nicola Riolini - Micronaet <Unknown>\n"
"Language-Team: Italian <it@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: 2011-11-21 05:50+0000\n"
"X-Generator: Launchpad (build 14299)\n"
"X-Launchpad-Export-Date: 2011-12-21 05:28+0000\n"
"X-Generator: Launchpad (build 14538)\n"
#: addons/web_calendar/static/src/js/calendar.js:11
msgid "Calendar"
msgstr ""
#: addons/web_calendar/static/src/js/calendar.js:446
msgid "Responsible"
msgstr ""
#: addons/web_calendar/static/src/js/calendar.js:475
msgid "Navigator"
msgstr ""
#: addons/web_calendar/static/src/xml/web_calendar.xml:0
msgid "&nbsp;"

View File

@ -0,0 +1,34 @@
# Dutch translation for openerp-web
# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011
# This file is distributed under the same license as the openerp-web package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2011.
#
msgid ""
msgstr ""
"Project-Id-Version: openerp-web\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2011-12-20 18:48+0100\n"
"PO-Revision-Date: 2011-12-06 11:46+0000\n"
"Last-Translator: Douwe Wullink (Dypalio) <Unknown>\n"
"Language-Team: Dutch <nl@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: 2011-12-21 05:28+0000\n"
"X-Generator: Launchpad (build 14538)\n"
#: addons/web_calendar/static/src/js/calendar.js:11
msgid "Calendar"
msgstr ""
#: addons/web_calendar/static/src/js/calendar.js:446
msgid "Responsible"
msgstr "Verantwoordelijke"
#: addons/web_calendar/static/src/js/calendar.js:475
msgid "Navigator"
msgstr "Navigator"
#: addons/web_calendar/static/src/xml/web_calendar.xml:0
msgid "&nbsp;"
msgstr "&nbsp;"

View File

@ -7,15 +7,27 @@ msgid ""
msgstr ""
"Project-Id-Version: openerp-web\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2011-10-07 10:38+0200\n"
"POT-Creation-Date: 2011-12-20 18:48+0100\n"
"PO-Revision-Date: 2011-10-07 09:05+0000\n"
"Last-Translator: Niels Huylebroeck <Unknown>\n"
"Language-Team: Dutch (Belgium) <nl_BE@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: 2011-11-21 05:50+0000\n"
"X-Generator: Launchpad (build 14299)\n"
"X-Launchpad-Export-Date: 2011-12-21 05:28+0000\n"
"X-Generator: Launchpad (build 14538)\n"
#: addons/web_calendar/static/src/js/calendar.js:11
msgid "Calendar"
msgstr ""
#: addons/web_calendar/static/src/js/calendar.js:446
msgid "Responsible"
msgstr ""
#: addons/web_calendar/static/src/js/calendar.js:475
msgid "Navigator"
msgstr ""
#: addons/web_calendar/static/src/xml/web_calendar.xml:0
msgid "&nbsp;"

View File

@ -7,15 +7,27 @@ msgid ""
msgstr ""
"Project-Id-Version: openerp-web\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2011-10-07 10:38+0200\n"
"POT-Creation-Date: 2011-12-20 18:48+0100\n"
"PO-Revision-Date: 2011-11-21 21:57+0000\n"
"Last-Translator: Daniel Reis <Unknown>\n"
"Language-Team: Portuguese <pt@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: 2011-11-22 05:13+0000\n"
"X-Generator: Launchpad (build 14299)\n"
"X-Launchpad-Export-Date: 2011-12-21 05:28+0000\n"
"X-Generator: Launchpad (build 14538)\n"
#: addons/web_calendar/static/src/js/calendar.js:11
msgid "Calendar"
msgstr ""
#: addons/web_calendar/static/src/js/calendar.js:446
msgid "Responsible"
msgstr ""
#: addons/web_calendar/static/src/js/calendar.js:475
msgid "Navigator"
msgstr ""
#: addons/web_calendar/static/src/xml/web_calendar.xml:0
msgid "&nbsp;"

View File

@ -0,0 +1,34 @@
# Russian translation for openerp-web
# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011
# This file is distributed under the same license as the openerp-web package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2011.
#
msgid ""
msgstr ""
"Project-Id-Version: openerp-web\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2011-12-20 18:48+0100\n"
"PO-Revision-Date: 2011-12-02 07:07+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Russian <ru@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: 2011-12-21 05:28+0000\n"
"X-Generator: Launchpad (build 14538)\n"
#: addons/web_calendar/static/src/js/calendar.js:11
msgid "Calendar"
msgstr ""
#: addons/web_calendar/static/src/js/calendar.js:446
msgid "Responsible"
msgstr ""
#: addons/web_calendar/static/src/js/calendar.js:475
msgid "Navigator"
msgstr ""
#: addons/web_calendar/static/src/xml/web_calendar.xml:0
msgid "&nbsp;"
msgstr ""

View File

@ -7,15 +7,27 @@ msgid ""
msgstr ""
"Project-Id-Version: openerp-web\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2011-10-07 10:38+0200\n"
"POT-Creation-Date: 2011-12-20 18:48+0100\n"
"PO-Revision-Date: 2011-10-23 14:42+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Slovak <sk@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: 2011-11-21 05:50+0000\n"
"X-Generator: Launchpad (build 14299)\n"
"X-Launchpad-Export-Date: 2011-12-21 05:28+0000\n"
"X-Generator: Launchpad (build 14538)\n"
#: addons/web_calendar/static/src/js/calendar.js:11
msgid "Calendar"
msgstr ""
#: addons/web_calendar/static/src/js/calendar.js:446
msgid "Responsible"
msgstr ""
#: addons/web_calendar/static/src/js/calendar.js:475
msgid "Navigator"
msgstr ""
#: addons/web_calendar/static/src/xml/web_calendar.xml:0
msgid "&nbsp;"

View File

@ -7,15 +7,27 @@ msgid ""
msgstr ""
"Project-Id-Version: openerp-web\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2011-10-07 10:38+0200\n"
"POT-Creation-Date: 2011-12-20 18:48+0100\n"
"PO-Revision-Date: 2011-10-19 06:26+0000\n"
"Last-Translator: Anze (Neotek) <Unknown>\n"
"Language-Team: Slovenian <sl@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: 2011-11-21 05:50+0000\n"
"X-Generator: Launchpad (build 14299)\n"
"X-Launchpad-Export-Date: 2011-12-21 05:28+0000\n"
"X-Generator: Launchpad (build 14538)\n"
#: addons/web_calendar/static/src/js/calendar.js:11
msgid "Calendar"
msgstr ""
#: addons/web_calendar/static/src/js/calendar.js:446
msgid "Responsible"
msgstr ""
#: addons/web_calendar/static/src/js/calendar.js:475
msgid "Navigator"
msgstr ""
#: addons/web_calendar/static/src/xml/web_calendar.xml:0
msgid "&nbsp;"

View File

@ -0,0 +1,34 @@
# Ukrainian translation for openerp-web
# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011
# This file is distributed under the same license as the openerp-web package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2011.
#
msgid ""
msgstr ""
"Project-Id-Version: openerp-web\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2011-12-20 18:48+0100\n"
"PO-Revision-Date: 2011-12-07 16:53+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Ukrainian <uk@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: 2011-12-21 05:28+0000\n"
"X-Generator: Launchpad (build 14538)\n"
#: addons/web_calendar/static/src/js/calendar.js:11
msgid "Calendar"
msgstr ""
#: addons/web_calendar/static/src/js/calendar.js:446
msgid "Responsible"
msgstr ""
#: addons/web_calendar/static/src/js/calendar.js:475
msgid "Navigator"
msgstr ""
#: addons/web_calendar/static/src/xml/web_calendar.xml:0
msgid "&nbsp;"
msgstr ""

View File

@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2011-10-07 10:38+0200\n"
"POT-Creation-Date: 2011-12-20 18:48+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -17,6 +17,18 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 0.9.6\n"
#: addons/web_calendar/static/src/js/calendar.js:11
msgid "Calendar"
msgstr ""
#: addons/web_calendar/static/src/js/calendar.js:446
msgid "Responsible"
msgstr ""
#: addons/web_calendar/static/src/js/calendar.js:475
msgid "Navigator"
msgstr ""
#: addons/web_calendar/static/src/xml/web_calendar.xml:0
msgid "&nbsp;"
msgstr ""

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 207 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 145 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 350 B

View File

@ -23,7 +23,12 @@
}
.openerp .dhx_cal_navline{
height:20px; position:absolute;z-index:3;width:750px;color:#2F3A48;
height:20px;
position:absolute;
z-index:3;
width:750px;
color:#2F3A48;
background-color:#eee;
}
.openerp .dhx_cal_navline div{
top:2px;
@ -197,7 +202,7 @@
line-height:17px;
text-decoration:none;
cursor:default;
border:1px dotted #8894A3;
/*border:1px dotted #8894A3;*/
border-bottom:0px;
background-color:white /*#F4F4F4;*/
}
@ -215,9 +220,9 @@
font-size:0.8em;
font-weight:bold;
color:#3F3F3F;
border-bottom:1px dotted #8894A3;
/*border-bottom:1px dotted #8894A3;
border-top:1px dotted #8894A3;
/*border-right:1px dotted #8894A3;z-index:2;*/
border-right:1px dotted #8894A3;z-index:2;*/
overflow:hidden;
background-color: white; /*#F4F4F4;*/
text-shadow: 0 1px 0 white;
@ -230,6 +235,10 @@
overflow-y:auto;
overflow-x:hidden;
}
.openerp .oe_cal_month .dhx_cal_data {
overflow-y: hidden;
}
.openerp .dhx_cal_data tr td {
border-width:0px;
@ -350,7 +359,7 @@
cursor:pointer;
}
.openerp .dhx_cal_event .dhx_title{
.openerp .dhx_cal_event .dhx_title {
height:18px;
border-bottom-style:solid;
border-top-style:solid;
@ -364,6 +373,10 @@
font-size: 90%;
-moz-border-radius-topleft: 3px; -webkit-border-top-left-radius: 3px; border-top-left-radius: 3px; -moz-border-radius-topright: 3px; -webkit-border-top-right-radius: 3px; border-top-right-radius: 3px;
}
.openerp .dhx_cal_event .dhx_title {
/* fp request: hide the title in weekly/daily views */
display: none;
}
.openerp .dhx_cal_event .dhx_body{
border-width:0 1px 1px 1px;
@ -372,6 +385,11 @@
font-size:90%;
line-height:9px;
}
.openerp .dhx_cal_event .dhx_body {
/* fp request: hide the title in weekly/daily views */
-moz-border-radius-topleft: 3px; -webkit-border-top-left-radius: 3px; border-top-left-radius: 3px; -moz-border-radius-topright: 3px; -webkit-border-top-right-radius: 3px; border-top-right-radius: 3px;
padding-top: 4px;
}
.openerp .dhx_resize_denied .dhx_cal_event .dhx_footer{
cursor:default;

View File

@ -3,13 +3,16 @@
*---------------------------------------------------------*/
openerp.web_calendar = function(openerp) {
var _t = openerp.web._t;
var _t = openerp.web._t,
_lt = openerp.web._lt;
var QWeb = openerp.web.qweb;
openerp.web.views.add('calendar', 'openerp.web_calendar.CalendarView');
openerp.web_calendar.CalendarView = openerp.web.View.extend({
display_name: _lt('Calendar'),
// Dhtmlx scheduler ?
init: function(parent, dataset, view_id, options) {
this._super(parent);
this.ready = $.Deferred();
this.set_default_options(options);
this.dataset = dataset;
this.model = dataset.model;
@ -18,13 +21,21 @@ openerp.web_calendar.CalendarView = openerp.web.View.extend({
this.has_been_loaded = $.Deferred();
this.creating_event_id = null;
this.dataset_events = [];
this.form_dialog = new openerp.web_calendar.CalendarFormDialog(this, {}, this.options.action_views_ids.form, dataset);
this.form_dialog = new openerp.web_calendar.CalendarFormDialog(this, {
destroy_on_close: false,
width: '80%',
min_width: 850
}, this.options.action_views_ids.form, dataset);
this.form_dialog.start();
this.COLOR_PALETTE = ['#f57900', '#cc0000', '#d400a8', '#75507b', '#3465a4', '#73d216', '#c17d11', '#edd400',
'#fcaf3e', '#ef2929', '#ff00c9', '#ad7fa8', '#729fcf', '#8ae234', '#e9b96e', '#fce94f',
'#ff8e00', '#ff0000', '#b0008c', '#9000ff', '#0078ff', '#00ff00', '#e6ff00', '#ffff00',
'#905000', '#9b0000', '#840067', '#510090', '#0000c9', '#009b00', '#9abe00', '#ffc900' ];
this.color_map = {};
this.last_search = [];
this.range_start = null;
this.range_stop = null;
this.update_range_dates(Date.today());
},
start: function() {
this._super();
@ -106,9 +117,12 @@ openerp.web_calendar.CalendarView = openerp.web.View.extend({
scheduler.config.api_date = "%Y-%m-%d %H:%i";
scheduler.config.multi_day = true; //Multi day events are not rendered in daily and weekly views
scheduler.config.start_on_monday = true;
scheduler.config.time_step = 30;
scheduler.config.scroll_hour = 8;
scheduler.config.drag_resize = true;
scheduler.config.drag_create = true;
scheduler.config.mark_now = true;
scheduler.config.day_date = '%l %j';
scheduler.init('openerp_scheduler', null, this.mode || 'month');
@ -119,8 +133,11 @@ openerp.web_calendar.CalendarView = openerp.web.View.extend({
scheduler.attachEvent('onEventAdded', this.do_create_event);
scheduler.attachEvent('onEventDeleted', this.do_delete_event);
scheduler.attachEvent('onEventChanged', this.do_save_event);
scheduler.attachEvent('onDblClick', this.do_edit_event);
scheduler.attachEvent('onBeforeLightbox', this.do_edit_event);
scheduler.attachEvent('onClick', this.do_edit_event);
scheduler.attachEvent('onLightbox', this.do_edit_event);
scheduler.attachEvent('onViewChange', this.on_view_changed);
this.refresh_scheduler();
if (this.options.sidebar) {
this.mini_calendar = scheduler.renderCalendar({
@ -133,6 +150,18 @@ openerp.web_calendar.CalendarView = openerp.web.View.extend({
});
}
},
on_view_changed: function(mode, date) {
this.$element.removeClass('oe_cal_day oe_cal_week oe_cal_month').addClass('oe_cal_' + mode);
if (!date.between(this.range_start, this.range_stop)) {
this.update_range_dates(date);
this.do_ranged_search();
}
this.ready.resolve();
},
update_range_dates: function(date) {
this.range_start = date.clone().moveToFirstDayOfMonth();
this.range_stop = this.range_start.clone().addMonths(1).addSeconds(-1);
},
refresh_scheduler: function() {
scheduler.setCurrentView(scheduler._date);
},
@ -162,9 +191,6 @@ openerp.web_calendar.CalendarView = openerp.web.View.extend({
for (var e = 0; e < events.length; e++) {
var evt = events[e];
if (!evt[this.date_start]) {
if (this.session.debug) {
this.do_warn("Start date is not defined for event :", evt['id']);
}
break;
}
@ -246,46 +272,84 @@ openerp.web_calendar.CalendarView = openerp.web.View.extend({
var self = this,
data = this.get_event_data(event_obj);
this.dataset.create(data, function(r) {
var id = parseInt(r.result, 10);
var id = r.result;
self.dataset.ids.push(id);
scheduler.changeEventId(event_id, id);
self.refresh_minical();
}, function(r, event) {
self.creating_event_id = event_id;
self.form_dialog.form.on_record_loaded(data);
self.form_dialog.open();
event.preventDefault();
self.do_create_event_with_formdialog(event_id, event_obj);
});
},
do_create_event_with_formdialog: function(event_id, event_obj) {
if (!event_obj) {
event_obj = scheduler.getEvent(event_id);
}
var self = this,
data = this.get_event_data(event_obj),
form = self.form_dialog.form,
fields_to_fetch = _(form.fields_view.fields).keys();
this.dataset.index = null;
self.creating_event_id = event_id;
this.form_dialog.form.do_show().then(function() {
form.show_invalid = false;
_.each(['date_start', 'date_stop', 'date_delay'], function(field) {
var field_name = self[field];
if (field_name && form.fields[field_name]) {
field = form.fields[field_name];
field.set_value(data[field_name]);
field.dirty = true;
form.do_onchange(field);
}
});
form.show_invalid = true;
self.form_dialog.open();
});
},
do_save_event: function(event_id, event_obj) {
var self = this,
data = this.get_event_data(event_obj);
this.dataset.write(parseInt(event_id, 10), data, {}, function() {
self.refresh_minical();
});
data = this.get_event_data(event_obj),
index = this.dataset.get_id_index(event_id);
if (index != null) {
event_id = this.dataset.ids[index];
this.dataset.write(event_id, data, {}, function() {
self.refresh_minical();
});
}
},
do_delete_event: function(event_id, event_obj) {
var self = this;
// dhtmlx sends this event even when it does not exist in openerp.
// Eg: use cancel in dhtmlx new event dialog
if (_.indexOf(this.dataset.ids, parseInt(event_id, 10)) > -1) {
this.dataset.unlink(parseInt(event_id, 10), function() {
var self = this,
index = this.dataset.get_id_index(event_id);
if (index !== null) {
this.dataset.unlink(event_id, function() {
self.refresh_minical();
});
}
},
do_edit_event: function(event_id) {
var self = this;
event_id = parseInt(event_id, 10);
var index = _.indexOf(this.dataset.ids, event_id);
if (index > -1) {
var index = this.dataset.get_id_index(event_id);
if (index !== null) {
this.dataset.index = index;
this.form_dialog.form.do_show().then(function() {
self.form_dialog.open();
});
return false;
this.do_switch_view('page');
} else if (scheduler.getState().mode === 'month') {
var event_obj = scheduler.getEvent(event_id);
if (event_obj._length === 1) {
event_obj['start_date'].addHours(8);
event_obj['end_date'] = new Date(event_obj['start_date']);
event_obj['end_date'].addHours(1);
}
this.do_create_event_with_formdialog(event_id, event_obj);
// return false;
// Theorically, returning false should prevent the lightbox to open.
// It works, but then the scheduler is in a buggy state where drag'n drop
// related internal Event won't be fired anymore.
// I tried scheduler.editStop(event_id); but doesn't work either
// After losing one hour on this, here's a quick and very dirty fix :
$(".dhx_cancel_btn").click();
}
return true;
},
get_event_data: function(event_obj) {
var data = {
@ -302,19 +366,30 @@ openerp.web_calendar.CalendarView = openerp.web.View.extend({
return data;
},
do_search: function(domain, context, group_by) {
var self = this;
this.last_search = arguments;
this.do_ranged_search();
},
do_ranged_search: function() {
var self = this
scheduler.clearAll();
$.when(this.has_been_loaded).then(function() {
// TODO: handle non-empty results.group_by with read_group
$.when(this.has_been_loaded, this.ready).then(function() {
self.dataset.read_slice(_.keys(self.fields), {
offset: 0,
limit: self.limit
domain: self.get_range_domain(),
context: self.last_search[1]
}, function(events) {
self.dataset_events = events;
self.on_events_loaded(events);
});
});
},
get_range_domain: function() {
var format = openerp.web.date_to_str,
domain = this.last_search[0].slice(0);
domain.unshift([this.date_start, '>=', format(this.range_start.clone().addDays(-6))]);
domain.unshift([this.date_start, '<=', format(this.range_stop.clone().addDays(6))]);
return domain;
},
do_show: function () {
var self = this;
$.when(this.has_been_loaded).then(function() {
@ -325,7 +400,7 @@ openerp.web_calendar.CalendarView = openerp.web.View.extend({
});
},
do_hide: function () {
this.$element.hide();
this._super();
if (this.sidebar) {
this.sidebar.$element.hide();
}
@ -344,6 +419,7 @@ openerp.web_calendar.CalendarFormDialog = openerp.web.Dialog.extend({
this.view = view;
},
start: function() {
var self = this;
this._super();
this.form = new openerp.web.FormView(this, this.dataset, this.view_id, {
sidebar: false,
@ -352,6 +428,9 @@ openerp.web_calendar.CalendarFormDialog = openerp.web.Dialog.extend({
this.form.appendTo(this.$element);
this.form.on_created.add_last(this.on_form_dialog_saved);
this.form.on_saved.add_last(this.on_form_dialog_saved);
this.form.on_button_cancel = function() {
self.close();
}
},
on_form_dialog_saved: function() {
var id = this.dataset.ids[this.dataset.index];

View File

@ -1,6 +1,5 @@
<template>
<t t-name="CalendarView">
<h3 class="title"><t t-esc="fields_view.arch.attrs.string"/></h3>
<div id="openerp_scheduler" class="dhx_cal_container" style="height: 600px;">
<div class="dhx_cal_navline">
<div class="dhx_cal_prev_button">&amp;nbsp;</div>

View File

@ -1,6 +1,10 @@
{
"name": "Web Chat",
"category" : "Hidden",
"category": "Hidden",
"description":
"""
OpenERP Web chat module.
""",
"version": "2.0",
"depends": ['web'],
"js": [

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