[MERGE] Merged from openerp-web.

bzr revid: jra@tinyerp.com-20120626130704-2prldyky8aqvytot
This commit is contained in:
Jiten (OpenERP) 2012-06-26 18:37:04 +05:30
commit 5e5daf4fef
362 changed files with 1552 additions and 11261 deletions

View File

@ -15,7 +15,7 @@
"static/lib/datejs/parser.js", "static/lib/datejs/parser.js",
"static/lib/datejs/sugarpak.js", "static/lib/datejs/sugarpak.js",
"static/lib/datejs/extras.js", "static/lib/datejs/extras.js",
"static/lib/jquery/jquery-1.7.2b1.js", "static/lib/jquery/jquery-1.7.2.js",
"static/lib/jquery.MD5/jquery.md5.js", "static/lib/jquery.MD5/jquery.md5.js",
"static/lib/jquery.form/jquery.form.js", "static/lib/jquery.form/jquery.form.js",
"static/lib/jquery.validate/jquery.validate.js", "static/lib/jquery.validate/jquery.validate.js",
@ -56,6 +56,7 @@
"static/lib/jquery.ui.timepicker/css/jquery-ui-timepicker-addon.css", "static/lib/jquery.ui.timepicker/css/jquery-ui-timepicker-addon.css",
"static/lib/jquery.ui.notify/css/ui.notify.css", "static/lib/jquery.ui.notify/css/ui.notify.css",
"static/lib/jquery.tipsy/tipsy.css", "static/lib/jquery.tipsy/tipsy.css",
"static/lib/jquery.textext/jquery.textext.css",
"static/src/css/base.css", "static/src/css/base.css",
"static/src/css/data_export.css", "static/src/css/data_export.css",
"static/src/css/data_import.css", "static/src/css/data_import.css",

View File

@ -588,26 +588,22 @@ class LocalConnector(openerplib.Connector):
import openerp import openerp
import traceback import traceback
import xmlrpclib import xmlrpclib
code_string = "warning -- %s\n\n%s"
try: try:
result = openerp.netsvc.dispatch_rpc(service_name, method, args) return openerp.netsvc.dispatch_rpc(service_name, method, args)
except Exception,e: except openerp.osv.osv.except_osv, e:
# TODO change the except to raise LibException instead of their emulated xmlrpc fault # TODO change the except to raise LibException instead of their emulated xmlrpc fault
if isinstance(e, openerp.osv.osv.except_osv): raise xmlrpclib.Fault(code_string % (e.name, e.value), '')
fault = xmlrpclib.Fault('warning -- ' + e.name + '\n\n' + str(e.value), '') except openerp.exceptions.Warning, e:
elif isinstance(e, openerp.exceptions.Warning): raise xmlrpclib.Fault(code_string % ("Warning", e), '')
fault = xmlrpclib.Fault('warning -- Warning\n\n' + str(e), '') except openerp.exceptions.AccessError, e:
elif isinstance(e, openerp.exceptions.AccessError): raise xmlrpclib.Fault(code_string % ("AccessError", e), '')
fault = xmlrpclib.Fault('warning -- AccessError\n\n' + str(e), '') except openerp.exceptions.AccessDenied, e:
elif isinstance(e, openerp.exceptions.AccessDenied): raise xmlrpclib.Fault('AccessDenied', str(e))
fault = xmlrpclib.Fault('AccessDenied', str(e)) except openerp.exceptions.DeferredException, e:
elif isinstance(e, openerp.exceptions.DeferredException): formatted_info = "".join(traceback.format_exception(*e.traceback))
info = e.traceback raise xmlrpclib.Fault(openerp.tools.ustr(e.message), formatted_info)
formatted_info = "".join(traceback.format_exception(*info)) except Exception, e:
fault = xmlrpclib.Fault(openerp.tools.ustr(e.message), formatted_info) formatted_info = "".join(traceback.format_exception(*(sys.exc_info())))
else: raise xmlrpclib.Fault(openerp.tools.exception_to_unicode(e), formatted_info)
info = sys.exc_info()
formatted_info = "".join(traceback.format_exception(*info))
fault = xmlrpclib.Fault(openerp.tools.exception_to_unicode(e), formatted_info)
raise fault
return result

View File

@ -735,10 +735,10 @@ def clean_action(req, action, do_not_eval=False):
if not do_not_eval: if not do_not_eval:
# values come from the server, we can just eval them # values come from the server, we can just eval them
if isinstance(action.get('context'), basestring): if action.get('context') and isinstance(action.get('context'), basestring):
action['context'] = eval( action['context'], eval_ctx ) or {} action['context'] = eval( action['context'], eval_ctx ) or {}
if isinstance(action.get('domain'), basestring): if action.get('domain') and isinstance(action.get('domain'), basestring):
action['domain'] = eval( action['domain'], eval_ctx ) or [] action['domain'] = eval( action['domain'], eval_ctx ) or []
else: else:
if 'context' in action: if 'context' in action:
@ -771,7 +771,7 @@ def generate_views(action):
:param dict action: action descriptor dictionary to generate a views key for :param dict action: action descriptor dictionary to generate a views key for
""" """
view_id = action.get('view_id', False) view_id = action.get('view_id') or False
if isinstance(view_id, (list, tuple)): if isinstance(view_id, (list, tuple)):
view_id = view_id[0] view_id = view_id[0]
@ -1289,9 +1289,10 @@ class SearchView(View):
@openerpweb.jsonrequest @openerpweb.jsonrequest
def add_to_dashboard(self, req, menu_id, action_id, context_to_save, domain, view_mode, name=''): def add_to_dashboard(self, req, menu_id, action_id, context_to_save, domain, view_mode, name=''):
ctx = common.nonliterals.CompoundContext(context_to_save) to_eval = common.nonliterals.CompoundContext(context_to_save)
ctx.session = req.session to_eval.session = req.session
ctx = ctx.evaluate() ctx = dict((k, v) for k, v in to_eval.evaluate().iteritems()
if not k.startswith('search_default_'))
ctx['dashboard_merge_domains_contexts'] = False # TODO: replace this 6.1 workaround by attribute on <action/> ctx['dashboard_merge_domains_contexts'] = False # TODO: replace this 6.1 workaround by attribute on <action/>
domain = common.nonliterals.CompoundDomain(domain) domain = common.nonliterals.CompoundDomain(domain)
domain.session = req.session domain.session = req.session
@ -1367,6 +1368,17 @@ class Binary(openerpweb.Controller):
def placeholder(self, req): def placeholder(self, req):
addons_path = openerpweb.addons_manifest['web']['addons_path'] addons_path = openerpweb.addons_manifest['web']['addons_path']
return open(os.path.join(addons_path, 'web', 'static', 'src', 'img', 'placeholder.png'), 'rb').read() return open(os.path.join(addons_path, 'web', 'static', 'src', 'img', 'placeholder.png'), 'rb').read()
def content_disposition(self, filename, req):
filename = filename.encode('utf8')
escaped = urllib2.quote(filename)
browser = req.httprequest.user_agent.browser
version = int((req.httprequest.user_agent.version or '0').split('.')[0])
if browser == 'msie' and version < 9:
return "attachment; filename=%s" % escaped
elif browser == 'safari':
return "attachment; filename=%s" % filename
else:
return "attachment; filename*=UTF-8''%s" % escaped
@openerpweb.httprequest @openerpweb.httprequest
def saveas(self, req, model, field, id=None, filename_field=None, **kw): def saveas(self, req, model, field, id=None, filename_field=None, **kw):
@ -1402,7 +1414,7 @@ class Binary(openerpweb.Controller):
filename = res.get(filename_field, '') or filename filename = res.get(filename_field, '') or filename
return req.make_response(filecontent, return req.make_response(filecontent,
[('Content-Type', 'application/octet-stream'), [('Content-Type', 'application/octet-stream'),
('Content-Disposition', 'attachment; filename="%s"' % filename)]) ('Content-Disposition', self.content_disposition(filename, req))])
@openerpweb.httprequest @openerpweb.httprequest
def saveas_ajax(self, req, data, token): def saveas_ajax(self, req, data, token):
@ -1432,7 +1444,7 @@ class Binary(openerpweb.Controller):
filename = res.get(filename_field, '') or filename filename = res.get(filename_field, '') or filename
return req.make_response(filecontent, return req.make_response(filecontent,
headers=[('Content-Type', 'application/octet-stream'), headers=[('Content-Type', 'application/octet-stream'),
('Content-Disposition', 'attachment; filename="%s"' % filename)], ('Content-Disposition', self.content_disposition(filename, req))],
cookies={'fileToken': int(token)}) cookies={'fileToken': int(token)})
@openerpweb.httprequest @openerpweb.httprequest
@ -1481,19 +1493,26 @@ class Action(openerpweb.Controller):
"ir.actions.act_url": "ir.actions.url", "ir.actions.act_url": "ir.actions.url",
} }
# For most actions, the type attribute and the model name are the same, but
# there are exceptions. This dict is used to remap action type attributes
# to the "real" model name when they differ.
action_mapping = {
"ir.actions.act_url": "ir.actions.url",
}
@openerpweb.jsonrequest @openerpweb.jsonrequest
def load(self, req, action_id, do_not_eval=False): def load(self, req, action_id, do_not_eval=False):
Actions = req.session.model('ir.actions.actions') Actions = req.session.model('ir.actions.actions')
value = False value = False
context = req.session.eval_context(req.context) context = req.session.eval_context(req.context)
action_type = Actions.read([action_id], ['type'], context) base_action = Actions.read([action_id], ['type'], context)
if action_type: if base_action:
ctx = {} ctx = {}
if action_type[0]['type'] == 'ir.actions.report.xml': action_type = base_action[0]['type']
if action_type == 'ir.actions.report.xml':
ctx.update({'bin_size': True}) ctx.update({'bin_size': True})
ctx.update(context) ctx.update(context)
action_model = action_type[0]['type'] action_model = self.action_mapping.get(action_type, action_type)
action_model = Action.action_mapping.get(action_model, action_model)
action = req.session.model(action_model).read([action_id], False, ctx) action = req.session.model(action_model).read([action_id], False, ctx)
if action: if action:
value = clean_action(req, action[0], do_not_eval) value = clean_action(req, action[0], do_not_eval)
@ -1886,10 +1905,14 @@ class Import(View):
return '<script>window.top.%s(%s);</script>' % ( return '<script>window.top.%s(%s);</script>' % (
jsonp, simplejson.dumps({'error': {'message': error}})) jsonp, simplejson.dumps({'error': {'message': error}}))
# skip ignored records # skip ignored records (@skip parameter)
data_record = itertools.islice( # then skip empty lines (not valid csv)
csv.reader(csvfile, quotechar=str(csvdel), delimiter=str(csvsep)), # nb: should these operations be reverted?
skip, None) rows_to_import = itertools.ifilter(
None,
itertools.islice(
csv.reader(csvfile, quotechar=str(csvdel), delimiter=str(csvsep)),
skip, None))
# if only one index, itemgetter will return an atom rather than a tuple # if only one index, itemgetter will return an atom rather than a tuple
if len(indices) == 1: mapper = lambda row: [row[indices[0]]] if len(indices) == 1: mapper = lambda row: [row[indices[0]]]
@ -1901,7 +1924,7 @@ class Import(View):
# decode each data row # decode each data row
data = [ data = [
[record.decode(csvcode) for record in row] [record.decode(csvcode) for record in row]
for row in itertools.imap(mapper, data_record) for row in itertools.imap(mapper, rows_to_import)
# don't insert completely empty rows (can happen due to fields # don't insert completely empty rows (can happen due to fields
# filtering in case of e.g. o2m content rows) # filtering in case of e.g. o2m content rows)
if any(row) if any(row)

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-06-14 04:39+0000\n" "X-Launchpad-Export-Date: 2012-06-26 05:34+0000\n"
"X-Generator: Launchpad (build 15405)\n" "X-Generator: Launchpad (build 15482)\n"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/chrome.js:172 #: addons/web/static/src/js/chrome.js:172

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-06-14 04:39+0000\n" "X-Launchpad-Export-Date: 2012-06-26 05:34+0000\n"
"X-Generator: Launchpad (build 15405)\n" "X-Generator: Launchpad (build 15482)\n"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/chrome.js:172 #: addons/web/static/src/js/chrome.js:172

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-06-14 04:39+0000\n" "X-Launchpad-Export-Date: 2012-06-26 05:34+0000\n"
"X-Generator: Launchpad (build 15405)\n" "X-Generator: Launchpad (build 15482)\n"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/chrome.js:172 #: addons/web/static/src/js/chrome.js:172

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-06-16 05:05+0000\n" "X-Launchpad-Export-Date: 2012-06-26 05:34+0000\n"
"X-Generator: Launchpad (build 15419)\n" "X-Generator: Launchpad (build 15482)\n"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/chrome.js:172 #: addons/web/static/src/js/chrome.js:172

View File

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

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-06-14 04:39+0000\n" "X-Launchpad-Export-Date: 2012-06-26 05:34+0000\n"
"X-Generator: Launchpad (build 15405)\n" "X-Generator: Launchpad (build 15482)\n"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/chrome.js:172 #: addons/web/static/src/js/chrome.js:172

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-06-14 04:40+0000\n" "X-Launchpad-Export-Date: 2012-06-26 05:35+0000\n"
"X-Generator: Launchpad (build 15405)\n" "X-Generator: Launchpad (build 15482)\n"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/chrome.js:172 #: addons/web/static/src/js/chrome.js:172

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-06-14 04:40+0000\n" "X-Launchpad-Export-Date: 2012-06-26 05:35+0000\n"
"X-Generator: Launchpad (build 15405)\n" "X-Generator: Launchpad (build 15482)\n"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/chrome.js:172 #: addons/web/static/src/js/chrome.js:172

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-06-14 04:40+0000\n" "X-Launchpad-Export-Date: 2012-06-26 05:35+0000\n"
"X-Generator: Launchpad (build 15405)\n" "X-Generator: Launchpad (build 15482)\n"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/chrome.js:172 #: addons/web/static/src/js/chrome.js:172

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-06-14 04:40+0000\n" "X-Launchpad-Export-Date: 2012-06-26 05:35+0000\n"
"X-Generator: Launchpad (build 15405)\n" "X-Generator: Launchpad (build 15482)\n"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/chrome.js:172 #: addons/web/static/src/js/chrome.js:172

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-06-14 04:40+0000\n" "X-Launchpad-Export-Date: 2012-06-26 05:35+0000\n"
"X-Generator: Launchpad (build 15405)\n" "X-Generator: Launchpad (build 15482)\n"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/chrome.js:172 #: addons/web/static/src/js/chrome.js:172

View File

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

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-06-14 04:40+0000\n" "X-Launchpad-Export-Date: 2012-06-26 05:35+0000\n"
"X-Generator: Launchpad (build 15405)\n" "X-Generator: Launchpad (build 15482)\n"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/chrome.js:172 #: addons/web/static/src/js/chrome.js:172

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-06-14 04:39+0000\n" "X-Launchpad-Export-Date: 2012-06-26 05:35+0000\n"
"X-Generator: Launchpad (build 15405)\n" "X-Generator: Launchpad (build 15482)\n"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/chrome.js:172 #: addons/web/static/src/js/chrome.js:172

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-06-14 04:39+0000\n" "X-Launchpad-Export-Date: 2012-06-26 05:34+0000\n"
"X-Generator: Launchpad (build 15405)\n" "X-Generator: Launchpad (build 15482)\n"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/chrome.js:172 #: addons/web/static/src/js/chrome.js:172

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-06-14 04:40+0000\n" "X-Launchpad-Export-Date: 2012-06-26 05:35+0000\n"
"X-Generator: Launchpad (build 15405)\n" "X-Generator: Launchpad (build 15482)\n"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/chrome.js:172 #: addons/web/static/src/js/chrome.js:172

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-06-14 04:40+0000\n" "X-Launchpad-Export-Date: 2012-06-26 05:35+0000\n"
"X-Generator: Launchpad (build 15405)\n" "X-Generator: Launchpad (build 15482)\n"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/chrome.js:172 #: addons/web/static/src/js/chrome.js:172

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-06-14 04:40+0000\n" "X-Launchpad-Export-Date: 2012-06-26 05:35+0000\n"
"X-Generator: Launchpad (build 15405)\n" "X-Generator: Launchpad (build 15482)\n"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/chrome.js:172 #: addons/web/static/src/js/chrome.js:172

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-06-14 04:40+0000\n" "X-Launchpad-Export-Date: 2012-06-26 05:35+0000\n"
"X-Generator: Launchpad (build 15405)\n" "X-Generator: Launchpad (build 15482)\n"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/chrome.js:172 #: addons/web/static/src/js/chrome.js:172

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-06-14 04:40+0000\n" "X-Launchpad-Export-Date: 2012-06-26 05:35+0000\n"
"X-Generator: Launchpad (build 15405)\n" "X-Generator: Launchpad (build 15482)\n"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/chrome.js:172 #: addons/web/static/src/js/chrome.js:172
@ -53,17 +53,17 @@ msgstr "डेटाबेस का नाम अमान्य है"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/chrome.js:483 #: addons/web/static/src/js/chrome.js:483
msgid "Backed" msgid "Backed"
msgstr "" msgstr "समर्थित"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/chrome.js:484 #: addons/web/static/src/js/chrome.js:484
msgid "Database backed up successfully" msgid "Database backed up successfully"
msgstr "" msgstr "आपका डेटाबेस सफलतापूर्वक समर्थित हो गया"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/chrome.js:527 #: addons/web/static/src/js/chrome.js:527
msgid "Restored" msgid "Restored"
msgstr "" msgstr "लौटी"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/chrome.js:527 #: addons/web/static/src/js/chrome.js:527
@ -80,7 +80,7 @@ msgstr "के बारे में"
#: addons/web/static/src/js/chrome.js:787 #: addons/web/static/src/js/chrome.js:787
#: addons/web/static/src/xml/base.xml:356 #: addons/web/static/src/xml/base.xml:356
msgid "Preferences" msgid "Preferences"
msgstr "" msgstr "पसंद"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/chrome.js:790 #: addons/web/static/src/js/chrome.js:790
@ -97,12 +97,12 @@ msgstr ""
#: addons/web/static/src/js/search.js:293 #: addons/web/static/src/js/search.js:293
#: addons/web/static/src/js/view_form.js:1234 #: addons/web/static/src/js/view_form.js:1234
msgid "Cancel" msgid "Cancel"
msgstr "" msgstr "रद्द"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/chrome.js:791 #: addons/web/static/src/js/chrome.js:791
msgid "Change password" msgid "Change password"
msgstr "" msgstr "पासवर्ड बदलें"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/chrome.js:792 #: addons/web/static/src/js/chrome.js:792
@ -112,31 +112,31 @@ msgstr ""
#: addons/web/static/src/xml/base.xml:1500 #: addons/web/static/src/xml/base.xml:1500
#: addons/web/static/src/xml/base.xml:1514 #: addons/web/static/src/xml/base.xml:1514
msgid "Save" msgid "Save"
msgstr "" msgstr "सहेज"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/chrome.js:811 #: addons/web/static/src/js/chrome.js:811
#: addons/web/static/src/xml/base.xml:226 #: addons/web/static/src/xml/base.xml:226
#: addons/web/static/src/xml/base.xml:1729 #: addons/web/static/src/xml/base.xml:1729
msgid "Change Password" msgid "Change Password"
msgstr "" msgstr "पासवर्ड बदलें"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/chrome.js:1096 #: addons/web/static/src/js/chrome.js:1096
#: addons/web/static/src/js/chrome.js:1100 #: addons/web/static/src/js/chrome.js:1100
msgid "OpenERP - Unsupported/Community Version" msgid "OpenERP - Unsupported/Community Version"
msgstr "" msgstr "असमर्थित / समुदाय संस्करण - OpenERP"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/chrome.js:1131 #: addons/web/static/src/js/chrome.js:1131
#: addons/web/static/src/js/chrome.js:1135 #: addons/web/static/src/js/chrome.js:1135
msgid "Client Error" msgid "Client Error"
msgstr "" msgstr "ग्राहक त्रुटि"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/data_export.js:6 #: addons/web/static/src/js/data_export.js:6
msgid "Export Data" msgid "Export Data"
msgstr "" msgstr "निर्यात आंकड़ा"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/data_export.js:19 #: addons/web/static/src/js/data_export.js:19
@ -149,12 +149,12 @@ msgstr ""
#: addons/web/static/src/js/view_form.js:698 #: addons/web/static/src/js/view_form.js:698
#: addons/web/static/src/js/view_form.js:3067 #: addons/web/static/src/js/view_form.js:3067
msgid "Close" msgid "Close"
msgstr "" msgstr "बंद"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/data_export.js:20 #: addons/web/static/src/js/data_export.js:20
msgid "Export To File" msgid "Export To File"
msgstr "" msgstr "फ़ाइल निर्यात"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/data_export.js:125 #: addons/web/static/src/js/data_export.js:125
@ -174,17 +174,17 @@ msgstr ""
#. openerp-web #. openerp-web
#: addons/web/static/src/js/data_import.js:34 #: addons/web/static/src/js/data_import.js:34
msgid "Import Data" msgid "Import Data"
msgstr "" msgstr "डाटा आयात करें"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/data_import.js:70 #: addons/web/static/src/js/data_import.js:70
msgid "Import File" msgid "Import File"
msgstr "" msgstr "फ़ाइल आयात करें"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/data_import.js:105 #: addons/web/static/src/js/data_import.js:105
msgid "External ID" msgid "External ID"
msgstr "" msgstr "बाहरी आईडी"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/formats.js:300 #: addons/web/static/src/js/formats.js:300
@ -192,50 +192,50 @@ msgstr ""
#: addons/web/static/src/js/formats.js:322 #: addons/web/static/src/js/formats.js:322
#: addons/web/static/src/js/view_page.js:251 #: addons/web/static/src/js/view_page.js:251
msgid "Download" msgid "Download"
msgstr "" msgstr "डाउनलोड"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/formats.js:305 #: addons/web/static/src/js/formats.js:305
#: addons/web/static/src/js/formats.js:327 #: addons/web/static/src/js/formats.js:327
#, python-format #, python-format
msgid "Download \"%s\"" msgid "Download \"%s\""
msgstr "" msgstr "डाउनलोड \"%s\""
#. openerp-web #. openerp-web
#: addons/web/static/src/js/search.js:191 #: addons/web/static/src/js/search.js:191
msgid "Filter disabled due to invalid syntax" msgid "Filter disabled due to invalid syntax"
msgstr "" msgstr "फ़िल्टर अमान्य वाक्यविन्यास के कारण अक्षम"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/search.js:237 #: addons/web/static/src/js/search.js:237
msgid "Filter Entry" msgid "Filter Entry"
msgstr "" msgstr "फ़िल्टर एंट्री"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/search.js:242 #: addons/web/static/src/js/search.js:242
#: addons/web/static/src/js/search.js:291 #: addons/web/static/src/js/search.js:291
#: addons/web/static/src/js/search.js:296 #: addons/web/static/src/js/search.js:296
msgid "OK" msgid "OK"
msgstr "" msgstr "ठीक है"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/search.js:286 #: addons/web/static/src/js/search.js:286
#: addons/web/static/src/xml/base.xml:1292 #: addons/web/static/src/xml/base.xml:1292
#: addons/web/static/src/js/search.js:291 #: addons/web/static/src/js/search.js:291
msgid "Add to Dashboard" msgid "Add to Dashboard"
msgstr "" msgstr "डैशबोर्ड पर जोड़ें"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/search.js:415 #: addons/web/static/src/js/search.js:415
#: addons/web/static/src/js/search.js:420 #: addons/web/static/src/js/search.js:420
msgid "Invalid Search" msgid "Invalid Search"
msgstr "" msgstr "अवैध खोज"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/search.js:415 #: addons/web/static/src/js/search.js:415
#: addons/web/static/src/js/search.js:420 #: addons/web/static/src/js/search.js:420
msgid "triggered from search view" msgid "triggered from search view"
msgstr "" msgstr "खोज दृष्टि से शुरू"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/search.js:503 #: addons/web/static/src/js/search.js:503
@ -248,38 +248,38 @@ msgstr ""
#: addons/web/static/src/js/search.js:839 #: addons/web/static/src/js/search.js:839
#: addons/web/static/src/js/search.js:844 #: addons/web/static/src/js/search.js:844
msgid "not a valid integer" msgid "not a valid integer"
msgstr "" msgstr "वैध नहीं पूर्णांक"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/search.js:853 #: addons/web/static/src/js/search.js:853
#: addons/web/static/src/js/search.js:858 #: addons/web/static/src/js/search.js:858
msgid "not a valid number" msgid "not a valid number"
msgstr "" msgstr "एक वैध संख्या नहीं"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/search.js:931 #: addons/web/static/src/js/search.js:931
#: addons/web/static/src/xml/base.xml:968 #: addons/web/static/src/xml/base.xml:968
#: addons/web/static/src/js/search.js:936 #: addons/web/static/src/js/search.js:936
msgid "Yes" msgid "Yes"
msgstr "" msgstr "हाँ"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/search.js:932 #: addons/web/static/src/js/search.js:932
#: addons/web/static/src/js/search.js:937 #: addons/web/static/src/js/search.js:937
msgid "No" msgid "No"
msgstr "" msgstr "नही"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/search.js:1290 #: addons/web/static/src/js/search.js:1290
#: addons/web/static/src/js/search.js:1295 #: addons/web/static/src/js/search.js:1295
msgid "contains" msgid "contains"
msgstr "" msgstr "में हैं"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/search.js:1291 #: addons/web/static/src/js/search.js:1291
#: addons/web/static/src/js/search.js:1296 #: addons/web/static/src/js/search.js:1296
msgid "doesn't contain" msgid "doesn't contain"
msgstr "" msgstr "शामिल नहीं है"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/search.js:1292 #: addons/web/static/src/js/search.js:1292
@ -293,7 +293,7 @@ msgstr ""
#: addons/web/static/src/js/search.js:1349 #: addons/web/static/src/js/search.js:1349
#: addons/web/static/src/js/search.js:1370 #: addons/web/static/src/js/search.js:1370
msgid "is equal to" msgid "is equal to"
msgstr "" msgstr "के बराबर है"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/search.js:1293 #: addons/web/static/src/js/search.js:1293
@ -307,7 +307,7 @@ msgstr ""
#: addons/web/static/src/js/search.js:1350 #: addons/web/static/src/js/search.js:1350
#: addons/web/static/src/js/search.js:1371 #: addons/web/static/src/js/search.js:1371
msgid "is not equal to" msgid "is not equal to"
msgstr "" msgstr "के बराबर नहीं है"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/search.js:1294 #: addons/web/static/src/js/search.js:1294
@ -321,7 +321,7 @@ msgstr ""
#: addons/web/static/src/js/search.js:1351 #: addons/web/static/src/js/search.js:1351
#: addons/web/static/src/js/search.js:1372 #: addons/web/static/src/js/search.js:1372
msgid "greater than" msgid "greater than"
msgstr "" msgstr "से अधिक"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/search.js:1295 #: addons/web/static/src/js/search.js:1295
@ -335,7 +335,7 @@ msgstr ""
#: addons/web/static/src/js/search.js:1352 #: addons/web/static/src/js/search.js:1352
#: addons/web/static/src/js/search.js:1373 #: addons/web/static/src/js/search.js:1373
msgid "less than" msgid "less than"
msgstr "" msgstr "से कम"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/search.js:1296 #: addons/web/static/src/js/search.js:1296
@ -349,7 +349,7 @@ msgstr ""
#: addons/web/static/src/js/search.js:1353 #: addons/web/static/src/js/search.js:1353
#: addons/web/static/src/js/search.js:1374 #: addons/web/static/src/js/search.js:1374
msgid "greater or equal than" msgid "greater or equal than"
msgstr "" msgstr "अधिक से अधिक या बराबर की तुलना में"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/search.js:1297 #: addons/web/static/src/js/search.js:1297
@ -363,7 +363,7 @@ msgstr ""
#: addons/web/static/src/js/search.js:1354 #: addons/web/static/src/js/search.js:1354
#: addons/web/static/src/js/search.js:1375 #: addons/web/static/src/js/search.js:1375
msgid "less or equal than" msgid "less or equal than"
msgstr "" msgstr "या कम से बराबर"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/search.js:1360 #: addons/web/static/src/js/search.js:1360
@ -371,31 +371,31 @@ msgstr ""
#: addons/web/static/src/js/search.js:1365 #: addons/web/static/src/js/search.js:1365
#: addons/web/static/src/js/search.js:1388 #: addons/web/static/src/js/search.js:1388
msgid "is" msgid "is"
msgstr "" msgstr "है"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/search.js:1384 #: addons/web/static/src/js/search.js:1384
#: addons/web/static/src/js/search.js:1389 #: addons/web/static/src/js/search.js:1389
msgid "is not" msgid "is not"
msgstr "" msgstr "नहीं है"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/search.js:1396 #: addons/web/static/src/js/search.js:1396
#: addons/web/static/src/js/search.js:1401 #: addons/web/static/src/js/search.js:1401
msgid "is true" msgid "is true"
msgstr "" msgstr "सच है"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/search.js:1397 #: addons/web/static/src/js/search.js:1397
#: addons/web/static/src/js/search.js:1402 #: addons/web/static/src/js/search.js:1402
msgid "is false" msgid "is false"
msgstr "" msgstr "ग़लत है"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/view_editor.js:20 #: addons/web/static/src/js/view_editor.js:20
#, python-format #, python-format
msgid "Manage Views (%s)" msgid "Manage Views (%s)"
msgstr "" msgstr "दर्शनों की संख्या (% s) प्रबंधित"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/view_editor.js:46 #: addons/web/static/src/js/view_editor.js:46
@ -404,31 +404,31 @@ msgstr ""
#: addons/web/static/src/xml/base.xml:327 #: addons/web/static/src/xml/base.xml:327
#: addons/web/static/src/xml/base.xml:756 #: addons/web/static/src/xml/base.xml:756
msgid "Create" msgid "Create"
msgstr "" msgstr "बनाएँ"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/view_editor.js:47 #: addons/web/static/src/js/view_editor.js:47
#: addons/web/static/src/xml/base.xml:483 #: addons/web/static/src/xml/base.xml:483
#: addons/web/static/src/xml/base.xml:755 #: addons/web/static/src/xml/base.xml:755
msgid "Edit" msgid "Edit"
msgstr "" msgstr "संपादित"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/view_editor.js:48 #: addons/web/static/src/js/view_editor.js:48
#: addons/web/static/src/xml/base.xml:1647 #: addons/web/static/src/xml/base.xml:1647
msgid "Remove" msgid "Remove"
msgstr "" msgstr "हटाओ"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/view_editor.js:71 #: addons/web/static/src/js/view_editor.js:71
#, python-format #, python-format
msgid "Create a view (%s)" msgid "Create a view (%s)"
msgstr "" msgstr "एक दृश्य (% s) बनाएँ"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/view_editor.js:168 #: addons/web/static/src/js/view_editor.js:168
msgid "Do you really want to remove this view?" msgid "Do you really want to remove this view?"
msgstr "" msgstr "क्या आप वास्तव में इस दृश्य को दूर करना चाहते हैं?"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/view_editor.js:364 #: addons/web/static/src/js/view_editor.js:364
@ -449,42 +449,42 @@ msgstr ""
#. openerp-web #. openerp-web
#: addons/web/static/src/js/view_editor.js:381 #: addons/web/static/src/js/view_editor.js:381
msgid "Preview" msgid "Preview"
msgstr "" msgstr "पूर्वावलोकन"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/view_editor.js:501 #: addons/web/static/src/js/view_editor.js:501
msgid "Do you really want to remove this node?" msgid "Do you really want to remove this node?"
msgstr "" msgstr "क्या आप वास्तव में इस नोड को दूर करना चाहते हैं?"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/view_editor.js:815 #: addons/web/static/src/js/view_editor.js:815
#: addons/web/static/src/js/view_editor.js:939 #: addons/web/static/src/js/view_editor.js:939
msgid "Properties" msgid "Properties"
msgstr "" msgstr "गुण"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/view_editor.js:818 #: addons/web/static/src/js/view_editor.js:818
#: addons/web/static/src/js/view_editor.js:942 #: addons/web/static/src/js/view_editor.js:942
msgid "Update" msgid "Update"
msgstr "" msgstr "अद्यतन"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/view_form.js:16 #: addons/web/static/src/js/view_form.js:16
msgid "Form" msgid "Form"
msgstr "" msgstr "फार्म"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/view_form.js:121 #: addons/web/static/src/js/view_form.js:121
#: addons/web/static/src/js/views.js:803 #: addons/web/static/src/js/views.js:803
msgid "Customize" msgid "Customize"
msgstr "" msgstr "अनुकूलित करें"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/view_form.js:123 #: addons/web/static/src/js/view_form.js:123
#: addons/web/static/src/js/view_form.js:686 #: addons/web/static/src/js/view_form.js:686
#: addons/web/static/src/js/view_form.js:692 #: addons/web/static/src/js/view_form.js:692
msgid "Set Default" msgid "Set Default"
msgstr "" msgstr "डिफ़ॉल्ट सेट करें"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/view_form.js:469 #: addons/web/static/src/js/view_form.js:469
@ -492,18 +492,19 @@ msgstr ""
msgid "" msgid ""
"Warning, the record has been modified, your changes will be discarded." "Warning, the record has been modified, your changes will be discarded."
msgstr "" msgstr ""
"चेतावनी, रिकॉर्ड संशोधित किया गया है, अपने परिवर्तनों को खारिज कर दिया जाएगा."
#. openerp-web #. openerp-web
#: addons/web/static/src/js/view_form.js:693 #: addons/web/static/src/js/view_form.js:693
#: addons/web/static/src/js/view_form.js:699 #: addons/web/static/src/js/view_form.js:699
msgid "Save default" msgid "Save default"
msgstr "" msgstr "डिफ़ॉल्ट रूप में सहेजें"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/view_form.js:754 #: addons/web/static/src/js/view_form.js:754
#: addons/web/static/src/js/view_form.js:760 #: addons/web/static/src/js/view_form.js:760
msgid "Attachments" msgid "Attachments"
msgstr "" msgstr "अनुलग्नक"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/view_form.js:792 #: addons/web/static/src/js/view_form.js:792
@ -537,7 +538,7 @@ msgstr ""
#: addons/web/static/src/js/view_form.js:1225 #: addons/web/static/src/js/view_form.js:1225
#: addons/web/static/src/js/view_form.js:1231 #: addons/web/static/src/js/view_form.js:1231
msgid "Confirm" msgid "Confirm"
msgstr "" msgstr "पुष्टि करें"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/view_form.js:1921 #: addons/web/static/src/js/view_form.js:1921
@ -547,7 +548,7 @@ msgstr ""
#: addons/web/static/src/js/view_form.js:2590 #: addons/web/static/src/js/view_form.js:2590
#: addons/web/static/src/js/view_form.js:2760 #: addons/web/static/src/js/view_form.js:2760
msgid "Open: " msgid "Open: "
msgstr "" msgstr "खोलने के लिए "
#. openerp-web #. openerp-web
#: addons/web/static/src/js/view_form.js:2049 #: addons/web/static/src/js/view_form.js:2049
@ -573,7 +574,7 @@ msgstr ""
#: addons/web/static/src/js/views.js:675 #: addons/web/static/src/js/views.js:675
#: addons/web/static/src/js/view_form.js:2113 #: addons/web/static/src/js/view_form.js:2113
msgid "Search: " msgid "Search: "
msgstr "" msgstr "खोजें: "
#. openerp-web #. openerp-web
#: addons/web/static/src/js/view_form.js:2101 #: addons/web/static/src/js/view_form.js:2101
@ -581,7 +582,7 @@ msgstr ""
#: addons/web/static/src/js/view_form.js:2113 #: addons/web/static/src/js/view_form.js:2113
#: addons/web/static/src/js/view_form.js:2562 #: addons/web/static/src/js/view_form.js:2562
msgid "Create: " msgid "Create: "
msgstr "" msgstr "बनाएँ: "
#. openerp-web #. openerp-web
#: addons/web/static/src/js/view_form.js:2661 #: addons/web/static/src/js/view_form.js:2661
@ -590,18 +591,18 @@ msgstr ""
#: addons/web/static/src/xml/base.xml:1646 #: addons/web/static/src/xml/base.xml:1646
#: addons/web/static/src/js/view_form.js:2680 #: addons/web/static/src/js/view_form.js:2680
msgid "Add" msgid "Add"
msgstr "" msgstr "जोड़ना"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/view_form.js:2721 #: addons/web/static/src/js/view_form.js:2721
#: addons/web/static/src/js/view_form.js:2740 #: addons/web/static/src/js/view_form.js:2740
msgid "Add: " msgid "Add: "
msgstr "" msgstr "जोड़ना: "
#. openerp-web #. openerp-web
#: addons/web/static/src/js/view_list.js:8 #: addons/web/static/src/js/view_list.js:8
msgid "List" msgid "List"
msgstr "" msgstr "सूची"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/view_list.js:269 #: addons/web/static/src/js/view_list.js:269

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-06-14 04:40+0000\n" "X-Launchpad-Export-Date: 2012-06-26 05:35+0000\n"
"X-Generator: Launchpad (build 15405)\n" "X-Generator: Launchpad (build 15482)\n"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/chrome.js:172 #: addons/web/static/src/js/chrome.js:172

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-06-14 04:40+0000\n" "X-Launchpad-Export-Date: 2012-06-26 05:35+0000\n"
"X-Generator: Launchpad (build 15405)\n" "X-Generator: Launchpad (build 15482)\n"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/chrome.js:172 #: addons/web/static/src/js/chrome.js:172

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-06-14 04:40+0000\n" "X-Launchpad-Export-Date: 2012-06-26 05:35+0000\n"
"X-Generator: Launchpad (build 15405)\n" "X-Generator: Launchpad (build 15482)\n"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/chrome.js:172 #: addons/web/static/src/js/chrome.js:172

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-06-14 04:40+0000\n" "X-Launchpad-Export-Date: 2012-06-26 05:35+0000\n"
"X-Generator: Launchpad (build 15405)\n" "X-Generator: Launchpad (build 15482)\n"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/chrome.js:172 #: addons/web/static/src/js/chrome.js:172

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-06-14 04:40+0000\n" "X-Launchpad-Export-Date: 2012-06-26 05:35+0000\n"
"X-Generator: Launchpad (build 15405)\n" "X-Generator: Launchpad (build 15482)\n"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/chrome.js:172 #: addons/web/static/src/js/chrome.js:172

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-06-14 04:40+0000\n" "X-Launchpad-Export-Date: 2012-06-26 05:35+0000\n"
"X-Generator: Launchpad (build 15405)\n" "X-Generator: Launchpad (build 15482)\n"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/chrome.js:172 #: addons/web/static/src/js/chrome.js:172

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-06-14 04:40+0000\n" "X-Launchpad-Export-Date: 2012-06-26 05:35+0000\n"
"X-Generator: Launchpad (build 15405)\n" "X-Generator: Launchpad (build 15482)\n"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/chrome.js:172 #: addons/web/static/src/js/chrome.js:172

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-06-14 04:40+0000\n" "X-Launchpad-Export-Date: 2012-06-26 05:35+0000\n"
"X-Generator: Launchpad (build 15405)\n" "X-Generator: Launchpad (build 15482)\n"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/chrome.js:172 #: addons/web/static/src/js/chrome.js:172
@ -553,7 +553,7 @@ msgstr "Нээх "
#: addons/web/static/src/js/view_form.js:2049 #: addons/web/static/src/js/view_form.js:2049
#: addons/web/static/src/js/view_form.js:2061 #: addons/web/static/src/js/view_form.js:2061
msgid "<em>   Search More...</em>" msgid "<em>   Search More...</em>"
msgstr "<em>   Өшөө Хайх...</em>" msgstr "<em>   Нарийвчилж Хайх...</em>"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/view_form.js:2062 #: addons/web/static/src/js/view_form.js:2062
@ -653,7 +653,7 @@ msgstr "Мод"
#: addons/web/static/src/js/views.js:565 #: addons/web/static/src/js/views.js:565
#: addons/web/static/src/xml/base.xml:480 #: addons/web/static/src/xml/base.xml:480
msgid "Fields View Get" msgid "Fields View Get"
msgstr "" msgstr "Талбар Харагдац Авах"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/views.js:573 #: addons/web/static/src/js/views.js:573
@ -1111,7 +1111,7 @@ msgstr "Төрөл:"
#. openerp-web #. openerp-web
#: addons/web/static/src/xml/base.xml:948 #: addons/web/static/src/xml/base.xml:948
msgid "Widget:" msgid "Widget:"
msgstr "" msgstr "Виджет:"
#. openerp-web #. openerp-web
#: addons/web/static/src/xml/base.xml:952 #: addons/web/static/src/xml/base.xml:952

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-06-14 04:40+0000\n" "X-Launchpad-Export-Date: 2012-06-26 05:35+0000\n"
"X-Generator: Launchpad (build 15405)\n" "X-Generator: Launchpad (build 15482)\n"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/chrome.js:172 #: addons/web/static/src/js/chrome.js:172

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-06-14 04:39+0000\n" "X-Launchpad-Export-Date: 2012-06-26 05:35+0000\n"
"X-Generator: Launchpad (build 15405)\n" "X-Generator: Launchpad (build 15482)\n"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/chrome.js:172 #: addons/web/static/src/js/chrome.js:172

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-06-14 04:40+0000\n" "X-Launchpad-Export-Date: 2012-06-26 05:35+0000\n"
"X-Generator: Launchpad (build 15405)\n" "X-Generator: Launchpad (build 15482)\n"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/chrome.js:172 #: addons/web/static/src/js/chrome.js:172

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-06-14 04:40+0000\n" "X-Launchpad-Export-Date: 2012-06-26 05:35+0000\n"
"X-Generator: Launchpad (build 15405)\n" "X-Generator: Launchpad (build 15482)\n"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/chrome.js:172 #: addons/web/static/src/js/chrome.js:172

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-06-14 04:40+0000\n" "X-Launchpad-Export-Date: 2012-06-26 05:35+0000\n"
"X-Generator: Launchpad (build 15405)\n" "X-Generator: Launchpad (build 15482)\n"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/chrome.js:172 #: addons/web/static/src/js/chrome.js:172

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-06-14 04:40+0000\n" "X-Launchpad-Export-Date: 2012-06-26 05:35+0000\n"
"X-Generator: Launchpad (build 15405)\n" "X-Generator: Launchpad (build 15482)\n"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/chrome.js:172 #: addons/web/static/src/js/chrome.js:172

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-06-14 04:40+0000\n" "X-Launchpad-Export-Date: 2012-06-26 05:35+0000\n"
"X-Generator: Launchpad (build 15405)\n" "X-Generator: Launchpad (build 15482)\n"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/chrome.js:172 #: addons/web/static/src/js/chrome.js:172

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-06-14 04:40+0000\n" "X-Launchpad-Export-Date: 2012-06-26 05:35+0000\n"
"X-Generator: Launchpad (build 15405)\n" "X-Generator: Launchpad (build 15482)\n"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/chrome.js:172 #: addons/web/static/src/js/chrome.js:172

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-06-14 04:40+0000\n" "X-Launchpad-Export-Date: 2012-06-26 05:35+0000\n"
"X-Generator: Launchpad (build 15405)\n" "X-Generator: Launchpad (build 15482)\n"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/chrome.js:172 #: addons/web/static/src/js/chrome.js:172

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-06-14 04:40+0000\n" "X-Launchpad-Export-Date: 2012-06-26 05:35+0000\n"
"X-Generator: Launchpad (build 15405)\n" "X-Generator: Launchpad (build 15482)\n"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/chrome.js:172 #: addons/web/static/src/js/chrome.js:172

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-06-14 04:39+0000\n" "X-Launchpad-Export-Date: 2012-06-26 05:34+0000\n"
"X-Generator: Launchpad (build 15405)\n" "X-Generator: Launchpad (build 15482)\n"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/chrome.js:172 #: addons/web/static/src/js/chrome.js:172

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-06-14 04:40+0000\n" "X-Launchpad-Export-Date: 2012-06-26 05:35+0000\n"
"X-Generator: Launchpad (build 15405)\n" "X-Generator: Launchpad (build 15482)\n"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/chrome.js:172 #: addons/web/static/src/js/chrome.js:172

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-06-14 04:40+0000\n" "X-Launchpad-Export-Date: 2012-06-26 05:35+0000\n"
"X-Generator: Launchpad (build 15405)\n" "X-Generator: Launchpad (build 15482)\n"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/chrome.js:172 #: addons/web/static/src/js/chrome.js:172

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-06-14 04:40+0000\n" "X-Launchpad-Export-Date: 2012-06-26 05:35+0000\n"
"X-Generator: Launchpad (build 15405)\n" "X-Generator: Launchpad (build 15482)\n"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/chrome.js:172 #: addons/web/static/src/js/chrome.js:172

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-06-14 04:40+0000\n" "X-Launchpad-Export-Date: 2012-06-26 05:35+0000\n"
"X-Generator: Launchpad (build 15405)\n" "X-Generator: Launchpad (build 15482)\n"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/chrome.js:172 #: addons/web/static/src/js/chrome.js:172

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-06-14 04:40+0000\n" "X-Launchpad-Export-Date: 2012-06-26 05:35+0000\n"
"X-Generator: Launchpad (build 15405)\n" "X-Generator: Launchpad (build 15482)\n"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/chrome.js:172 #: addons/web/static/src/js/chrome.js:172
@ -867,7 +867,7 @@ msgstr "您的 OpenERP 版本没有包含支持。支持与维护服务在此处
#. openerp-web #. openerp-web
#: addons/web/static/src/xml/base.xml:251 #: addons/web/static/src/xml/base.xml:251
msgid "OpenERP Entreprise" msgid "OpenERP Entreprise"
msgstr "模型”%s“的字段" msgstr "模型“%s”的字段"
#. openerp-web #. openerp-web
#: addons/web/static/src/xml/base.xml:256 #: addons/web/static/src/xml/base.xml:256

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-06-14 04:40+0000\n" "X-Launchpad-Export-Date: 2012-06-26 05:35+0000\n"
"X-Generator: Launchpad (build 15405)\n" "X-Generator: Launchpad (build 15482)\n"
#. openerp-web #. openerp-web
#: addons/web/static/src/js/chrome.js:172 #: addons/web/static/src/js/chrome.js:172

View File

@ -0,0 +1,7 @@
.text-core { position: relative;}.text-core .text-wrap { background: #fff; position: absolute;}.text-core .text-wrap textarea, .text-core .text-wrap input { -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; -webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px; outline: none; resize: none; position: absolute; z-index: 1; background: none; overflow: hidden; margin: 0; padding: 3px 5px 4px 5px; white-space: nowrap; font: 11px "lucida grande", tahoma, verdana, arial, sans-serif; line-height: 13px; height: auto;}
.text-core .text-wrap .text-arrow { -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; position: absolute; top: 0; right: 0; width: 22px; height: 22px; background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAkAAAAOAQMAAADHWqTrAAAAA3NCSVQICAjb4U/gAAAABlBMVEX///8yXJnt8Ns4AAAACXBIWXMAAAsSAAALEgHS3X78AAAAHHRFWHRTb2Z0d2FyZQBBZG9iZSBGaXJld29ya3MgQ1MzmNZGAwAAABpJREFUCJljYEAF/xsY6hkY7BgYZBgYOFBkADkdAmFDagYFAAAAAElFTkSuQmCC") 50% 50% no-repeat; cursor: pointer; z-index: 2;}
.text-core .text-wrap .text-dropdown { -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; padding: 0; position: absolute; z-index: 3; background: #fff; border: 1px solid #9daccc; width: 100%; max-height: 100px; padding: 1px; font: 11px "lucida grande", tahoma, verdana, arial, sans-serif; display: none; overflow-x: hidden; overflow-y: auto;}.text-core .text-wrap .text-dropdown.text-position-below { margin-top: 1px;}.text-core .text-wrap .text-dropdown.text-position-above { margin-bottom: 1px;}.text-core .text-wrap .text-dropdown .text-list .text-suggestion { padding: 3px 5px; cursor: pointer;}.text-core .text-wrap .text-dropdown .text-list .text-suggestion em { font-style: normal; text-decoration: underline;}.text-core .text-wrap .text-dropdown .text-list .text-suggestion.text-selected { color: #fff; background: #6d84b4;}
.text-core .text-wrap .text-focus { -webkit-box-shadow: 0px 0px 6px #6d84b4; -moz-box-shadow: 0px 0px 6px #6d84b4; box-shadow: 0px 0px 6px #6d84b4; position: absolute; width: 100%; height: 100%; display: none;}.text-core .text-wrap .text-focus.text-show-focus { display: block;}
.text-core .text-wrap .text-prompt { -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; position: absolute; width: 100%; height: 100%; margin: 1px 0 0 2px; font: 11px "lucida grande", tahoma, verdana, arial, sans-serif; color: #c0c0c0; overflow: hidden; white-space: pre;}.text-core .text-wrap .text-prompt.text-hide-prompt { display: none;}
.text-core .text-wrap .text-tags { -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; position: absolute; width: 100%; height: 100%; padding: 3px 35px 3px 3px; cursor: text;}.text-core .text-wrap .text-tags.text-tags-on-top { z-index: 2;}.text-core .text-wrap .text-tags .text-tag { float: left;}.text-core .text-wrap .text-tags .text-tag .text-button { -webkit-border-radius: 2px; -moz-border-radius: 2px; border-radius: 2px; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; position: relative; float: left; border: 1px solid #9daccc; background: #e2e6f0; color: #000; padding: 0px 17px 0px 3px; margin: 0 2px 2px 0; cursor: pointer; height: 16px; font: 11px "lucida grande", tahoma, verdana, arial, sans-serif;}.text-core .text-wrap .text-tags .text-tag .text-button a.text-remove { position: absolute; right: 3px; top: 2px; display: block; width: 11px; height: 11px; background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAAhCAYAAAAPm1F2AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAAB50RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTNS4xqx9I6wAAAQ5JREFUOI2dlD0WwiAQhCc8L6HHgAPoASwtSYvX8BrQxtIyveYA8RppLO1jE+LwE8lzms2yH8MCj1QoaBzH+VuUYNYMS213UlvDRamtUbXb5ZyPHuDoxwGgip3ipfvGuGzPz+vZ/coDONdzFuYCO6ramQQG0DJIE1oPBBvM6e9LqaS2FwD7FWwnVoIAsOc2Xn1jDlyd8pfPBRVOBHA8cc/3yCmQqt0jcY4LuTyAF3pOYS6wI48LAm4MUrx5JthgSQJAt5LtNgAUgEMBBIC3AL2xgo58dEPfhE9wygef89FtCeC49UwltR1pQrK2qr9vNr7uRTCBF3pOYS6wI4/zdQ8MUpxPI9hgSQL0Xyio/QBt54DzsHQx6gAAAABJRU5ErkJggg==") 0 0 no-repeat;}.text-core .text-wrap .text-tags .text-tag .text-button a.text-remove:hover { background-position: 0 -11px;}.text-core .text-wrap .text-tags .text-tag .text-button a.text-remove:active { background-position: 0 -22px;}

View File

@ -4774,157 +4774,3 @@
return node; return node;
}; };
})(jQuery); })(jQuery);
;
(function(a){var b=document,c="getElementsByTagName",d=b[c]("head")[0]||b[c]("body")[0],e=b.createElement("style");e.innerHTML=a,d.appendChild(e)})('\n.text-core {\
position: relative;\
}\
.text-core .text-wrap {\
background: #fff;\
position: absolute;\
}\
.text-core .text-wrap textarea, .text-core .text-wrap input {\
-webkit-box-sizing: border-box;\
-moz-box-sizing: border-box;\
box-sizing: border-box;\
-webkit-border-radius: 3px;\
-moz-border-radius: 3px;\
border-radius: 3px;\
outline: none;\
resize: none;\
position: absolute;\
z-index: 1;\
background: none;\
overflow: hidden;\
margin: 0;\
padding: 3px 5px 4px 5px;\
white-space: nowrap;\
font: 11px "lucida grande", tahoma, verdana, arial, sans-serif;\
line-height: 13px;\
height: auto;\
}\
\n.text-core .text-wrap .text-arrow {\
-webkit-box-sizing: border-box;\
-moz-box-sizing: border-box;\
box-sizing: border-box;\
position: absolute;\
top: 0;\
right: 0;\
width: 22px;\
height: 22px;\
background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAkAAAAOAQMAAADHWqTrAAAAA3NCSVQICAjb4U/gAAAABlBMVEX///8yXJnt8Ns4AAAACXBIWXMAAAsSAAALEgHS3X78AAAAHHRFWHRTb2Z0d2FyZQBBZG9iZSBGaXJld29ya3MgQ1MzmNZGAwAAABpJREFUCJljYEAF/xsY6hkY7BgYZBgYOFBkADkdAmFDagYFAAAAAElFTkSuQmCC") 50% 50% no-repeat;\
cursor: pointer;\
z-index: 2;\
}\
\n.text-core .text-wrap .text-dropdown {\
-webkit-box-sizing: border-box;\
-moz-box-sizing: border-box;\
box-sizing: border-box;\
padding: 0;\
position: absolute;\
z-index: 3;\
background: #fff;\
border: 1px solid #9daccc;\
width: 100%;\
max-height: 100px;\
padding: 1px;\
font: 11px "lucida grande", tahoma, verdana, arial, sans-serif;\
display: none;\
overflow-x: hidden;\
overflow-y: auto;\
}\
.text-core .text-wrap .text-dropdown.text-position-below {\
margin-top: 1px;\
}\
.text-core .text-wrap .text-dropdown.text-position-above {\
margin-bottom: 1px;\
}\
.text-core .text-wrap .text-dropdown .text-list .text-suggestion {\
padding: 3px 5px;\
cursor: pointer;\
}\
.text-core .text-wrap .text-dropdown .text-list .text-suggestion em {\
font-style: normal;\
text-decoration: underline;\
}\
.text-core .text-wrap .text-dropdown .text-list .text-suggestion.text-selected {\
color: #fff;\
background: #6d84b4;\
}\
\n.text-core .text-wrap .text-focus {\
-webkit-box-shadow: 0px 0px 6px #6d84b4;\
-moz-box-shadow: 0px 0px 6px #6d84b4;\
box-shadow: 0px 0px 6px #6d84b4;\
position: absolute;\
width: 100%;\
height: 100%;\
display: none;\
}\
.text-core .text-wrap .text-focus.text-show-focus {\
display: block;\
}\
\n.text-core .text-wrap .text-prompt {\
-webkit-box-sizing: border-box;\
-moz-box-sizing: border-box;\
box-sizing: border-box;\
position: absolute;\
width: 100%;\
height: 100%;\
margin: 1px 0 0 2px;\
font: 11px "lucida grande", tahoma, verdana, arial, sans-serif;\
color: #c0c0c0;\
overflow: hidden;\
white-space: pre;\
}\
.text-core .text-wrap .text-prompt.text-hide-prompt {\
display: none;\
}\
\n.text-core .text-wrap .text-tags {\
-webkit-box-sizing: border-box;\
-moz-box-sizing: border-box;\
box-sizing: border-box;\
position: absolute;\
width: 100%;\
height: 100%;\
padding: 3px 35px 3px 3px;\
cursor: text;\
}\
.text-core .text-wrap .text-tags.text-tags-on-top {\
z-index: 2;\
}\
.text-core .text-wrap .text-tags .text-tag {\
float: left;\
}\
.text-core .text-wrap .text-tags .text-tag .text-button {\
-webkit-border-radius: 2px;\
-moz-border-radius: 2px;\
border-radius: 2px;\
-webkit-box-sizing: border-box;\
-moz-box-sizing: border-box;\
box-sizing: border-box;\
position: relative;\
float: left;\
border: 1px solid #9daccc;\
background: #e2e6f0;\
color: #000;\
padding: 0px 17px 0px 3px;\
margin: 0 2px 2px 0;\
cursor: pointer;\
height: 16px;\
font: 11px "lucida grande", tahoma, verdana, arial, sans-serif;\
}\
.text-core .text-wrap .text-tags .text-tag .text-button a.text-remove {\
position: absolute;\
right: 3px;\
top: 2px;\
display: block;\
width: 11px;\
height: 11px;\
background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAAhCAYAAAAPm1F2AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAAB50RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTNS4xqx9I6wAAAQ5JREFUOI2dlD0WwiAQhCc8L6HHgAPoASwtSYvX8BrQxtIyveYA8RppLO1jE+LwE8lzms2yH8MCj1QoaBzH+VuUYNYMS213UlvDRamtUbXb5ZyPHuDoxwGgip3ipfvGuGzPz+vZ/coDONdzFuYCO6ramQQG0DJIE1oPBBvM6e9LqaS2FwD7FWwnVoIAsOc2Xn1jDlyd8pfPBRVOBHA8cc/3yCmQqt0jcY4LuTyAF3pOYS6wI48LAm4MUrx5JthgSQJAt5LtNgAUgEMBBIC3AL2xgo58dEPfhE9wygef89FtCeC49UwltR1pQrK2qr9vNr7uRTCBF3pOYS6wI4/zdQ8MUpxPI9hgSQL0Xyio/QBt54DzsHQx6gAAAABJRU5ErkJggg==") 0 0 no-repeat;\
}\
.text-core .text-wrap .text-tags .text-tag .text-button a.text-remove:hover {\
background-position: 0 -11px;\
}\
.text-core .text-wrap .text-tags .text-tag .text-button a.text-remove:active {\
background-position: 0 -22px;\
}\
');

File diff suppressed because it is too large Load Diff

View File

@ -1,5 +1,5 @@
/*! /*!
* jQuery JavaScript Library v1.7.2b1 * jQuery JavaScript Library v1.7.2
* http://jquery.com/ * http://jquery.com/
* *
* Copyright 2011, John Resig * Copyright 2011, John Resig
@ -11,7 +11,7 @@
* Copyright 2011, The Dojo Foundation * Copyright 2011, The Dojo Foundation
* Released under the MIT, BSD, and GPL Licenses. * Released under the MIT, BSD, and GPL Licenses.
* *
* Date: Tue Jan 31 20:11:27 2012 -0500 * Date: Wed Mar 21 12:46:34 2012 -0700
*/ */
(function( window, undefined ) { (function( window, undefined ) {
@ -210,7 +210,7 @@ jQuery.fn = jQuery.prototype = {
selector: "", selector: "",
// The current version of jQuery being used // The current version of jQuery being used
jquery: "1.7.2b1", jquery: "1.7.2",
// The default length of a jQuery object is 0 // The default length of a jQuery object is 0
length: 0, length: 0,
@ -578,6 +578,9 @@ jQuery.extend({
// Cross-browser xml parsing // Cross-browser xml parsing
parseXML: function( data ) { parseXML: function( data ) {
if ( typeof data !== "string" || !data ) {
return null;
}
var xml, tmp; var xml, tmp;
try { try {
if ( window.DOMParser ) { // Standard if ( window.DOMParser ) { // Standard
@ -1362,7 +1365,6 @@ jQuery.support = (function() {
select, select,
opt, opt,
input, input,
marginDiv,
fragment, fragment,
tds, tds,
events, events,
@ -1449,6 +1451,9 @@ jQuery.support = (function() {
pixelMargin: true pixelMargin: true
}; };
// jQuery.boxModel DEPRECATED in 1.3, use jQuery.support.boxModel instead
jQuery.boxModel = support.boxModel = (document.compatMode === "CSS1Compat");
// Make sure checked status is properly cloned // Make sure checked status is properly cloned
input.checked = true; input.checked = true;
support.noCloneChecked = input.cloneNode( true ).checked; support.noCloneChecked = input.cloneNode( true ).checked;
@ -1483,6 +1488,10 @@ jQuery.support = (function() {
support.radioValue = input.value === "t"; support.radioValue = input.value === "t";
input.setAttribute("checked", "checked"); input.setAttribute("checked", "checked");
// #11217 - WebKit loses check when the name is after the checked attribute
input.setAttribute( "name", "t" );
div.appendChild( input ); div.appendChild( input );
fragment = document.createDocumentFragment(); fragment = document.createDocumentFragment();
fragment.appendChild( div.lastChild ); fragment.appendChild( div.lastChild );
@ -1497,23 +1506,6 @@ jQuery.support = (function() {
fragment.removeChild( input ); fragment.removeChild( input );
fragment.appendChild( div ); fragment.appendChild( div );
div.innerHTML = "";
// Check if div with explicit width and no margin-right incorrectly
// gets computed margin-right based on width of container. For more
// info see bug #3333
// Fails in WebKit before Feb 2011 nightlies
// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
if ( window.getComputedStyle ) {
marginDiv = document.createElement( "div" );
marginDiv.style.width = "0";
marginDiv.style.marginRight = "0";
div.style.width = "2px";
div.appendChild( marginDiv );
support.reliableMarginRight =
( parseInt( ( window.getComputedStyle( marginDiv, null ) || { marginRight: 0 } ).marginRight, 10 ) || 0 ) === 0;
}
// Technique from Juriy Zaytsev // Technique from Juriy Zaytsev
// http://perfectionkills.com/detecting-event-support-without-browser-sniffing/ // http://perfectionkills.com/detecting-event-support-without-browser-sniffing/
// We only care about the case where non-standard event systems // We only care about the case where non-standard event systems
@ -1539,12 +1531,13 @@ jQuery.support = (function() {
fragment.removeChild( div ); fragment.removeChild( div );
// Null elements to avoid leaks in IE // Null elements to avoid leaks in IE
fragment = select = opt = marginDiv = div = input = null; fragment = select = opt = div = input = null;
// Run tests that need a body at doc ready // Run tests that need a body at doc ready
jQuery(function() { jQuery(function() {
var container, outer, inner, table, td, offsetSupport, var container, outer, inner, table, td, offsetSupport,
conMarginTop, ptlm, vb, style, html, marginDiv, conMarginTop, style, html, positionTopLeftWidthHeight,
paddingMarginBorderVisibility, paddingMarginBorder,
body = document.getElementsByTagName("body")[0]; body = document.getElementsByTagName("body")[0];
if ( !body ) { if ( !body ) {
@ -1553,15 +1546,16 @@ jQuery.support = (function() {
} }
conMarginTop = 1; conMarginTop = 1;
ptlm = "position:absolute;top:0;left:0;width:1px;height:1px;margin:0;"; paddingMarginBorder = "padding:0;margin:0;border:";
vb = "visibility:hidden;border:0;"; positionTopLeftWidthHeight = "position:absolute;top:0;left:0;width:1px;height:1px;";
style = "style='" + ptlm + "border:5px solid #000;padding:0;'"; paddingMarginBorderVisibility = paddingMarginBorder + "0;visibility:hidden;";
html = "<div " + style + "><div></div></div>" + style = "style='" + positionTopLeftWidthHeight + paddingMarginBorder + "5px solid #000;";
"<table " + style + " cellpadding='0' cellspacing='0'>" + html = "<div " + style + "display:block;'><div style='" + paddingMarginBorder + "0;display:block;overflow:hidden;'></div></div>" +
"<table " + style + "' cellpadding='0' cellspacing='0'>" +
"<tr><td></td></tr></table>"; "<tr><td></td></tr></table>";
container = document.createElement("div"); container = document.createElement("div");
container.style.cssText = vb + "width:0;height:0;position:static;top:0;margin-top:" + conMarginTop + "px"; container.style.cssText = paddingMarginBorderVisibility + "width:0;height:0;position:static;top:0;margin-top:" + conMarginTop + "px";
body.insertBefore( container, body.firstChild ); body.insertBefore( container, body.firstChild );
// Construct the test element // Construct the test element
@ -1575,8 +1569,7 @@ jQuery.support = (function() {
// display:none (it is still safe to use offsets if a parent element is // display:none (it is still safe to use offsets if a parent element is
// hidden; don safety goggles and see bug #4512 for more information). // hidden; don safety goggles and see bug #4512 for more information).
// (only IE 8 fails this test) // (only IE 8 fails this test)
div.innerHTML = "<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>"; div.innerHTML = "<table><tr><td style='" + paddingMarginBorder + "0;display:none'></td><td>t</td></tr></table>";
tds = div.getElementsByTagName( "td" ); tds = div.getElementsByTagName( "td" );
isSupported = ( tds[ 0 ].offsetHeight === 0 ); isSupported = ( tds[ 0 ].offsetHeight === 0 );
@ -1587,28 +1580,44 @@ jQuery.support = (function() {
// (IE <= 8 fail this test) // (IE <= 8 fail this test)
support.reliableHiddenOffsets = isSupported && ( tds[ 0 ].offsetHeight === 0 ); support.reliableHiddenOffsets = isSupported && ( tds[ 0 ].offsetHeight === 0 );
// Figure out if the W3C box model works as expected // Check if div with explicit width and no margin-right incorrectly
div.innerHTML = ""; // gets computed margin-right based on width of container. For more
div.style.width = div.style.paddingLeft = "1px"; // info see bug #3333
jQuery.boxModel = support.boxModel = div.offsetWidth === 2; // Fails in WebKit before Feb 2011 nightlies
// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
if ( window.getComputedStyle ) {
div.innerHTML = "";
marginDiv = document.createElement( "div" );
marginDiv.style.width = "0";
marginDiv.style.marginRight = "0";
div.style.width = "2px";
div.appendChild( marginDiv );
support.reliableMarginRight =
( parseInt( ( window.getComputedStyle( marginDiv, null ) || { marginRight: 0 } ).marginRight, 10 ) || 0 ) === 0;
}
if ( typeof div.style.zoom !== "undefined" ) { if ( typeof div.style.zoom !== "undefined" ) {
// Check if natively block-level elements act like inline-block // Check if natively block-level elements act like inline-block
// elements when setting their display to 'inline' and giving // elements when setting their display to 'inline' and giving
// them layout // them layout
// (IE < 8 does this) // (IE < 8 does this)
div.innerHTML = "";
div.style.width = div.style.padding = "1px";
div.style.border = 0;
div.style.overflow = "hidden";
div.style.display = "inline"; div.style.display = "inline";
div.style.zoom = 1; div.style.zoom = 1;
support.inlineBlockNeedsLayout = ( div.offsetWidth === 2 ); support.inlineBlockNeedsLayout = ( div.offsetWidth === 3 );
// Check if elements with layout shrink-wrap their children // Check if elements with layout shrink-wrap their children
// (IE 6 does this) // (IE 6 does this)
div.style.display = ""; div.style.display = "block";
div.innerHTML = "<div style='width:4px;'></div>"; div.style.overflow = "visible";
support.shrinkWrapBlocks = ( div.offsetWidth !== 2 ); div.innerHTML = "<div style='width:5px;'></div>";
support.shrinkWrapBlocks = ( div.offsetWidth !== 3 );
} }
div.style.cssText = ptlm + vb; div.style.cssText = positionTopLeftWidthHeight + paddingMarginBorderVisibility;
div.innerHTML = html; div.innerHTML = html;
outer = div.firstChild; outer = div.firstChild;
@ -1643,7 +1652,7 @@ jQuery.support = (function() {
} }
body.removeChild( container ); body.removeChild( container );
div = container = null; marginDiv = div = container = null;
jQuery.extend( support, offsetSupport ); jQuery.extend( support, offsetSupport );
}); });
@ -1987,7 +1996,7 @@ function dataAttr( elem, key, data ) {
data = data === "true" ? true : data = data === "true" ? true :
data === "false" ? false : data === "false" ? false :
data === "null" ? null : data === "null" ? null :
jQuery.isNumeric( data ) ? parseFloat( data ) : jQuery.isNumeric( data ) ? +data :
rbrace.test( data ) ? jQuery.parseJSON( data ) : rbrace.test( data ) ? jQuery.parseJSON( data ) :
data; data;
} catch( e ) {} } catch( e ) {}
@ -2196,7 +2205,7 @@ jQuery.fn.extend({
} }
} }
resolve(); resolve();
return defer.promise(); return defer.promise( object );
} }
}); });
@ -2365,7 +2374,7 @@ jQuery.fn.extend({
if ( !arguments.length ) { if ( !arguments.length ) {
if ( elem ) { if ( elem ) {
hooks = jQuery.valHooks[ elem.nodeName.toLowerCase() ] || jQuery.valHooks[ elem.type ]; hooks = jQuery.valHooks[ elem.type ] || jQuery.valHooks[ elem.nodeName.toLowerCase() ];
if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) { if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) {
return ret; return ret;
@ -2409,7 +2418,7 @@ jQuery.fn.extend({
}); });
} }
hooks = jQuery.valHooks[ this.nodeName.toLowerCase() ] || jQuery.valHooks[ this.type ]; hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];
// If set returns undefined, fall back to normal setting // If set returns undefined, fall back to normal setting
if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) { if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) {
@ -2555,7 +2564,7 @@ jQuery.extend({
}, },
removeAttr: function( elem, value ) { removeAttr: function( elem, value ) {
var propName, attrNames, name, l, var propName, attrNames, name, l, isBool,
i = 0; i = 0;
if ( value && elem.nodeType === 1 ) { if ( value && elem.nodeType === 1 ) {
@ -2567,13 +2576,17 @@ jQuery.extend({
if ( name ) { if ( name ) {
propName = jQuery.propFix[ name ] || name; propName = jQuery.propFix[ name ] || name;
isBool = rboolean.test( name );
// See #9699 for explanation of this approach (setting first, then removal) // See #9699 for explanation of this approach (setting first, then removal)
jQuery.attr( elem, name, "" ); // Do not do this for boolean attributes (see #10870)
if ( !isBool ) {
jQuery.attr( elem, name, "" );
}
elem.removeAttribute( getSetAttribute ? name : propName ); elem.removeAttribute( getSetAttribute ? name : propName );
// Set corresponding property to false for boolean attributes // Set corresponding property to false for boolean attributes
if ( rboolean.test( name ) && propName in elem ) { if ( isBool && propName in elem ) {
elem[ propName ] = false; elem[ propName ] = false;
} }
} }
@ -2727,7 +2740,8 @@ if ( !getSetAttribute ) {
fixSpecified = { fixSpecified = {
name: true, name: true,
id: true id: true,
coords: true
}; };
// Use this for any attribute in IE6/7 // Use this for any attribute in IE6/7
@ -3246,6 +3260,7 @@ jQuery.event = {
delegateCount = handlers.delegateCount, delegateCount = handlers.delegateCount,
args = [].slice.call( arguments, 0 ), args = [].slice.call( arguments, 0 ),
run_all = !event.exclusive && !event.namespace, run_all = !event.exclusive && !event.namespace,
special = jQuery.event.special[ event.type ] || {},
handlerQueue = [], handlerQueue = [],
i, j, cur, jqcur, ret, selMatch, matched, matches, handleObj, sel, related; i, j, cur, jqcur, ret, selMatch, matched, matches, handleObj, sel, related;
@ -3253,6 +3268,11 @@ jQuery.event = {
args[0] = event; args[0] = event;
event.delegateTarget = this; event.delegateTarget = this;
// Call the preDispatch hook for the mapped type, and let it bail if desired
if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {
return;
}
// Determine handlers that should run if there are delegated events // Determine handlers that should run if there are delegated events
// Avoid non-left-click bubbling in Firefox (#3861) // Avoid non-left-click bubbling in Firefox (#3861)
if ( delegateCount && !(event.button && event.type === "click") ) { if ( delegateCount && !(event.button && event.type === "click") ) {
@ -3262,7 +3282,7 @@ jQuery.event = {
jqcur.context = this.ownerDocument || this; jqcur.context = this.ownerDocument || this;
for ( cur = event.target; cur != this; cur = cur.parentNode || this ) { for ( cur = event.target; cur != this; cur = cur.parentNode || this ) {
// Don't process events on disabled elements (#6911, #8165) // Don't process events on disabled elements (#6911, #8165)
if ( cur.disabled !== true ) { if ( cur.disabled !== true ) {
selMatch = {}; selMatch = {};
@ -3322,6 +3342,11 @@ jQuery.event = {
} }
} }
// Call the postDispatch hook for the mapped type
if ( special.postDispatch ) {
special.postDispatch.call( this, event );
}
return event.result; return event.result;
}, },
@ -3613,16 +3638,23 @@ if ( !jQuery.support.submitBubbles ) {
form = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? elem.form : undefined; form = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? elem.form : undefined;
if ( form && !form._submit_attached ) { if ( form && !form._submit_attached ) {
jQuery.event.add( form, "submit._submit", function( event ) { jQuery.event.add( form, "submit._submit", function( event ) {
// If form was submitted by the user, bubble the event up the tree event._submit_bubble = true;
if ( this.parentNode && !event.isTrigger ) {
jQuery.event.simulate( "submit", this.parentNode, event, true );
}
}); });
form._submit_attached = true; form._submit_attached = true;
} }
}); });
// return undefined since we don't need an event listener // return undefined since we don't need an event listener
}, },
postDispatch: function( event ) {
// If form was submitted by the user, bubble the event up the tree
if ( event._submit_bubble ) {
delete event._submit_bubble;
if ( this.parentNode && !event.isTrigger ) {
jQuery.event.simulate( "submit", this.parentNode, event, true );
}
}
},
teardown: function() { teardown: function() {
// Only need this for delegated form submit events // Only need this for delegated form submit events
@ -5565,7 +5597,7 @@ jQuery.each({
return jQuery.dir( elem, "previousSibling", until ); return jQuery.dir( elem, "previousSibling", until );
}, },
siblings: function( elem ) { siblings: function( elem ) {
return jQuery.sibling( elem.parentNode.firstChild, elem ); return jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem );
}, },
children: function( elem ) { children: function( elem ) {
return jQuery.sibling( elem.firstChild ); return jQuery.sibling( elem.firstChild );
@ -5709,7 +5741,7 @@ var nodeNames = "abbr|article|aside|audio|bdi|canvas|data|datalist|details|figca
rhtml = /<|&#?\w+;/, rhtml = /<|&#?\w+;/,
rnoInnerhtml = /<(?:script|style)/i, rnoInnerhtml = /<(?:script|style)/i,
rnocache = /<(?:script|object|embed|option|style)/i, rnocache = /<(?:script|object|embed|option|style)/i,
rnoshimcache = new RegExp("<(?:" + nodeNames + ")", "i"), rnoshimcache = new RegExp("<(?:" + nodeNames + ")[\\s/>]", "i"),
// checked="checked" or checked // checked="checked" or checked
rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i, rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
rscriptType = /\/(java|ecma)script/i, rscriptType = /\/(java|ecma)script/i,
@ -6036,6 +6068,8 @@ jQuery.fn.extend({
jQuery.each( scripts, function( i, elem ) { jQuery.each( scripts, function( i, elem ) {
if ( elem.src ) { if ( elem.src ) {
jQuery.ajax({ jQuery.ajax({
type: "GET",
global: false,
url: elem.src, url: elem.src,
async: false, async: false,
dataType: "script" dataType: "script"
@ -6141,12 +6175,16 @@ function cloneFixAttributes( src, dest ) {
// cloning other types of input fields // cloning other types of input fields
} else if ( nodeName === "input" || nodeName === "textarea" ) { } else if ( nodeName === "input" || nodeName === "textarea" ) {
dest.defaultValue = src.defaultValue; dest.defaultValue = src.defaultValue;
// IE blanks contents when cloning scripts
} else if ( nodeName === "script" && dest.text !== src.text ) {
dest.text = src.text;
} }
// Event data gets referenced instead of copied if the expando // Event data gets referenced instead of copied if the expando
// gets copied too // gets copied too
dest.removeAttribute( jQuery.expando ); dest.removeAttribute( jQuery.expando );
// Clear flags for bubbling special change/submit events, they must // Clear flags for bubbling special change/submit events, they must
// be reattached when the newly cloned events are first activated // be reattached when the newly cloned events are first activated
dest.removeAttribute( "_submit_attached" ); dest.removeAttribute( "_submit_attached" );
@ -6275,7 +6313,7 @@ jQuery.extend({
destElements, destElements,
i, i,
// IE<=8 does not properly clone detached, unknown element nodes // IE<=8 does not properly clone detached, unknown element nodes
clone = jQuery.support.html5Clone || !rnoshimcache.test( "<" + elem.nodeName ) ? clone = jQuery.support.html5Clone || jQuery.isXMLDoc(elem) || !rnoshimcache.test( "<" + elem.nodeName + ">" ) ?
elem.cloneNode( true ) : elem.cloneNode( true ) :
shimCloneNode( elem ); shimCloneNode( elem );
@ -6325,7 +6363,8 @@ jQuery.extend({
}, },
clean: function( elems, context, fragment, scripts ) { clean: function( elems, context, fragment, scripts ) {
var checkScriptType; var checkScriptType, script, j,
ret = [];
context = context || document; context = context || document;
@ -6334,8 +6373,6 @@ jQuery.extend({
context = context.ownerDocument || context[0] && context[0].ownerDocument || document; context = context.ownerDocument || context[0] && context[0].ownerDocument || document;
} }
var ret = [], j;
for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) { for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
if ( typeof elem === "number" ) { if ( typeof elem === "number" ) {
elem += ""; elem += "";
@ -6357,7 +6394,9 @@ jQuery.extend({
var tag = ( rtagName.exec( elem ) || ["", ""] )[1].toLowerCase(), var tag = ( rtagName.exec( elem ) || ["", ""] )[1].toLowerCase(),
wrap = wrapMap[ tag ] || wrapMap._default, wrap = wrapMap[ tag ] || wrapMap._default,
depth = wrap[0], depth = wrap[0],
div = context.createElement("div"); div = context.createElement("div"),
safeChildNodes = safeFragment.childNodes,
remove;
// Append wrapper element to unknown element safe doc fragment // Append wrapper element to unknown element safe doc fragment
if ( context === document ) { if ( context === document ) {
@ -6402,6 +6441,21 @@ jQuery.extend({
} }
elem = div.childNodes; elem = div.childNodes;
// Clear elements from DocumentFragment (safeFragment or otherwise)
// to avoid hoarding elements. Fixes #11356
if ( div ) {
div.parentNode.removeChild( div );
// Guard against -1 index exceptions in FF3.6
if ( safeChildNodes.length > 0 ) {
remove = safeChildNodes[ safeChildNodes.length - 1 ];
if ( remove && remove.parentNode ) {
remove.parentNode.removeChild( remove );
}
}
}
} }
} }
@ -6430,16 +6484,17 @@ jQuery.extend({
return !elem.type || rscriptType.test( elem.type ); return !elem.type || rscriptType.test( elem.type );
}; };
for ( i = 0; ret[i]; i++ ) { for ( i = 0; ret[i]; i++ ) {
if ( scripts && jQuery.nodeName( ret[i], "script" ) && (!ret[i].type || ret[i].type.toLowerCase() === "text/javascript") ) { script = ret[i];
scripts.push( ret[i].parentNode ? ret[i].parentNode.removeChild( ret[i] ) : ret[i] ); if ( scripts && jQuery.nodeName( script, "script" ) && (!script.type || rscriptType.test( script.type )) ) {
scripts.push( script.parentNode ? script.parentNode.removeChild( script ) : script );
} else { } else {
if ( ret[i].nodeType === 1 ) { if ( script.nodeType === 1 ) {
var jsTags = jQuery.grep( ret[i].getElementsByTagName( "script" ), checkScriptType ); var jsTags = jQuery.grep( script.getElementsByTagName( "script" ), checkScriptType );
ret.splice.apply( ret, [i + 1, 0].concat( jsTags ) ); ret.splice.apply( ret, [i + 1, 0].concat( jsTags ) );
} }
fragment.appendChild( ret[i] ); fragment.appendChild( script );
} }
} }
} }
@ -6659,7 +6714,7 @@ jQuery.extend({
} }
}); });
// DEPRECATED, Use jQuery.css() instead // DEPRECATED in 1.3, Use jQuery.css() instead
jQuery.curCSS = jQuery.css; jQuery.curCSS = jQuery.css;
if ( document.defaultView && document.defaultView.getComputedStyle ) { if ( document.defaultView && document.defaultView.getComputedStyle ) {
@ -7228,7 +7283,7 @@ jQuery.extend({
isLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ), isLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ),
global: true, global: true,
type: "GET", type: "GET",
contentType: "application/x-www-form-urlencoded", contentType: "application/x-www-form-urlencoded; charset=UTF-8",
processData: true, processData: true,
async: true, async: true,
/* /*
@ -7927,8 +7982,7 @@ jQuery.ajaxSetup({
// Detect, normalize options and install callbacks for jsonp requests // Detect, normalize options and install callbacks for jsonp requests
jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) { jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
var inspectData = s.contentType === "application/x-www-form-urlencoded" && var inspectData = ( typeof s.data === "string" ) && /^application\/x\-www\-form\-urlencoded/.test( s.contentType );
( typeof s.data === "string" );
if ( s.dataTypes[ 0 ] === "jsonp" || if ( s.dataTypes[ 0 ] === "jsonp" ||
s.jsonp !== false && ( jsre.test( s.url ) || s.jsonp !== false && ( jsre.test( s.url ) ||
@ -8229,7 +8283,13 @@ if ( jQuery.support.ajax ) {
if ( xml && xml.documentElement /* #4958 */ ) { if ( xml && xml.documentElement /* #4958 */ ) {
responses.xml = xml; responses.xml = xml;
} }
responses.text = xhr.responseText;
// When requesting binary data, IE6-9 will throw an exception
// on any attempt to access responseText (#11426)
try {
responses.text = xhr.responseText;
} catch( _ ) {
}
// Firefox throws an exception when accessing // Firefox throws an exception when accessing
// statusText for faulty cross-domain requests // statusText for faulty cross-domain requests
@ -8456,7 +8516,7 @@ jQuery.fn.extend({
prop[ name ] = prop[ p ]; prop[ name ] = prop[ p ];
delete prop[ p ]; delete prop[ p ];
} }
if ( ( hooks = jQuery.cssHooks[ name ] ) && "expand" in hooks ) { if ( ( hooks = jQuery.cssHooks[ name ] ) && "expand" in hooks ) {
replace = hooks.expand( prop[ name ] ); replace = hooks.expand( prop[ name ] );
delete prop[ name ]; delete prop[ name ];
@ -8699,11 +8759,11 @@ jQuery.extend({
}, },
easing: { easing: {
linear: function( p, n, firstNum, diff ) { linear: function( p ) {
return firstNum + diff * p; return p;
}, },
swing: function( p, n, firstNum, diff ) { swing: function( p ) {
return ( ( -Math.cos( p*Math.PI ) / 2 ) + 0.5 ) * diff + firstNum; return ( -Math.cos( p*Math.PI ) / 2 ) + 0.5;
} }
}, },
@ -8933,12 +8993,14 @@ jQuery.extend( jQuery.fx, {
} }
}); });
// Adds width/height step functions // Ensure props that can't be negative don't go there on undershoot easing
// Do not set anything below 0 jQuery.each( fxAttrs.concat.apply( [], fxAttrs ), function( i, prop ) {
jQuery.each([ "width", "height" ], function( i, prop ) { // exclude marginTop, marginLeft, marginBottom and marginRight from this list
jQuery.fx.step[ prop ] = function( fx ) { if ( prop.indexOf( "margin" ) ) {
jQuery.style( fx.elem, prop, Math.max(0, fx.now) + fx.unit ); jQuery.fx.step[ prop ] = function( fx ) {
}; jQuery.style( fx.elem, prop, Math.max(0, fx.now) + fx.unit );
};
}
}); });
if ( jQuery.expr && jQuery.expr.filters ) { if ( jQuery.expr && jQuery.expr.filters ) {
@ -8975,7 +9037,7 @@ function defaultDisplay( nodeName ) {
// document to it; WebKit & Firefox won't allow reusing the iframe document. // document to it; WebKit & Firefox won't allow reusing the iframe document.
if ( !iframeDoc || !iframe.createElement ) { if ( !iframeDoc || !iframe.createElement ) {
iframeDoc = ( iframe.contentWindow || iframe.contentDocument ).document; iframeDoc = ( iframe.contentWindow || iframe.contentDocument ).document;
iframeDoc.write( ( document.compatMode === "CSS1Compat" ? "<!doctype html>" : "" ) + "<html><body>" ); iframeDoc.write( ( jQuery.support.boxModel ? "<!doctype html>" : "" ) + "<html><body>" );
iframeDoc.close(); iframeDoc.close();
} }
@ -9279,7 +9341,7 @@ jQuery.each( { Height: "height", Width: "width" }, function( name, type ) {
// 3rd condition allows Nokia support, as it supports the docElem prop but not CSS1Compat // 3rd condition allows Nokia support, as it supports the docElem prop but not CSS1Compat
doc = elem.document; doc = elem.document;
docElemProp = doc.documentElement[ clientProp ]; docElemProp = doc.documentElement[ clientProp ];
return doc.compatMode === "CSS1Compat" && docElemProp || return jQuery.support.boxModel && docElemProp ||
doc.body && doc.body[ clientProp ] || docElemProp; doc.body && doc.body[ clientProp ] || docElemProp;
} }
@ -9287,8 +9349,16 @@ jQuery.each( { Height: "height", Width: "width" }, function( name, type ) {
if ( elem.nodeType === 9 ) { if ( elem.nodeType === 9 ) {
// Either scroll[Width/Height] or offset[Width/Height], whichever is greater // Either scroll[Width/Height] or offset[Width/Height], whichever is greater
doc = elem.documentElement; doc = elem.documentElement;
// when a window > document, IE6 reports a offset[Width/Height] > client[Width/Height]
// so we can't use max, as it'll choose the incorrect offset[Width/Height]
// instead we use the correct client[Width/Height]
// support:IE6
if ( doc[ clientProp ] >= doc[ scrollProp ] ) {
return doc[ clientProp ];
}
return Math.max( return Math.max(
doc[ clientProp ],
elem.body[ scrollProp ], doc[ scrollProp ], elem.body[ scrollProp ], doc[ scrollProp ],
elem.body[ offsetProp ], doc[ offsetProp ] elem.body[ offsetProp ], doc[ offsetProp ]
); );

View File

@ -91,11 +91,12 @@
list-style-type: none; list-style-type: none;
} }
.openerp input, .openerp textarea, .openerp select { .openerp input, .openerp textarea, .openerp select {
padding: 4px; padding: 1px 4px;
border: 1px solid #cccccc; border: 1px solid #cccccc;
-moz-border-radius: 3px; -moz-border-radius: 3px;
-webkit-border-radius: 3px; -webkit-border-radius: 3px;
border-radius: 3px; border-radius: 3px;
background: white;
} }
.openerp img { .openerp img {
vertical-align: middle; vertical-align: middle;
@ -261,6 +262,26 @@
-webkit-box-shadow: 0 0 1px rgba(0, 0, 0, 0.2); -webkit-box-shadow: 0 0 1px rgba(0, 0, 0, 0.2);
box-shadow: 0 0 1px rgba(0, 0, 0, 0.2); box-shadow: 0 0 1px rgba(0, 0, 0, 0.2);
} }
.openerp .oe_form_dirty .oe_highlight_on_dirty {
color: white;
background: #dc5f59;
font-weight: bold;
}
.openerp .oe_form_dirty button.oe_highlight_on_dirty {
background-color: #dc5f59;
background-image: -webkit-gradient(linear, left top, left bottom, from(#dc5f59), to(#b33630));
background-image: -webkit-linear-gradient(top, #dc5f59, #b33630);
background-image: -moz-linear-gradient(top, #dc5f59, #b33630);
background-image: -ms-linear-gradient(top, #dc5f59, #b33630);
background-image: -o-linear-gradient(top, #dc5f59, #b33630);
background-image: linear-gradient(to bottom, #dc5f59, #b33630);
-moz-box-shadow: none;
-webkit-box-shadow: none;
box-shadow: none;
}
.openerp .oe_form_dirty button.oe_highlight_on_dirty:hover {
background: #ed6f6a;
}
.openerp .oe_title { .openerp .oe_title {
width: 55%; width: 55%;
} }
@ -1508,24 +1529,6 @@
background-color: #ff6666 !important; background-color: #ff6666 !important;
border: 1px solid #dd0000 !important; border: 1px solid #dd0000 !important;
} }
.openerp .oe_form_button_save_dirty {
color: white;
background: #dc5f59;
background-color: #dc5f59;
background-image: -webkit-gradient(linear, left top, left bottom, from(#dc5f59), to(#b33630));
background-image: -webkit-linear-gradient(top, #dc5f59, #b33630);
background-image: -moz-linear-gradient(top, #dc5f59, #b33630);
background-image: -ms-linear-gradient(top, #dc5f59, #b33630);
background-image: -o-linear-gradient(top, #dc5f59, #b33630);
background-image: linear-gradient(to bottom, #dc5f59, #b33630);
-moz-box-shadow: none;
-webkit-box-shadow: none;
box-shadow: none;
font-weight: bold;
}
.openerp .oe_form_button_save_dirty:hover {
background: #ed6f6a;
}
.openerp .oe_form_editable .oe_highlight { .openerp .oe_form_editable .oe_highlight {
color: #404040; color: #404040;
background: none; background: none;
@ -1973,6 +1976,9 @@
.openerp .oe_form .oe_form_field_one2many > .oe_view_manager .oe_list_pager_single_page { .openerp .oe_form .oe_form_field_one2many > .oe_view_manager .oe_list_pager_single_page {
display: none; display: none;
} }
.openerp .oe_form_field_one2many .oe-listview .oe-edit-row-save {
background-image: url(/web/static/src/img/iconset-b-remove.png);
}
.openerp .oe_form_field_one2many > .oe_view_manager .oe_header_row_top { .openerp .oe_form_field_one2many > .oe_view_manager .oe_header_row_top {
display: none; display: none;
} }

View File

@ -135,9 +135,10 @@ $colour4: #8a89ba
li li
list-style-type: none list-style-type: none
input, textarea, select input, textarea, select
padding: 4px padding: 1px 4px
border: 1px solid #ccc border: 1px solid #ccc
@include radius(3px) @include radius(3px)
background: white
img img
vertical-align: middle vertical-align: middle
h4 h4
@ -232,6 +233,16 @@ $colour4: #8a89ba
@include vertical-gradient(#DF6B66, #BF3A33) @include vertical-gradient(#DF6B66, #BF3A33)
//@include vertical-gradient(lighten(#dc5f59, 3%), lighten(#b33630, 3%)) //@include vertical-gradient(lighten(#dc5f59, 3%), lighten(#b33630, 3%))
@include box-shadow(0 0 1px rgba(0, 0, 0, 0.2)) @include box-shadow(0 0 1px rgba(0, 0, 0, 0.2))
.oe_form_dirty
.oe_highlight_on_dirty
color: white
background: #dc5f59
font-weight: bold
button.oe_highlight_on_dirty
@include vertical-gradient(#dc5f59, #b33630)
@include box-shadow(none)
&:hover
background: #ED6F6A
.oe_title .oe_title
width: 55% width: 55%
.oe_title:after .oe_title:after
@ -1205,14 +1216,6 @@ $colour4: #8a89ba
input, select, textarea input, select, textarea
background-color: #F66 !important background-color: #F66 !important
border: 1px solid #D00 !important border: 1px solid #D00 !important
.oe_form_button_save_dirty
color: white
background: #dc5f59
@include vertical-gradient(#dc5f59, #b33630)
@include box-shadow(none)
font-weight: bold
&:hover
background: #ED6F6A
.oe_form_editable .oe_form_editable
.oe_highlight .oe_highlight
color: #404040 color: #404040
@ -1559,21 +1562,26 @@ $colour4: #8a89ba
.oe_form .oe_form_field_one2many > .oe_view_manager .oe_form .oe_form_field_one2many > .oe_view_manager
.oe_list_pager_single_page .oe_list_pager_single_page
display: none display: none
.oe_form_field_one2many > .oe_view_manager .oe_form_field_one2many
.oe_header_row_top // TODO: oe_form_field_one2many_list?
display: none .oe-listview .oe-edit-row-save
.oe_view_manager_header2 background-image: url(/web/static/src/img/iconset-b-remove.png)
td
padding: 0px 8px &> .oe_view_manager
line-height: 16px .oe_header_row_top
.oe_i display: none
font-size: 13px .oe_view_manager_header2
.oe_pager_group td
height: auto padding: 0px 8px
line-height: 16px line-height: 16px
li .oe_i
font-size: 13px
.oe_pager_group
height: auto height: auto
line-height: 16px line-height: 16px
li
height: auto
line-height: 16px
// }}} // }}}
// FormView.many2many {{{ // FormView.many2many {{{
.oe_form .oe_form_field_many2many > .oe-listview .oe_form .oe_form_field_many2many > .oe-listview

View File

@ -1,999 +0,0 @@
.openerp {
padding: 0;
margin: 0;
font-size: 80%;
font-family: Ubuntu, Helvetica, sans-serif;
}
.openerp, .openerp textarea, .openerp input, .openerp select, .openerp option,
.openerp button, .openerp .ui-widget {
font-family: Ubuntu, Helvetica, sans-serif;
font-size:85%;
}
.openerp .view-manager-main-content {
width: 100%;
}
.openerp .oe_form_group_cell .view-manager-main-content {
padding: 0;
}
.oe_box {
border: 1px solid #aaf;
padding: 2px;
margin: 2px;
}
#oe_errors pre {
margin: 0;
}
.openerp .oe-listview .oe-number {
text-align: right !important;
}
.oe-listview-header-columns {
background: #d1d1d1; /* Old browsers */
background: -moz-linear-gradient(top, #ffffff 0%, #d1d1d1 100%); /* FF3.6+ */
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#ffffff), color-stop(100%,#d1d1d1)); /* Chrome,Safari4+ */
background: -webkit-linear-gradient(top, #ffffff 0%,#d1d1d1 100%); /* Chrome10+,Safari5.1+ */
background: -o-linear-gradient(top, #ffffff 0%,#d1d1d1 100%); /* Opera11.10+ */
background: -ms-linear-gradient(top, #ffffff 0%,#d1d1d1 100%); /* IE10+ */
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#FFFFFF', endColorstr='#d1d1d1',GradientType=0 ); /* IE6-9 */
background: linear-gradient(top, #ffffff 0%,#d1d1d1 100%); /* W3C */
}
.openerp .oe_hide {
display: none !important;
}
/* STATES */
.openerp .on_logged,
.openerp .db_options_row {
display: none;
}
/* Database */
.login .oe-database-manager {
display: none;
height: 100%;
width: 100%;
background-color: white;
}
.login.database_block .bottom,
.login.database_block .login_error_message,
.login.database_block .pane {
display: none;
}
.login.database_block .oe-database-manager {
display: block;
}
.login .database {
float: left;
width: 202px;
height: 100%;
background: #666666;
}
.login .oe_db_options {
margin-left: 202px;
color: black;
padding-top: 20px;
}
.login .database ul {
margin-top: 65px;
}
ul.db_options li {
padding: 5px 0 10px 5px;
background: #949292; /* Old browsers */
background: -moz-linear-gradient(top, #949292 30%, #6d6b6b 95%, #282828 100%); /* FF3.6+ */
background: -webkit-gradient(linear, left top, left bottom, color-stop(30%,#949292), color-stop(95%,#6d6b6b), color-stop(100%,#282828)); /* Chrome,Safari4+ */
background: -webkit-linear-gradient(top, #949292 30%,#6d6b6b 95%,#282828 100%); /* Chrome10+,Safari5.1+ */
background: -o-linear-gradient(top, #949292 30%,#6d6b6b 95%,#282828 100%); /* Opera11.10+ */
background: -ms-linear-gradient(top, #949292 30%,#6d6b6b 95%,#282828 100%); /* IE10+ */
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#949292', endColorstr='#282828',GradientType=0 ); /* IE6-9 */
background: linear-gradient(top, #949292 30%,#6d6b6b 95%,#282828 100%); /* W3C */
/* for ie9 */
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#949292', endColorstr='#5B5A5A',GradientType=0 ); /* IE6-9 */
border: none;
/* overriding jquery ui */
-moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0;
display: block;
font-weight: bold;
text-transform: uppercase;
margin: 1px;
color: #EEEEEE;
cursor: pointer;
width: 195px;
font-size: 12px;
}
.db_option_table {
border: 1px solid #5A5858;
padding: 5px;
-moz-border-radius: 10px;
}
table.db_option_table input.required {
background-color: #D2D2FF !important;
}
.db_option_table label {
display: block;
text-align: right;
}
.db_option_table input[type="text"],
.db_option_table input[type="password"],
.db_option_table input[type="file"],
.db_option_table select {
width: 300px;
}
.option_string {
font-weight: bold;
color: #555;
width: 100%;
text-align: center;
padding: 10px 0;
font-size: large;
}
label.error {
float: none;
color: red;
padding-left: .5em;
vertical-align: top;
}
/* Main*/
.openerp .main_table {
width: 100%;
height: 100%;
background: #f0eeee;
}
.openerp .oe-application {
height: 100%;
}
.openerp .oe-application-container {
width: 100%;
height: 100%;
}
/* IE Hack - for IE < 9
* Avoids footer to be placed statically at 100% cutting the middle of the views
* */
.openerp .oe-application-container {
height: auto\9;
min-height: 100%\9;
}
/* Main Application */
.openerp .oe-main-content {
padding: 0;
height: 100%;
}
.openerp h2.oe_view_title {
font-size: 110%;
font-weight: normal;
margin: 2px 0;
color: #252424;
text-shadow: white 0 1px 0;
}
.openerp div[id^="notebook"] .oe_view_title {
font-size:85%;
padding-bottom:4px;
}
/* List */
.openerp table.oe-listview-content {
clear: right;
width: 100%;
border-spacing: 0;
border: 1px solid silver;
}
.openerp .oe-listview thead table {
width: 100%;
border: none;
}
.openerp .oe-listview tr.odd {
background-color: #f3f3f3;
}
.openerp .oe-listview tbody tr:hover {
background-color: #ecebf2;
}
.openerp .oe-listview tbody tr:hover {
background-color: #eae9f0;
}
.openerp .oe-listview thead table tr,
.openerp .oe-listview thead table tr:hover {
background: none;
}
.openerp .oe-listview > table > tbody > tr > td,
.openerp .oe-listview th {
vertical-align: middle;
text-align: left;
padding: 1px 2px;
}
.openerp .oe-record-delete button,
.openerp button.oe-edit-row-save {
border: none;
height: 12px;
width: 12px;
background: url("/web/static/src/img/iconset-b-remove.png") no-repeat scroll center center transparent;
cursor: pointer;
}
.openerp button.oe-edit-row-save {
background-image: url('/web/static/src/img/icons/save-document.png');
}
/* Could use :not selectors if they were supported by MSIE8... */
.openerp .oe-listview > table > tbody > tr > td {
border-left: 1px solid #dadada; /*currently commenting to test with no vertical lines in list view*/
}
.openerp .oe-listview tbody td:first-child,
.openerp .oe-listview tbody td.oe-button,
.openerp .oe-listview tbody td.oe-button,
.openerp .oe-listview tbody th.oe-record-selector,
.openerp .oe-listview tbody td.oe-record-delete {
border-left: none;
}
.openerp .oe-listview td.oe-record-delete {
text-align: right;
}
.openerp .oe-listview th.oe-sortable {
cursor: pointer;
font-size: 75%;
text-transform: uppercase;
padding: 0;
margin: 0;
padding-left: 3px;
color: #333;
}
.openerp .oe-listview th.oe-sortable .ui-icon {
height: 60%;
margin: -6px 0 0;
display: inline;
display: inline-block;
vertical-align: middle;
}
.openerp .oe-listview > table > tbody > tr > td {
border-bottom: 1px solid #E3E3E3;
}
.openerp .oe-listview td.oe-actions {
border-bottom:none;
}
.openerp .oe-listview .oe-record-selector, .openerp .oe-listview .oe-record-edit-link {
border-bottom: 1px solid #E3E3E3;
}
.openerp .oe-listview .oe-record-edit-link {
cursor: pointer;
}
.openerp .oe-listview .oe-field-cell {
cursor: pointer;
margin-top: 0;
margin-bottom: 0;
padding-top: 3px;
padding-bottom: 3px;
font-size: 80%;
}
.openerp .oe-listview .oe-field-cell progress {
width: 100%;
}
.openerp .oe-listview .oe-field-cell.oe-button button,
.openerp .oe-listview .oe_form_button button {
margin: 0;
padding: 0;
border: none;
background: none;
width: 16px;
box-shadow: none;
-moz-box-shadow: none;
-webkit-box-shadow: none;
}
.openerp .oe-listview .oe-field-cell button:active {
opacity: 0.5;
}
.openerp .oe-listview .oe-field-cell button img {
cursor: pointer;
}
.openerp .oe-listview .oe-field-cell button img:hover {
opacity: 0.75;
}
.openerp .oe-listview .oe-field-cell .oe-listview-button-disabled img {
opacity: 0.5;
}
.openerp .oe-listview th.oe-actions {
text-align: left;
white-space: nowrap;
}
.openerp .oe-listview th.oe-list-pager {
text-align: right;
white-space: nowrap;
}
.openerp .oe-list-pager .oe-pager-state {
cursor: pointer;
font-size: 90%;
color: #555;
}
.openerp .oe_button.oe_button_pager,
.openerp .oe-list-pager > span,
.openerp .oe_form_pager > span {
line-height: 17px;
height: 17px;
cursor: pointer;
color: gray;
font-weight: bold;
vertical-align: middle;
}
.openerp .oe_button.oe_button_pager,
.openerp .oe_button.oe_button_pager:disabled {
padding: 0 3px 0 3px;
margin: 0;
height: 17px;
}
.openerp .oe-listview .oe-group-name {
padding-right: 1em;
}
.openerp .oe-listview .oe-group-name,
.openerp .oe-listview .oe-group-pagination {
white-space: nowrap;
}
.openerp .oe-listview tfoot td {
padding: 3px 3px 0;
}
.openerp .oe-listview .oe-list-footer {
text-align: center;
white-space: nowrap;
color: #444;
font-size: 85%;
}
.openerp .oe-listview .oe-list-footer span {
margin: 0 1em;
}
.openerp .oe-listview .oe-list-footer progress {
vertical-align:-10% !important;
width: 100%;
}
/** list rounded corners
rounded corners are a pain on tables: need to round not only table, but
also on the first and last children of the first and last row
*/
.openerp .oe-listview table.oe-listview-content {
-webkit-border-radius: 4px;
-moz-border-radius: 4px;
border-radius: 4px;
}
.openerp .oe-listview table.oe-listview-content thead tr:first-child th:first-child {
-webkit-border-top-left-radius: 4px;
-moz-border-radius-topleft: 4px;
border-top-left-radius: 4px;
}
.openerp .oe-listview table.oe-listview-content thead tr:first-child th:last-child {
-webkit-border-top-right-radius: 4px;
-moz-border-radius-topright: 4px;
border-top-right-radius: 4px;
}
.openerp .oe-listview table.oe-listview-content tfoot tr:last-child th:first-child,
.openerp .oe-listview table.oe-listview-content tfoot tr:last-child td:first-child,
.openerp .oe-listview table.oe-listview-content tbody:last-child tr:last-child th:first-child {
-webkit-border-bottom-left-radius: 4px;
-moz-border-radius-bottomleft: 4px;
border-bottom-left-radius: 4px;
}
.openerp .oe-listview table.oe-listview-content tfoot tr:last-child th:last-child,
.openerp .oe-listview table.oe-listview-content tfoot tr:last-child td:last-child,
.openerp .oe-listview table.oe-listview-content tbody:last-child tr:last-child td:last-child {
-webkit-border-bottom-right-radius: 4px;
-moz-border-radius-bottomright: 4px;
border-bottom-right-radius: 4px;
}
/* Form */
.openerp .oe_form_group_cell input[type="checkbox"] {
margin-top: 3px;
vertical-align: middle;
}
.openerp .oe_form_group_cell .input[type="text"] {
padding-bottom: 1px;
}
.openerp table.oe_form_group td {
color: #4c4c4c;
}
.openerp table.oe_form_group {
color: #4c4c4c;
}
.openerp fieldset.oe_group_box {
border: 1px solid #AAAAAA;
moz-border-radius: 4px;
-webkit-border-radius: 4px;
border-radius: 4px;
background: #F9F9F9;
padding: 4px;
}
.openerp fieldset.oe_group_box legend {
font-weight: bold;
}
.openerp .required.error {
border: 1px solid #900;
}
.openerp .oe_form_buttons, .openerp .oe_list_buttons {
float: left;
}
.openerp .oe_form_pager, .openerp .oe_list_pager {
float: right;
font-size: 80%;
color: gray;
font-weight: bold;
}
.openerp .oe_form_pager {
margin-right: 3px;
}
.openerp .oe_align_left {
text-align: left;
}
.openerp .oe_align_right {
text-align: right;
}
.openerp .oe_align_center {
text-align: center;
}
.openerp .oe_form .oe_form_paragraph {
margin: 3px 0 0 0;
white-space: normal;
}
.openerp .oe_form .oe_form_paragraph.oe_multilines {
white-space: pre;
}
.openerp .oe_form_field_one2many .oe-actions h3.oe_view_title,
.openerp .oe_form_field_one2many_list .oe-actions h3.oe_view_title{
display: inline;
margin: 0 0.5em 0 0;
}
.openerp .oe_form .oe-listview th.oe-sortable .ui-icon,
.openerp .oe_form .oe-listview th.oe-sortable .ui-icon {
height: 100%;
margin-top: -9px;
}
.openerp table.oe_form_group .oe-listview-content td {
color: inherit;
}
/* Uneditable Form View */
.openerp .oe_form_readonly {
}
.openerp .oe_form_readonly .oe_form_group_cell .field_text,
.openerp .oe_form_readonly .field_char,
.openerp .oe_form_readonly .field_int,
.openerp .oe_form_readonly .field_float,
.openerp .oe_form_readonly .field_email,
.openerp .oe_form_readonly .field_date,
.openerp .oe_form_readonly .field_selection,
.openerp .oe_form_readonly .oe_form_field_many2one {
padding: 3px 2px 2px 2px;
background-color: white;
height: 17px;
}
.openerp .oe_form_readonly .oe_form_group_cell .field_text {
height: auto;
}
.openerp .oe_form_readonly .field_datetime {
padding: 1px 2px 2px 2px;
background-color: white;
height:19px;
}
.openerp .oe_form_readonly .oe_form_field_many2one div {
background-color:white;
height:18px;
margin-bottom:1px;
padding: 0px 2px 5px 2px;
}
.openerp .oe_form_readonly .oe_form_field_email div {
background-color: white;
padding: 1px 2px 3px 2px;
}
.openerp .oe_form_readonly .oe_form_field_text div.field_text,
.openerp .oe_form_readonly .oe_form_field_text_html div.field_text_html {
white-space: pre-wrap;
}
.openerp .oe_form_readonly .oe_form_group_cell .field_text {
min-height:100px;
}
/* Inputs */
/* vertically recentering filter management select tag */
.openerp select.oe_search-view-filters-management {
margin-top:2px;
}
@-moz-document url-prefix() {
/* Strange firefox behaviour on width: 100% + white-space: nowrap */
.openerp .oe_form .oe_form_button .oe_button {
width: auto;
}
}
/* IE Hack - for IE < 9
* Avoids buttons overflow
* */
.openerp .oe_form .oe_form_button .oe_button {
min-width: auto\9;
}
/* jQuery UI override */
.openerp .ui-widget {
font-size: 1em;
}
.openerp tbody.ui-widget-content {
margin-bottom: 10px;
border-spacing: 4px;
}
.openerp .ui-widget-header {
background: white none;
}
/* Sidebar */
.openerp .view-manager-main-table {
margin: 0;
width:100%;
border-collapse:collapse;
height:100%;
}
.openerp .view-manager-main-table tbody {
vertical-align: top;
}
.openerp .oe-view-manager-header {
overflow: auto;
background: url("/web/static/src/img/sep-a.gif") 0 100% repeat-x;
margin:6px 0 6px 2px;
}
.openerp .oe_form_group_cell .oe-view-manager-header { /* Trick: remove the background when element is in a formular */
background: none;
}
.openerp .oe-view-manager-header h2 {
float: left;
}
.openerp .oe_view_manager_menu_tips blockquote {
display: none;
font-size: 85%;
margin: 0;
background: #fff;
border-bottom: 1px solid #CECBCB;
padding: 1px 10px;
color: #4C4C4C;
}
.openerp .oe_view_manager_menu_tips blockquote p {
margin: 0;
padding: 6px 1px 4px;
}
.openerp .oe_view_manager_menu_tips blockquote div {
text-align: right;
margin-right:10px;
}
.openerp .oe_view_manager_menu_tips blockquote div button {
border: none;
background: none;
padding: 0 4px;
margin: 0;
display: inline;
text-decoration: underline;
color: inherit;
}
.openerp .view-manager-main-sidebar {
width: 180px;
padding: 0;
margin: 0;
}
.openerp .sidebar-main-div {
height: 100%;
border-left: 1px solid #D2CFCF;
}
.openerp .sidebar-content {
padding: 0;
margin: 0;
width: 180px;
height: 100%;
font-size: 0.9em;
}
.openerp .closed-sidebar .sidebar-content {
width: 22px;
}
.openerp .closed-sidebar .sidebar-content {
display: none;
}
.openerp .sidebar-main-div a {
color: #555;
text-decoration: none;
}
.openerp .sidebar-main-div a:hover {
color: black;
}
.openerp .oe-sidebar-attachments-toolbar {
margin: 4px 0 0 4px;
}
.openerp .oe-sidebar-attachments-items {
clear: both;
padding-top: 5px !important;
}
.openerp .oe-sidebar-attachments-items li {
position: relative;
padding: 0 0 3px 10px !important;
}
.openerp .oe-sidebar-attachments-items li:hover {
background: #ddd;
}
.openerp .oe-sidebar-attachments-link {
display: block;
margin-right: 15px;
overflow: hidden;
}
.openerp .oe-sidebar-attachment-delete {
position: absolute;
right: 2px;
top: 1px;
overflow: hidden;
width: 15px;
height: 15px;
padding: 1px;
border-radius: 7px;
-moz-border-radius: 7px;
-webkit-border-radius: 7px;
}
.openerp .oe-sidebar-attachment-delete:hover {
background-color: white;
}
.openerp .view-manager-main-sidebar h2 {
margin:0;
font-size: 1.15em;
color: #8E8E8E;
text-shadow: white 0 1px 0;
padding-left: 10px;
padding-right: 21px;
height: 21px;
background: #ffffff; /* Old browsers */
background: -moz-linear-gradient(top, #ffffff 0%, #ebe9e9 100%); /* FF3.6+ */
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#ffffff), color-stop(100%,#ebe9e9)); /* Chrome,Safari4+ */
background: -webkit-linear-gradient(top, #ffffff 0%,#ebe9e9 100%); /* Chrome10+,Safari5.1+ */
background: -o-linear-gradient(top, #ffffff 0%,#ebe9e9 100%); /* Opera11.10+ */
background: -ms-linear-gradient(top, #ffffff 0%,#ebe9e9 100%); /* IE10+ */
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#FFFFFF', endColorstr='#EBE9E9',GradientType=0 ); /* IE6-9 */
background: linear-gradient(top, #ffffff 0%,#ebe9e9 100%); /* W3C */
border: 1px solid #D2CFCF;
border-right-width: 0;
border-left-width: 0;
}
.openerp .view-manager-main-sidebar h2 {
border-top-width: 0;
}
.openerp .view-manager-main-sidebar ul {
list-style-type: none;
margin: 0;
padding: 0;
display: block;
}
.openerp .view-manager-main-sidebar li {
display: block;
padding: 3px 3px 3px 10px;
}
.openerp .toggle-sidebar {
cursor: pointer;
border: 1px solid #D2CFCF;
border-top-width: 0;
display: block;
background: url(/web/static/src/img/toggle-a-bg.png);
width: 21px;
height: 21px;
z-index: 10;
}
.openerp .open-sidebar .toggle-sidebar {
margin-left: 158px;
background-position: 21px 0;
position: absolute;
}
.openerp .closed-sidebar .toggle-sidebar {
border-left: none;
}
.openerp li.oe_sidebar_print {
padding-left: 20px;
background: 1px 3px url(/web/static/src/img/icons/gtk-print.png) no-repeat;
}
.openerp .oe_sidebar_print ul {
padding-left:8px;
}
.openerp.kitten-mode-activated .main_table {
background: url(http://placekitten.com/g/1500/800) repeat;
}
.openerp.kitten-mode-activated.clark-gable .main_table {
background: url(http://amigrave.com/ClarkGable.jpg);
background-size: 100%;
}
.openerp.kitten-mode-activated .header {
background: url(http://placekitten.com/g/211/65) repeat;
}
.openerp.kitten-mode-activated .menu {
background: #828282;
background: -moz-linear-gradient(top, #828282 0%, #4D4D4D 100%);
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#828282), color-stop(100%,#4D4D4D));
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#828282', endColorstr='#4D4D4D',GradientType=0 );
}
.openerp.kitten-mode-activated .menu a {
background: none;
}
.openerp.kitten-mode-activated .menu span {
background: none;
}
.openerp.kitten-mode-activated .sidebar-content li a,
.openerp.kitten-mode-activated .oe-application .view-manager-main-content h2.oe_view_title,
.openerp.kitten-mode-activated .oe-application .view-manager-main-content a.searchview_group_string,
.openerp.kitten-mode-activated .oe-application .view-manager-main-content label {
color: white;
}
.openerp.kitten-mode-activated .menu,
.openerp.kitten-mode-activated .header_corner,
.openerp.kitten-mode-activated .header_title,
.openerp.kitten-mode-activated .oe-application,
.openerp.kitten-mode-activated .oe_footer,
.openerp.kitten-mode-activated .loading,
.openerp.kitten-mode-activated .ui-dialog {
opacity:0.8;
filter:alpha(opacity=80);
}
.openerp.kitten-mode-activated .header .company_logo {
background: url(http://placekitten.com/g/180/46);
}
.openerp.kitten-mode-activated .loading {
background: #828282;
border-color: #828282;
}
.openerp .oe-m2o-drop-down-button {
margin-left: -24px;
}
.openerp .oe-m2o-drop-down-button img {
margin-bottom: -4px;
cursor: pointer;
}
.openerp .oe-m2o input {
border-right: none;
margin-right: 0px !important;
padding-bottom: 2px !important;
}
.openerp .oe-m2o-disabled-cm {
color: grey;
}
.openerp ul[role="listbox"] li a {
font-size:80%;
}
.parent_top {
vertical-align: text-top;
}
.openerp .oe-dialog-warning p {
padding-left: 1em;
font-size: 1.2em;
font-weight: bold;
}
.openerp .dhx_mini_calendar {
-moz-box-shadow: none;
-khtml-box-shadow: none;
-webkit-box-shadow: none;
box-shadow: none;
}
.openerp .oe-treeview-table {
width: 100%;
background-color : #FFFFFF;
border-spacing: 0;
}
.openerp .oe-treeview-table tr:hover{
color: blue;
background-color : #D8D8D8;
}
.treeview-tr, .treeview-td {
cursor: pointer;
vertical-align: top;
text-align: left;
border-bottom: 1px solid #CFCCCC;
}
.openerp .oe-treeview-table .oe-number {
text-align: right !important;
}
.treeview-tr span, .treeview-td span {
font-size: 90%;
font-weight: normal;
white-space: nowrap;
display: block;
}
.treeview-tr.oe-treeview-first {
background: transparent url(/web/static/src/img/expand.gif) 0 50% no-repeat;
}
.oe-open .treeview-tr.oe-treeview-first {
background-image: url(/web/static/src/img/collapse.gif);
}
.treeview-tr.oe-treeview-first span,
.treeview-td.oe-treeview-first span {
margin-left: 16px;
}
.treeview-header {
vertical-align: top;
background-color : #D8D8D8;
white-space: nowrap;
text-align: left;
padding: 4px 5px;
}
ul.oe-arrow-list {
padding-left: 1.1em;
margin: 0;
white-space: nowrap;
}
ul.oe-arrow-list li {
display: inline-block;
margin-left: -1em;
}
ul.oe-arrow-list li span {
vertical-align: top;
display: inline-block;
border: 1em solid #DEDEDE;
line-height:0em;
}
ul.oe-arrow-list .oe-arrow-list-before {
border-left-color: rgba(0,0,0,0);
border-right-width:0;
}
ul.oe-arrow-list .oe-arrow-list-after {
border-color: rgba(0,0,0,0);
border-left-color: #DEDEDE;
border-right-width:0;
}
ul.oe-arrow-list li.oe-arrow-list-selected span {
border-color: #B5B9FF;
}
ul.oe-arrow-list li.oe-arrow-list-selected .oe-arrow-list-before {
border-left-color: rgba(0,0,0,0);
}
ul.oe-arrow-list li.oe-arrow-list-selected .oe-arrow-list-after {
border-color: rgba(0,0,0,0);
border-left-color: #B5B9FF;
}
.openerp ul.oe-arrow-list li:first-child span:first-child{
-webkit-border-top-left-radius: 3px;
-moz-border-radius-topleft: 3px;
border-top-left-radius: 3px;
-webkit-border-bottom-left-radius: 3px;
-moz-border-radius-bottomleft: 3px;
border-bottom-left-radius: 3px;
}
.openerp ul.oe-arrow-list li:last-child span:last-child{
-webkit-border-top-right-radius: 3px;
-moz-border-radius-topright: 3px;
border-top-right-radius: 3px;
-webkit-border-bottom-right-radius: 3px;
-moz-border-radius-bottomright: 3px;
border-bottom-right-radius: 3px;
}
.openerp .oe_view_editor {
width:100%;
border-collapse : collapse;
margin-left: -12px;
width: 100%;
background-color : white;
border-spacing: 0;
}
.openerp .oe_view_editor td{
text-align: center;
white-space: nowrap;
border: 1px solid #D8D8D8;
cursor: pointer;
font-size: 90%;
}
.openerp .oe_view_editor_field td{
border: 0px !important;
}
.openerp .oe_view_editor tr:hover {
background-color: #ecebf2;
}
/* Dialog traceback cases */
.openerp .oe_error_detail{
display: block;
}
.openerp .oe_error_send{
display:block;
}
.openerp .oe_fielddiv{
display:inline-block;
width:100%;
}
.openerp .oe_fielddiv input[type=text],textarea{
width:100%;
}
/* for Alignment center */
.openerp .oe_centeralign{
text-align:center;
}
.openerp .oe_applications_tiles {
color: #4C4C4C;
text-shadow: #EEE 0 1px 0;
margin: 0 20px;
}
.openerp select.oe_search-view-filters-management {
font-style: oblique;
color: #999999;
}
.openerp .oe_search-view-filters-management option,
.openerp .oe_search-view-filters-management optgroup {
font-style: normal;
color: black;
}
/* Internet Explorer Fix */
a img {
border: none;
}

View File

@ -841,6 +841,18 @@ instance.web.WebClient = instance.web.Widget.extend({
this.querystring = '?' + jQuery.param.querystring(); this.querystring = '?' + jQuery.param.querystring();
this._current_state = null; this._current_state = null;
}, },
_get_version_label: function() {
if (this.session.openerp_entreprise) {
return 'OpenERP';
} else {
return _t("OpenERP - Unsupported/Community Version");
}
},
set_title: function(title) {
title = _.str.clean(title);
var sep = _.isEmpty(title) ? '' : ' - ';
document.title = title + sep + 'OpenERP';
},
start: function() { start: function() {
var self = this; var self = this;
this.$element.addClass("openerp openerp-web-client-container"); this.$element.addClass("openerp openerp-web-client-container");
@ -863,6 +875,7 @@ instance.web.WebClient = instance.web.Widget.extend({
$(this).attr('data-tipsy', 'true').tipsy().trigger('mouseenter'); $(this).attr('data-tipsy', 'true').tipsy().trigger('mouseenter');
}); });
this.$element.on('click', '.oe_dropdown_toggle', function(ev) { this.$element.on('click', '.oe_dropdown_toggle', function(ev) {
ev.preventDefault();
var $menu = $(this).find('.oe_dropdown_menu'); var $menu = $(this).find('.oe_dropdown_menu');
var state = $menu.is('.oe_opened'); var state = $menu.is('.oe_opened');
setTimeout(function() { setTimeout(function() {
@ -922,11 +935,11 @@ instance.web.WebClient = instance.web.Widget.extend({
self.user_menu.on_action.add(this.proxy('on_menu_action')); self.user_menu.on_action.add(this.proxy('on_menu_action'));
self.user_menu.do_update(); self.user_menu.do_update();
self.bind_hashchange(); self.bind_hashchange();
var version_label = _t("OpenERP - Unsupported/Community Version");
if (!self.session.openerp_entreprise) { if (!self.session.openerp_entreprise) {
var version_label = self._get_version_label();
self.$element.find('.oe_footer_powered').append(_.str.sprintf('<span> - <a href="http://www.openerp.com/support-or-publisher-warranty-contract" target="_blank">%s</a></span>', version_label)); self.$element.find('.oe_footer_powered').append(_.str.sprintf('<span> - <a href="http://www.openerp.com/support-or-publisher-warranty-contract" target="_blank">%s</a></span>', version_label));
document.title = version_label;
} }
self.set_title();
}, },
destroy_content: function() { destroy_content: function() {
_.each(_.clone(this.getChildren()), function(el) { _.each(_.clone(this.getChildren()), function(el) {
@ -992,6 +1005,7 @@ instance.web.WebClient = instance.web.Widget.extend({
this._current_state = state; this._current_state = state;
}, },
do_push_state: function(state) { do_push_state: function(state) {
this.set_title(state.title);
var url = '#' + $.param(state); var url = '#' + $.param(state);
this._current_state = _.clone(state); this._current_state = _.clone(state);
$.bbq.pushState(url); $.bbq.pushState(url);

View File

@ -99,7 +99,6 @@ openerp.web.corelib = function(instance) {
for (var name in prop) { for (var name in prop) {
// Check if we're overwriting an existing function // Check if we're overwriting an existing function
prototype[name] = typeof prop[name] == "function" && prototype[name] = typeof prop[name] == "function" &&
typeof _super[name] == "function" &&
fnTest.test(prop[name]) ? fnTest.test(prop[name]) ?
(function(name, fn) { (function(name, fn) {
return function() { return function() {

View File

@ -55,7 +55,8 @@ instance.web.DataImport = instance.web.Dialog.extend({
.filter(function (field) { .filter(function (field) {
return field.required && return field.required &&
!_.include(self.fields_with_defaults, field.id); }) !_.include(self.fields_with_defaults, field.id); })
.pluck('name') .pluck('id')
.uniq()
.value(); .value();
convert_fields(self); convert_fields(self);
self.all_fields.sort(); self.all_fields.sort();
@ -133,6 +134,10 @@ instance.web.DataImport = instance.web.Dialog.extend({
switch (field.type) { switch (field.type) {
case 'many2many': case 'many2many':
case 'many2one': case 'many2one':
// push a copy for the bare many2one field, to allow importing
// using name_search too - even if we default to exporting the XML ID
var many2one_field = _.extend({}, f)
parent.fields.push(many2one_field);
f.name += '/id'; f.name += '/id';
break; break;
case 'one2many': case 'one2many':
@ -261,10 +266,14 @@ instance.web.DataImport = instance.web.Dialog.extend({
fields = fields || this.fields; fields = fields || this.fields;
var f; var f;
f = _(fields).detect(function (field) { f = _(fields).detect(function (field) {
// TODO: levenshtein between header and field.string
return field.name === name return field.name === name
|| field.string.toLowerCase() === name.toLowerCase();
}); });
if (!f) {
f = _(fields).detect(function (field) {
// TODO: levenshtein between header and field.string
return field.string.toLowerCase() === name.toLowerCase();
});
}
if (f) { return f.name; } if (f) { return f.name; }
// if ``name`` is a path (o2m), we need to recurse through its .fields // if ``name`` is a path (o2m), we need to recurse through its .fields
@ -274,9 +283,13 @@ instance.web.DataImport = instance.web.Dialog.extend({
var column_name = name.substring(0, index); var column_name = name.substring(0, index);
f = _(fields).detect(function (field) { f = _(fields).detect(function (field) {
// field.name for o2m is $foo/id, so we want to match on id // field.name for o2m is $foo/id, so we want to match on id
return field.id === column_name return field.id === column_name;
|| field.string.toLowerCase() === column_name.toLowerCase()
}); });
if (!f) {
f = _(fields).detect(function (field) {
return field.string.toLowerCase() === column_name.toLowerCase();
});
}
if (!f) { return undefined; } if (!f) { return undefined; }
// if we found a matching field for the first path section, recurse in // if we found a matching field for the first path section, recurse in
@ -330,7 +343,7 @@ instance.web.DataImport = instance.web.Dialog.extend({
if (_.isEmpty(duplicates)) { if (_.isEmpty(duplicates)) {
this.toggle_import_button(required_valid); this.toggle_import_button(required_valid);
} else { } else {
var $err = $('<div id="msg" style="color: red;">Destination fields should only be selected once, some fields are selected more than once:</div>').insertBefore(this.$element.find('#result')); var $err = $('<div id="msg" style="color: red;">'+_t("Destination fields should only be selected once, some fields are selected more than once:")+'</div>').insertBefore(this.$element.find('#result'));
var $dupes = $('<dl>').appendTo($err); var $dupes = $('<dl>').appendTo($err);
_(duplicates).each(function(elements, value) { _(duplicates).each(function(elements, value) {
$('<dt>').text(value).appendTo($dupes); $('<dt>').text(value).appendTo($dupes);
@ -344,16 +357,30 @@ instance.web.DataImport = instance.web.Dialog.extend({
}, },
check_required: function() { check_required: function() {
if (!this.required_fields.length) { return true; } var self = this;
if (!self.required_fields.length) { return true; }
// Resolve field id based on column name, as there may be
// several ways to provide the value for a given field and
// thus satisfy the requirement.
// (e.g. m2o_id or m2o_id/id columns may be provided)
var resolve_field_id = function(column_name) {
var f = _.detect(self.fields, function(field) {
return field.name === column_name;
});
if (!f) { return column_name; };
return f.id;
};
var selected_fields = _(this.$element.find('.sel_fields').get()).chain() var selected_fields = _(this.$element.find('.sel_fields').get()).chain()
.pluck('value') .pluck('value')
.compact() .compact()
.map(resolve_field_id)
.value(); .value();
var missing_fields = _.difference(this.required_fields, selected_fields); var missing_fields = _.difference(this.required_fields, selected_fields);
if (missing_fields.length) { if (missing_fields.length) {
this.$element.find("#result").before('<div id="message" style="color:red">*Required Fields are not selected : ' + missing_fields + '.</div>'); this.$element.find("#result").before('<div id="message" style="color:red">' + _t("*Required Fields are not selected :") + missing_fields + '.</div>');
return false; return false;
} }
return true; return true;

View File

@ -1540,6 +1540,14 @@ instance.web.search.CustomFilters = instance.web.search.Input.extend({
var self = this; var self = this;
this.model = new instance.web.Model('ir.filters'); this.model = new instance.web.Model('ir.filters');
this.filters = {}; this.filters = {};
this.view.query
.on('remove', function (facet) {
if (!facet.get('is_custom_filter')) {
return;
}
self.clear_selection();
})
.on('reset', this.proxy('clear_selection'));
this.$element.on('submit', 'form', this.proxy('save_current')); this.$element.on('submit', 'form', this.proxy('save_current'));
this.$element.on('click', 'h4', function () { this.$element.on('click', 'h4', function () {
self.$element.toggleClass('oe_opened'); self.$element.toggleClass('oe_opened');
@ -1549,6 +1557,9 @@ instance.web.search.CustomFilters = instance.web.search.Input.extend({
model: this.view.model model: this.view.model
}).pipe(this.proxy('set_filters')); }).pipe(this.proxy('set_filters'));
}, },
clear_selection: function () {
this.$element.find('li.oe_selected').removeClass('oe_selected');
},
append_filter: function (filter) { append_filter: function (filter) {
var self = this; var self = this;
var key = _.str.sprintf('(%s)%s', filter.user_id, filter.name); var key = _.str.sprintf('(%s)%s', filter.user_id, filter.name);
@ -1583,8 +1594,10 @@ instance.web.search.CustomFilters = instance.web.search.Input.extend({
get_groupby: function () { return [filter.context]; }, get_groupby: function () { return [filter.context]; },
get_domain: function () { return filter.domain; } get_domain: function () { return filter.domain; }
}, },
is_custom_filter: true,
values: [{label: filter.name, value: null}] values: [{label: filter.name, value: null}]
}]); }]);
$filter.addClass('oe_selected');
}); });
}, },
set_filters: function (filters) { set_filters: function (filters) {

View File

@ -78,13 +78,17 @@ instance.web.FormView = instance.web.View.extend(instance.web.form.FieldManagerM
this.mutating_mutex = new $.Mutex(); this.mutating_mutex = new $.Mutex();
this.on_change_mutex = new $.Mutex(); this.on_change_mutex = new $.Mutex();
this.reload_mutex = new $.Mutex(); this.reload_mutex = new $.Mutex();
this.__clicked_inside = false;
this.__blur_timeout = null;
this.rendering_engine = new instance.web.form.FormRenderingEngineReadonly(this); this.rendering_engine = new instance.web.form.FormRenderingEngineReadonly(this);
this.qweb = null; // A QWeb instance will be created if the view is a QWeb template this.qweb = null; // A QWeb instance will be created if the view is a QWeb template
}, },
destroy: function() { destroy: function() {
_.each(this.get_widgets(), function(w) { _.each(this.get_widgets(), function(w) {
w.off('focused blurred');
w.destroy(); w.destroy();
}); });
this.$element.off('.formBlur');
this._super(); this._super();
}, },
on_loaded: function(data) { on_loaded: function(data) {
@ -106,6 +110,9 @@ instance.web.FormView = instance.web.View.extend(instance.web.form.FieldManagerM
this.rendering_engine.render_to($dest); this.rendering_engine.render_to($dest);
} }
this.$element.on('mousedown.formBlur', function () {
self.__clicked_inside = true;
});
this.$buttons = $(QWeb.render("FormView.buttons", {'widget':self})); this.$buttons = $(QWeb.render("FormView.buttons", {'widget':self}));
if (this.options.$buttons) { if (this.options.$buttons) {
@ -197,6 +204,30 @@ instance.web.FormView = instance.web.View.extend(instance.web.form.FieldManagerM
this.translatable_fields = []; this.translatable_fields = [];
this.$element.find('.oe_form_container').empty(); this.$element.find('.oe_form_container').empty();
}, },
widgetFocused: function() {
// Clear click flag if used to focus a widget
this.__clicked_inside = false;
if (this.__blur_timeout) {
clearTimeout(this.__blur_timeout);
this.__blur_timeout = null;
}
},
widgetBlurred: function() {
if (this.__clicked_inside) {
// clicked in an other section of the form (than the currently
// focused widget) => just ignore the blurring entirely?
this.__clicked_inside = false;
return;
}
var self = this;
// clear timeout, if any
this.widgetFocused();
this.__blur_timeout = setTimeout(function () {
self.trigger('blurred');
}, 0);
},
do_load_state: function(state, warm) { do_load_state: function(state, warm) {
if (state.id && this.datarecord.id != state.id) { if (state.id && this.datarecord.id != state.id) {
if (!this.dataset.get_id_index(state.id)) { if (!this.dataset.get_id_index(state.id)) {
@ -216,13 +247,12 @@ instance.web.FormView = instance.web.View.extend(instance.web.form.FieldManagerM
} }
if (this.$buttons) { if (this.$buttons) {
this.$buttons.show(); this.$buttons.show();
this.$buttons.find('.oe_form_button_save').removeClass('oe_form_button_save_dirty');
} }
if (this.$pager) { if (this.$pager) {
this.$pager.show(); this.$pager.show();
} }
this.$element.show().css('visibility', 'hidden'); this.$element.show().css('visibility', 'hidden');
this.$element.removeClass('oe_form_dirty'); this.$element.add(this.$buttons).removeClass('oe_form_dirty');
return this.has_been_loaded.pipe(function() { return this.has_been_loaded.pipe(function() {
var result; var result;
if (self.dataset.index === null) { if (self.dataset.index === null) {
@ -298,16 +328,14 @@ instance.web.FormView = instance.web.View.extend(instance.web.form.FieldManagerM
if (record.id) { if (record.id) {
self.do_push_state({id:record.id}); self.do_push_state({id:record.id});
} }
self.$element.removeClass('oe_form_dirty'); self.$element.add(self.$buttons).removeClass('oe_form_dirty');
self.$buttons.find('.oe_form_button_save').removeClass('oe_form_button_save_dirty');
}); });
}, },
on_form_changed: function() { on_form_changed: function() {
this.trigger("view_content_has_changed"); this.trigger("view_content_has_changed");
}, },
do_notify_change: function() { do_notify_change: function() {
this.$element.addClass('oe_form_dirty'); this.$element.add(this.$buttons).addClass('oe_form_dirty');
this.$buttons.find('.oe_form_button_save').addClass('oe_form_button_save_dirty');
}, },
on_pager_action: function(action) { on_pager_action: function(action) {
if (this.can_be_discarded()) { if (this.can_be_discarded()) {
@ -478,9 +506,8 @@ instance.web.FormView = instance.web.View.extend(instance.web.form.FieldManagerM
} }
}); });
}, },
on_processed_onchange: function(response, processed) { on_processed_onchange: function(result, processed) {
try { try {
var result = response;
if (result.value) { if (result.value) {
for (var f in result.value) { for (var f in result.value) {
if (!result.value.hasOwnProperty(f)) { continue; } if (!result.value.hasOwnProperty(f)) { continue; }
@ -627,7 +654,7 @@ instance.web.FormView = instance.web.View.extend(instance.web.form.FieldManagerM
* record or saving an existing one depending on whether the record * record or saving an existing one depending on whether the record
* already has an id property. * already has an id property.
* *
* @param {Function} success callback on save success * @param {Function} [success] callback on save success
* @param {Boolean} [prepend_on_create=false] if ``do_save`` creates a new record, should that record be inserted at the start of the dataset (by default, records are added at the end) * @param {Boolean} [prepend_on_create=false] if ``do_save`` creates a new record, should that record be inserted at the start of the dataset (by default, records are added at the end)
*/ */
do_save: function(success, prepend_on_create) { do_save: function(success, prepend_on_create) {
@ -701,7 +728,8 @@ instance.web.FormView = instance.web.View.extend(instance.web.form.FieldManagerM
return $.Deferred().reject(); return $.Deferred().reject();
} else { } else {
return $.when(this.reload()).pipe(function () { return $.when(this.reload()).pipe(function () {
return $.when(r).then(success); }, null); return r; })
.then(success);
} }
}, },
/** /**
@ -734,8 +762,10 @@ instance.web.FormView = instance.web.View.extend(instance.web.form.FieldManagerM
if (this.sidebar) { if (this.sidebar) {
this.sidebar.do_attachement_update(this.dataset, this.datarecord.id); this.sidebar.do_attachement_update(this.dataset, this.datarecord.id);
} }
this.reload(); //openerp.log("The record has been created with id #" + this.datarecord.id);
return $.when(_.extend(r, {created: true})).then(success); return $.when(this.reload()).pipe(function () {
return _.extend(r, {created: true}); })
.then(success);
} }
}, },
on_action: function (action) { on_action: function (action) {
@ -879,6 +909,9 @@ instance.web.FormView = instance.web.View.extend(instance.web.form.FieldManagerM
register_field: function(field, name) { register_field: function(field, name) {
this.fields[name] = field; this.fields[name] = field;
this.fields_order.push(name); this.fields_order.push(name);
field.on('focused', null, this.proxy('widgetFocused'))
.on('blurred', null, this.proxy('widgetBlurred'));
if (this.get_field(name).translate) { if (this.get_field(name).translate) {
this.translatable_fields.push(field); this.translatable_fields.push(field);
} }
@ -1479,6 +1512,18 @@ instance.web.form.FormWidget = instance.web.Widget.extend(instance.web.form.Invi
$.fn.tipsy.clear(); $.fn.tipsy.clear();
this._super.apply(this, arguments); this._super.apply(this, arguments);
}, },
/**
* Sets up blur/focus forwarding from DOM elements to a widget (`this`)
*
* @param {jQuery} $e jQuery object of elements to bind focus/blur on
*/
setupFocus: function ($e) {
var self = this;
$e.on({
focus: function () { self.trigger('focused'); },
blur: function () { self.trigger('blurred'); }
});
},
process_modifiers: function() { process_modifiers: function() {
var compute_domain = instance.web.form.compute_domain; var compute_domain = instance.web.form.compute_domain;
var to_set = {}; var to_set = {};
@ -1580,6 +1625,7 @@ instance.web.form.WidgetButton = instance.web.form.FormWidget.extend({
if (this.node.attrs.help || instance.connection.debug) { if (this.node.attrs.help || instance.connection.debug) {
this.do_attach_tooltip(); this.do_attach_tooltip();
} }
this.setupFocus(this.$element);
}, },
on_click: function() { on_click: function() {
var self = this; var self = this;
@ -1805,7 +1851,7 @@ instance.web.form.AbstractField = instance.web.form.FormWidget.extend(instance.w
return this.get('value'); return this.get('value');
}, },
is_valid: function() { is_valid: function() {
return this.is_syntax_valid() && (! this.get('required') || ! this.is_false()); return this.is_syntax_valid() && !(this.get('required') && this.is_false());
}, },
is_syntax_valid: function() { is_syntax_valid: function() {
return true; return true;
@ -1898,9 +1944,11 @@ instance.web.form.FieldChar = instance.web.form.AbstractField.extend(instance.we
}, },
initialize_content: function() { initialize_content: function() {
var self = this; var self = this;
this.$element.find('input').change(function() { var $input = this.$element.find('input');
self.set({'value': instance.web.parse_value(self.$element.find('input').val(), self)}); $input.change(function() {
self.set({'value': instance.web.parse_value($input.val(), self)});
}); });
this.setupFocus($input);
}, },
set_value: function(value_) { set_value: function(value_) {
this._super(value_); this._super(value_);
@ -1944,7 +1992,9 @@ instance.web.form.FieldEmail = instance.web.form.FieldChar.extend({
template: 'FieldEmail', template: 'FieldEmail',
initialize_content: function() { initialize_content: function() {
this._super(); this._super();
this.$element.find('button').click(this.on_button_clicked); var $button = this.$element.find('button');
$button.click(this.on_button_clicked);
this.setupFocus($button);
}, },
render_value: function() { render_value: function() {
if (!this.get("effective_readonly")) { if (!this.get("effective_readonly")) {
@ -1968,7 +2018,9 @@ instance.web.form.FieldUrl = instance.web.form.FieldChar.extend({
template: 'FieldUrl', template: 'FieldUrl',
initialize_content: function() { initialize_content: function() {
this._super(); this._super();
this.$element.find('button').click(this.on_button_clicked); var $button = this.$element.find('button');
$button.click(this.on_button_clicked);
this.setupFocus($button);
}, },
render_value: function() { render_value: function() {
if (!this.get("effective_readonly")) { if (!this.get("effective_readonly")) {
@ -2037,12 +2089,14 @@ instance.web.DateTimeWidget = instance.web.OldWidget.extend({
showButtonPanel: true showButtonPanel: true
}); });
this.$element.find('img.oe_datepicker_trigger').click(function() { this.$element.find('img.oe_datepicker_trigger').click(function() {
if (!self.get("effective_readonly") && !self.picker('widget').is(':visible')) { if (self.get("effective_readonly") || self.picker('widget').is(':visible')) {
self.picker('setDate', self.get('value') ? instance.web.auto_str_to_date(self.get('value')) : new Date()); self.$input.focus();
self.$input_picker.show(); return;
self.picker('show');
self.$input_picker.hide();
} }
self.picker('setDate', self.value ? instance.web.auto_str_to_date(self.value) : new Date());
self.$input_picker.show();
self.picker('show');
self.$input_picker.hide();
}); });
this.set_readonly(false); this.set_readonly(false);
this.set({'value': false}); this.set({'value': false});
@ -2052,7 +2106,10 @@ instance.web.DateTimeWidget = instance.web.OldWidget.extend({
}, },
on_picker_select: function(text, instance_) { on_picker_select: function(text, instance_) {
var date = this.picker('getDate'); var date = this.picker('getDate');
this.$input.val(date ? this.format_client(date) : '').change(); this.$input
.val(date ? this.format_client(date) : '')
.change()
.focus();
}, },
set_value: function(value_) { set_value: function(value_) {
this.set({'value': value_}); this.set({'value': value_});
@ -2119,6 +2176,7 @@ instance.web.form.FieldDatetime = instance.web.form.AbstractField.extend(instanc
this.set({'value': this.datewidget.get_value()}); this.set({'value': this.datewidget.get_value()});
}, this)); }, this));
this.datewidget.appendTo(this.$element); this.datewidget.appendTo(this.$element);
this.setupFocus(this.datewidget.$input);
} }
}, },
set_value: function(value_) { set_value: function(value_) {
@ -2165,6 +2223,7 @@ instance.web.form.FieldText = instance.web.form.AbstractField.extend(instance.we
} else { } else {
this.$textarea.attr('disabled', 'disabled'); this.$textarea.attr('disabled', 'disabled');
} }
this.setupFocus(this.$textarea);
}, },
set_value: function(value_) { set_value: function(value_) {
this._super.apply(this, arguments); this._super.apply(this, arguments);
@ -2221,6 +2280,7 @@ instance.web.form.FieldBoolean = instance.web.form.AbstractField.extend({
start: function() { start: function() {
this._super.apply(this, arguments); this._super.apply(this, arguments);
this.$checkbox = $("input", this.$element); this.$checkbox = $("input", this.$element);
this.setupFocus(this.$checkbox);
this.$element.click(_.bind(function() { this.$element.click(_.bind(function() {
this.set({'value': this.$checkbox.is(':checked')}); this.set({'value': this.$checkbox.is(':checked')});
}, this)); }, this));
@ -2289,7 +2349,7 @@ instance.web.form.FieldSelection = instance.web.form.AbstractField.extend(instan
// changing the selected value), takes the action as validating the // changing the selected value), takes the action as validating the
// row // row
var ischanging = false; var ischanging = false;
this.$element.find('select') var $select = this.$element.find('select')
.change(_.bind(function() { .change(_.bind(function() {
this.set({'value': this.values[this.$element.find('select')[0].selectedIndex][0]}); this.set({'value': this.values[this.$element.find('select')[0].selectedIndex][0]});
}, this)) }, this))
@ -2300,6 +2360,7 @@ instance.web.form.FieldSelection = instance.web.form.AbstractField.extend(instan
e.stopPropagation(); e.stopPropagation();
ischanging = false; ischanging = false;
}); });
this.setupFocus($select);
}, },
set_value: function(value_) { set_value: function(value_) {
value_ = value_ === null ? false : value_; value_ = value_ === null ? false : value_;
@ -2458,6 +2519,7 @@ instance.web.form.CompletionFieldMixin = {
); );
pop.on_select_elements.add(function(element_ids) { pop.on_select_elements.add(function(element_ids) {
self.add_id(element_ids[0]); self.add_id(element_ids[0]);
self.focus();
}); });
}, },
/** /**
@ -2507,6 +2569,7 @@ instance.web.form.FieldMany2One = instance.web.form.AbstractField.extend(instanc
this.$follow_button.click(function() { this.$follow_button.click(function() {
if (!self.get('value')) { if (!self.get('value')) {
self.focus();
return; return;
} }
var pop = new instance.web.form.FormOpenPopup(self.view); var pop = new instance.web.form.FormOpenPopup(self.view);
@ -2521,6 +2584,7 @@ instance.web.form.FieldMany2One = instance.web.form.AbstractField.extend(instanc
pop.on_write_completed.add_last(function() { pop.on_write_completed.add_last(function() {
self.display_value = {}; self.display_value = {};
self.render_value(); self.render_value();
self.focus();
}); });
}); });
@ -2535,13 +2599,13 @@ instance.web.form.FieldMany2One = instance.web.form.AbstractField.extend(instanc
this.$drop_down.click(function() { this.$drop_down.click(function() {
if (self.$input.autocomplete("widget").is(":visible")) { if (self.$input.autocomplete("widget").is(":visible")) {
self.$input.autocomplete("close"); self.$input.autocomplete("close");
self.$input.focus();
} else { } else {
if (self.get("value") && ! self.floating) { if (self.get("value") && ! self.floating) {
self.$input.autocomplete("search", ""); self.$input.autocomplete("search", "");
} else { } else {
self.$input.autocomplete("search"); self.$input.autocomplete("search");
} }
self.$input.focus();
} }
}); });
var tip_def = $.Deferred(); var tip_def = $.Deferred();
@ -2628,6 +2692,7 @@ instance.web.form.FieldMany2One = instance.web.form.AbstractField.extend(instanc
} }
isSelecting = false; isSelecting = false;
}); });
this.setupFocus(this.$input.add(this.$follow_button));
}, },
render_value: function(no_recurse) { render_value: function(no_recurse) {
@ -3007,13 +3072,15 @@ instance.web.form.FieldOne2Many = instance.web.form.AbstractField.extend({
if (!this.viewmanager.views[this.viewmanager.active_view]) if (!this.viewmanager.views[this.viewmanager.active_view])
return true; return true;
var view = this.viewmanager.views[this.viewmanager.active_view].controller; var view = this.viewmanager.views[this.viewmanager.active_view].controller;
if (this.viewmanager.active_view === "form") { switch (this.viewmanager.active_view) {
for (var f in view.fields) { case 'form':
f = view.fields[f]; return _(view.fields).chain()
if (!f.is_valid()) { .invoke('is_valid')
return false; .all(_.identity)
} .value();
} break;
case 'list':
return view.is_valid();
} }
return true; return true;
}, },
@ -3073,6 +3140,46 @@ instance.web.form.One2ManyDataSet = instance.web.BufferedDataSet.extend({
instance.web.form.One2ManyListView = instance.web.ListView.extend({ instance.web.form.One2ManyListView = instance.web.ListView.extend({
_template: 'One2Many.listview', _template: 'One2Many.listview',
init: function (parent, dataset, view_id, options) {
this._super(parent, dataset, view_id, _.extend(options || {}, {
ListType: instance.web.form.One2ManyList
}));
},
is_valid: function () {
var form;
// A list not being edited is always valid
if (!(form = this.first_edition_form())) {
return true;
}
// If the form has not been modified, the view can only be valid
// NB: is_dirty will also be set on defaults/onchanges/whatever?
// oe_form_dirty seems to only be set on actual user actions
if (!form.$element.is('.oe_form_dirty')) {
return true;
}
// Otherwise validate internal form
return _(form.fields).chain()
.invoke(function () {
this._check_css_flag();
return this.is_valid();
})
.all(_.identity)
.value();
},
first_edition_form: function () {
var get_form = function (group_or_list) {
if (group_or_list.edition) {
return group_or_list.edition_form;
}
return _(group_or_list.children).chain()
.map(get_form)
.compact()
.first()
.value();
};
return get_form(this.groups);
},
do_add_record: function () { do_add_record: function () {
if (this.options.editable) { if (this.options.editable) {
this._super.apply(this, arguments); this._super.apply(this, arguments);
@ -3127,9 +3234,55 @@ instance.web.form.One2ManyListView = instance.web.ListView.extend({
}); });
}, },
do_button_action: function (name, id, callback) { do_button_action: function (name, id, callback) {
var _super = _.bind(this._super, this);
this.o2m.view.do_save().then(function () {
_super(name, id, callback);
});
}
});
instance.web.form.One2ManyList = instance.web.ListView.List.extend({
KEY_RETURN: 13,
// blurring caused by hitting the [Return] key, should skip the
// autosave-on-blur and let the handler for [Return] do its thing
__return_blur: false,
render_row_as_form: function () {
var self = this; var self = this;
var def = $.Deferred().then(callback).then(function() {self.o2m.view.reload();}); return this._super.apply(this, arguments).then(function () {
return this._super(name, id, _.bind(def.resolve, def)); // Replace the "Save Row" button with "Cancel Edition"
self.edition_form.$element
.undelegate('button.oe-edit-row-save', 'click')
.delegate('button.oe-edit-row-save', 'click', function () {
self.cancel_pending_edition();
});
// Overload execute_action on the edition form to perform a simple
// reload_record after the action is done, rather than fully
// reload the parent view (or something)
var _execute_action = self.edition_form.do_execute_action;
self.edition_form.do_execute_action = function (action, dataset, record_id, _callback) {
return _execute_action.call(this, action, dataset, record_id, function () {
self.view.reload_record(
self.view.records.get(record_id));
});
};
self.edition_form.on('blurred', null, function () {
if (self.__return_blur) {
delete self.__return_blur;
return;
}
if (!self.edition_form.widget_is_stopped) {
self.view.ensure_saved();
}
});
});
},
on_row_keyup: function (e) {
if (e.which === this.KEY_RETURN) {
this.__return_blur = true;
}
this._super(e);
} }
}); });
@ -3336,6 +3489,10 @@ instance.web.form.FieldMany2Many = instance.web.form.AbstractField.extend({
get_value: function() { get_value: function() {
return [commands.replace_with(this.get('value'))]; return [commands.replace_with(this.get('value'))];
}, },
is_false: function () {
return _(this.dataset.ids).isEmpty();
},
load_view: function() { load_view: function() {
var self = this; var self = this;
this.list_view = new instance.web.form.Many2ManyListView(this, this.dataset, false, { this.list_view = new instance.web.form.Many2ManyListView(this, this.dataset, false, {
@ -3920,6 +4077,7 @@ instance.web.form.FieldReference = instance.web.form.AbstractField.extend(instan
} }
}, },
initialize_content: function() { initialize_content: function() {
var self = this;
this.selection = new instance.web.form.FieldSelection(this, { attrs: { this.selection = new instance.web.form.FieldSelection(this, { attrs: {
name: 'selection' name: 'selection'
}}); }});
@ -3929,6 +4087,9 @@ instance.web.form.FieldReference = instance.web.form.AbstractField.extend(instan
this.selection.$element = $(".oe_form_view_reference_selection", this.$element); this.selection.$element = $(".oe_form_view_reference_selection", this.$element);
this.selection.renderElement(); this.selection.renderElement();
this.selection.start(); this.selection.start();
this.selection
.on('focused', null, function () {self.trigger('focused')})
.on('blurred', null, function () {self.trigger('blurred')});
this.m2o = new instance.web.form.FieldMany2One(this, { attrs: { this.m2o = new instance.web.form.FieldMany2One(this, { attrs: {
name: 'm2o' name: 'm2o'
@ -3939,6 +4100,9 @@ instance.web.form.FieldReference = instance.web.form.AbstractField.extend(instan
this.m2o.$element = $(".oe_form_view_reference_m2o", this.$element); this.m2o.$element = $(".oe_form_view_reference_m2o", this.$element);
this.m2o.renderElement(); this.m2o.renderElement();
this.m2o.start(); this.m2o.start();
this.m2o
.on('focused', null, function () {self.trigger('focused')})
.on('blurred', null, function () {self.trigger('blurred')});
}, },
is_false: function() { is_false: function() {
return typeof(this.get_value()) !== 'string'; return typeof(this.get_value()) !== 'string';
@ -4070,6 +4234,13 @@ instance.web.form.FieldBinary = instance.web.form.AbstractField.extend(instance.
return false; return false;
} }
}, },
set_filename: function(value) {
var filename = this.node.attrs.filename;
if (this.view.fields[filename]) {
this.view.fields[filename].set_value(value);
this.view.fields[filename].on_ui_change();
}
},
on_clear: function() { on_clear: function() {
if (this.get('value') !== false) { if (this.get('value') !== false) {
this.binary_value = false; this.binary_value = false;

View File

@ -64,7 +64,7 @@ instance.web.ListView = instance.web.View.extend( /** @lends instance.web.ListVi
this.records = new Collection(); this.records = new Collection();
this.set_groups(new instance.web.ListView.Groups(this)); this.set_groups(new (this.options.GroupsType)(this));
if (this.dataset instanceof instance.web.DataSetStatic) { if (this.dataset instanceof instance.web.DataSetStatic) {
this.groups.datagroup = new instance.web.StaticDataGroup(this.dataset); this.groups.datagroup = new instance.web.StaticDataGroup(this.dataset);
@ -87,6 +87,14 @@ instance.web.ListView = instance.web.View.extend( /** @lends instance.web.ListVi
this.no_leaf = false; this.no_leaf = false;
}, },
set_default_options: function (options) {
this._super(options);
_.defaults(this.options, {
GroupsType: instance.web.ListView.Groups,
ListType: instance.web.ListView.List
});
},
/** /**
* Retrieves the view's number of records per page (|| section) * Retrieves the view's number of records per page (|| section)
* *
@ -549,6 +557,20 @@ instance.web.ListView = instance.web.View.extend( /** @lends instance.web.ListVi
reload: function () { reload: function () {
return this.reload_content(); return this.reload_content();
}, },
reload_record: function (record) {
return this.dataset.read_ids(
[record.get('id')],
_.pluck(_(this.columns).filter(function (r) {
return r.tag === 'field';
}), 'name')
).then(function (records) {
_(records[0]).each(function (value, key) {
record.set(key, value, {silent: true});
});
record.trigger('change', record);
});
},
do_load_state: function(state, warm) { do_load_state: function(state, warm) {
var reload = false; var reload = false;
if (state.page && this.page !== state.page) { if (state.page && this.page !== state.page) {
@ -1055,11 +1077,11 @@ instance.web.ListView.List = instance.web.Class.extend( /** @lends instance.web.
* @returns {Object} object with the keys ``ids`` and ``records``, holding respectively the ids of all selected records and the records themselves. * @returns {Object} object with the keys ``ids`` and ``records``, holding respectively the ids of all selected records and the records themselves.
*/ */
get_selection: function () { get_selection: function () {
var result = {ids: [], records: []};
if (!this.options.selectable) { if (!this.options.selectable) {
return []; return result;
} }
var records = this.records; var records = this.records;
var result = {ids: [], records: []};
this.$current.find('th.oe-record-selector input:checked') this.$current.find('th.oe-record-selector input:checked')
.closest('tr').each(function () { .closest('tr').each(function () {
var record = records.get($(this).data('id')); var record = records.get($(this).data('id'));
@ -1102,17 +1124,7 @@ instance.web.ListView.List = instance.web.Class.extend( /** @lends instance.web.
* @returns {$.Deferred} promise to the finalization of the reloading * @returns {$.Deferred} promise to the finalization of the reloading
*/ */
reload_record: function (record) { reload_record: function (record) {
return this.dataset.read_ids( return this.view.reload_record(record);
[record.get('id')],
_.pluck(_(this.columns).filter(function (r) {
return r.tag === 'field';
}), 'name')
).then(function (records) {
_(records[0]).each(function (value, key) {
record.set(key, value, {silent: true});
});
record.trigger('change', record);
});
}, },
/** /**
* Renders a list record to HTML * Renders a list record to HTML
@ -1275,7 +1287,7 @@ instance.web.ListView.Groups = instance.web.Class.extend( /** @lends instance.we
self.records.proxy(group.value).reset(); self.records.proxy(group.value).reset();
delete self.children[group.value]; delete self.children[group.value];
} }
var child = self.children[group.value] = new instance.web.ListView.Groups(self.view, { var child = self.children[group.value] = new (self.view.options.GroupsType)(self.view, {
records: self.records.proxy(group.value), records: self.records.proxy(group.value),
options: self.options, options: self.options,
columns: self.columns columns: self.columns
@ -1378,7 +1390,7 @@ instance.web.ListView.Groups = instance.web.Class.extend( /** @lends instance.we
}, },
render_dataset: function (dataset) { render_dataset: function (dataset) {
var self = this, var self = this,
list = new instance.web.ListView.List(this, { list = new (this.view.options.ListType)(this, {
options: this.options, options: this.options,
columns: this.columns, columns: this.columns,
dataset: dataset, dataset: dataset,

View File

@ -125,29 +125,27 @@ openerp.web.list_editable = function (instance) {
* Checks if a record is being edited, and if so cancels it * Checks if a record is being edited, and if so cancels it
*/ */
cancel_pending_edition: function () { cancel_pending_edition: function () {
var self = this, cancelled = $.Deferred(); var self = this, cancelled;
if (!this.edition) { if (!this.edition) {
cancelled.resolve(); return $.when();
return cancelled.promise();
} }
if (this.edition_id != null) { if (this.edition_id) {
this.reload_record(self.records.get(this.edition_id)).then(function () { cancelled = this.reload_record(this.records.get(this.edition_id));
cancelled.resolve();
});
} else { } else {
cancelled.resolve(); cancelled = $.when();
} }
cancelled.then(function () { cancelled.then(function () {
self.view.unpad_columns(); self.view.unpad_columns();
self.edition_form.destroy(); self.edition_form.destroy();
self.edition_form.$element.remove(); self.edition_form.$element.remove();
delete self.edition_form; delete self.edition_form;
self.dataset.index = null;
delete self.edition_id; delete self.edition_id;
delete self.edition; delete self.edition;
}); });
this.pad_table_to(5); this.pad_table_to(5);
return cancelled.promise(); return cancelled;
}, },
/** /**
* Adapts this list's view description to be suitable to the inner form * Adapts this list's view description to be suitable to the inner form
@ -171,24 +169,29 @@ openerp.web.list_editable = function (instance) {
var self = this; var self = this;
switch (e.which) { switch (e.which) {
case KEY_RETURN: case KEY_RETURN:
this.save_row().then(function (result) { $(e.target).blur();
if (result.created) { e.preventDefault();
self.new_record(); //e.stopImmediatePropagation();
return; setTimeout(function () {
} self.save_row().then(function (result) {
if (result.created) {
self.new_record();
return;
}
var next_record_id, var next_record_id,
next_record = self.records.at( next_record = self.records.at(
self.records.indexOf(result.edited_record) + 1); self.records.indexOf(result.edited_record) + 1);
if (next_record) { if (next_record) {
next_record_id = next_record.get('id'); next_record_id = next_record.get('id');
self.dataset.index = _(self.dataset.ids) self.dataset.index = _(self.dataset.ids)
.indexOf(next_record_id); .indexOf(next_record_id);
} else { } else {
self.dataset.index = 0; self.dataset.index = 0;
next_record_id = self.records.at(0).get('id'); next_record_id = self.records.at(0).get('id');
} }
self.edit_record(next_record_id); self.edit_record(next_record_id);
}, 0);
}); });
break; break;
case KEY_ESCAPE: case KEY_ESCAPE:
@ -198,14 +201,15 @@ openerp.web.list_editable = function (instance) {
}, },
render_row_as_form: function (row) { render_row_as_form: function (row) {
var self = this; var self = this;
this.cancel_pending_edition().then(function () { return this.ensure_saved().pipe(function () {
var record_id = $(row).data('id'); var record_id = $(row).data('id');
var $new_row = $('<tr>', { var $new_row = $('<tr>', {
id: _.uniqueId('oe-editable-row-'), id: _.uniqueId('oe-editable-row-'),
'data-id': record_id, 'data-id': record_id,
'class': (row ? $(row).attr('class') : '') + ' oe_form', 'class': (row ? $(row).attr('class') : ''),
click: function (e) {e.stopPropagation();} click: function (e) {e.stopPropagation();}
}) })
.addClass('oe_form oe_form_container')
.delegate('button.oe-edit-row-save', 'click', function () { .delegate('button.oe-edit-row-save', 'click', function () {
self.save_row(); self.save_row();
}) })
@ -214,7 +218,13 @@ openerp.web.list_editable = function (instance) {
}) })
.keyup(function () { .keyup(function () {
return self.on_row_keyup.apply(self, arguments); }) return self.on_row_keyup.apply(self, arguments); })
.keydown(function (e) { e.stopPropagation(); }); .keydown(function (e) { e.stopPropagation(); })
.keypress(function (e) {
if (e.which === KEY_RETURN) {
return false;
}
});
if (row) { if (row) {
$new_row.replaceAll(row); $new_row.replaceAll(row);
} else if (self.options.editable) { } else if (self.options.editable) {
@ -236,14 +246,16 @@ openerp.web.list_editable = function (instance) {
} }
self.edition = true; self.edition = true;
self.edition_id = record_id; self.edition_id = record_id;
$new_row.addClass("oe_form_container"); self.dataset.index = _(self.dataset.ids).indexOf(record_id);
self.edition_form = new instance.web.ListEditableFormView(self.view, self.dataset, false); if (self.dataset.index === -1) {
self.edition_form.$element = $new_row; self.dataset.index = null;
self.edition_form.editable_list = self; }
// HO HO self.edition_form = _.extend(new instance.web.ListEditableFormView(self.view, self.dataset, false), {
// empty $element: $new_row,
$.when(self.edition_form.on_loaded(self.get_form_fields_view())).then(function () { editable_list: self
// put in $.when just in case FormView.on_loaded becomes asynchronous });
// put in $.when just in case FormView.on_loaded becomes asynchronous
return $.when(self.edition_form.on_loaded(self.get_form_fields_view())).then(function () {
$new_row.find('> td') $new_row.find('> td')
.end() .end()
.find('td:last').removeClass('oe-field-cell').end(); .find('td:last').removeClass('oe-field-cell').end();
@ -299,7 +311,7 @@ openerp.web.list_editable = function (instance) {
*/ */
save_row: function () { save_row: function () {
//noinspection JSPotentiallyInvalidConstructorUsage //noinspection JSPotentiallyInvalidConstructorUsage
var self = this, done = $.Deferred(); var self = this;
return this.edition_form return this.edition_form
.do_save(null, this.options.editable === 'top') .do_save(null, this.options.editable === 'top')
.pipe(function (result) { .pipe(function (result) {
@ -319,18 +331,24 @@ openerp.web.list_editable = function (instance) {
created: result.created || false, created: result.created || false,
edited_record: edited_record edited_record: edited_record
}; };
}, null); });
}, null); });
}, },
/** /**
* If the current list is being edited, ensures it's saved * If the current list is being edited, ensures it's saved
*/ */
ensure_saved: function () { ensure_saved: function () {
if (this.edition) { if (this.edition) {
return this.save_row(); // kinda-hack-ish: if the user has entered data in a field,
// oe_form_dirty will be set on the form so save, otherwise
// discard the current (entirely empty) line
if (this.edition_form.$element.is('.oe_form_dirty')) {
return this.save_row();
}
return this.cancel_pending_edition();
} }
//noinspection JSPotentiallyInvalidConstructorUsage //noinspection JSPotentiallyInvalidConstructorUsage
return $.Deferred().resolve().promise(); return $.when();
}, },
/** /**
* Cancels the edition of the row for the current dataset index * Cancels the edition of the row for the current dataset index
@ -349,7 +367,6 @@ openerp.web.list_editable = function (instance) {
[record_id, this.dataset]); [record_id, this.dataset]);
}, },
new_record: function () { new_record: function () {
this.dataset.index = null;
this.render_row_as_form(); this.render_row_as_form();
}, },
render_record: function (record) { render_record: function (record) {
@ -420,8 +437,7 @@ openerp.web.list_editable = function (instance) {
w.appendTo($td); w.appendTo($td);
$td.appendTo($element); $td.appendTo($element);
}); });
save = QWeb.render('ListView.row.save'); $(QWeb.render('ListView.row.save')).appendTo($element);
$(save).appendTo($element);
}, },
}); });
}; };

View File

@ -36,6 +36,7 @@ instance.web.ActionManager = instance.web.Widget.extend({
do_push_state: function(state) { do_push_state: function(state) {
if (this.getParent() && this.getParent().do_push_state) { if (this.getParent() && this.getParent().do_push_state) {
if (this.inner_action) { if (this.inner_action) {
state['title'] = this.inner_action.name;
state['model'] = this.inner_action.res_model; state['model'] = this.inner_action.res_model;
if (this.inner_action.id) { if (this.inner_action.id) {
state['action_id'] = this.inner_action.id; state['action_id'] = this.inner_action.id;
@ -894,8 +895,8 @@ instance.web.TranslateDialog = instance.web.Dialog.extend({
// TODO fme: should add the language to fields_view_get because between the fields view get // 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 // and the moment the user opens the translation dialog, the user language could have been changed
this.view_language = view.session.user_context.lang; this.view_language = view.session.user_context.lang;
this['on_button' + _t("Save")] = this.on_button_Save; this['on_button_' + _t("Save")] = this.on_btn_save;
this['on_button' + _t("Close")] = this.on_button_Close; this['on_button_' + _t("Close")] = this.on_btn_close;
this._super(view, { this._super(view, {
width: '80%', width: '80%',
height: '80%' height: '80%'
@ -976,7 +977,7 @@ instance.web.TranslateDialog = instance.web.Dialog.extend({
} }
}); });
}, },
on_button_Save: function() { on_btn_save: function() {
var trads = {}, var trads = {},
self = this, self = this,
trads_mutex = new $.Mutex(); trads_mutex = new $.Mutex();
@ -999,7 +1000,7 @@ instance.web.TranslateDialog = instance.web.Dialog.extend({
}); });
this.close(); this.close();
}, },
on_button_Close: function() { on_btn_close: function() {
this.close(); this.close();
} }
}); });

View File

@ -684,7 +684,7 @@
<button type="button" class="oe_button oe_form_button_create">Create</button> <button type="button" class="oe_button oe_form_button_create">Create</button>
</span> </span>
<span class="oe_form_buttons_edit"> <span class="oe_form_buttons_edit">
<button type="button" class="oe_button oe_form_button_save">Save</button> <span class="oe_fade">or</span> <a href="#" class="oe_bold oe_form_button_cancel">Discard</a> <button type="button" class="oe_button oe_form_button_save oe_highlight_on_dirty">Save</button> <span class="oe_fade">or</span> <a href="#" class="oe_bold oe_form_button_cancel">Discard</a>
</span> </span>
</t> </t>
</div> </div>
@ -1411,8 +1411,7 @@
<li> <li>
<select class="searchview_extended_prop_field"> <select class="searchview_extended_prop_field">
<t t-foreach="widget.attrs.fields" t-as="field"> <t t-foreach="widget.attrs.fields" t-as="field">
<option t-if="typeof field.store === 'undefined' || field.store || field.fnct_search" <option t-att="{'selected': field === widget.attrs.selected ? 'selected' : null}"
t-att="{'selected': field === widget.attrs.selected ? 'selected' : null}"
t-att-value="field.name"> t-att-value="field.name">
<t t-esc="field.string"/> <t t-esc="field.string"/>
</option> </option>
@ -1495,7 +1494,7 @@
<tr> <tr>
<td width="16px" t-att-style="'background-position: ' + 20*rec.level + 'px; padding-left: ' + 20*rec.level + 'px'"> <td width="16px" t-att-style="'background-position: ' + 20*rec.level + 'px; padding-left: ' + 20*rec.level + 'px'">
<img t-if="rec.child_id.length" t-att-id="'parentimg-' + rec.id" <img t-if="rec.child_id.length" t-att-id="'parentimg-' + rec.id"
src="/web/static/src/img/collapse.gif" width="16" height="16" border="0"/> t-att-src='_s + "/web/static/src/img/collapse.gif"' width="16" height="16" border="0"/>
</td> </td>
<td style="cursor: pointer;"> <td style="cursor: pointer;">
<a style="text-decoration:none" href="javascript:void(0);"> <a style="text-decoration:none" href="javascript:void(0);">
@ -1507,22 +1506,22 @@
</td> </td>
<td width="2%"> <td width="2%">
<img t-if="rec.att_list.length" <img t-if="rec.att_list.length"
id="side-add" src="/web/static/src/img/icons/gtk-add.png" style="cursor: pointer;"/> id="side-add" t-att-src='_s + "/web/static/src/img/icons/gtk-add.png"' style="cursor: pointer;"/>
</td> </td>
<td width="2%"> <td width="2%">
<img id="side-remove" src="/web/static/src/img/icons/gtk-remove.png" style="cursor: pointer;"/> <img id="side-remove" t-att-src='_s + "/web/static/src/img/icons/gtk-remove.png"' style="cursor: pointer;"/>
</td> </td>
<td width="2%"> <td width="2%">
<img t-if="rec.att_list.length and !_.include(no_properties, rec.att_list[0])" <img t-if="rec.att_list.length and !_.include(no_properties, rec.att_list[0])"
id="side-edit" src="/web/static/src/img/icons/gtk-edit.png" style="cursor: pointer;"/> id="side-edit" t-att-src='_s + "/web/static/src/img/icons/gtk-edit.png"' style="cursor: pointer;"/>
</td> </td>
<td width="2%"> <td width="2%">
<img t-if="rec.att_list.length" <img t-if="rec.att_list.length"
id="side-up" src="/web/static/src/img/icons/gtk-go-up.png" style="cursor: pointer;"/> id="side-up" t-att-src='_s + "/web/static/src/img/icons/gtk-go-up.png"' style="cursor: pointer;"/>
</td> </td>
<td width="2%"> <td width="2%">
<img t-if="rec.att_list.length" <img t-if="rec.att_list.length"
id="side-down" src="/web/static/src/img/icons/gtk-go-down.png" style="cursor: pointer;"/> id="side-down" t-att-src='_s + "/web/static/src/img/icons/gtk-go-down.png"' style="cursor: pointer;"/>
</td> </td>
<t t-if="rec.child_id.length"> <t t-if="rec.child_id.length">
<t t-set="data" t-value="rec.child_id"/> <t t-set="data" t-value="rec.child_id"/>
@ -1546,7 +1545,6 @@
<t t-name="vieweditor_boolean"> <t t-name="vieweditor_boolean">
<input type="checkbox" t-att-id="widget.name"/> <input type="checkbox" t-att-id="widget.name"/>
</t> </t>
<t t-name="ExportView"> <t t-name="ExportView">
<a id="exportview" href="javascript: void(0)" style="text-decoration: none;color: #3D3D3D;">Export</a> <a id="exportview" href="javascript: void(0)" style="text-decoration: none;color: #3D3D3D;">Export</a>
</t> </t>

View File

@ -1094,6 +1094,72 @@ $(document).ready(function () {
}); });
}); });
module('saved_filters', {
setup: function () {
instance = window.openerp.init([]);
window.openerp.web.corelib(instance);
window.openerp.web.coresetup(instance);
window.openerp.web.chrome(instance);
window.openerp.web.data(instance);
window.openerp.web.formats(instance);
window.openerp.web.search(instance);
instance.web.qweb.add_template(doc);
mockifyRPC(instance.connection);
}
});
asyncTest('checkboxing', 6, function () {
var view = makeSearchView();
instance.connection.responses['/web/searchview/get_filters'] = function () {
return {result: [{
name: "filter name",
user_id: 42
}]};
};
var $fix = $('#qunit-fixture');
view.appendTo($fix)
.always(start)
.fail(function (error) { ok(false, error.message); })
.done(function () {
var $row = $fix.find('.oe_searchview_custom li:first').click();
ok($row.hasClass('oe_selected'), "should check/select the filter's row");
ok($row.hasClass("oe_searchview_custom_private"),
"should have private filter note/class");
equal(view.query.length, 1, "should have only one facet");
var values = view.query.at(0).values;
equal(values.length, 1,
"should have only one value in the facet");
equal(values.at(0).get('label'), 'filter name',
"displayed label should be the name of the filter");
equal(values.at(0).get('value'), null,
"should have no value set");
})
});
asyncTest('removal', 1, function () {
var view = makeSearchView();
instance.connection.responses['/web/searchview/get_filters'] = function () {
return {result: [{
name: "filter name",
user_id: 42
}]};
};
var $fix = $('#qunit-fixture');
view.appendTo($fix)
.always(start)
.fail(function (error) { ok(false, error.message); })
.done(function () {
var $row = $fix.find('.oe_searchview_custom li:first').click();
view.query.remove(view.query.at(0));
ok(!$row.hasClass('oe_selected'),
"should not be checked anymore");
})
});
module('advanced', { module('advanced', {
setup: function () { setup: function () {
instance = window.openerp.init([]); instance = window.openerp.init([]);

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

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