diff --git a/addons/web/__openerp__.py b/addons/web/__openerp__.py index 09347eea24c..72f1610177c 100644 --- a/addons/web/__openerp__.py +++ b/addons/web/__openerp__.py @@ -12,7 +12,10 @@ This module provides the core of the OpenERP Web Client. 'depends': ['base'], 'auto_install': True, 'post_load': 'wsgi_postload', - 'js' : [ + 'data': [ + 'views/webclient_templates.xml', + ], + 'js': [ "static/lib/es5-shim/es5-shim.min.js", "static/lib/datejs/globalization/en-US.js", "static/lib/datejs/core.js", @@ -43,6 +46,7 @@ This module provides the core of the OpenERP Web Client. "static/lib/backbone/backbone.js", "static/lib/cleditor/jquery.cleditor.js", "static/lib/py.js/lib/py.js", + "static/lib/select2/select2.js", "static/src/js/openerpframework.js", "static/src/js/boot.js", "static/src/js/testing.js", @@ -67,6 +71,7 @@ This module provides the core of the OpenERP Web Client. "static/lib/jquery.textext/jquery.textext.css", "static/lib/fontawesome/css/font-awesome.css", "static/lib/bootstrap/css/bootstrap.css", + "static/lib/select2/select2.css", "static/src/css/base.css", "static/src/css/data_export.css", "static/lib/cleditor/jquery.cleditor.css", diff --git a/addons/web/controllers/main.py b/addons/web/controllers/main.py index 948dc4e1493..e463fec12e3 100644 --- a/addons/web/controllers/main.py +++ b/addons/web/controllers/main.py @@ -6,6 +6,7 @@ import csv import functools import glob import itertools +import jinja2 import logging import operator import datetime @@ -14,10 +15,7 @@ import os import re import simplejson import time -import urllib import urllib2 -import urlparse -import xmlrpclib import zlib from xml.etree import ElementTree from cStringIO import StringIO @@ -33,13 +31,18 @@ except ImportError: import openerp import openerp.modules.registry from openerp.tools.translate import _ -from openerp.tools import config from openerp import http -from openerp.http import request, serialize_exception as _serialize_exception +from openerp.http import request, serialize_exception as _serialize_exception, LazyResponse _logger = logging.getLogger(__name__) +env = jinja2.Environment( + loader=jinja2.PackageLoader('openerp.addons.web', "views"), + autoescape=True +) +env.filters["json"] = simplejson.dumps + #---------------------------------------------------------- # OpenERP Web helpers #---------------------------------------------------------- @@ -108,12 +111,60 @@ def serialize_exception(f): return werkzeug.exceptions.InternalServerError(simplejson.dumps(error)) return wrap -def redirect_with_hash(url, code=303): - # Most IE and Safari versions decided not to preserve location.hash upon - # redirect. And even if IE10 pretends to support it, it still fails - # inexplicably in case of multiple redirects (and we do have some). - # See extensive test page at http://greenbytes.de/tech/tc/httpredirects/ - return "" % url +def redirect_with_hash(*args, **kw): + """ + .. deprecated:: 8.0 + + Use the ``http.redirect_with_hash()`` function instead. + """ + return http.redirect_with_hash(*args, **kw) + +def ensure_db(redirect='/web/database/selector'): + # This helper should be used in web client auth="none" routes + # if those routes needs a db to work with. + # If the heuristics does not find any database, then the users will be + # redirected to db selector or any url specified by `redirect` argument. + # If the db is taken out of a query parameter, it will be checked against + # `http.db_filter()` in order to ensure it's legit and thus avoid db + # forgering that could lead to xss attacks. + db = request.params.get('db') + + # Ensure db is legit + if db and db not in http.db_filter([db]): + db = None + + if db and not request.session.db: + # User asked a specific database on a new session. + # That mean the nodb router has been used to find the route + # Depending on installed module in the database, the rendering of the page + # may depend on data injected by the database route dispatcher. + # Thus, we redirect the user to the same page but with the session cookie set. + # This will force using the database route dispatcher... + r = request.httprequest + response = werkzeug.utils.redirect(r.url, 302) + request.session.db = db + response = r.app.get_response(r, response, explicit_session=False) + werkzeug.exceptions.abort(response) + return + + # if db not provided, use the session one + if not db: + db = request.session.db + + # if no database provided and no database in session, use monodb + if not db: + db = db_monodb(request.httprequest) + + # if no db can be found til here, send to the database selector + # the database selector will redirect to database manager if needed + if not db: + werkzeug.exceptions.abort(werkzeug.utils.redirect(redirect, 303)) + + # always switch the session to the computed db + if db != request.session.db: + request.session.logout() + + request.session.db = db def module_topological_sort(modules): """ Return a list of module names sorted so that their dependencies of the @@ -317,9 +368,9 @@ def manifest_list(extension, mods=None, db=None, debug=False): if not debug: path = '/web/webclient/' + extension if mods is not None: - path += '?' + urllib.urlencode({'mods': mods}) + path += '?' + werkzeug.url_encode({'mods': mods}) elif db: - path += '?' + urllib.urlencode({'db': db}) + path += '?' + werkzeug.url_encode({'db': db}) remotes = [wp for fp, wp in files if fp is None] return [path] + remotes @@ -512,6 +563,8 @@ def content_disposition(filename): # OpenERP Web web Controllers #---------------------------------------------------------- +# TODO: to remove once the database manager has been migrated server side +# and `edi` + `pos` addons has been adapted to use render_bootstrap_template() html_template = """ @@ -538,53 +591,71 @@ html_template = """ """ +def render_bootstrap_template(db, template, values=None, debug=False, lazy=False, **kw): + if request and request.debug: + debug = True + if values is None: + values = {} + values.update(kw) + values['debug'] = debug + values['current_db'] = db + try: + values['databases'] = http.db_list() + except openerp.exceptions.AccessDenied: + values['databases'] = None + + for res in ['js', 'css']: + if res not in values: + values[res] = manifest_list(res, db=db, debug=debug) + + if 'modules' not in values: + values['modules'] = module_boot(db=db) + values['modules'] = simplejson.dumps(values['modules']) + + def callback(template, values): + registry = openerp.modules.registry.RegistryManager.get(db) + with registry.cursor() as cr: + view_obj = registry["ir.ui.view"] + return view_obj.render(cr, openerp.SUPERUSER_ID, template, values) + if lazy: + return LazyResponse(callback, template=template, values=values) + else: + return callback(template, values) + class Home(http.Controller): @http.route('/', type='http', auth="none") - def index(self, s_action=None, db=None, debug=False, **kw): - query = dict(urlparse.parse_qsl(request.httprequest.query_string, keep_blank_values=True)) - redirect = '/web' + '?' + urllib.urlencode(query) - return redirect_with_hash(redirect) + def index(self, s_action=None, db=None, **kw): + return http.local_redirect('/web', query=request.params) @http.route('/web', type='http', auth="none") - def web_client(self, s_action=None, db=None, debug=False, **kw): - debug = debug != False + def web_client(self, s_action=None, **kw): + ensure_db() - lst = http.db_list(True) - if db not in lst: - db = None - guessed_db = http.db_monodb(request.httprequest) - if guessed_db is None and len(lst) > 0: - guessed_db = lst[0] + if request.session.uid: + html = render_bootstrap_template(request.session.db, "web.webclient_bootstrap") + return request.make_response(html, {'Cache-Control': 'no-cache', 'Content-Type': 'text/html; charset=utf-8'}) + else: + return http.local_redirect('/web/login', query=request.params) - def redirect(db): - query = dict(urlparse.parse_qsl(request.httprequest.query_string, keep_blank_values=True)) - query['db'] = db - redirect = request.httprequest.path + '?' + urllib.urlencode(query) - return redirect_with_hash(redirect) + @http.route('/web/login', type='http', auth="none") + def web_login(self, redirect=None, **kw): + ensure_db() - if db is None and guessed_db is not None: - return redirect(guessed_db) - - if db is not None and db != request.session.db: - request.session.logout() - request.session.db = db - guessed_db = db - - js = "\n ".join('' % i for i in manifest_list('js', db=guessed_db, debug=debug)) - css = "\n ".join('' % i for i in manifest_list('css', db=guessed_db, debug=debug)) - - r = html_template % { - 'js': js, - 'css': css, - 'modules': simplejson.dumps(module_boot(db=guessed_db)), - 'init': 'var wc = new s.web.WebClient();wc.appendTo($(document.body));' - } - return request.make_response(r, {'Cache-Control': 'no-cache', 'Content-Type': 'text/html; charset=utf-8'}) + values = request.params.copy() + if not redirect: + redirect = '/web?' + request.httprequest.query_string + values['redirect'] = redirect + if request.httprequest.method == 'POST': + uid = request.session.authenticate(request.session.db, request.params['login'], request.params['password']) + if uid is not False: + return http.redirect_with_hash(redirect) + values['error'] = "Wrong login/password" + return render_bootstrap_template(request.session.db, 'web.login', values, lazy=True) @http.route('/login', type='http', auth="none") - def login(self, db, login, key): - return login_and_redirect(db, login, key) + def login(self, db, login, key, redirect="/web", **kw): + return login_and_redirect(db, login, key, redirect_url=redirect) class WebClient(http.Controller): @@ -700,26 +771,28 @@ class WebClient(http.Controller): return {"modules": translations_per_module, "lang_parameters": None} - @http.route('/web/webclient/translations', type='json', auth="admin") + @http.route('/web/webclient/translations', type='json', auth="none") def translations(self, mods=None, lang=None): + request.disable_db = False + uid = openerp.SUPERUSER_ID if mods is None: m = request.registry.get('ir.module.module') - mods = [x['name'] for x in m.search_read(request.cr, request.uid, + mods = [x['name'] for x in m.search_read(request.cr, uid, [('state','=','installed')], ['name'])] if lang is None: lang = request.context["lang"] res_lang = request.registry.get('res.lang') - ids = res_lang.search(request.cr, request.uid, [("code", "=", lang)]) + ids = res_lang.search(request.cr, uid, [("code", "=", lang)]) lang_params = None if ids: - lang_params = res_lang.read(request.cr, request.uid, ids[0], ["direction", "date_format", "time_format", + lang_params = res_lang.read(request.cr, uid, ids[0], ["direction", "date_format", "time_format", "grouping", "decimal_point", "thousands_sep"]) # Regional languages (ll_CC) must inherit/override their parent lang (ll), but this is # done server-side when the language is loaded, so we only need to load the user's lang. ir_translation = request.registry.get('ir.translation') translations_per_module = {} - messages = ir_translation.search_read(request.cr, request.uid, [('module','in',mods),('lang','=',lang), + messages = ir_translation.search_read(request.cr, uid, [('module','in',mods),('lang','=',lang), ('comments','like','openerp-web'),('value','!=',False), ('value','!=','')], ['module','src','value','lang'], order='module') @@ -754,6 +827,37 @@ class Proxy(http.Controller): class Database(http.Controller): + @http.route('/web/database/selector', type='http', auth="none") + def selector(self, **kw): + try: + dbs = http.db_list() + if not dbs: + return http.local_redirect('/web/database/manager') + except openerp.exceptions.AccessDenied: + dbs = False + return env.get_template("database_selector.html").render({ + 'databases': dbs, + 'debug': request.debug, + }) + + @http.route('/web/database/manager', type='http', auth="none") + def manager(self, **kw): + # TODO: migrate the webclient's database manager to server side views + request.session.logout() + js = "\n ".join('' % i for i in manifest_list('js', debug=request.debug)) + css = "\n ".join('' % i for i in manifest_list('css', debug=request.debug)) + + r = html_template % { + 'js': js, + 'css': css, + 'modules': simplejson.dumps(module_boot()), + 'init': """ + var wc = new s.web.WebClient(null, { action: 'database_manager' }); + wc.appendTo($(document.body)); + """ + } + return r + @http.route('/web/database/get_list', type='json', auth="none") def get_list(self): # TODO change js to avoid calling this method if in monodb mode @@ -768,12 +872,15 @@ class Database(http.Controller): @http.route('/web/database/create', type='json', auth="none") def create(self, fields): params = dict(map(operator.itemgetter('name', 'value'), fields)) - return request.session.proxy("db").create_database( + db_created = request.session.proxy("db").create_database( params['super_admin_pwd'], params['db_name'], bool(params.get('demo_data')), params['db_lang'], params['create_admin_pwd']) + if db_created: + request.session.authenticate(params['db_name'], 'admin', params['create_admin_pwd']) + return db_created @http.route('/web/database/duplicate', type='json', auth="none") def duplicate(self, fields): @@ -915,6 +1022,7 @@ class Session(http.Controller): key = saved_actions["next"] saved_actions["actions"][key] = the_action saved_actions["next"] = key + 1 + request.httpsession['saved_actions'] = saved_actions return key @http.route('/web/session/get_session_action', type='json', auth="user") @@ -942,9 +1050,9 @@ class Session(http.Controller): def destroy(self): request.session.logout() - @http.route('/web/session/logout', type='http', auth="user") + @http.route('/web/session/logout', type='http', auth="none") def logout(self, redirect='/web'): - request.session.logout() + request.session.logout(keep_db=True) return werkzeug.utils.redirect(redirect, 303) class Menu(http.Controller): @@ -1340,7 +1448,11 @@ class Binary(http.Controller): args = {'error': "Something horrible happened"} return out % (simplejson.dumps(callback), simplejson.dumps(args)) - @http.route('/web/binary/company_logo', type='http', auth="none") + @http.route([ + '/web/binary/company_logo', + '/logo', + '/logo.png', + ], type='http', auth="none") def company_logo(self, dbname=None): # TODO add etag, refactor to use /image code for etag uid = None @@ -1498,8 +1610,8 @@ class Export(http.Controller): model, map(operator.itemgetter('name'), export_fields_list)) return [ - {'name': field['name'], 'label': fields_data[field['name']]} - for field in export_fields_list + {'name': field_name, 'label': fields_data[field_name]} + for field_name in fields_data.keys() ] def fields_info(self, model, export_fields): @@ -1546,7 +1658,7 @@ class Export(http.Controller): fields[base]['relation'], base, fields[base]['string'], subfields )) - else: + elif base in fields: info[base] = fields[base]['string'] return info @@ -1746,4 +1858,31 @@ class Reports(http.Controller): ('Content-Length', len(report))], cookies={'fileToken': token}) +class Apps(http.Controller): + @http.route('/apps/', auth='user') + def get_app_url(self, req, app): + act_window_obj = request.session.model('ir.actions.act_window') + ir_model_data = request.session.model('ir.model.data') + try: + action_id = ir_model_data.get_object_reference('base', 'open_module_tree')[1] + action = act_window_obj.read(action_id, ['name', 'type', 'res_model', 'view_mode', 'view_type', 'context', 'views', 'domain']) + action['target'] = 'current' + except ValueError: + action = False + try: + app_id = ir_model_data.get_object_reference('base', 'module_%s' % app)[1] + except ValueError: + app_id = False + + if action and app_id: + action['res_id'] = app_id + action['view_mode'] = 'form' + action['views'] = [(False, u'form')] + + sakey = Session().save_session_action(action) + debug = '?debug' if req.debug else '' + return werkzeug.utils.redirect('/web{0}#sa={1}'.format(debug, sakey)) + + + # vim:expandtab:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/web/controllers/testing.py b/addons/web/controllers/testing.py index 0160f0f28cd..598270cfe54 100644 --- a/addons/web/controllers/testing.py +++ b/addons/web/controllers/testing.py @@ -89,7 +89,7 @@ TESTING = Template(u""" class TestRunnerController(http.Controller): @http.route('/web/tests', type='http', auth="none") - def index(self, req, mod=None, **kwargs): + def index(self, mod=None, **kwargs): ms = module.get_modules() manifests = dict( (name, desc) @@ -114,7 +114,7 @@ class TestRunnerController(http.Controller): to_test = sorted_mods if mod != '*': if mod not in manifests: - return req.not_found(NOTFOUND.render(module=mod)) + return request.not_found(NOTFOUND.render(module=mod)) idx = sorted_mods.index(mod) to_test = [None] * len(sorted_mods) to_test[idx] = mod diff --git a/addons/web/i18n/ar.po b/addons/web/i18n/ar.po index 4aef602034b..d5e86024466 100644 --- a/addons/web/i18n/ar.po +++ b/addons/web/i18n/ar.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-22 05:38+0000\n" -"X-Generator: Launchpad (build 16901)\n" +"X-Launchpad-Export-Date: 2014-02-13 06:08+0000\n" +"X-Generator: Launchpad (build 16916)\n" #. module: web #. openerp-web diff --git a/addons/web/i18n/bg.po b/addons/web/i18n/bg.po index 5d91e3a8baa..7c8af0c37e5 100644 --- a/addons/web/i18n/bg.po +++ b/addons/web/i18n/bg.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-22 05:38+0000\n" -"X-Generator: Launchpad (build 16901)\n" +"X-Launchpad-Export-Date: 2014-02-13 06:08+0000\n" +"X-Generator: Launchpad (build 16916)\n" #. module: web #. openerp-web diff --git a/addons/web/i18n/bn.po b/addons/web/i18n/bn.po index 1062f56b8e3..25c1e2f774c 100644 --- a/addons/web/i18n/bn.po +++ b/addons/web/i18n/bn.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-22 05:38+0000\n" -"X-Generator: Launchpad (build 16901)\n" +"X-Launchpad-Export-Date: 2014-02-13 06:08+0000\n" +"X-Generator: Launchpad (build 16916)\n" #. module: web #. openerp-web diff --git a/addons/web/i18n/bs.po b/addons/web/i18n/bs.po index f8dfcf8379a..a40c26883f2 100644 --- a/addons/web/i18n/bs.po +++ b/addons/web/i18n/bs.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openerp-web\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2012-12-21 17:06+0000\n" -"PO-Revision-Date: 2012-12-17 17:31+0000\n" -"Last-Translator: Goran Kliska \n" +"PO-Revision-Date: 2014-01-30 17:05+0000\n" +"Last-Translator: Bosko Stojakovic \n" "Language-Team: Bosnian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-22 05:38+0000\n" -"X-Generator: Launchpad (build 16901)\n" +"X-Launchpad-Export-Date: 2014-02-13 06:08+0000\n" +"X-Generator: Launchpad (build 16916)\n" #. module: web #. openerp-web @@ -103,7 +103,7 @@ msgstr "Pristup Odbijen" #: code:addons/web/static/src/js/view_form.js:5220 #, python-format msgid "Uploading error" -msgstr "" +msgstr "Greška pri slanju" #. module: web #. openerp-web @@ -155,7 +155,7 @@ msgstr "prije oko minut" #: code:addons/web/static/src/xml/base.xml:1306 #, python-format msgid "File" -msgstr "" +msgstr "Datoteka" #. module: web #: code:addons/web/controllers/main.py:869 @@ -575,7 +575,7 @@ msgstr "Ne poznat ne literalni tip " #: code:addons/web/static/src/js/view_form.js:2359 #, python-format msgid "Resource error" -msgstr "" +msgstr "Greška resursa" #. module: web #. openerp-web @@ -763,7 +763,7 @@ msgstr "00:00:00" #: code:addons/web/static/src/js/view_form.js:2330 #, python-format msgid "E-mail error" -msgstr "" +msgstr "Greška e-maila" #. module: web #. openerp-web @@ -1060,7 +1060,7 @@ msgstr "Odabrani fajl je prešao maksimalnu veličinu od %s." #: code:addons/web/static/src/xml/base.xml:635 #, python-format msgid "/web/binary/upload_attachment" -msgstr "" +msgstr "/web/binary/upload_attachment" #. module: web #. openerp-web diff --git a/addons/web/i18n/ca.po b/addons/web/i18n/ca.po index c138e492fbe..a8894148c3e 100644 --- a/addons/web/i18n/ca.po +++ b/addons/web/i18n/ca.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-22 05:38+0000\n" -"X-Generator: Launchpad (build 16901)\n" +"X-Launchpad-Export-Date: 2014-02-13 06:08+0000\n" +"X-Generator: Launchpad (build 16916)\n" #. module: web #. openerp-web diff --git a/addons/web/i18n/cs.po b/addons/web/i18n/cs.po index 523d5688c6f..18a93379456 100644 --- a/addons/web/i18n/cs.po +++ b/addons/web/i18n/cs.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-22 05:38+0000\n" -"X-Generator: Launchpad (build 16901)\n" +"X-Launchpad-Export-Date: 2014-02-13 06:08+0000\n" +"X-Generator: Launchpad (build 16916)\n" "X-Poedit-Language: Czech\n" #. module: web diff --git a/addons/web/i18n/da.po b/addons/web/i18n/da.po index e5b0ec143ea..05b15a136e8 100644 --- a/addons/web/i18n/da.po +++ b/addons/web/i18n/da.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-22 05:38+0000\n" -"X-Generator: Launchpad (build 16901)\n" +"X-Launchpad-Export-Date: 2014-02-13 06:08+0000\n" +"X-Generator: Launchpad (build 16916)\n" #. module: web #. openerp-web diff --git a/addons/web/i18n/de.po b/addons/web/i18n/de.po index e00d94558c7..149ca916a41 100644 --- a/addons/web/i18n/de.po +++ b/addons/web/i18n/de.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-22 05:38+0000\n" -"X-Generator: Launchpad (build 16901)\n" +"X-Launchpad-Export-Date: 2014-02-13 06:08+0000\n" +"X-Generator: Launchpad (build 16916)\n" #. module: web #. openerp-web diff --git a/addons/web/i18n/en_AU.po b/addons/web/i18n/en_AU.po index 44b6727bf93..d078092271c 100644 --- a/addons/web/i18n/en_AU.po +++ b/addons/web/i18n/en_AU.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-22 05:39+0000\n" -"X-Generator: Launchpad (build 16901)\n" +"X-Launchpad-Export-Date: 2014-02-13 06:10+0000\n" +"X-Generator: Launchpad (build 16916)\n" #. module: web #. openerp-web diff --git a/addons/web/i18n/en_GB.po b/addons/web/i18n/en_GB.po index 3c4c2b14b40..74ec781298f 100644 --- a/addons/web/i18n/en_GB.po +++ b/addons/web/i18n/en_GB.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-22 05:39+0000\n" -"X-Generator: Launchpad (build 16901)\n" +"X-Launchpad-Export-Date: 2014-02-13 06:09+0000\n" +"X-Generator: Launchpad (build 16916)\n" #. module: web #. openerp-web diff --git a/addons/web/i18n/es.po b/addons/web/i18n/es.po index 80dcbed17d0..4f18b3bc5e4 100644 --- a/addons/web/i18n/es.po +++ b/addons/web/i18n/es.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-22 05:39+0000\n" -"X-Generator: Launchpad (build 16901)\n" +"X-Launchpad-Export-Date: 2014-02-13 06:09+0000\n" +"X-Generator: Launchpad (build 16916)\n" #. module: web #. openerp-web diff --git a/addons/web/i18n/es_CL.po b/addons/web/i18n/es_CL.po index cc5d2b7854e..155c6ea2c49 100644 --- a/addons/web/i18n/es_CL.po +++ b/addons/web/i18n/es_CL.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-22 05:39+0000\n" -"X-Generator: Launchpad (build 16901)\n" +"X-Launchpad-Export-Date: 2014-02-13 06:09+0000\n" +"X-Generator: Launchpad (build 16916)\n" #. module: web #. openerp-web diff --git a/addons/web/i18n/es_CR.po b/addons/web/i18n/es_CR.po index e35826ae260..ce56b09ef01 100644 --- a/addons/web/i18n/es_CR.po +++ b/addons/web/i18n/es_CR.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-22 05:39+0000\n" -"X-Generator: Launchpad (build 16901)\n" +"X-Launchpad-Export-Date: 2014-02-13 06:10+0000\n" +"X-Generator: Launchpad (build 16916)\n" "Language: es\n" #. module: web diff --git a/addons/web/i18n/es_DO.po b/addons/web/i18n/es_DO.po index 3f3477532a2..aec2fd042cd 100644 --- a/addons/web/i18n/es_DO.po +++ b/addons/web/i18n/es_DO.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-22 05:39+0000\n" -"X-Generator: Launchpad (build 16901)\n" +"X-Launchpad-Export-Date: 2014-02-13 06:09+0000\n" +"X-Generator: Launchpad (build 16916)\n" #. module: web #. openerp-web diff --git a/addons/web/i18n/es_EC.po b/addons/web/i18n/es_EC.po index 45bffa013d2..16d60f1a5fe 100644 --- a/addons/web/i18n/es_EC.po +++ b/addons/web/i18n/es_EC.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-22 05:39+0000\n" -"X-Generator: Launchpad (build 16901)\n" +"X-Launchpad-Export-Date: 2014-02-13 06:10+0000\n" +"X-Generator: Launchpad (build 16916)\n" #. module: web #. openerp-web diff --git a/addons/web/i18n/es_MX.po b/addons/web/i18n/es_MX.po index 06dd3a02850..b33f856f3a6 100644 --- a/addons/web/i18n/es_MX.po +++ b/addons/web/i18n/es_MX.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-22 05:39+0000\n" -"X-Generator: Launchpad (build 16901)\n" +"X-Launchpad-Export-Date: 2014-02-13 06:10+0000\n" +"X-Generator: Launchpad (build 16916)\n" #. module: web #. openerp-web diff --git a/addons/web/i18n/es_PE.po b/addons/web/i18n/es_PE.po index 234fea210c6..17482a58b1c 100644 --- a/addons/web/i18n/es_PE.po +++ b/addons/web/i18n/es_PE.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-22 05:39+0000\n" -"X-Generator: Launchpad (build 16901)\n" +"X-Launchpad-Export-Date: 2014-02-13 06:10+0000\n" +"X-Generator: Launchpad (build 16916)\n" #. module: web #. openerp-web diff --git a/addons/web/i18n/et.po b/addons/web/i18n/et.po index dc7814e2ca9..35dd09862b5 100644 --- a/addons/web/i18n/et.po +++ b/addons/web/i18n/et.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-22 05:38+0000\n" -"X-Generator: Launchpad (build 16901)\n" +"X-Launchpad-Export-Date: 2014-02-13 06:08+0000\n" +"X-Generator: Launchpad (build 16916)\n" #. module: web #. openerp-web diff --git a/addons/web/i18n/eu.po b/addons/web/i18n/eu.po index ce409b1ab58..fa6c91098ce 100644 --- a/addons/web/i18n/eu.po +++ b/addons/web/i18n/eu.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-22 05:38+0000\n" -"X-Generator: Launchpad (build 16901)\n" +"X-Launchpad-Export-Date: 2014-02-13 06:08+0000\n" +"X-Generator: Launchpad (build 16916)\n" #. module: web #. openerp-web diff --git a/addons/web/i18n/fa.po b/addons/web/i18n/fa.po index fc7e0b38cb1..3fa4a3b0182 100644 --- a/addons/web/i18n/fa.po +++ b/addons/web/i18n/fa.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-22 05:39+0000\n" -"X-Generator: Launchpad (build 16901)\n" +"X-Launchpad-Export-Date: 2014-02-13 06:09+0000\n" +"X-Generator: Launchpad (build 16916)\n" #. module: web #. openerp-web diff --git a/addons/web/i18n/fi.po b/addons/web/i18n/fi.po index 6ac32e07f46..455e712e645 100644 --- a/addons/web/i18n/fi.po +++ b/addons/web/i18n/fi.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-22 05:38+0000\n" -"X-Generator: Launchpad (build 16901)\n" +"X-Launchpad-Export-Date: 2014-02-13 06:08+0000\n" +"X-Generator: Launchpad (build 16916)\n" #. module: web #. openerp-web diff --git a/addons/web/i18n/fr.po b/addons/web/i18n/fr.po index 8bb41b2d5b5..866478fe37e 100644 --- a/addons/web/i18n/fr.po +++ b/addons/web/i18n/fr.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-22 05:38+0000\n" -"X-Generator: Launchpad (build 16901)\n" +"X-Launchpad-Export-Date: 2014-02-13 06:08+0000\n" +"X-Generator: Launchpad (build 16916)\n" #. module: web #. openerp-web diff --git a/addons/web/i18n/fr_CA.po b/addons/web/i18n/fr_CA.po index 83a3009f2d6..9497232db51 100644 --- a/addons/web/i18n/fr_CA.po +++ b/addons/web/i18n/fr_CA.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-22 05:39+0000\n" -"X-Generator: Launchpad (build 16901)\n" +"X-Launchpad-Export-Date: 2014-02-13 06:10+0000\n" +"X-Generator: Launchpad (build 16916)\n" #. module: web #. openerp-web diff --git a/addons/web/i18n/gl.po b/addons/web/i18n/gl.po index e9fc6b24994..8cceab18186 100644 --- a/addons/web/i18n/gl.po +++ b/addons/web/i18n/gl.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-22 05:38+0000\n" -"X-Generator: Launchpad (build 16901)\n" +"X-Launchpad-Export-Date: 2014-02-13 06:08+0000\n" +"X-Generator: Launchpad (build 16916)\n" #. module: web #. openerp-web diff --git a/addons/web/i18n/gu.po b/addons/web/i18n/gu.po index ae83c879747..fb69c5916df 100644 --- a/addons/web/i18n/gu.po +++ b/addons/web/i18n/gu.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-22 05:38+0000\n" -"X-Generator: Launchpad (build 16901)\n" +"X-Launchpad-Export-Date: 2014-02-13 06:08+0000\n" +"X-Generator: Launchpad (build 16916)\n" #. module: web #. openerp-web diff --git a/addons/web/i18n/he.po b/addons/web/i18n/he.po index 3717273e55a..8f34af99660 100644 --- a/addons/web/i18n/he.po +++ b/addons/web/i18n/he.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-22 05:38+0000\n" -"X-Generator: Launchpad (build 16901)\n" +"X-Launchpad-Export-Date: 2014-02-13 06:08+0000\n" +"X-Generator: Launchpad (build 16916)\n" #. module: web #. openerp-web diff --git a/addons/web/i18n/hi.po b/addons/web/i18n/hi.po index ad32265fd37..428b4a37b8b 100644 --- a/addons/web/i18n/hi.po +++ b/addons/web/i18n/hi.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-22 05:38+0000\n" -"X-Generator: Launchpad (build 16901)\n" +"X-Launchpad-Export-Date: 2014-02-13 06:08+0000\n" +"X-Generator: Launchpad (build 16916)\n" #. module: web #. openerp-web diff --git a/addons/web/i18n/hr.po b/addons/web/i18n/hr.po index 35507525b56..87af29cc971 100644 --- a/addons/web/i18n/hr.po +++ b/addons/web/i18n/hr.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-22 05:39+0000\n" -"X-Generator: Launchpad (build 16901)\n" +"X-Launchpad-Export-Date: 2014-02-13 06:09+0000\n" +"X-Generator: Launchpad (build 16916)\n" #. module: web #. openerp-web diff --git a/addons/web/i18n/hu.po b/addons/web/i18n/hu.po index 557e2b9be39..0285acbfdfe 100644 --- a/addons/web/i18n/hu.po +++ b/addons/web/i18n/hu.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-22 05:38+0000\n" -"X-Generator: Launchpad (build 16901)\n" +"X-Launchpad-Export-Date: 2014-02-13 06:08+0000\n" +"X-Generator: Launchpad (build 16916)\n" #. module: web #. openerp-web diff --git a/addons/web/i18n/id.po b/addons/web/i18n/id.po index 060dbaaf155..30e0c7d29bf 100644 --- a/addons/web/i18n/id.po +++ b/addons/web/i18n/id.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-22 05:38+0000\n" -"X-Generator: Launchpad (build 16901)\n" +"X-Launchpad-Export-Date: 2014-02-13 06:08+0000\n" +"X-Generator: Launchpad (build 16916)\n" #. module: web #. openerp-web diff --git a/addons/web/i18n/it.po b/addons/web/i18n/it.po index fca544b2854..f0d2cd5a621 100644 --- a/addons/web/i18n/it.po +++ b/addons/web/i18n/it.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-22 05:38+0000\n" -"X-Generator: Launchpad (build 16901)\n" +"X-Launchpad-Export-Date: 2014-02-13 06:09+0000\n" +"X-Generator: Launchpad (build 16916)\n" #. module: web #. openerp-web diff --git a/addons/web/i18n/ja.po b/addons/web/i18n/ja.po index 1945b99d0f3..64e9a602ea7 100644 --- a/addons/web/i18n/ja.po +++ b/addons/web/i18n/ja.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-22 05:38+0000\n" -"X-Generator: Launchpad (build 16901)\n" +"X-Launchpad-Export-Date: 2014-02-13 06:09+0000\n" +"X-Generator: Launchpad (build 16916)\n" #. module: web #. openerp-web @@ -398,7 +398,7 @@ msgstr "選択:" #: code:addons/web/static/src/js/view_form.js:881 #, python-format msgid "The following fields are invalid:" -msgstr "" +msgstr "次のフィールドは無効:" #. module: web #: code:addons/web/controllers/main.py:890 @@ -791,6 +791,9 @@ msgid "" "\n" "Are you sure you want to leave this page ?" msgstr "" +"警告:このレコードは変更されていますが、変更した内容は破棄されます。\n" +"\n" +"このページを離れてもよろしいですか?" #. module: web #. openerp-web diff --git a/addons/web/i18n/ka.po b/addons/web/i18n/ka.po index 55bc0048468..cd2966b7894 100644 --- a/addons/web/i18n/ka.po +++ b/addons/web/i18n/ka.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-22 05:38+0000\n" -"X-Generator: Launchpad (build 16901)\n" +"X-Launchpad-Export-Date: 2014-02-13 06:08+0000\n" +"X-Generator: Launchpad (build 16916)\n" #. module: web #. openerp-web diff --git a/addons/web/i18n/ko.po b/addons/web/i18n/ko.po index 27f3d58e77e..21a088b0271 100644 --- a/addons/web/i18n/ko.po +++ b/addons/web/i18n/ko.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-22 05:38+0000\n" -"X-Generator: Launchpad (build 16901)\n" +"X-Launchpad-Export-Date: 2014-02-13 06:09+0000\n" +"X-Generator: Launchpad (build 16916)\n" #. module: web #. openerp-web diff --git a/addons/web/i18n/lo.po b/addons/web/i18n/lo.po index 8c8eaac1f49..5fafc78dceb 100644 --- a/addons/web/i18n/lo.po +++ b/addons/web/i18n/lo.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-22 05:38+0000\n" -"X-Generator: Launchpad (build 16901)\n" +"X-Launchpad-Export-Date: 2014-02-13 06:09+0000\n" +"X-Generator: Launchpad (build 16916)\n" #. module: web #. openerp-web diff --git a/addons/web/i18n/lt.po b/addons/web/i18n/lt.po index 66a33884b1e..1431685dda6 100644 --- a/addons/web/i18n/lt.po +++ b/addons/web/i18n/lt.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-22 05:38+0000\n" -"X-Generator: Launchpad (build 16901)\n" +"X-Launchpad-Export-Date: 2014-02-13 06:09+0000\n" +"X-Generator: Launchpad (build 16916)\n" #. module: web #. openerp-web diff --git a/addons/web/i18n/lv.po b/addons/web/i18n/lv.po index 41315df4194..62d48234890 100644 --- a/addons/web/i18n/lv.po +++ b/addons/web/i18n/lv.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-22 05:38+0000\n" -"X-Generator: Launchpad (build 16901)\n" +"X-Launchpad-Export-Date: 2014-02-13 06:09+0000\n" +"X-Generator: Launchpad (build 16916)\n" #. module: web #. openerp-web diff --git a/addons/web/i18n/mk.po b/addons/web/i18n/mk.po index d0ed37cc199..3f40b9ee458 100644 --- a/addons/web/i18n/mk.po +++ b/addons/web/i18n/mk.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-22 05:38+0000\n" -"X-Generator: Launchpad (build 16901)\n" +"X-Launchpad-Export-Date: 2014-02-13 06:09+0000\n" +"X-Generator: Launchpad (build 16916)\n" #. module: web #. openerp-web @@ -222,7 +222,7 @@ msgstr "" #: code:addons/web/static/src/js/view_form.js:1241 #, python-format msgid "Widget type '%s' is not implemented" -msgstr "" +msgstr "Додаток од тип '%s' не е имплементиран" #. module: web #. openerp-web @@ -386,7 +386,7 @@ msgstr "Група" #: code:addons/web/static/src/xml/base.xml:949 #, python-format msgid "Unhandled widget" -msgstr "" +msgstr "Необработен додаток" #. module: web #. openerp-web @@ -568,7 +568,7 @@ msgstr "Креирај и уреди..." #: code:addons/web/static/src/js/pyeval.js:736 #, python-format msgid "Unknown nonliteral type " -msgstr "" +msgstr "Непознат не-литерарен тип " #. module: web #. openerp-web @@ -856,7 +856,7 @@ msgstr "Додади" #: code:addons/web/static/src/xml/base.xml:558 #, python-format msgid "Toggle Form Layout Outline" -msgstr "" +msgstr "Смени форма Изглед Outline" #. module: web #. openerp-web @@ -973,7 +973,7 @@ msgstr "Податоците во формуларот не може да бид #: code:addons/web/static/src/xml/base.xml:555 #, python-format msgid "Debug View#" -msgstr "" +msgstr "Види поправање#" #. module: web #. openerp-web @@ -1117,7 +1117,7 @@ msgstr "'%s' не е точен датум" #: code:addons/web/static/src/xml/base.xml:955 #, python-format msgid "(nolabel)" -msgstr "" +msgstr "(без наслов)" #. module: web #. openerp-web @@ -1334,7 +1334,7 @@ msgstr "Невалидно Пребарување" #: code:addons/web/static/src/js/view_list.js:990 #, python-format msgid "Could not find id in dataset" -msgstr "" +msgstr "Не успеав да најдам id во dataset" #. module: web #. openerp-web @@ -2197,7 +2197,7 @@ msgstr "Не може да се конвертира вредност %s во к #: code:addons/web/static/src/xml/base.xml:563 #, python-format msgid "Fields View Get" -msgstr "" +msgstr "Полиња Види Земи" #. module: web #. openerp-web @@ -2329,7 +2329,7 @@ msgstr "Не" #: code:addons/web/static/src/js/formats.js:313 #, python-format msgid "'%s' is not convertible to date, datetime nor time" -msgstr "" +msgstr "'%s' не може да се претвори во датум, датум-време ниту пак време" #. module: web #. openerp-web @@ -2418,7 +2418,7 @@ msgstr "Филтер" #: code:addons/web/static/src/xml/base.xml:972 #, python-format msgid "Widget:" -msgstr "" +msgstr "Додаток:" #. module: web #. openerp-web diff --git a/addons/web/i18n/mn.po b/addons/web/i18n/mn.po index 867b66d6c54..b62a411fff4 100644 --- a/addons/web/i18n/mn.po +++ b/addons/web/i18n/mn.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-22 05:39+0000\n" -"X-Generator: Launchpad (build 16901)\n" +"X-Launchpad-Export-Date: 2014-02-13 06:09+0000\n" +"X-Generator: Launchpad (build 16916)\n" #. module: web #. openerp-web diff --git a/addons/web/i18n/nb.po b/addons/web/i18n/nb.po index 043634d172c..d35b68a6e29 100644 --- a/addons/web/i18n/nb.po +++ b/addons/web/i18n/nb.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-22 05:39+0000\n" -"X-Generator: Launchpad (build 16901)\n" +"X-Launchpad-Export-Date: 2014-02-13 06:09+0000\n" +"X-Generator: Launchpad (build 16916)\n" #. module: web #. openerp-web diff --git a/addons/web/i18n/nl.po b/addons/web/i18n/nl.po index f6241921ff7..1493e5deecd 100644 --- a/addons/web/i18n/nl.po +++ b/addons/web/i18n/nl.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-22 05:38+0000\n" -"X-Generator: Launchpad (build 16901)\n" +"X-Launchpad-Export-Date: 2014-02-13 06:08+0000\n" +"X-Generator: Launchpad (build 16916)\n" #. module: web #. openerp-web diff --git a/addons/web/i18n/nl_BE.po b/addons/web/i18n/nl_BE.po index 7ab38b33799..506ac41ca74 100644 --- a/addons/web/i18n/nl_BE.po +++ b/addons/web/i18n/nl_BE.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-22 05:39+0000\n" -"X-Generator: Launchpad (build 16901)\n" +"X-Launchpad-Export-Date: 2014-02-13 06:10+0000\n" +"X-Generator: Launchpad (build 16916)\n" #. module: web #. openerp-web diff --git a/addons/web/i18n/pl.po b/addons/web/i18n/pl.po index ecba69029bd..1148f69be06 100644 --- a/addons/web/i18n/pl.po +++ b/addons/web/i18n/pl.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-22 05:39+0000\n" -"X-Generator: Launchpad (build 16901)\n" +"X-Launchpad-Export-Date: 2014-02-13 06:09+0000\n" +"X-Generator: Launchpad (build 16916)\n" #. module: web #. openerp-web diff --git a/addons/web/i18n/pt.po b/addons/web/i18n/pt.po index e3fbf7cd497..039589dabd4 100644 --- a/addons/web/i18n/pt.po +++ b/addons/web/i18n/pt.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-22 05:39+0000\n" -"X-Generator: Launchpad (build 16901)\n" +"X-Launchpad-Export-Date: 2014-02-13 06:09+0000\n" +"X-Generator: Launchpad (build 16916)\n" #. module: web #. openerp-web diff --git a/addons/web/i18n/pt_BR.po b/addons/web/i18n/pt_BR.po index d890a471d45..f379e60fc60 100644 --- a/addons/web/i18n/pt_BR.po +++ b/addons/web/i18n/pt_BR.po @@ -15,8 +15,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-22 05:39+0000\n" -"X-Generator: Launchpad (build 16901)\n" +"X-Launchpad-Export-Date: 2014-02-13 06:09+0000\n" +"X-Generator: Launchpad (build 16916)\n" #. module: web #. openerp-web diff --git a/addons/web/i18n/ro.po b/addons/web/i18n/ro.po index aefa8fcc1e1..72eb6007b89 100644 --- a/addons/web/i18n/ro.po +++ b/addons/web/i18n/ro.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-22 05:39+0000\n" -"X-Generator: Launchpad (build 16901)\n" +"X-Launchpad-Export-Date: 2014-02-13 06:09+0000\n" +"X-Generator: Launchpad (build 16916)\n" #. module: web #. openerp-web diff --git a/addons/web/i18n/ru.po b/addons/web/i18n/ru.po index 11ac8dd03b6..4689690e145 100644 --- a/addons/web/i18n/ru.po +++ b/addons/web/i18n/ru.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-22 05:39+0000\n" -"X-Generator: Launchpad (build 16901)\n" +"X-Launchpad-Export-Date: 2014-02-13 06:09+0000\n" +"X-Generator: Launchpad (build 16916)\n" #. module: web #. openerp-web diff --git a/addons/web/i18n/sk.po b/addons/web/i18n/sk.po index 5c2b7860d23..95030006e82 100644 --- a/addons/web/i18n/sk.po +++ b/addons/web/i18n/sk.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-22 05:39+0000\n" -"X-Generator: Launchpad (build 16901)\n" +"X-Launchpad-Export-Date: 2014-02-13 06:09+0000\n" +"X-Generator: Launchpad (build 16916)\n" #. module: web #. openerp-web diff --git a/addons/web/i18n/sl.po b/addons/web/i18n/sl.po index 1698909b738..39da0f473ce 100644 --- a/addons/web/i18n/sl.po +++ b/addons/web/i18n/sl.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-22 05:39+0000\n" -"X-Generator: Launchpad (build 16901)\n" +"X-Launchpad-Export-Date: 2014-02-13 06:09+0000\n" +"X-Generator: Launchpad (build 16916)\n" #. module: web #. openerp-web diff --git a/addons/web/i18n/sq.po b/addons/web/i18n/sq.po index 3e4e3891e43..df99bfe12ed 100644 --- a/addons/web/i18n/sq.po +++ b/addons/web/i18n/sq.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-22 05:38+0000\n" -"X-Generator: Launchpad (build 16901)\n" +"X-Launchpad-Export-Date: 2014-02-13 06:08+0000\n" +"X-Generator: Launchpad (build 16916)\n" #. module: web #. openerp-web diff --git a/addons/web/i18n/sr@latin.po b/addons/web/i18n/sr@latin.po index c1a051db2e8..3f5cf91ce21 100644 --- a/addons/web/i18n/sr@latin.po +++ b/addons/web/i18n/sr@latin.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-22 05:39+0000\n" -"X-Generator: Launchpad (build 16901)\n" +"X-Launchpad-Export-Date: 2014-02-13 06:10+0000\n" +"X-Generator: Launchpad (build 16916)\n" #. module: web #. openerp-web diff --git a/addons/web/i18n/sv.po b/addons/web/i18n/sv.po index 02477dbf250..1ae6794baa7 100644 --- a/addons/web/i18n/sv.po +++ b/addons/web/i18n/sv.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-22 05:39+0000\n" -"X-Generator: Launchpad (build 16901)\n" +"X-Launchpad-Export-Date: 2014-02-13 06:09+0000\n" +"X-Generator: Launchpad (build 16916)\n" #. module: web #. openerp-web diff --git a/addons/web/i18n/th.po b/addons/web/i18n/th.po index b21d8ec2b74..4c00ffbe4f9 100644 --- a/addons/web/i18n/th.po +++ b/addons/web/i18n/th.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-22 05:39+0000\n" -"X-Generator: Launchpad (build 16901)\n" +"X-Launchpad-Export-Date: 2014-02-13 06:09+0000\n" +"X-Generator: Launchpad (build 16916)\n" #. module: web #. openerp-web @@ -213,7 +213,7 @@ msgstr "วันที่แก้ไขล่าสุด" #: code:addons/web/static/src/js/search.js:1566 #, python-format msgid "M2O search fields do not currently handle multiple default values" -msgstr "" +msgstr "กล่องค้นหา M2O ไม่สามารถจัดการค่าเริ่มต้นแบบหลายค่าได้" #. module: web #. openerp-web @@ -242,7 +242,7 @@ msgstr "รูปแบบ" #: code:addons/web/static/src/xml/base.xml:1352 #, python-format msgid "(no string)" -msgstr "(no string)" +msgstr "(ไม่มีข้อความ)" #. module: web #. openerp-web @@ -355,7 +355,7 @@ msgstr "เปลี่ยนรหัสผ่าน" #: code:addons/web/static/src/js/view_form.js:3528 #, python-format msgid "View type '%s' is not supported in One2Many." -msgstr "" +msgstr "ประเภทมุมมองนี้ '%s' ไม่สนับสนุนในแบบ One to Many" #. module: web #. openerp-web @@ -370,7 +370,7 @@ msgstr "ดาวน์โหลด" #: code:addons/web/static/src/js/formats.js:270 #, python-format msgid "'%s' is not a correct datetime" -msgstr "'%s' ไม่ได้เป็นวันที่และเวลาที่ถูกต้อง" +msgstr "'%s' เป็นวันที่และเวลาที่ไม่ถูกต้อง" #. module: web #. openerp-web @@ -384,7 +384,7 @@ msgstr "กลุ่ม" #: code:addons/web/static/src/xml/base.xml:949 #, python-format msgid "Unhandled widget" -msgstr "วิดเจ็ต Unhandled" +msgstr "วิดเจ็ตที่ไม่ถูกควบคุม" #. module: web #. openerp-web @@ -398,7 +398,7 @@ msgstr "การเลือก:" #: code:addons/web/static/src/js/view_form.js:881 #, python-format msgid "The following fields are invalid:" -msgstr "" +msgstr "ฟิลด์ต่อไปนี้ไม่ถูกต้อง" #. module: web #: code:addons/web/controllers/main.py:890 @@ -531,14 +531,14 @@ msgstr "เงื่อนไข:" #: code:addons/web/static/src/js/view_form.js:1709 #, python-format msgid "Unsupported operator %s in domain %s" -msgstr "" +msgstr "ไม่สนับสนุนการทำงาน %s ในโดเมน %s" #. module: web #. openerp-web #: code:addons/web/static/src/js/formats.js:246 #, python-format msgid "'%s' is not a correct float" -msgstr "" +msgstr "'%s' เป็นเลขทศนิยมไม่ถูกต้อง" #. module: web #. openerp-web @@ -552,7 +552,7 @@ msgstr "เรียกคืน" #: code:addons/web/static/src/js/view_list.js:409 #, python-format msgid "%d-%d of %d" -msgstr "%d-%d of %d" +msgstr "%d-%d ของ %d" #. module: web #. openerp-web @@ -566,7 +566,7 @@ msgstr "สร้างและแก้ไข ..." #: code:addons/web/static/src/js/pyeval.js:736 #, python-format msgid "Unknown nonliteral type " -msgstr "" +msgstr "ชนิดไม่ทราบอย่างแท้จริง " #. module: web #. openerp-web @@ -580,7 +580,7 @@ msgstr "" #: code:addons/web/static/src/js/search.js:2144 #, python-format msgid "is not" -msgstr "ไม่เท่ากับ" +msgstr "ไม่ใช่" #. module: web #. openerp-web @@ -608,42 +608,42 @@ msgstr "UTF-8" #: code:addons/web/static/src/xml/base.xml:443 #, python-format msgid "For more information visit" -msgstr "สำหรับการเยี่ยมชมข้อมูลเพิ่มเติม" +msgstr "เยี่ยมชมเพื่อข้อมูลเพิ่มเติม" #. module: web #. openerp-web #: code:addons/web/static/src/xml/base.xml:1880 #, python-format msgid "Add All Info..." -msgstr "" +msgstr "เพิ่มทุกข้อมูล..." #. module: web #. openerp-web #: code:addons/web/static/src/xml/base.xml:1701 #, python-format msgid "Export Formats" -msgstr "ส่งออก รูปแบบ" +msgstr "รูปแบบส่งออก" #. module: web #. openerp-web #: code:addons/web/static/src/xml/base.xml:996 #, python-format msgid "On change:" -msgstr "การเปลี่ยนแปลง:" +msgstr "เมื่อเปลี่ยนแปลง" #. module: web #. openerp-web #: code:addons/web/static/src/js/views.js:939 #, python-format msgid "Model %s fields" -msgstr "แบบ %s ฟิลด์" +msgstr "โมเดล %s ฟิลด์" #. module: web #. openerp-web #: code:addons/web/static/src/js/view_list.js:906 #, python-format msgid "Setting 'id' attribute on existing record %s" -msgstr "" +msgstr "ตั้งคุณลักษณะ 'id' บนบันทึก %s" #. module: web #. openerp-web @@ -681,28 +681,28 @@ msgstr "บันทึกตัวกรอง" #: code:addons/web/static/src/xml/base.xml:1372 #, python-format msgid "Action ID:" -msgstr "รหัส การกระทำ" +msgstr "รหัสการกระทำ:" #. module: web #. openerp-web #: code:addons/web/static/src/xml/base.xml:479 #, python-format msgid "Your user's preference timezone does not match your browser timezone:" -msgstr "เขตการตั้งค่าผู้ใช้ของคุณไม่ตรงกับเขตเวลาที่เบราว์เซอร์ของคุณ:" +msgstr "การตั้งค่าผู้ใช้ของคุณไม่ตรงกับเขตเวลาที่เบราว์เซอร์ของคุณ:" #. module: web #. openerp-web #: code:addons/web/static/src/js/view_form.js:1237 #, python-format msgid "Field '%s' specified in view could not be found." -msgstr "ฟิลด์ '% s' ที่ระบุไว้ในมุมมองที่ไม่พบ" +msgstr "ไม่พบฟิลด์ '%s' ที่ระบุไว้ในมุมมอง" #. module: web #. openerp-web #: code:addons/web/static/src/xml/base.xml:1777 #, python-format msgid "Saved exports:" -msgstr "การส่งออกที่บันทึกไว้:" +msgstr "บันทึกการส่งออก" #. module: web #. openerp-web @@ -716,7 +716,7 @@ msgstr "รหัสผ่านเก่า:" #: code:addons/web/static/src/js/formats.js:113 #, python-format msgid "Bytes,Kb,Mb,Gb,Tb,Pb,Eb,Zb,Yb" -msgstr "Bytes,Kb,Mb,Gb,Tb,Pb,Eb,Zb,Yb" +msgstr "ไบท์,กิโลไบท์,เมกะไบท์,กิ๊กกะไบท์,เทราไบท์,เพนตะ,เอ็กซะไบท์,Zb,Yb" #. module: web #. openerp-web @@ -730,7 +730,7 @@ msgstr "ฐานข้อมูลได้รับการทำซ้ำ" #: code:addons/web/static/src/xml/base.xml:1643 #, python-format msgid "Apply" -msgstr "ปรับใช้" +msgstr "นำไปใช้" #. module: web #. openerp-web @@ -791,7 +791,7 @@ msgid "" "\n" "Are you sure you want to leave this page ?" msgstr "" -"คำเตือน, การบันทึกที่ได้รับการแก้ไข, การเปลี่ยนแปลงของคุณจะถูกละทิ้ง\n" +"คำเตือน, บันทึกที่ได้รับการแก้ไข, การเปลี่ยนแปลงของคุณจะถูกละทิ้ง\n" "\n" "คุณแน่ใจหรือว่าคุณต้องการที่จะออกจากหน้านี้?" @@ -852,7 +852,7 @@ msgstr "เพิ่ม" #: code:addons/web/static/src/xml/base.xml:558 #, python-format msgid "Toggle Form Layout Outline" -msgstr "" +msgstr "เปิด/ปิด แบบร่างของฟอร์ม" #. module: web #. openerp-web @@ -909,7 +909,7 @@ msgstr "คลิกที่นี่เพื่อเปลี่ยนโซ #: code:addons/web/static/src/xml/base.xml:988 #, python-format msgid "Modifiers:" -msgstr "ปรับเปลี่ยน" +msgstr "ตัวปรับเปลี่ยน" #. module: web #. openerp-web @@ -997,6 +997,10 @@ msgid "" "\n" "%s" msgstr "" +"การทดสอบแบบเฉพาะส่วนล้มเหลว\n" +"%s\n" +"\n" +"%s" #. module: web #. openerp-web @@ -1010,7 +1014,7 @@ msgstr "ชื่อฐานข้อมูลไม่ถูกต้อง" #: code:addons/web/static/src/xml/base.xml:1714 #, python-format msgid "Save fields list" -msgstr "" +msgstr "บันทึกรายการของฟิลด์" #. module: web #. openerp-web @@ -1024,7 +1028,7 @@ msgstr "เริ่ม" #: code:addons/web/static/src/js/views.js:897 #, python-format msgid "View Log (%s)" -msgstr "View Log (%s)" +msgstr "ดูบันทึกเหตุการณ์ (%s)" #. module: web #. openerp-web @@ -1045,7 +1049,7 @@ msgstr "ผิดพลาด รหัสผ่านไม่ได้เป #: code:addons/web/static/src/js/view_form.js:4981 #, python-format msgid "The selected file exceed the maximum file size of %s." -msgstr "" +msgstr "ไฟล์ที่ถูกเลือกมีขนาดใหญ่เกิน %s." #. module: web #. openerp-web @@ -1093,14 +1097,14 @@ msgstr "สำรอง" #: code:addons/web/static/src/js/dates.js:80 #, python-format msgid "'%s' is not a valid time" -msgstr "'%s' เวลา ไม่ถูกต้อง" +msgstr "'%s' เวลาไม่ถูกต้อง" #. module: web #. openerp-web #: code:addons/web/static/src/js/formats.js:278 #, python-format msgid "'%s' is not a correct date" -msgstr "'%s' วันที่ ไม่ถูกต้อง" +msgstr "'%s' วันที่ไม่ถูกต้อง" #. module: web #. openerp-web @@ -1114,14 +1118,14 @@ msgstr "(ไม่มีป้าย)" #: code:addons/web/static/src/js/coresetup.js:596 #, python-format msgid "%d days ago" -msgstr "%d วันก่อน" +msgstr "%d วัน" #. module: web #. openerp-web #: code:addons/web/static/src/xml/base.xml:1500 #, python-format msgid "(Any existing filter with the same name will be replaced)" -msgstr "" +msgstr "(ตัวกรองใดก็ตามที่ชื่อเหมือนกันจะถูกแทนที่)" #. module: web #. openerp-web @@ -1154,14 +1158,14 @@ msgstr "แก้ไขล่าสุดโดย:" #: code:addons/web/static/src/xml/base.xml:492 #, python-format msgid "Timezone mismatch" -msgstr "โซนเวลา ไม่ตรงกัน" +msgstr "เขตเวลาไม่ตรงกัน" #. module: web #. openerp-web #: code:addons/web/static/src/js/view_form.js:1663 #, python-format msgid "Unknown operator %s in domain %s" -msgstr "" +msgstr "ตัวดำเนินการที่ไม่ทราบ %s ในโดเมน %s" #. module: web #. openerp-web @@ -1175,7 +1179,7 @@ msgstr "%d / %d" #: code:addons/web/static/src/xml/base.xml:1803 #, python-format msgid "2. Check your file format" -msgstr "" +msgstr "2. ตรวจสอบรูปแบบไฟล์ของคุณ" #. module: web #. openerp-web @@ -1192,6 +1196,8 @@ msgid "" "Select a .CSV file to import. If you need a sample of file to import,\n" " you should use the export tool with the \"Import Compatible\" option." msgstr "" +"เลือกไฟล์ .CSV เพื่อนำเข้า. ถ้าคุณต้องการตัวอย่างไฟล์นำเข้า,\n" +" คุณควรใช้เครื่องมือส่งออก พร้อมกับเลือก \"นำเข้าที่ใช้ด้วยกันได้\"." #. module: web #. openerp-web @@ -1270,7 +1276,7 @@ msgstr "ออกระบบ" #: code:addons/web/static/src/js/search.js:1192 #, python-format msgid "Group by: %s" -msgstr "กลุ่ม โดย: %s" +msgstr "จัดกลุ่ม โดย: %s" #. module: web #. openerp-web @@ -1299,7 +1305,7 @@ msgstr "ส่งออกเป็นไฟล์" #: code:addons/web/static/src/js/views.js:1172 #, python-format msgid "You must choose at least one record." -msgstr "คุณต้องเลือกอย่างน้อยหนึ่งเรคคอร์อด" +msgstr "คุณต้องเลือกอย่างน้อยหนึ่งบันทึก" #. module: web #. openerp-web @@ -1386,6 +1392,7 @@ msgid "" "For use if CSV files have titles on multiple lines, skips more than a single " "line during import" msgstr "" +"ใช้สำหรับ CSV ไฟล์ที่มีหัวเรื่องหลายบรรทัด, ข้ามมากกว่าหนึ่งบรรทัดในขณะนำเข้า" #. module: web #. openerp-web @@ -1413,7 +1420,7 @@ msgstr "ไม่ได้เลือก ฐานข้อมูล!" #: code:addons/web/static/src/js/formats.js:184 #, python-format msgid "(%d records)" -msgstr "(%d records)" +msgstr "(%d บันทึก)" #. module: web #. openerp-web @@ -1444,7 +1451,7 @@ msgstr "เท่ากับ" #: code:addons/web/static/src/js/views.js:1581 #, python-format msgid "Could not serialize XML" -msgstr "" +msgstr "ไม่สามารถบันทึกแบบ XML ได้" #. module: web #. openerp-web @@ -1483,7 +1490,7 @@ msgstr "สร้าง" #: code:addons/web/static/src/js/search.js:2043 #, python-format msgid "doesn't contain" -msgstr "" +msgstr "ไม่มี" #. module: web #. openerp-web @@ -1570,14 +1577,14 @@ msgstr "ผู้ใช้ทั้งหมด" #: code:addons/web/static/src/js/view_form.js:1671 #, python-format msgid "Unknown field %s in domain %s" -msgstr "" +msgstr "ฟิลด์ไม่รู้จัก %s ในโดเมน %s" #. module: web #. openerp-web #: code:addons/web/static/src/js/views.js:1546 #, python-format msgid "Node [%s] is not a JSONified XML node" -msgstr "Node [%s] is not a JSONified XML node" +msgstr "โหนด [%s] ไม่ใช่ JSONified XML โหนต" #. module: web #. openerp-web @@ -1642,7 +1649,7 @@ msgstr "--- ห้าม นำเข้า ---" #: code:addons/web/static/src/xml/base.xml:1697 #, python-format msgid "Import-Compatible Export" -msgstr "" +msgstr "ส่งออก แบบนำเข้าที่เข้ากันได้" #. module: web #. openerp-web @@ -1656,7 +1663,7 @@ msgstr "%d ปีที่ผ่านมา" #: code:addons/web/static/src/js/view_list.js:1050 #, python-format msgid "Unknown m2m command %s" -msgstr "" +msgstr "คำสั่ง Many2Many ที่ไม่รู้จัก %s" #. module: web #. openerp-web @@ -1685,7 +1692,7 @@ msgstr "ใส่รหัสผ่านใหม่ที่ต้องกา #: code:addons/web/static/src/js/view_form.js:5017 #, python-format msgid "The field is empty, there's nothing to save !" -msgstr "" +msgstr "ฟิลด์ยังว่างเปล่า, ยังไม่มีอะไรที่ต้องบันทึก !" #. module: web #. openerp-web @@ -1706,7 +1713,7 @@ msgstr "ชุดรหัสภาษา:" #: code:addons/web/static/src/xml/base.xml:1829 #, python-format msgid "Lines to skip" -msgstr "" +msgstr "บรรทัดที่ข้าม" #. module: web #. openerp-web @@ -1720,35 +1727,35 @@ msgstr "สร้าง \"%s\"" #: code:addons/web/static/src/js/data_export.js:362 #, python-format msgid "Please select fields to save export list..." -msgstr "" +msgstr "โปรดเลือกฟิลเพื่อบันทึกรายการส่งออก..." #. module: web #. openerp-web #: code:addons/web/static/src/xml/base.xml:440 #, python-format msgid "Copyright © 2004-TODAY OpenERP SA. All Rights Reserved." -msgstr "" +msgstr "ลิขสิทธิ์ © 2004-TODAY OpenERP SA. All Rights Reserved." #. module: web #. openerp-web #: code:addons/web/static/src/js/view_form.js:2379 #, python-format msgid "This resource is empty" -msgstr "" +msgstr "ทรัพยากรนี้ว่างเปล่า" #. module: web #. openerp-web #: code:addons/web/static/src/xml/base.xml:1710 #, python-format msgid "Available fields" -msgstr "" +msgstr "ฟิลด์ที่ใช้ได้" #. module: web #. openerp-web #: code:addons/web/static/src/xml/base.xml:1856 #, python-format msgid "The import failed due to:" -msgstr "" +msgstr "การนำเข้าล้มเหลวเนื่องจาก:" #. module: web #. openerp-web @@ -1756,7 +1763,7 @@ msgstr "" #: code:addons/web/static/src/xml/base.xml:561 #, python-format msgid "JS Tests" -msgstr "JS Tests" +msgstr "ทดสอบ JS" #. module: web #. openerp-web @@ -1770,7 +1777,7 @@ msgstr "บันทึกเป็น:" #: code:addons/web/static/src/js/search.js:1024 #, python-format msgid "Filter on: %s" -msgstr "" +msgstr "กรองด้วย: %s" #. module: web #. openerp-web @@ -1785,7 +1792,7 @@ msgstr "สร้าง: " #: code:addons/web/static/src/xml/base.xml:562 #, python-format msgid "View Fields" -msgstr "" +msgstr "ดูฟิลด์" #. module: web #. openerp-web @@ -1799,14 +1806,14 @@ msgstr "ยืนยันรหัสผ่านใหม่" #: code:addons/web/static/src/js/view_list.js:587 #, python-format msgid "Do you really want to remove these records?" -msgstr "" +msgstr "คุณต้องการลบบันทึกเหล่านี้หรือไม่?" #. module: web #. openerp-web #: code:addons/web/static/src/xml/base.xml:980 #, python-format msgid "Context:" -msgstr "" +msgstr "บริบท" #. module: web #. openerp-web @@ -1821,7 +1828,7 @@ msgstr "เป็น" #: code:addons/web/static/src/js/data_export.js:6 #, python-format msgid "Export Data" -msgstr "ส่งข้อมูล ออก" +msgstr "ส่งออกข้อมูล" #. module: web #. openerp-web @@ -1895,7 +1902,7 @@ msgstr "ค้นหาอีกครั้ง" #: code:addons/web/static/src/xml/base.xml:1481 #, python-format msgid "-- Filters --" -msgstr "-- กรอง --" +msgstr "-- ตัวกรอง --" #. module: web #. openerp-web @@ -1921,6 +1928,7 @@ msgid "" "Grouping on field '%s' is not possible because that field does not appear in " "the list view." msgstr "" +"จัดกลุ่มบนฟิลด์ '%s' ไม่สามารถทำได้ เนื่องจากฟิลด์นี้ไม่ปรากฏในรายการมุมมอง." #. module: web #. openerp-web @@ -1939,6 +1947,9 @@ msgid "" " You can export all data or only the fields that can be " "reimported after modification." msgstr "" +"โปรแกรมนี้จะส่งออกข้อมูลทั้งหมดที่ตรงกับเงื่อนใขของการค้นหาไปยังไฟล์ CSV.\n" +" คุณสามารถส่งออกข้อมูลทั้งหมด " +"หรือบางฟิลด์ที่สามารถนำเข้าได้อีกครั้งหลังการแก้ใข." #. module: web #. openerp-web @@ -1952,14 +1963,14 @@ msgstr "ไม่พบ บันทึกในฐานข้อมูล" #: code:addons/web/static/src/xml/base.xml:1498 #, python-format msgid "Filter Name:" -msgstr "กรองชื่อ:" +msgstr "ชื่อตัวกรอง:" #. module: web #. openerp-web #: code:addons/web/static/src/xml/base.xml:968 #, python-format msgid "Type:" -msgstr "ประเภท:" +msgstr "ชนิด:" #. module: web #. openerp-web @@ -2008,6 +2019,8 @@ msgid "" "The type of the field '%s' must be a many2many field with a relation to " "'ir.attachment' model." msgstr "" +"ชนิดของฟิลด์ '%s' ต้องเป็นฟิลด์แบบ Many to Many และมีความสัมพันธ์กับโมเดล " +"'ir.attachment'." #. module: web #. openerp-web @@ -2036,7 +2049,7 @@ msgstr "เพิ่มด่วน" #: code:addons/web/static/src/xml/base.xml:1826 #, python-format msgid "Latin 1" -msgstr "Latin 1" +msgstr "ลาติน 1" #. module: web #. openerp-web @@ -2144,7 +2157,7 @@ msgstr "ยืนยัน" #: code:addons/web/static/src/js/data_export.js:127 #, python-format msgid "Please enter save field list name" -msgstr "" +msgstr "โปรดบันทึกฟิลด์รายการชื่อ" #. module: web #. openerp-web @@ -2165,7 +2178,7 @@ msgstr "ใหม่" #: code:addons/web/static/src/js/view_list.js:1777 #, python-format msgid "Can't convert value %s to context" -msgstr "" +msgstr "ไม่สามารถเปลี่ยนค่า %s ไปยังบริบทได้" #. module: web #. openerp-web @@ -2173,7 +2186,7 @@ msgstr "" #: code:addons/web/static/src/xml/base.xml:563 #, python-format msgid "Fields View Get" -msgstr "" +msgstr "ดึงฟิลด์มุมมอง" #. module: web #. openerp-web @@ -2189,7 +2202,7 @@ msgstr "ยืนยันรหัสผ่าน:" #: code:addons/web/static/src/js/search.js:2123 #, python-format msgid "greater or equal than" -msgstr "" +msgstr "มากกว่าหรือเท่ากับ" #. module: web #. openerp-web @@ -2238,13 +2251,13 @@ msgstr "เกี่ยวกับ OpenERP" #: code:addons/web/static/src/js/formats.js:301 #, python-format msgid "'%s' is not a correct date, datetime nor time" -msgstr "" +msgstr "'%s' เป็นวันที่ที่ไม่ถูกต้อง, เฉพาะวันที่ไม่ใช่เวลา" #. module: web #: code:addons/web/controllers/main.py:1307 #, python-format msgid "No content found for field '%s' on '%s:%s'" -msgstr "" +msgstr "ไม่พบเนื้อหาสำหรับฟิลด์ '%s' บน '%s:%s'" #. module: web #. openerp-web @@ -2272,14 +2285,14 @@ msgstr "จัดการฐานข้อมูล" #: code:addons/web/static/src/js/pyeval.js:770 #, python-format msgid "Evaluation Error" -msgstr "" +msgstr "ข้อผิดพลาดในการทดสอบ" #. module: web #. openerp-web #: code:addons/web/static/src/js/search.js:1387 #, python-format msgid "not a valid integer" -msgstr "" +msgstr "จำนวนเต็มไม่ถูกต้อง" #. module: web #. openerp-web @@ -2305,7 +2318,7 @@ msgstr "ไม่" #: code:addons/web/static/src/js/formats.js:313 #, python-format msgid "'%s' is not convertible to date, datetime nor time" -msgstr "" +msgstr "'%s' ไม่สามารถแปลงเป็นวันที่ได้, เฉพาะวันเวลาไม่ใช่เวลา" #. module: web #. openerp-web @@ -2330,7 +2343,7 @@ msgstr "ยกเลิก" #: code:addons/web/static/src/xml/base.xml:1642 #, python-format msgid "Add a condition" -msgstr "" +msgstr "เพิ่มเงื่อนใข" #. module: web #. openerp-web @@ -2344,21 +2357,21 @@ msgstr "กำลังโหลด..." #: code:addons/web/static/src/js/search.js:884 #, python-format msgid "Incorrect value for field %(fieldname)s: [%(value)s] is %(message)s" -msgstr "" +msgstr "ค่าไม่ถูกต้องสำหรับฟิลด์ %(fieldname)s: [%(value)s] is %(message)s" #. module: web #. openerp-web #: code:addons/web/static/src/js/view_form.js:3926 #, python-format msgid "The o2m record must be saved before an action can be used" -msgstr "" +msgstr "บันทึก One to Many ต้องบันทึกก่อนที่การปฏิบัติจะใช้งาน" #. module: web #. openerp-web #: code:addons/web/static/src/js/chrome.js:531 #, python-format msgid "Backed" -msgstr "" +msgstr "กลับแล้ว" #. module: web #. openerp-web @@ -2379,7 +2392,7 @@ msgstr "%s (%d)" #: code:addons/web/static/src/js/search.js:841 #, python-format msgid "triggered from search view" -msgstr "" +msgstr "ถูกกระตุ้นจากมุมมองการค้นหา" #. module: web #. openerp-web @@ -2421,7 +2434,7 @@ msgstr "คุณเท่านั้น" #: code:addons/web/static/src/xml/base.xml:571 #, python-format msgid "Edit Workflow" -msgstr "แก้ไข เวิร์กโฟลว์" +msgstr "แก้ไขกระบวนการทำงาน" #. module: web #. openerp-web @@ -2435,7 +2448,7 @@ msgstr "คุณต้องการที่จะลบสิ่งที่ #: code:addons/web/static/src/js/views.js:914 #, python-format msgid "Technical Translation" -msgstr "" +msgstr "การแปลศัพท์เทคนิค" #. module: web #. openerp-web @@ -2449,14 +2462,14 @@ msgstr "ฟิลด์" #: code:addons/web/static/src/xml/base.xml:642 #, python-format msgid "Modified by :" -msgstr "ดัดแปลงโดย" +msgstr "แก้ใขโดย:" #. module: web #. openerp-web #: code:addons/web/static/src/js/chrome.js:521 #, python-format msgid "The database %s has been dropped" -msgstr "ฐานข้อมูล %s ที่ต้องการทิ้ง" +msgstr "ฐานข้อมูล %s ได้ถูกทิ้งแล้ว" #. module: web #. openerp-web @@ -2492,14 +2505,14 @@ msgstr "" #, python-format msgid "" "The old password you provided is incorrect, your password was not changed." -msgstr "" +msgstr "รหัสผ่านเก่าผิด รหัสผ่านของคุณจะไม่ถูกเปลี่ยน" #. module: web #. openerp-web #: code:addons/web/static/src/xml/base.xml:583 #, python-format msgid "Creation User:" -msgstr "" +msgstr "สร้างผู้ใช้:" #. module: web #. openerp-web @@ -2559,7 +2572,7 @@ msgstr "เลือกวัน" #: code:addons/web/static/src/js/search.js:1369 #, python-format msgid "Search %(field)s for: %(value)s" -msgstr "" +msgstr "ค้นหา %(field)s สำหรับ: %(value)s" #. module: web #. openerp-web @@ -2587,7 +2600,7 @@ msgstr "" #: code:addons/web/static/src/xml/base.xml:1816 #, python-format msgid "Separator:" -msgstr "ตัวแยก:" +msgstr "ตัวคั้น:" #. module: web #. openerp-web diff --git a/addons/web/i18n/tr.po b/addons/web/i18n/tr.po index c9bc9ecc225..b6bf3a3631f 100644 --- a/addons/web/i18n/tr.po +++ b/addons/web/i18n/tr.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-22 05:39+0000\n" -"X-Generator: Launchpad (build 16901)\n" +"X-Launchpad-Export-Date: 2014-02-13 06:09+0000\n" +"X-Generator: Launchpad (build 16916)\n" #. module: web #. openerp-web diff --git a/addons/web/i18n/uk.po b/addons/web/i18n/uk.po index 38f8667bd4c..3b850ca40cc 100644 --- a/addons/web/i18n/uk.po +++ b/addons/web/i18n/uk.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-22 05:39+0000\n" -"X-Generator: Launchpad (build 16901)\n" +"X-Launchpad-Export-Date: 2014-02-13 06:09+0000\n" +"X-Generator: Launchpad (build 16916)\n" #. module: web #. openerp-web diff --git a/addons/web/i18n/vi.po b/addons/web/i18n/vi.po index ea08e77aaa6..bc1de8c1077 100644 --- a/addons/web/i18n/vi.po +++ b/addons/web/i18n/vi.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-22 05:39+0000\n" -"X-Generator: Launchpad (build 16901)\n" +"X-Launchpad-Export-Date: 2014-02-13 06:09+0000\n" +"X-Generator: Launchpad (build 16916)\n" #. module: web #. openerp-web diff --git a/addons/web/i18n/zh_CN.po b/addons/web/i18n/zh_CN.po index 75678a3ec27..2b8c3e7f9bd 100644 --- a/addons/web/i18n/zh_CN.po +++ b/addons/web/i18n/zh_CN.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-22 05:39+0000\n" -"X-Generator: Launchpad (build 16901)\n" +"X-Launchpad-Export-Date: 2014-02-13 06:10+0000\n" +"X-Generator: Launchpad (build 16916)\n" #. module: web #. openerp-web diff --git a/addons/web/i18n/zh_TW.po b/addons/web/i18n/zh_TW.po index 4886e970bd3..13cd37127a7 100644 --- a/addons/web/i18n/zh_TW.po +++ b/addons/web/i18n/zh_TW.po @@ -14,8 +14,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-01-22 05:39+0000\n" -"X-Generator: Launchpad (build 16901)\n" +"X-Launchpad-Export-Date: 2014-02-13 06:10+0000\n" +"X-Generator: Launchpad (build 16916)\n" #. module: web #. openerp-web diff --git a/addons/web/static/lib/ckeditor/CHANGES.md b/addons/web/static/lib/ckeditor/CHANGES.md new file mode 100644 index 00000000000..261439fe8fe --- /dev/null +++ b/addons/web/static/lib/ckeditor/CHANGES.md @@ -0,0 +1,414 @@ +CKEditor 4 Changelog +==================== + +## CKEditor 4.3.2 + +* [#11331](http://dev.ckeditor.com/ticket/11331): A menu button will have a changed label when selected instead of using the `aria-pressed` attribute. +* [#11177](http://dev.ckeditor.com/ticket/11177): Widget drag handler improvements: + * [#11176](http://dev.ckeditor.com/ticket/11176): Fixed: Initial position is not updated when the widget data object is empty. + * [#11001](http://dev.ckeditor.com/ticket/11001): Fixed: Multiple synchronous layout recalculations are caused by initial drag handler positioning causing performance issues. + * [#11161](http://dev.ckeditor.com/ticket/11161): Fixed: Drag handler is not repositioned in various situations. + * [#11281](http://dev.ckeditor.com/ticket/11281): Fixed: Drag handler and mask are duplicated after widget reinitialization. +* [#11207](http://dev.ckeditor.com/ticket/11207): [Firefox] Fixed: Misplaced [Enhanced Image](http://ckeditor.com/addon/image2) resizer in the inline editor. +* [#11102](http://dev.ckeditor.com/ticket/11102): `CKEDITOR.template` improvements: + * [#11102](http://dev.ckeditor.com/ticket/11102): Added newline character support. + * [#11216](http://dev.ckeditor.com/ticket/11216): Added "\\'" substring support. +* [#11121](http://dev.ckeditor.com/ticket/11121): [Firefox] Fixed: High Contrast mode is enabled when the editor is loaded in a hidden iframe. +* [#11350](http://dev.ckeditor.com/ticket/11350): The default value of [`config.contentsCss`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-contentsCss) is affected by [`CKEDITOR.getUrl`](http://docs.ckeditor.com/#!/api/CKEDITOR-method-getUrl). +* [#11097](http://dev.ckeditor.com/ticket/11097): Improved the [Autogrow](http://ckeditor.com/addon/autogrow) plugin performance when dealing with very big tables. +* [#11290](http://dev.ckeditor.com/ticket/11290): Removed redundant code in the [Source Dialog](http://ckeditor.com/addon/sourcedialog) plugin. +* [#11133](http://dev.ckeditor.com/ticket/11133): [Page Break](http://ckeditor.com/addon/pagebreak) becomes editable if pasted. +* [#11126](http://dev.ckeditor.com/ticket/11126): Fixed: Native Undo executed once the bottom of the snapshot stack is reached. +* [#11131](http://dev.ckeditor.com/ticket/11131): [Div Editing Area](http://ckeditor.com/addon/divarea): Fixed: Error thrown when switching to source mode if the selection was in widget's nested editable. +* [#11139](http://dev.ckeditor.com/ticket/11139): [Div Editing Area](http://ckeditor.com/addon/divarea): Fixed: Elements Path is not cleared after switching to source mode. +* [#10778](http://dev.ckeditor.com/ticket/10778): Fixed a bug with range enlargement. The range no longer expands to visible whitespace. +* [#11146](http://dev.ckeditor.com/ticket/11146): [IE] Fixed: Preview window switches Internet Explorer to Quirks Mode. +* [#10762](http://dev.ckeditor.com/ticket/10762): [IE] Fixed: JavaScript code displayed in preview window's URL bar. +* [#11186](http://dev.ckeditor.com/ticket/11186): Introduced the [`widgets.repository.addUpcastCallback`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget.repository-method-addUpcastCallback) method that allows to block upcasting given element to a widget. +* [#11307](http://dev.ckeditor.com/ticket/11307): Fixed: Paste as Plain Text conflict with the [MooTools](http://mootools.net) library. +* [#11140](http://dev.ckeditor.com/ticket/11140): [IE11] Fixed: Anchors are not draggable. +* [#11379](http://dev.ckeditor.com/ticket/11379): Changed default contents `line-height` to unitless values to avoid huge text overlapping (like in [#9696](http://dev.ckeditor.com/ticket/9696)). +* [#10787](http://dev.ckeditor.com/ticket/10787): [Firefox] Fixed: Broken replacement of text while pasting into `div`-based editor. +* [#10884](http://dev.ckeditor.com/ticket/10884): Widgets integration with the [Show Blocks](http://ckeditor.com/addon/showblocks) plugin. +* [#11021](http://dev.ckeditor.com/ticket/11021): Fixed: An error thrown when selecting entire editable contents while fake selection is on. +* [#11086](http://dev.ckeditor.com/ticket/11086): [IE8] Re-enable inline widgets drag&drop in Internet Explorer 8. +* [#11372](http://dev.ckeditor.com/ticket/11372): Widgets: Special characters encoded twice in nested editables. +* [#10068](http://dev.ckeditor.com/ticket/10068): Fixed: Support for protocol-relative URLs. +* [#11283](http://dev.ckeditor.com/ticket/11283): [Enhanced Image](http://ckeditor.com/addon/image2): A `
` element with `text-align: center` and an image inside is not recognised correctly. +* [#11196](http://dev.ckeditor.com/ticket/11196): [Accessibility Instructions](http://ckeditor.com/addon/a11yhelp): Allowed additional keyboard button labels to be translated in the dialog window. + +## CKEditor 4.3.1 + +**Important Notes:** + +* To match the naming convention, the `language` button is now `Language` ([#11201](http://dev.ckeditor.com/ticket/11201)). +* [Enhanced Image](http://ckeditor.com/addon/image2) button, context menu, command, and icon names match those of the [Image](http://ckeditor.com/addon/image) plugin ([#11222](http://dev.ckeditor.com/ticket/11222)). + +Fixed Issues: + +* [#11244](http://dev.ckeditor.com/ticket/11244): Changed: The [`widget.repository.checkWidgets()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget.repository-method-checkWidgets) method now fires the [`widget.repository.checkWidgets`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget.repository-event-checkWidgets) event, so from CKEditor 4.3.1 it is preferred to use the method rather than fire the event. +* [#11171](http://dev.ckeditor.com/ticket/11171): Fixed: [`editor.insertElement()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-insertElement) and [`editor.insertText()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-insertText) methods do not call the [`widget.repository.checkWidgets()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget.repository-method-checkWidgets) method. +* [#11085](http://dev.ckeditor.com/ticket/11085): [IE8] Replaced preview generated by the [Mathematical Formulas](http://ckeditor.com/addon/mathjax) widget with a placeholder. +* [#11044](http://dev.ckeditor.com/ticket/11044): Enhanced WAI-ARIA support for the [Language](http://ckeditor.com/addon/language) plugin drop-down menu. +* [#11075](http://dev.ckeditor.com/ticket/11075): With drop-down menu button focused, pressing the *Down Arrow* key will now open the menu and focus its first option. +* [#11165](http://dev.ckeditor.com/ticket/11165): Fixed: The [File Browser](http://ckeditor.com/addon/filebrowser) plugin cannot be removed from the editor. +* [#11159](http://dev.ckeditor.com/ticket/11159): [IE9-10] [Enhanced Image](http://ckeditor.com/addon/image2): Fixed buggy discovery of image dimensions. +* [#11101](http://dev.ckeditor.com/ticket/11101): Drop-down lists no longer break when given double quotes. +* [#11077](http://dev.ckeditor.com/ticket/11077): [Enhanced Image](http://ckeditor.com/addon/image2): Empty undo step recorded when resizing the image. +* [#10853](http://dev.ckeditor.com/ticket/10853): [Enhanced Image](http://ckeditor.com/addon/image2): Widget has paragraph wrapper when de-captioning unaligned image. +* [#11198](http://dev.ckeditor.com/ticket/11198): Widgets: Drag handler is not fully visible when an inline widget is in a heading. +* [#11132](http://dev.ckeditor.com/ticket/11132): [Firefox] Fixed: Caret is lost after drag and drop of an inline widget. +* [#11182](http://dev.ckeditor.com/ticket/11182): [IE10-11] Fixed: Editor crashes (IE11) or works with minor issues (IE10) if a page is loaded in Quirks Mode. See [`env.quirks`](http://docs.ckeditor.com/#!/api/CKEDITOR.env-property-quirks) for more details. +* [#11204](http://dev.ckeditor.com/ticket/11204): Added `figure` and `figcaption` styles to the `contents.css` file so [Enhanced Image](http://ckeditor.com/addon/image2) looks nicer. +* [#11202](http://dev.ckeditor.com/ticket/11202): Fixed: No newline in [BBCode](http://ckeditor.com/addon/bbcode) mode. +* [#10890](http://dev.ckeditor.com/ticket/10890): Fixed: Error thrown when pressing the *Delete* key in a list item. +* [#10055](http://dev.ckeditor.com/ticket/10055): [IE8-10] Fixed: *Delete* pressed on a selected image causes the browser to go back. +* [#11183](http://dev.ckeditor.com/ticket/11183): Fixed: Inserting a horizontal rule or a table in multiple row selection causes a browser crash. Additionally, the [`editor.insertElement()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-insertElement) method does not insert the element into every range of a selection any more. +* [#11042](http://dev.ckeditor.com/ticket/11042): Fixed: Selection made on an element containing a non-editable element was not auto faked. +* [#11125](http://dev.ckeditor.com/ticket/11125): Fixed: Keyboard navigation through menu and drop-down items will now cycle. +* [#11011](http://dev.ckeditor.com/ticket/11011): Fixed: The [`editor.applyStyle()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-applyStyle) method removes attributes from nested elements. +* [#11179](http://dev.ckeditor.com/ticket/11179): Fixed: [`editor.destroy()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-destroy) does not cleanup content generated by the [Table Resize](http://ckeditor.com/addon/tableresize) plugin for inline editors. +* [#11237](http://dev.ckeditor.com/ticket/11237): Fixed: Table border attribute value is deleted when pasting content from Microsoft Word. +* [#11250](http://dev.ckeditor.com/ticket/11250): Fixed: HTML entities inside the `");return""+encodeURIComponent(a)+""})}function r(a){return a.replace(I,function(a,b){return decodeURIComponent(b)})} +function o(a){return a.replace(/<\!--(?!{cke_protected})[\s\S]+?--\>/g,function(a){return"<\!--"+l+"{C}"+encodeURIComponent(a).replace(/--/g,"%2D%2D")+"--\>"})}function u(a){return a.replace(/<\!--\{cke_protected\}\{C\}([\s\S]+?)--\>/g,function(a,b){return decodeURIComponent(b)})}function f(a,b){var c=b._.dataStore;return a.replace(/<\!--\{cke_protected\}([\s\S]+?)--\>/g,function(a,b){return decodeURIComponent(b)}).replace(/\{cke_protected_(\d+)\}/g,function(a,b){return c&&c[b]||""})}function s(a, +b){for(var c=[],d=b.config.protectedSource,e=b._.dataStore||(b._.dataStore={id:1}),f=/<\!--\{cke_temp(comment)?\}(\d*?)--\>/g,d=[//gi,//gi].concat(d),a=a.replace(/<\!--[\s\S]*?--\>/g,function(a){return"<\!--{cke_tempcomment}"+(c.push(a)-1)+"--\>"}),k=0;k"});a=a.replace(f,function(a,b,d){return"<\!--"+ +l+(b?"{C}":"")+encodeURIComponent(c[d]).replace(/--/g,"%2D%2D")+"--\>"});return a.replace(/(['"]).*?\1/g,function(a){return a.replace(/<\!--\{cke_protected\}([\s\S]+?)--\>/g,function(a,b){e[e.id]=decodeURIComponent(b);return"{cke_protected_"+e.id++ +"}"})})}CKEDITOR.htmlDataProcessor=function(b){var c,d,k=this;this.editor=b;this.dataFilter=c=new CKEDITOR.htmlParser.filter;this.htmlFilter=d=new CKEDITOR.htmlParser.filter;this.writer=new CKEDITOR.htmlParser.basicWriter;c.addRules(z);c.addRules(t,{applyToAll:true}); +c.addRules(a(b,"data"),{applyToAll:true});d.addRules(J);d.addRules(H,{applyToAll:true});d.addRules(a(b,"html"),{applyToAll:true});b.on("toHtml",function(a){var a=a.data,c=a.dataValue,c=s(c,b),c=n(c,O),c=i(c),c=n(c,C),c=c.replace(v,"$1cke:$2"),c=c.replace(G,""),c=CKEDITOR.env.opera?c:c.replace(/(]*>)(\r\n|\n)/g,"$1$2$2"),d=a.context||b.editable().getName(),f;if(CKEDITOR.env.ie&&CKEDITOR.env.version<9&&d=="pre"){d="div";c="
"+c+"
";f=1}d=b.document.createElement(d); +d.setHtml("a"+c);c=d.getHtml().substr(1);c=c.replace(RegExp(" data-cke-"+CKEDITOR.rnd+"-","ig")," ");f&&(c=c.replace(/^
|<\/pre>$/gi,""));c=c.replace(x,"$1$2");c=r(c);c=u(c);a.dataValue=CKEDITOR.htmlParser.fragment.fromHtml(c,a.context,a.fixForBody===false?false:e(a.enterMode,b.config.autoParagraph))},null,null,5);b.on("toHtml",function(a){a.data.filter.applyTo(a.data.dataValue,true,a.data.dontFilter,a.data.enterMode)&&b.fire("dataFiltered")},null,null,6);b.on("toHtml",function(a){a.data.dataValue.filterChildren(k.dataFilter,
+true)},null,null,10);b.on("toHtml",function(a){var a=a.data,b=a.dataValue,c=new CKEDITOR.htmlParser.basicWriter;b.writeChildrenHtml(c);b=c.getHtml(true);a.dataValue=o(b)},null,null,15);b.on("toDataFormat",function(a){var c=a.data.dataValue;a.data.enterMode!=CKEDITOR.ENTER_BR&&(c=c.replace(/^
/i,""));a.data.dataValue=CKEDITOR.htmlParser.fragment.fromHtml(c,a.data.context,e(a.data.enterMode,b.config.autoParagraph))},null,null,5);b.on("toDataFormat",function(a){a.data.dataValue.filterChildren(k.htmlFilter, +true)},null,null,10);b.on("toDataFormat",function(a){a.data.filter.applyTo(a.data.dataValue,false,true)},null,null,11);b.on("toDataFormat",function(a){var c=a.data.dataValue,d=k.writer;d.reset();c.writeChildrenHtml(d);c=d.getHtml(true);c=u(c);c=f(c,b);a.data.dataValue=c},null,null,15)};CKEDITOR.htmlDataProcessor.prototype={toHtml:function(a,b,c,d){var e=this.editor,f,k,l;if(b&&typeof b=="object"){f=b.context;c=b.fixForBody;d=b.dontFilter;k=b.filter;l=b.enterMode}else f=b;!f&&f!==null&&(f=e.editable().getName()); +return e.fire("toHtml",{dataValue:a,context:f,fixForBody:c,dontFilter:d,filter:k||e.filter,enterMode:l||e.enterMode}).dataValue},toDataFormat:function(a,b){var c,d,e;if(b){c=b.context;d=b.filter;e=b.enterMode}!c&&c!==null&&(c=this.editor.editable().getName());return this.editor.fire("toDataFormat",{dataValue:a,filter:d||this.editor.filter,context:c,enterMode:e||this.editor.enterMode}).dataValue}};var y=/(?: |\xa0)$/,l="{cke_protected}",p=CKEDITOR.dtd,k=["caption","colgroup","col","thead","tfoot", +"tbody"],q=CKEDITOR.tools.extend({},p.$blockLimit,p.$block),z={elements:{input:m,textarea:m}},t={attributeNames:[[/^on/,"data-cke-pa-on"],[/^data-cke-expando$/,""]]},J={elements:{embed:function(a){var b=a.parent;if(b&&b.name=="object"){var c=b.attributes.width,b=b.attributes.height;if(c)a.attributes.width=c;if(b)a.attributes.height=b}},a:function(a){if(!a.children.length&&!a.attributes.name&&!a.attributes["data-cke-saved-name"])return false}}},H={elementNames:[[/^cke:/,""],[/^\?xml:namespace$/,""]], +attributeNames:[[/^data-cke-(saved|pa)-/,""],[/^data-cke-.*/,""],["hidefocus",""]],elements:{$:function(a){var b=a.attributes;if(b){if(b["data-cke-temp"])return false;for(var c=["name","href","src"],d,e=0;e-1&&d>-1&&c!=d)){c=a.parent?a.getIndex(): +-1;d=b.parent?b.getIndex():-1}return c>d?1:-1})},param:function(a){a.children=[];a.isEmpty=true;return a},span:function(a){a.attributes["class"]=="Apple-style-span"&&delete a.name},html:function(a){delete a.attributes.contenteditable;delete a.attributes["class"]},body:function(a){delete a.attributes.spellcheck;delete a.attributes.contenteditable},style:function(a){var b=a.children[0];if(b&&b.value)b.value=CKEDITOR.tools.trim(b.value);if(!a.attributes.type)a.attributes.type="text/css"},title:function(a){var b= +a.children[0];!b&&h(a,b=new CKEDITOR.htmlParser.text);b.value=a.attributes["data-cke-title"]||""},input:j,textarea:j},attributes:{"class":function(a){return CKEDITOR.tools.ltrim(a.replace(/(?:^|\s+)cke_[^\s]*/g,""))||false}}};if(CKEDITOR.env.ie)H.attributes.style=function(a){return a.replace(/(^|;)([^\:]+)/g,function(a){return a.toLowerCase()})};var w=/<(a|area|img|input|source)\b([^>]*)>/gi,K=/\s(on\w+|href|src|name)\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|(?:[^ "'>]+))/gi,C=/(?:])[^>]*>[\s\S]*?<\/style>)|(?:<(:?link|meta|base)[^>]*>)/gi, +O=/(])[^>]*>)([\s\S]*?)(?:<\/textarea>)/gi,I=/([^<]*)<\/cke:encoded>/gi,v=/(<\/?)((?:object|embed|param|html|body|head|title)[^>]*>)/gi,x=/(<\/?)cke:((?:html|body|head|title)[^>]*>)/gi,G=/]*?)\/?>(?!\s*<\/cke:\1)/gi})();"use strict"; +CKEDITOR.htmlParser.element=function(a,e){this.name=a;this.attributes=e||{};this.children=[];var b=a||"",c=b.match(/^cke:(.*)/);c&&(b=c[1]);b=!(!CKEDITOR.dtd.$nonBodyContent[b]&&!CKEDITOR.dtd.$block[b]&&!CKEDITOR.dtd.$listItem[b]&&!CKEDITOR.dtd.$tableContent[b]&&!(CKEDITOR.dtd.$nonEditable[b]||b=="br"));this.isEmpty=!!CKEDITOR.dtd.$empty[a];this.isUnknown=!CKEDITOR.dtd[a];this._={isBlockLike:b,hasInlineStarted:this.isEmpty||!b}}; +CKEDITOR.htmlParser.cssStyle=function(a){var e={};((a instanceof CKEDITOR.htmlParser.element?a.attributes.style:a)||"").replace(/"/g,'"').replace(/\s*([^ :;]+)\s*:\s*([^;]+)\s*(?=;|$)/g,function(a,c,d){c=="font-family"&&(d=d.replace(/["']/g,""));e[c.toLowerCase()]=d});return{rules:e,populate:function(a){var c=this.toString();if(c)a instanceof CKEDITOR.dom.element?a.setAttribute("style",c):a instanceof CKEDITOR.htmlParser.element?a.attributes.style=c:a.style=c},toString:function(){var a=[],c; +for(c in e)e[c]&&a.push(c,":",e[c],";");return a.join("")}}}; +(function(){function a(a){return function(b){return b.type==CKEDITOR.NODE_ELEMENT&&(typeof a=="string"?b.name==a:b.name in a)}}var e=function(a,b){a=a[0];b=b[0];return ab?1:0},b=CKEDITOR.htmlParser.fragment.prototype;CKEDITOR.htmlParser.element.prototype=CKEDITOR.tools.extend(new CKEDITOR.htmlParser.node,{type:CKEDITOR.NODE_ELEMENT,add:b.add,clone:function(){return new CKEDITOR.htmlParser.element(this.name,this.attributes)},filter:function(a,b){var e=this,h,m,b=e.getFilterContext(b);if(b.off)return true; +if(!e.parent)a.onRoot(b,e);for(;;){h=e.name;if(!(m=a.onElementName(b,h))){this.remove();return false}e.name=m;if(!(e=a.onElement(b,e))){this.remove();return false}if(e!==this){this.replaceWith(e);return false}if(e.name==h)break;if(e.type!=CKEDITOR.NODE_ELEMENT){this.replaceWith(e);return false}if(!e.name){this.replaceWithChildren();return false}}h=e.attributes;var j,i;for(j in h){i=j;for(m=h[j];;)if(i=a.onAttributeName(b,j))if(i!=j){delete h[j];j=i}else break;else{delete h[j];break}i&&((m=a.onAttribute(b, +e,i,m))===false?delete h[i]:h[i]=m)}e.isEmpty||this.filterChildren(a,false,b);return true},filterChildren:b.filterChildren,writeHtml:function(a,b){b&&this.filter(b);var g=this.name,h=[],m=this.attributes,j,i;a.openTag(g,m);for(j in m)h.push([j,m[j]]);a.sortAttributes&&h.sort(e);j=0;for(i=h.length;j0)this.children[a-1].next=null;this.parent.add(e,this.getIndex()+1);return e},removeClass:function(a){var b=this.attributes["class"];if(b)(b=CKEDITOR.tools.trim(b.replace(RegExp("(?:\\s+|^)"+a+ +"(?:\\s+|$)")," ")))?this.attributes["class"]=b:delete this.attributes["class"]},hasClass:function(a){var b=this.attributes["class"];return!b?false:RegExp("(?:^|\\s)"+a+"(?=\\s|$)").test(b)},getFilterContext:function(a){var b=[];a||(a={off:false,nonEditable:false,nestedEditable:false});!a.off&&this.attributes["data-cke-processor"]=="off"&&b.push("off",true);!a.nonEditable&&this.attributes.contenteditable=="false"?b.push("nonEditable",true):!a.nestedEditable&&this.attributes.contenteditable=="true"&& +b.push("nestedEditable",true);if(b.length)for(var a=CKEDITOR.tools.copy(a),e=0;e'+c.getValue()+"
",CKEDITOR.document); +a.insertAfter(c);c.hide();c.$.form&&b._attachToForm()}else b.setData(a.getHtml(),null,true);b.on("loaded",function(){b.fire("uiReady");b.editable(a);b.container=a;b.setData(b.getData(1));b.resetDirty();b.fire("contentDom");b.mode="wysiwyg";b.fire("mode");b.status="ready";b.fireOnce("instanceReady");CKEDITOR.fire("instanceReady",null,b)},null,null,1E4);b.on("destroy",function(){if(c){b.container.clearCustomData();b.container.remove();c.show()}b.element.clearCustomData();delete b.element});return b}; +CKEDITOR.inlineAll=function(){var a,e,b;for(b in CKEDITOR.dtd.$editable)for(var c=CKEDITOR.document.getElementsByTag(b),d=0,g=c.count();d{voiceLabel}<{outerEl} class="cke_inner cke_reset" role="presentation">{topHtml}<{outerEl} id="{contentId}" class="cke_contents cke_reset" role="presentation">{bottomHtml}')); +b=CKEDITOR.dom.element.createFromHtml(c.output({id:a.id,name:b,langDir:a.lang.dir,langCode:a.langCode,voiceLabel:[a.lang.editor,a.name].join(", "),topHtml:j?''+j+"":"",contentId:a.ui.spaceId("contents"),bottomHtml:i?''+i+"":"",outerEl:CKEDITOR.env.ie?"span":"div"}));if(m==CKEDITOR.ELEMENT_MODE_REPLACE){e.hide(); +b.insertAfter(e)}else e.append(b);a.container=b;j&&a.ui.space("top").unselectable();i&&a.ui.space("bottom").unselectable();e=a.config.width;m=a.config.height;e&&b.setStyle("width",CKEDITOR.tools.cssLength(e));m&&a.ui.space("contents").setStyle("height",CKEDITOR.tools.cssLength(m));b.disableContextMenu();CKEDITOR.env.webkit&&b.on("focus",function(){a.focus()});a.fireOnce("uiReady")}CKEDITOR.replace=function(b,c){return a(b,c,null,CKEDITOR.ELEMENT_MODE_REPLACE)};CKEDITOR.appendTo=function(b,c,e){return a(b, +c,e,CKEDITOR.ELEMENT_MODE_APPENDTO)};CKEDITOR.replaceAll=function(){for(var a=document.getElementsByTagName("textarea"),b=0;b",g="",a=k+a.replace(d,function(){return g+k})+g}a=a.replace(/\n/g,"
");b||(a=a.replace(RegExp("
(?=)"),function(a){return e.repeat(a,2)}));a=a.replace(/^ | $/g," ");a=a.replace(/(>|\s) /g,function(a,b){return b+" "}).replace(/ (?=<)/g," ");o(this,"text",a)},insertElement:function(a,b){b?this.insertElementIntoRange(a,b):this.insertElementIntoSelection(a)},insertElementIntoRange:function(a,b){var c=this.editor,e=c.config.enterMode,d=a.getName(), +k=CKEDITOR.dtd.$block[d];if(b.checkReadOnly())return false;b.deleteContents(1);b.startContainer.type==CKEDITOR.NODE_ELEMENT&&b.startContainer.is({tr:1,table:1,tbody:1,thead:1,tfoot:1})&&u(b);var g,h;if(k)for(;(g=b.getCommonAncestor(0,1))&&(h=CKEDITOR.dtd[g.getName()])&&(!h||!h[d]);)if(g.getName()in CKEDITOR.dtd.span)b.splitElement(g);else if(b.checkStartOfBlock()&&b.checkEndOfBlock()){b.setStartBefore(g);b.collapse(true);g.remove()}else b.splitBlock(e==CKEDITOR.ENTER_DIV?"div":"p",c.editable());b.insertNode(a); +return true},insertElementIntoSelection:function(a){var b=this.editor,e=b.activeEnterMode,b=b.getSelection(),d=b.getRanges()[0],g=a.getName(),g=CKEDITOR.dtd.$block[g];h(this);if(this.insertElementIntoRange(a,d)){d.moveToPosition(a,CKEDITOR.POSITION_AFTER_END);if(g)if((g=a.getNext(function(a){return c(a)&&!j(a)}))&&g.type==CKEDITOR.NODE_ELEMENT&&g.is(CKEDITOR.dtd.$block))g.getDtd()["#"]?d.moveToElementEditStart(g):d.moveToElementEditEnd(a);else if(!g&&e!=CKEDITOR.ENTER_BR){g=d.fixBlock(true,e==CKEDITOR.ENTER_DIV? +"div":"p");d.moveToElementEditStart(g)}}b.selectRanges([d]);m(this,CKEDITOR.env.opera)},setData:function(a,b){b||(a=this.editor.dataProcessor.toHtml(a));this.setHtml(a);this.editor.fire("dataReady")},getData:function(a){var b=this.getHtml();a||(b=this.editor.dataProcessor.toDataFormat(b));return b},setReadOnly:function(a){this.setAttribute("contenteditable",!a)},detach:function(){this.removeClass("cke_editable");var a=this.editor;this._.detach();delete a.document;delete a.window},isInline:function(){return this.getDocument().equals(CKEDITOR.document)}, +setup:function(){var a=this.editor;this.attachListener(a,"beforeGetData",function(){var b=this.getData();this.is("textarea")||a.config.ignoreEmptyParagraph!==false&&(b=b.replace(i,function(a,b){return b}));a.setData(b,null,1)},this);this.attachListener(a,"getSnapshot",function(a){a.data=this.getData(1)},this);this.attachListener(a,"afterSetData",function(){this.setData(a.getData(1))},this);this.attachListener(a,"loadSnapshot",function(a){this.setData(a.data,1)},this);this.attachListener(a,"beforeFocus", +function(){var b=a.getSelection();(b=b&&b.getNative())&&b.type=="Control"||this.focus()},this);this.attachListener(a,"insertHtml",function(a){this.insertHtml(a.data.dataValue,a.data.mode)},this);this.attachListener(a,"insertElement",function(a){this.insertElement(a.data)},this);this.attachListener(a,"insertText",function(a){this.insertText(a.data)},this);this.setReadOnly(a.readOnly);this.attachClass("cke_editable");this.attachClass(a.elementMode==CKEDITOR.ELEMENT_MODE_INLINE?"cke_editable_inline": +a.elementMode==CKEDITOR.ELEMENT_MODE_REPLACE||a.elementMode==CKEDITOR.ELEMENT_MODE_APPENDTO?"cke_editable_themed":"");this.attachClass("cke_contents_"+a.config.contentsLangDirection);a.keystrokeHandler.blockedKeystrokes[8]=+a.readOnly;a.keystrokeHandler.attach(this);this.on("blur",function(a){CKEDITOR.env.opera&&CKEDITOR.document.getActive().equals(this.isInline()?this:this.getWindow().getFrame())?a.cancel():this.hasFocus=false},null,null,-1);this.on("focus",function(){this.hasFocus=true},null,null, +-1);a.focusManager.add(this);if(this.equals(CKEDITOR.document.getActive())){this.hasFocus=true;a.once("contentDom",function(){a.focusManager.focus()})}this.isInline()&&this.changeAttr("tabindex",a.tabIndex);if(!this.is("textarea")){a.document=this.getDocument();a.window=this.getWindow();var e=a.document;this.changeAttr("spellcheck",!a.config.disableNativeSpellChecker);var d=a.config.contentsLangDirection;this.getDirection(1)!=d&&this.changeAttr("dir",d);var l=CKEDITOR.getCss();if(l){d=e.getHead(); +if(!d.getCustomData("stylesheet")){l=e.appendStyleText(l);l=new CKEDITOR.dom.element(l.ownerNode||l.owningElement);d.setCustomData("stylesheet",l);l.data("cke-temp",1)}}d=e.getCustomData("stylesheet_ref")||0;e.setCustomData("stylesheet_ref",d+1);this.setCustomData("cke_includeReadonly",!a.config.disableReadonlyStyling);this.attachListener(this,"click",function(a){var a=a.data,b=(new CKEDITOR.dom.elementPath(a.getTarget(),this)).contains("a");b&&(a.$.button!=2&&b.isReadOnly())&&a.preventDefault()}); +var p={8:1,46:1};this.attachListener(a,"key",function(b){if(a.readOnly)return true;var c=b.data.keyCode,e;if(c in p){var b=a.getSelection(),d,l=b.getRanges()[0],h=l.startPath(),i,j,m,c=c==8;if(CKEDITOR.env.ie&&CKEDITOR.env.version<11&&(d=b.getSelectedElement())||(d=g(b))){a.fire("saveSnapshot");l.moveToPosition(d,CKEDITOR.POSITION_BEFORE_START);d.remove();l.select();a.fire("saveSnapshot");e=1}else if(l.collapsed)if((i=h.block)&&(m=i[c?"getPrevious":"getNext"](n))&&m.type==CKEDITOR.NODE_ELEMENT&&m.is("table")&& +l[c?"checkStartOfBlock":"checkEndOfBlock"]()){a.fire("saveSnapshot");l[c?"checkEndOfBlock":"checkStartOfBlock"]()&&i.remove();l["moveToElementEdit"+(c?"End":"Start")](m);l.select();a.fire("saveSnapshot");e=1}else if(h.blockLimit&&h.blockLimit.is("td")&&(j=h.blockLimit.getAscendant("table"))&&l.checkBoundaryOfElement(j,c?CKEDITOR.START:CKEDITOR.END)&&(m=j[c?"getPrevious":"getNext"](n))){a.fire("saveSnapshot");l["moveToElementEdit"+(c?"End":"Start")](m);l.checkStartOfBlock()&&l.checkEndOfBlock()?m.remove(): +l.select();a.fire("saveSnapshot");e=1}else if((j=h.contains(["td","th","caption"]))&&l.checkBoundaryOfElement(j,c?CKEDITOR.START:CKEDITOR.END))e=1}return!e});a.blockless&&(CKEDITOR.env.ie&&CKEDITOR.env.needsBrFiller)&&this.attachListener(this,"keyup",function(b){if(b.data.getKeystroke()in p&&!this.getFirst(c)){this.appendBogus();b=a.createRange();b.moveToPosition(this,CKEDITOR.POSITION_AFTER_START);b.select()}});this.attachListener(this,"dblclick",function(b){if(a.readOnly)return false;b={element:b.data.getTarget()}; +a.fire("doubleclick",b)});CKEDITOR.env.ie&&this.attachListener(this,"click",b);!CKEDITOR.env.ie&&!CKEDITOR.env.opera&&this.attachListener(this,"mousedown",function(b){var c=b.data.getTarget();if(c.is("img","hr","input","textarea","select")){a.getSelection().selectElement(c);c.is("input","textarea","select")&&b.data.preventDefault()}});CKEDITOR.env.gecko&&this.attachListener(this,"mouseup",function(b){if(b.data.$.button==2){b=b.data.getTarget();if(!b.getOuterHtml().replace(i,"")){var c=a.createRange(); +c.moveToElementEditStart(b);c.select(true)}}});if(CKEDITOR.env.webkit){this.attachListener(this,"click",function(a){a.data.getTarget().is("input","select")&&a.data.preventDefault()});this.attachListener(this,"mouseup",function(a){a.data.getTarget().is("input","textarea")&&a.data.preventDefault()})}}}},_:{detach:function(){this.editor.setData(this.editor.getData(),0,1);this.clearListeners();this.restoreAttrs();var a;if(a=this.removeCustomData("classes"))for(;a.length;)this.removeClass(a.pop());a=this.getDocument(); +var b=a.getHead();if(b.getCustomData("stylesheet")){var c=a.getCustomData("stylesheet_ref");if(--c)a.setCustomData("stylesheet_ref",c);else{a.removeCustomData("stylesheet_ref");b.removeCustomData("stylesheet").remove()}}this.editor.fire("contentDomUnload");delete this.editor}}});CKEDITOR.editor.prototype.editable=function(a){var b=this._.editable;if(b&&a)return 0;if(arguments.length)b=this._.editable=a?a instanceof CKEDITOR.editable?a:new CKEDITOR.editable(this,a):(b&&b.detach(),null);return b};var j= +CKEDITOR.dom.walker.bogus(),i=/(^|]*>)\s*<(p|div|address|h\d|center|pre)[^>]*>\s*(?:]*>| |\u00A0| )?\s*(:?<\/\2>)?\s*(?=$|<\/body>)/gi,n=CKEDITOR.dom.walker.whitespaces(true),r=CKEDITOR.dom.walker.bookmark(false,true);CKEDITOR.on("instanceLoaded",function(b){var c=b.editor;c.on("insertElement",function(a){a=a.data;if(a.type==CKEDITOR.NODE_ELEMENT&&(a.is("input")||a.is("textarea"))){a.getAttribute("contentEditable")!="false"&&a.data("cke-editable",a.hasAttribute("contenteditable")? +"true":"1");a.setAttribute("contentEditable",false)}});c.on("selectionChange",function(b){if(!c.readOnly){var e=c.getSelection();if(e&&!e.isLocked){e=c.checkDirty();c.fire("lockSnapshot");a(b);c.fire("unlockSnapshot");!e&&c.resetDirty()}}})});CKEDITOR.on("instanceCreated",function(a){var b=a.editor;b.on("mode",function(){var a=b.editable();if(a&&a.isInline()){var c=b.title;a.changeAttr("role","textbox");a.changeAttr("aria-label",c);c&&a.changeAttr("title",c);if(c=this.ui.space(this.elementMode==CKEDITOR.ELEMENT_MODE_INLINE? +"top":"contents")){var e=CKEDITOR.tools.getNextId(),d=CKEDITOR.dom.element.createFromHtml(''+this.lang.common.editorHelp+"");c.append(d);a.changeAttr("aria-describedby",e)}}})});CKEDITOR.addCss(".cke_editable{cursor:text}.cke_editable img,.cke_editable input,.cke_editable textarea{cursor:default}");var o=function(){function a(b){return b.type==CKEDITOR.NODE_ELEMENT}function b(c,e){var d,k,l,g,p=[],t=e.range.startContainer;d=e.range.startPath();for(var t= +h[t.getName()],i=0,j=c.getChildren(),m=j.count(),n=-1,J=-1,r=0,o=d.contains(h.$list);i-1)p[n].firstNotAllowed=1;if(J>-1)p[J].lastNotAllowed=1;return p}function e(b,c){var d=[],k=b.getChildren(),l=k.count(),g,p=0,i=h[c],t=!b.is(h.$inline)||b.is("br");for(t&&d.push(" ");p ",o.document);o.insertNode(x);o.setStartAfter(x)}G=new CKEDITOR.dom.elementPath(o.startContainer);n.endPath=B=new CKEDITOR.dom.elementPath(o.endContainer);if(!o.collapsed){var v=B.block||B.blockLimit,V=o.getCommonAncestor();v&&(!v.equals(V)&&!v.contains(V)&&o.checkEndOfBlock())&&n.zombies.push(v);o.deleteContents()}for(;(D=a(o.startContainer)&& +o.startContainer.getChild(o.startOffset-1))&&a(D)&&D.isBlockBoundary()&&G.contains(D);)o.moveToPosition(D,CKEDITOR.POSITION_BEFORE_END);g(o,n.blockLimit,G,B);if(x){o.setEndBefore(x);o.collapse();x.remove()}x=o.startPath();if(v=x.contains(d,false,1)){o.splitElement(v);n.inlineStylesRoot=v;n.inlineStylesPeak=x.lastElement}x=o.createBookmark();(v=x.startNode.getPrevious(c))&&a(v)&&d(v)&&u.push(v);(v=x.startNode.getNext(c))&&a(v)&&d(v)&&u.push(v);for(v=x.startNode;(v=v.getParent())&&d(v);)u.push(v);o.moveToBookmark(x); +if(x=r){x=n.range;if(n.type=="text"&&n.inlineStylesRoot){D=n.inlineStylesPeak;o=D.getDocument().createText("{cke-peak}");for(u=n.inlineStylesRoot.getParent();!D.equals(u);){o=o.appendTo(D.clone());D=D.getParent()}r=o.getOuterHtml().split("{cke-peak}").join(r)}D=n.blockLimit.getName();if(/^\s+|\s+$/.test(r)&&"span"in CKEDITOR.dtd[D])var P=' ',r=P+r+P;r=n.editor.dataProcessor.toHtml(r,{context:null,fixForBody:false,dontFilter:n.dontFilter,filter:n.editor.activeFilter, +enterMode:n.editor.activeEnterMode});D=x.document.createElement("body");D.setHtml(r);if(P){D.getFirst().remove();D.getLast().remove()}if((P=x.startPath().block)&&!(P.getChildCount()==1&&P.getBogus()))a:{var E;if(D.getChildCount()==1&&a(E=D.getFirst())&&E.is(t)){P=E.getElementsByTag("*");x=0;for(u=P.count();x0;else{A=E.startPath();if(!B.isBlock&&n.editor.config.autoParagraph!==false&&(n.editor.activeEnterMode!=CKEDITOR.ENTER_BR&&n.editor.editable().equals(A.blockLimit)&&!A.block)&&(Q=n.editor.activeEnterMode!=CKEDITOR.ENTER_BR&&n.editor.config.autoParagraph!==false?n.editor.activeEnterMode==CKEDITOR.ENTER_DIV?"div":"p":false)){Q=P.createElement(Q);Q.appendBogus();E.insertNode(Q);CKEDITOR.env.needsBrFiller&&(L=Q.getBogus())&&L.remove();E.moveToPosition(Q, +CKEDITOR.POSITION_BEFORE_END)}if((A=E.startPath().block)&&!A.equals(F)){if(L=A.getBogus()){L.remove();D.push(A)}F=A}B.firstNotAllowed&&(o=1);if(o&&B.isElement){A=E.startContainer;for(M=null;A&&!h[A.getName()][B.name];){if(A.equals(r)){A=null;break}M=A;A=A.getParent()}if(A){if(M){S=E.splitElement(M);n.zombies.push(S);n.zombies.push(M)}}else{M=r.getName();T=!x;A=x==G.length-1;M=e(B.node,M);for(var N=[],W=M.length,Z=0,aa=void 0,ba=0,ca=-1;Z0;){e=a.getItem(b);if(!CKEDITOR.tools.trim(e.getHtml())){e.appendBogus();CKEDITOR.env.ie&&(CKEDITOR.env.version<9&&e.getChildCount())&&e.getFirst().remove()}}}return function(e){var d= +e.startContainer,k=d.getAscendant("table",1),g=false;c(k.getElementsByTag("td"));c(k.getElementsByTag("th"));k=e.clone();k.setStart(d,0);k=a(k).lastBackward();if(!k){k=e.clone();k.setEndAt(d,CKEDITOR.POSITION_BEFORE_END);k=a(k).lastForward();g=true}k||(k=d);if(k.is("table")){e.setStartAt(k,CKEDITOR.POSITION_BEFORE_START);e.collapse(true);k.remove()}else{k.is({tbody:1,thead:1,tfoot:1})&&(k=b(k,"tr",g));k.is("tr")&&(k=b(k,k.getParent().is("thead")?"th":"td",g));(d=k.getBogus())&&d.remove();e.moveToPosition(k, +g?CKEDITOR.POSITION_AFTER_START:CKEDITOR.POSITION_BEFORE_END)}}}()})(); +(function(){function a(){var a=this._.fakeSelection,b;if(a){b=this.getSelection(1);if(!b||!b.isHidden()){a.reset();a=0}}if(!a){a=b||this.getSelection(1);if(!a||a.getType()==CKEDITOR.SELECTION_NONE)return}this.fire("selectionCheck",a);b=this.elementPath();if(!b.compare(this._.selectionPreviousPath)){if(CKEDITOR.env.webkit)this._.previousActive=this.document.getActive();this._.selectionPreviousPath=b;this.fire("selectionChange",{selection:a,path:b})}}function e(){r=true;if(!n){b.call(this);n=CKEDITOR.tools.setTimeout(b, +200,this)}}function b(){n=null;if(r){CKEDITOR.tools.setTimeout(a,0,this);r=false}}function c(a){function b(c,e){return!c||c.type==CKEDITOR.NODE_TEXT?false:a.clone()["moveToElementEdit"+(e?"End":"Start")](c)}if(!(a.root instanceof CKEDITOR.editable))return false;var c=a.startContainer,e=a.getPreviousNode(o,null,c),d=a.getNextNode(o,null,c);return b(e)||b(d,1)||!e&&!d&&!(c.type==CKEDITOR.NODE_ELEMENT&&c.isBlockBoundary()&&c.getBogus())?true:false}function d(a){return a.getCustomData("cke-fillingChar")} +function g(a,b){var c=a&&a.removeCustomData("cke-fillingChar");if(c){if(b!==false){var e,d=a.getDocument().getSelection().getNative(),f=d&&d.type!="None"&&d.getRangeAt(0);if(c.getLength()>1&&f&&f.intersectsNode(c.$)){e=[d.anchorOffset,d.focusOffset];f=d.focusNode==c.$&&d.focusOffset>0;d.anchorNode==c.$&&d.anchorOffset>0&&e[0]--;f&&e[1]--;var g;f=d;if(!f.isCollapsed){g=f.getRangeAt(0);g.setStart(f.anchorNode,f.anchorOffset);g.setEnd(f.focusNode,f.focusOffset);g=g.collapsed}g&&e.unshift(e.pop())}}c.setText(h(c.getText())); +if(e){c=d.getRangeAt(0);c.setStart(c.startContainer,e[0]);c.setEnd(c.startContainer,e[1]);d.removeAllRanges();d.addRange(c)}}}function h(a){return a.replace(/\u200B( )?/g,function(a){return a[1]?" ":""})}function m(a,b,c){var e=a.on("focus",function(a){a.cancel()},null,null,-100);if(CKEDITOR.env.ie)var d=a.getDocument().on("selectionchange",function(a){a.cancel()},null,null,-100);else{var f=new CKEDITOR.dom.range(a);f.moveToElementEditStart(a);var g=a.getDocument().$.createRange();g.setStart(f.startContainer.$, +f.startOffset);g.collapse(1);b.removeAllRanges();b.addRange(g)}c&&a.focus();e.removeListener();d&&d.removeListener()}function j(a){var b=CKEDITOR.dom.element.createFromHtml('
 
',a.document);a.fire("lockSnapshot");a.editable().append(b);var c=a.getSelection(),e=a.createRange(),d=c.root.on("selectionchange",function(a){a.cancel()},null,null,0);e.setStartAt(b,CKEDITOR.POSITION_AFTER_START); +e.setEndAt(b,CKEDITOR.POSITION_BEFORE_END);c.selectRanges([e]);d.removeListener();a.fire("unlockSnapshot");a._.hiddenSelectionContainer=b}function i(a){var b={37:1,39:1,8:1,46:1};return function(c){var e=c.data.getKeystroke();if(b[e]){var d=a.getSelection().getRanges(),f=d[0];if(d.length==1&&f.collapsed)if((e=f[e<38?"getPreviousEditableNode":"getNextEditableNode"]())&&e.type==CKEDITOR.NODE_ELEMENT&&e.getAttribute("contenteditable")=="false"){a.getSelection().fake(e);c.data.preventDefault();c.cancel()}}}} +var n,r,o=CKEDITOR.dom.walker.invisible(1),u=function(){function a(b){return function(a){var c=a.editor.createRange();c.moveToClosestEditablePosition(a.selected,b)&&a.editor.getSelection().selectRanges([c]);return false}}function b(a){return function(b){var c=b.editor,e=c.createRange(),d;if(!(d=e.moveToClosestEditablePosition(b.selected,a)))d=e.moveToClosestEditablePosition(b.selected,!a);d&&c.getSelection().selectRanges([e]);c.fire("saveSnapshot");b.selected.remove();if(!d){e.moveToElementEditablePosition(c.editable()); +c.getSelection().selectRanges([e])}c.fire("saveSnapshot");return false}}var c=a(),e=a(1);return{37:c,38:c,39:e,40:e,8:b(),46:b(1)}}();CKEDITOR.on("instanceCreated",function(b){function c(){var a=d.getSelection();a&&a.removeAllRanges()}var d=b.editor;d.on("contentDom",function(){var b=d.document,c=CKEDITOR.document,l=d.editable(),h=b.getBody(),p=b.getDocumentElement(),j=l.isInline(),n,m;CKEDITOR.env.gecko&&l.attachListener(l,"focus",function(a){a.removeListener();if(n!==0)if((a=d.getSelection().getNative())&& +a.isCollapsed&&a.anchorNode==l.$){a=d.createRange();a.moveToElementEditStart(l);a.select()}},null,null,-2);l.attachListener(l,CKEDITOR.env.webkit?"DOMFocusIn":"focus",function(){n&&CKEDITOR.env.webkit&&(n=d._.previousActive&&d._.previousActive.equals(b.getActive()));d.unlockSelection(n);n=0},null,null,-1);l.attachListener(l,"mousedown",function(){n=0});if(CKEDITOR.env.ie||CKEDITOR.env.opera||j){var o=function(){m=new CKEDITOR.dom.selection(d.getSelection());m.lock()};f?l.attachListener(l,"beforedeactivate", +o,null,null,-1):l.attachListener(d,"selectionCheck",o,null,null,-1);l.attachListener(l,CKEDITOR.env.webkit?"DOMFocusOut":"blur",function(){d.lockSelection(m);n=1},null,null,-1);l.attachListener(l,"mousedown",function(){n=0})}if(CKEDITOR.env.ie&&!j){var r;l.attachListener(l,"mousedown",function(a){if(a.data.$.button==2){a=d.document.getSelection();if(!a||a.getType()==CKEDITOR.SELECTION_NONE)r=d.window.getScrollPosition()}});l.attachListener(l,"mouseup",function(a){if(a.data.$.button==2&&r){d.document.$.documentElement.scrollLeft= +r.x;d.document.$.documentElement.scrollTop=r.y}r=null});if(b.$.compatMode!="BackCompat"){if(CKEDITOR.env.ie7Compat||CKEDITOR.env.ie6Compat)p.on("mousedown",function(a){function b(a){a=a.data.$;if(e){var c=h.$.createTextRange();try{c.moveToPoint(a.x,a.y)}catch(d){}e.setEndPoint(g.compareEndPoints("StartToStart",c)<0?"EndToEnd":"StartToStart",c);e.select()}}function d(){p.removeListener("mousemove",b);c.removeListener("mouseup",d);p.removeListener("mouseup",d);e.select()}a=a.data;if(a.getTarget().is("html")&& +a.$.y7&&CKEDITOR.env.version<11){p.on("mousedown",function(a){if(a.data.getTarget().is("html")){c.on("mouseup",v);p.on("mouseup",v)}});var v=function(){c.removeListener("mouseup",v);p.removeListener("mouseup",v);var a=CKEDITOR.document.$.selection,d=a.createRange();a.type!="None"&&d.parentElement().ownerDocument== +b.$&&d.select()}}}}l.attachListener(l,"selectionchange",a,d);l.attachListener(l,"keyup",e,d);l.attachListener(l,CKEDITOR.env.webkit?"DOMFocusIn":"focus",function(){d.forceNextSelectionCheck();d.selectionChange(1)});if(j?CKEDITOR.env.webkit||CKEDITOR.env.gecko:CKEDITOR.env.opera){var x;l.attachListener(l,"mousedown",function(){x=1});l.attachListener(b.getDocumentElement(),"mouseup",function(){x&&e.call(d);x=0})}else l.attachListener(CKEDITOR.env.ie?l:b.getDocumentElement(),"mouseup",e,d);CKEDITOR.env.webkit&& +l.attachListener(b,"keydown",function(a){switch(a.data.getKey()){case 13:case 33:case 34:case 35:case 36:case 37:case 39:case 8:case 45:case 46:g(l)}},null,null,-1);l.attachListener(l,"keydown",i(d),null,null,-1)});d.on("contentDomUnload",d.forceNextSelectionCheck,d);d.on("dataReady",function(){delete d._.fakeSelection;delete d._.hiddenSelectionContainer;d.selectionChange(1)});d.on("loadSnapshot",function(){var a=d.editable().getLast(function(a){return a.type==CKEDITOR.NODE_ELEMENT});a&&a.hasAttribute("data-cke-hidden-sel")&& +a.remove()},null,null,100);CKEDITOR.env.ie9Compat&&d.on("beforeDestroy",c,null,null,9);CKEDITOR.env.webkit&&d.on("setData",c);d.on("contentDomUnload",function(){d.unlockSelection()});d.on("key",function(a){if(d.mode=="wysiwyg"){var b=d.getSelection();if(b.isFake){var c=u[a.data.keyCode];if(c)return c({editor:d,selected:b.getSelectedElement(),selection:b,keyEvent:a})}}})});CKEDITOR.on("instanceReady",function(a){var b=a.editor;if(CKEDITOR.env.webkit){b.on("selectionChange",function(){var a=b.editable(), +c=d(a);c&&(c.getCustomData("ready")?g(a):c.setCustomData("ready",1))},null,null,-1);b.on("beforeSetMode",function(){g(b.editable())},null,null,-1);var c,e,a=function(){var a=b.editable();if(a)if(a=d(a)){var f=b.document.$.defaultView.getSelection();f.type=="Caret"&&f.anchorNode==a.$&&(e=1);c=a.getText();a.setText(h(c))}},f=function(){var a=b.editable();if(a)if(a=d(a)){a.setText(c);if(e){b.document.$.defaultView.getSelection().setPosition(a.$,a.getLength());e=0}}};b.on("beforeUndoImage",a);b.on("afterUndoImage", +f);b.on("beforeGetData",a,null,null,0);b.on("getData",f)}});CKEDITOR.editor.prototype.selectionChange=function(b){(b?a:e).call(this)};CKEDITOR.editor.prototype.getSelection=function(a){if((this._.savedSelection||this._.fakeSelection)&&!a)return this._.savedSelection||this._.fakeSelection;return(a=this.editable())&&this.mode=="wysiwyg"?new CKEDITOR.dom.selection(a):null};CKEDITOR.editor.prototype.lockSelection=function(a){a=a||this.getSelection(1);if(a.getType()!=CKEDITOR.SELECTION_NONE){!a.isLocked&& +a.lock();this._.savedSelection=a;return true}return false};CKEDITOR.editor.prototype.unlockSelection=function(a){var b=this._.savedSelection;if(b){b.unlock(a);delete this._.savedSelection;return true}return false};CKEDITOR.editor.prototype.forceNextSelectionCheck=function(){delete this._.selectionPreviousPath};CKEDITOR.dom.document.prototype.getSelection=function(){return new CKEDITOR.dom.selection(this)};CKEDITOR.dom.range.prototype.select=function(){var a=this.root instanceof CKEDITOR.editable? +this.root.editor.getSelection():new CKEDITOR.dom.selection(this.root);a.selectRanges([this]);return a};CKEDITOR.SELECTION_NONE=1;CKEDITOR.SELECTION_TEXT=2;CKEDITOR.SELECTION_ELEMENT=3;var f=typeof window.getSelection!="function",s=1;CKEDITOR.dom.selection=function(a){if(a instanceof CKEDITOR.dom.selection)var b=a,a=a.root;var c=a instanceof CKEDITOR.dom.element;this.rev=b?b.rev:s++;this.document=a instanceof CKEDITOR.dom.document?a:a.getDocument();this.root=a=c?a:this.document.getBody();this.isLocked= +0;this._={cache:{}};if(b){CKEDITOR.tools.extend(this._.cache,b._.cache);this.isFake=b.isFake;this.isLocked=b.isLocked;return this}b=f?this.document.$.selection:this.document.getWindow().$.getSelection();if(CKEDITOR.env.webkit)(b.type=="None"&&this.document.getActive().equals(a)||b.type=="Caret"&&b.anchorNode.nodeType==CKEDITOR.NODE_DOCUMENT)&&m(a,b);else if(CKEDITOR.env.gecko)b&&(this.document.getActive().equals(a)&&b.anchorNode&&b.anchorNode.nodeType==CKEDITOR.NODE_DOCUMENT)&&m(a,b,true);else if(CKEDITOR.env.ie){var d; +try{d=this.document.getActive()}catch(e){}if(f)b.type=="None"&&(d&&d.equals(this.document.getDocumentElement()))&&m(a,null,true);else{(b=b&&b.anchorNode)&&(b=new CKEDITOR.dom.node(b));d&&(d.equals(this.document.getDocumentElement())&&b&&(a.equals(b)||a.contains(b)))&&m(a,null,true)}}d=this.getNative();var g,h;if(d)if(d.getRangeAt)g=(h=d.rangeCount&&d.getRangeAt(0))&&new CKEDITOR.dom.node(h.commonAncestorContainer);else{try{h=d.createRange()}catch(i){}g=h&&CKEDITOR.dom.element.get(h.item&&h.item(0)|| +h.parentElement())}if(!g||!(g.type==CKEDITOR.NODE_ELEMENT||g.type==CKEDITOR.NODE_TEXT)||!this.root.equals(g)&&!this.root.contains(g)){this._.cache.type=CKEDITOR.SELECTION_NONE;this._.cache.startElement=null;this._.cache.selectedElement=null;this._.cache.selectedText="";this._.cache.ranges=new CKEDITOR.dom.rangeList}return this};var y={img:1,hr:1,li:1,table:1,tr:1,td:1,th:1,embed:1,object:1,ol:1,ul:1,a:1,input:1,form:1,select:1,textarea:1,button:1,fieldset:1,thead:1,tfoot:1};CKEDITOR.dom.selection.prototype= +{getNative:function(){return this._.cache.nativeSel!==void 0?this._.cache.nativeSel:this._.cache.nativeSel=f?this.document.$.selection:this.document.getWindow().$.getSelection()},getType:f?function(){var a=this._.cache;if(a.type)return a.type;var b=CKEDITOR.SELECTION_NONE;try{var c=this.getNative(),d=c.type;if(d=="Text")b=CKEDITOR.SELECTION_TEXT;if(d=="Control")b=CKEDITOR.SELECTION_ELEMENT;if(c.createRange().parentElement())b=CKEDITOR.SELECTION_TEXT}catch(e){}return a.type=b}:function(){var a=this._.cache; +if(a.type)return a.type;var b=CKEDITOR.SELECTION_TEXT,c=this.getNative();if(!c||!c.rangeCount)b=CKEDITOR.SELECTION_NONE;else if(c.rangeCount==1){var c=c.getRangeAt(0),d=c.startContainer;if(d==c.endContainer&&d.nodeType==1&&c.endOffset-c.startOffset==1&&y[d.childNodes[c.startOffset].nodeName.toLowerCase()])b=CKEDITOR.SELECTION_ELEMENT}return a.type=b},getRanges:function(){var a=f?function(){function a(b){return(new CKEDITOR.dom.node(b)).getIndex()}var b=function(b,c){b=b.duplicate();b.collapse(c); +var d=b.parentElement();if(!d.hasChildNodes())return{container:d,offset:0};for(var e=d.children,f,g,k=b.duplicate(),l=0,h=e.length-1,i=-1,j,n;l<=h;){i=Math.floor((l+h)/2);f=e[i];k.moveToElementText(f);j=k.compareEndPoints("StartToStart",b);if(j>0)h=i-1;else if(j<0)l=i+1;else return{container:d,offset:a(f)}}if(i==-1||i==e.length-1&&j<0){k.moveToElementText(d);k.setEndPoint("StartToStart",b);k=k.text.replace(/(\r\n|\r)/g,"\n").length;e=d.childNodes;if(!k){f=e[e.length-1];return f.nodeType!=CKEDITOR.NODE_TEXT? +{container:d,offset:e.length}:{container:f,offset:f.nodeValue.length}}for(d=e.length;k>0&&d>0;){g=e[--d];if(g.nodeType==CKEDITOR.NODE_TEXT){n=g;k=k-g.nodeValue.length}}return{container:n,offset:-k}}k.collapse(j>0?true:false);k.setEndPoint(j>0?"StartToStart":"EndToStart",b);k=k.text.replace(/(\r\n|\r)/g,"\n").length;if(!k)return{container:d,offset:a(f)+(j>0?0:1)};for(;k>0;)try{g=f[j>0?"previousSibling":"nextSibling"];if(g.nodeType==CKEDITOR.NODE_TEXT){k=k-g.nodeValue.length;n=g}f=g}catch(m){return{container:d, +offset:a(f)}}return{container:n,offset:j>0?-k:n.nodeValue.length+k}};return function(){var a=this.getNative(),c=a&&a.createRange(),d=this.getType();if(!a)return[];if(d==CKEDITOR.SELECTION_TEXT){a=new CKEDITOR.dom.range(this.root);d=b(c,true);a.setStart(new CKEDITOR.dom.node(d.container),d.offset);d=b(c);a.setEnd(new CKEDITOR.dom.node(d.container),d.offset);a.endContainer.getPosition(a.startContainer)&CKEDITOR.POSITION_PRECEDING&&a.endOffset<=a.startContainer.getIndex()&&a.collapse();return[a]}if(d== +CKEDITOR.SELECTION_ELEMENT){for(var d=[],e=0;e=b.getLength()?j.setStartAfter(b):j.setStartBefore(b));g&&g.type==CKEDITOR.NODE_TEXT&&(i?j.setEndAfter(g):j.setEndBefore(g));b=new CKEDITOR.dom.walker(j);b.evaluator=function(a){if(a.type==CKEDITOR.NODE_ELEMENT&&a.isReadOnly()){var b=f.clone();f.setEndBefore(a);f.collapsed&&d.splice(e--,1);if(!(a.getPosition(j.endContainer)&CKEDITOR.POSITION_CONTAINS)){b.setStartAfter(a); +b.collapsed||d.splice(e+1,0,b)}return true}return false};b.next()}}return c.ranges}}(),getStartElement:function(){var a=this._.cache;if(a.startElement!==void 0)return a.startElement;var b;switch(this.getType()){case CKEDITOR.SELECTION_ELEMENT:return this.getSelectedElement();case CKEDITOR.SELECTION_TEXT:var c=this.getRanges()[0];if(c){if(c.collapsed){b=c.startContainer;b.type!=CKEDITOR.NODE_ELEMENT&&(b=b.getParent())}else{for(c.optimize();;){b=c.startContainer;if(c.startOffset==(b.getChildCount?b.getChildCount(): +b.getLength())&&!b.isBlockBoundary())c.setStartAfter(b);else break}b=c.startContainer;if(b.type!=CKEDITOR.NODE_ELEMENT)return b.getParent();b=b.getChild(c.startOffset);if(!b||b.type!=CKEDITOR.NODE_ELEMENT)b=c.startContainer;else for(c=b.getFirst();c&&c.type==CKEDITOR.NODE_ELEMENT;){b=c;c=c.getFirst()}}b=b.$}}return a.startElement=b?new CKEDITOR.dom.element(b):null},getSelectedElement:function(){var a=this._.cache;if(a.selectedElement!==void 0)return a.selectedElement;var b=this,c=CKEDITOR.tools.tryThese(function(){return b.getNative().createRange().item(0)}, +function(){for(var a=b.getRanges()[0].clone(),c,d,e=2;e&&(!(c=a.getEnclosedNode())||!(c.type==CKEDITOR.NODE_ELEMENT&&y[c.getName()]&&(d=c)));e--)a.shrink(CKEDITOR.SHRINK_ELEMENT);return d&&d.$});return a.selectedElement=c?new CKEDITOR.dom.element(c):null},getSelectedText:function(){var a=this._.cache;if(a.selectedText!==void 0)return a.selectedText;var b=this.getNative(),b=f?b.type=="Control"?"":b.createRange().text:b.toString();return a.selectedText=b},lock:function(){this.getRanges();this.getStartElement(); +this.getSelectedElement();this.getSelectedText();this._.cache.nativeSel=null;this.isLocked=1},unlock:function(a){if(this.isLocked){if(a)var b=this.getSelectedElement(),c=!b&&this.getRanges(),d=this.isFake;this.isLocked=0;this.reset();if(a)(a=b||c[0]&&c[0].getCommonAncestor())&&a.getAscendant("body",1)&&(d?this.fake(b):b?this.selectElement(b):this.selectRanges(c))}},reset:function(){this._.cache={};this.isFake=0;var a=this.root.editor;if(a&&a._.fakeSelection&&this.rev==a._.fakeSelection.rev){delete a._.fakeSelection; +var b=a._.hiddenSelectionContainer;if(b){a.fire("lockSnapshot");b.remove();a.fire("unlockSnapshot")}delete a._.hiddenSelectionContainer}this.rev=s++},selectElement:function(a){var b=new CKEDITOR.dom.range(this.root);b.setStartBefore(a);b.setEndAfter(a);this.selectRanges([b])},selectRanges:function(a){var b=this.root.editor,b=b&&b._.hiddenSelectionContainer;this.reset();if(b)for(var b=this.root,d,e=0;e1){i=a[a.length-1];a[0].setEnd(i.endContainer,i.endOffset)}i=a[0];var a=i.collapsed,m,o,r;if((d=i.getEnclosedNode())&&d.type==CKEDITOR.NODE_ELEMENT&&d.getName()in y&&(!d.is("a")||!d.getText()))try{r=d.$.createControlRange();r.addElement(d.$);r.select();return}catch(s){}(i.startContainer.type==CKEDITOR.NODE_ELEMENT&&i.startContainer.getName()in b||i.endContainer.type==CKEDITOR.NODE_ELEMENT&&i.endContainer.getName()in b)&&i.shrink(CKEDITOR.NODE_ELEMENT,true);r=i.createBookmark();b= +r.startNode;if(!a)h=r.endNode;r=i.document.$.body.createTextRange();r.moveToElementText(b.$);r.moveStart("character",1);if(h){j=i.document.$.body.createTextRange();j.moveToElementText(h.$);r.setEndPoint("EndToEnd",j);r.moveEnd("character",-1)}else{m=b.getNext(n);o=b.hasAscendant("pre");m=!(m&&m.getText&&m.getText().match(j))&&(o||!b.hasPrevious()||b.getPrevious().is&&b.getPrevious().is("br"));o=i.document.createElement("span");o.setHtml("");o.insertBefore(b);m&&i.document.createText("").insertBefore(b)}i.setStartBefore(b); +b.remove();if(a){if(m){r.moveStart("character",-1);r.select();i.document.$.selection.clear()}else r.select();i.moveToPosition(o,CKEDITOR.POSITION_BEFORE_START);o.remove()}else{i.setEndBefore(h);h.remove();r.select()}}else{h=this.getNative();if(!h)return;if(CKEDITOR.env.opera){r=this.document.$.createRange();r.selectNodeContents(this.root.$);h.addRange(r)}this.removeAllRanges();for(r=0;r= +0){i.collapse(1);o.setEnd(i.endContainer.$,i.endOffset)}else throw u;}h.addRange(o)}}this.reset();this.root.fire("selectionchange")}}},fake:function(a){var b=this.root.editor;this.reset();j(b);var c=this._.cache,d=new CKEDITOR.dom.range(this.root);d.setStartBefore(a);d.setEndAfter(a);c.ranges=new CKEDITOR.dom.rangeList(d);c.selectedElement=c.startElement=a;c.type=CKEDITOR.SELECTION_ELEMENT;c.selectedText=c.nativeSel=null;this.isFake=1;this.rev=s++;b._.fakeSelection=this;this.root.fire("selectionchange")}, +isHidden:function(){var a=this.getCommonAncestor();a&&a.type==CKEDITOR.NODE_TEXT&&(a=a.getParent());return!(!a||!a.data("cke-hidden-sel"))},createBookmarks:function(a){a=this.getRanges().createBookmarks(a);this.isFake&&(a.isFake=1);return a},createBookmarks2:function(a){a=this.getRanges().createBookmarks2(a);this.isFake&&(a.isFake=1);return a},selectBookmarks:function(a){for(var b=[],c=0;c]*>)[ \t\r\n]*/gi,"$1");f=f.replace(/([ \t\n\r]+| )/g, +" ");f=f.replace(/]*>/gi,"\n");if(CKEDITOR.env.ie){var g=a.getDocument().createElement("div");g.append(e);e.$.outerHTML="
"+f+"
";e.copyAttributes(g.getFirst());e=g.getFirst().remove()}else e.setHtml(f);b=e}else f?b=r(c?[a.getHtml()]:i(a),b):a.moveChildren(b);b.replace(a);if(d){var c=b,h;if((h=c.getPrevious(C))&&h.type==CKEDITOR.NODE_ELEMENT&&h.is("pre")){d=n(h.getHtml(),/\n$/,"")+"\n\n"+n(c.getHtml(),/^\n/,"");CKEDITOR.env.ie?c.$.outerHTML="
"+d+"
":c.setHtml(d);h.remove()}}else c&& +s(b)}function i(a){a.getName();var b=[];n(a.getOuterHtml(),/(\S\s*)\n(?:\s|(]+data-cke-bookmark.*?\/span>))*\n(?!$)/gi,function(a,b,c){return b+""+c+"
"}).replace(/([\s\S]*?)<\/pre>/gi,function(a,c){b.push(c)});return b}function n(a,b,c){var d="",e="",a=a.replace(/(^]+data-cke-bookmark.*?\/span>)|(]+data-cke-bookmark.*?\/span>$)/gi,function(a,b,c){b&&(d=b);c&&(e=c);return""});return d+a.replace(b,c)+e}function r(a,b){var c;a.length>1&&(c=new CKEDITOR.dom.documentFragment(b.getDocument()));
+for(var d=0;d"),e=e.replace(/[ \t]{2,}/g,function(a){return CKEDITOR.tools.repeat(" ",a.length-1)+" "});if(c){var f=b.clone();f.setHtml(e);c.append(f)}else b.setHtml(e)}return c||b}function o(a,b){var c=this._.definition,
+d=c.attributes,c=c.styles,e=k(this)[a.getName()],g=CKEDITOR.tools.isEmpty(d)&&CKEDITOR.tools.isEmpty(c),h;for(h in d)if(!((h=="class"||this._.definition.fullMatch)&&a.getAttribute(h)!=q(h,d[h]))&&!(b&&h.slice(0,5)=="data-")){g=a.hasAttribute(h);a.removeAttribute(h)}for(var i in c)if(!(this._.definition.fullMatch&&a.getStyle(i)!=q(i,c[i],true))){g=g||!!a.getStyle(i);a.removeStyle(i)}f(a,e,t[a.getName()]);g&&(this._.definition.alwaysRemoveElement?s(a,1):!CKEDITOR.dtd.$block[a.getName()]||this._.enterMode==
+CKEDITOR.ENTER_BR&&!a.hasAttributes()?s(a):a.renameNode(this._.enterMode==CKEDITOR.ENTER_P?"p":"div"))}function u(a){for(var b=k(this),c=a.getElementsByTag(this.element),d,e=c.count();--e>=0;){d=c.getItem(e);d.isReadOnly()||o.call(this,d,true)}for(var g in b)if(g!=this.element){c=a.getElementsByTag(g);for(e=c.count()-1;e>=0;e--){d=c.getItem(e);d.isReadOnly()||f(d,b[g])}}}function f(a,b,c){if(b=b&&b.attributes)for(var d=0;d",a||b.name,"");return c.join("")},getDefinition:function(){return this._.definition}};
+CKEDITOR.style.getStyleText=function(a){var b=a._ST;if(b)return b;var b=a.styles,c=a.attributes&&a.attributes.style||"",d="";c.length&&(c=c.replace(H,";"));for(var e in b){var f=b[e],g=(e+":"+f).replace(H,";");f=="inherit"?d=d+g:c=c+g}c.length&&(c=CKEDITOR.tools.normalizeCssText(c,true));return a._ST=c+d};var O=CKEDITOR.POSITION_PRECEDING|CKEDITOR.POSITION_IDENTICAL|CKEDITOR.POSITION_IS_CONTAINED,I=CKEDITOR.POSITION_FOLLOWING|CKEDITOR.POSITION_IDENTICAL|CKEDITOR.POSITION_IS_CONTAINED})();
+CKEDITOR.styleCommand=function(a,e){this.requiredContent=this.allowedContent=this.style=a;CKEDITOR.tools.extend(this,e,true)};CKEDITOR.styleCommand.prototype.exec=function(a){a.focus();this.state==CKEDITOR.TRISTATE_OFF?a.applyStyle(this.style):this.state==CKEDITOR.TRISTATE_ON&&a.removeStyle(this.style)};CKEDITOR.stylesSet=new CKEDITOR.resourceManager("","stylesSet");CKEDITOR.addStylesSet=CKEDITOR.tools.bind(CKEDITOR.stylesSet.add,CKEDITOR.stylesSet);
+CKEDITOR.loadStylesSet=function(a,e,b){CKEDITOR.stylesSet.addExternal(a,e,"");CKEDITOR.stylesSet.load(a,b)};
+CKEDITOR.editor.prototype.getStylesSet=function(a){if(this._.stylesDefinitions)a(this._.stylesDefinitions);else{var e=this,b=e.config.stylesCombo_stylesSet||e.config.stylesSet;if(b===false)a(null);else if(b instanceof Array){e._.stylesDefinitions=b;a(b)}else{b||(b="default");var b=b.split(":"),c=b[0];CKEDITOR.stylesSet.addExternal(c,b[1]?b.slice(1).join(":"):CKEDITOR.getUrl("styles.js"),"");CKEDITOR.stylesSet.load(c,function(b){e._.stylesDefinitions=b[c];a(e._.stylesDefinitions)})}}};
+CKEDITOR.dom.comment=function(a,e){typeof a=="string"&&(a=(e?e.$:document).createComment(a));CKEDITOR.dom.domObject.call(this,a)};CKEDITOR.dom.comment.prototype=new CKEDITOR.dom.node;CKEDITOR.tools.extend(CKEDITOR.dom.comment.prototype,{type:CKEDITOR.NODE_COMMENT,getOuterHtml:function(){return"<\!--"+this.$.nodeValue+"--\>"}});"use strict";
+(function(){var a={},e={},b;for(b in CKEDITOR.dtd.$blockLimit)b in CKEDITOR.dtd.$list||(a[b]=1);for(b in CKEDITOR.dtd.$block)b in CKEDITOR.dtd.$blockLimit||b in CKEDITOR.dtd.$empty||(e[b]=1);CKEDITOR.dom.elementPath=function(b,d){var g=null,h=null,m=[],j=b,i,d=d||b.getDocument().getBody();do if(j.type==CKEDITOR.NODE_ELEMENT){m.push(j);if(!this.lastElement){this.lastElement=j;if(j.is(CKEDITOR.dtd.$object)||j.getAttribute("contenteditable")=="false")continue}if(j.equals(d))break;if(!h){i=j.getName();
+j.getAttribute("contenteditable")=="true"?h=j:!g&&e[i]&&(g=j);if(a[i]){var n;if(n=!g){if(i=i=="div"){a:{i=j.getChildren();n=0;for(var r=i.count();n-1}:typeof a=="function"?c=a:typeof a=="object"&&(c=
+function(b){return b.getName()in a});var d=this.elements,g=d.length;e&&g--;if(b){d=Array.prototype.slice.call(d,0);d.reverse()}for(e=0;e=c){g=d.createText("");g.insertAfter(this)}else{a=d.createText("");a.insertAfter(g);a.remove()}return g},substring:function(a,
+e){return typeof e!="number"?this.$.nodeValue.substr(a):this.$.nodeValue.substring(a,e)}});
+(function(){function a(a,c,d){var e=a.serializable,h=c[d?"endContainer":"startContainer"],m=d?"endOffset":"startOffset",j=e?c.document.getById(a.startNode):a.startNode,a=e?c.document.getById(a.endNode):a.endNode;if(h.equals(j.getPrevious())){c.startOffset=c.startOffset-h.getLength()-a.getPrevious().getLength();h=a.getNext()}else if(h.equals(a.getPrevious())){c.startOffset=c.startOffset-h.getLength();h=a.getNext()}h.equals(j.getParent())&&c[m]++;h.equals(a.getParent())&&c[m]++;c[d?"endContainer":"startContainer"]=
+h;return c}CKEDITOR.dom.rangeList=function(a){if(a instanceof CKEDITOR.dom.rangeList)return a;a?a instanceof CKEDITOR.dom.range&&(a=[a]):a=[];return CKEDITOR.tools.extend(a,e)};var e={createIterator:function(){var a=this,c=CKEDITOR.dom.walker.bookmark(),d=[],e;return{getNextRange:function(h){e=e==void 0?0:e+1;var m=a[e];if(m&&a.length>1){if(!e)for(var j=a.length-1;j>=0;j--)d.unshift(a[j].createBookmark(true));if(h)for(var i=0;a[e+i+1];){for(var n=m.document,h=0,j=n.getById(d[i].endNode),n=n.getById(d[i+
+1].startNode);;){j=j.getNextSourceNode(false);if(n.equals(j))h=1;else if(c(j)||j.type==CKEDITOR.NODE_ELEMENT&&j.isBlockBoundary())continue;break}if(!h)break;i++}for(m.moveToBookmark(d.shift());i--;){j=a[++e];j.moveToBookmark(d.shift());m.setEnd(j.endContainer,j.endOffset)}}return m}}},createBookmarks:function(b){for(var c=[],d,e=0;eb?-1:1}),e=0,g;e',CKEDITOR.document);a.appendTo(CKEDITOR.document.getHead());try{var e=a.getComputedStyle("border-top-color"),b=a.getComputedStyle("border-right-color");CKEDITOR.env.hc=!!(e&&e==b)}catch(c){CKEDITOR.env.hc=false}a.remove()}if(CKEDITOR.env.hc)CKEDITOR.env.cssClass=CKEDITOR.env.cssClass+" cke_hc";
+CKEDITOR.document.appendStyleText(".cke{visibility:hidden;}");CKEDITOR.status="loaded";CKEDITOR.fireOnce("loaded");if(a=CKEDITOR._.pending){delete CKEDITOR._.pending;for(e=0;ec;c++){var f=a,h=c,d;d=parseInt(a[c],16);d=("0"+(0>e?0|d*(1+e):0|d+(255-d)*e).toString(16)).slice(-2);f[h]=d}return"#"+a.join("")}}(),c=function(){var b=new CKEDITOR.template("background:#{to};background-image:-webkit-gradient(linear,lefttop,leftbottom,from({from}),to({to}));background-image:-moz-linear-gradient(top,{from},{to});background-image:-webkit-linear-gradient(top,{from},{to});background-image:-o-linear-gradient(top,{from},{to});background-image:-ms-linear-gradient(top,{from},{to});background-image:linear-gradient(top,{from},{to});filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='{from}',endColorstr='{to}');");return function(c,
+a){return b.output({from:c,to:a})}}(),f={editor:new CKEDITOR.template("{id}.cke_chrome [border-color:{defaultBorder};] {id} .cke_top [ {defaultGradient}border-bottom-color:{defaultBorder};] {id} .cke_bottom [{defaultGradient}border-top-color:{defaultBorder};] {id} .cke_resizer [border-right-color:{ckeResizer}] {id} .cke_dialog_title [{defaultGradient}border-bottom-color:{defaultBorder};] {id} .cke_dialog_footer [{defaultGradient}outline-color:{defaultBorder};border-top-color:{defaultBorder};] {id} .cke_dialog_tab [{lightGradient}border-color:{defaultBorder};] {id} .cke_dialog_tab:hover [{mediumGradient}] {id} .cke_dialog_contents [border-top-color:{defaultBorder};] {id} .cke_dialog_tab_selected, {id} .cke_dialog_tab_selected:hover [background:{dialogTabSelected};border-bottom-color:{dialogTabSelectedBorder};] {id} .cke_dialog_body [background:{dialogBody};border-color:{defaultBorder};] {id} .cke_toolgroup [{lightGradient}border-color:{defaultBorder};] {id} a.cke_button_off:hover, {id} a.cke_button_off:focus, {id} a.cke_button_off:active [{mediumGradient}] {id} .cke_button_on [{ckeButtonOn}] {id} .cke_toolbar_separator [background-color: {ckeToolbarSeparator};] {id} .cke_combo_button [border-color:{defaultBorder};{lightGradient}] {id} a.cke_combo_button:hover, {id} a.cke_combo_button:focus, {id} .cke_combo_on a.cke_combo_button [border-color:{defaultBorder};{mediumGradient}] {id} .cke_path_item [color:{elementsPathColor};] {id} a.cke_path_item:hover, {id} a.cke_path_item:focus, {id} a.cke_path_item:active [background-color:{elementsPathBg};] {id}.cke_panel [border-color:{defaultBorder};] "),
+panel:new CKEDITOR.template(".cke_panel_grouptitle [{lightGradient}border-color:{defaultBorder};] .cke_menubutton_icon [background-color:{menubuttonIcon};] .cke_menubutton:hover .cke_menubutton_icon, .cke_menubutton:focus .cke_menubutton_icon, .cke_menubutton:active .cke_menubutton_icon [background-color:{menubuttonIconHover};] .cke_menuseparator [background-color:{menubuttonIcon};] a:hover.cke_colorbox, a:focus.cke_colorbox, a:active.cke_colorbox [border-color:{defaultBorder};] a:hover.cke_colorauto, a:hover.cke_colormore, a:focus.cke_colorauto, a:focus.cke_colormore, a:active.cke_colorauto, a:active.cke_colormore [background-color:{ckeColorauto};border-color:{defaultBorder};] ")};
+return function(g,e){var a=g.uiColor,a={id:"."+g.id,defaultBorder:b(a,-0.1),defaultGradient:c(b(a,0.9),a),lightGradient:c(b(a,1),b(a,0.7)),mediumGradient:c(b(a,0.8),b(a,0.5)),ckeButtonOn:c(b(a,0.6),b(a,0.7)),ckeResizer:b(a,-0.4),ckeToolbarSeparator:b(a,0.5),ckeColorauto:b(a,0.8),dialogBody:b(a,0.7),dialogTabSelected:c("#FFFFFF","#FFFFFF"),dialogTabSelectedBorder:"#FFF",elementsPathColor:b(a,-0.6),elementsPathBg:a,menubuttonIcon:b(a,0.5),menubuttonIconHover:b(a,0.3)};return f[e].output(a).replace(/\[/g,
+"{").replace(/\]/g,"}")}}();CKEDITOR.plugins.add("dialogui",{onLoad:function(){var i=function(b){this._||(this._={});this._["default"]=this._.initValue=b["default"]||"";this._.required=b.required||!1;for(var a=[this._],d=1;darguments.length)){var c=i.call(this,a);c.labelId=CKEDITOR.tools.getNextId()+"_label";this._.children=[];CKEDITOR.ui.dialog.uiElement.call(this,b,a,d,"div",null,{role:"presentation"},function(){var f=[],d=a.required?" cke_required":"";"horizontal"!=
+a.labelLayout?f.push('",'
',e.call(this,b,a),"
"):(d={type:"hbox",widths:a.widths,padding:0,children:[{type:"html",html:'