From 63439a9f9e21becdc4f35a26bef856d7cd5bf598 Mon Sep 17 00:00:00 2001 From: Dustin Torres Date: Thu, 7 Sep 2017 16:23:27 -0700 Subject: [PATCH 01/12] Allow for custom storage backends for uploader --- ckeditor_uploader/image/pillow_backend.py | 8 ++++---- ckeditor_uploader/utils.py | 12 ++++++++++-- ckeditor_uploader/views.py | 12 ++++++------ 3 files changed, 20 insertions(+), 12 deletions(-) diff --git a/ckeditor_uploader/image/pillow_backend.py b/ckeditor_uploader/image/pillow_backend.py index 16fff7597..fb3af4698 100644 --- a/ckeditor_uploader/image/pillow_backend.py +++ b/ckeditor_uploader/image/pillow_backend.py @@ -4,8 +4,8 @@ from io import BytesIO from django.conf import settings -from django.core.files.storage import default_storage from django.core.files.uploadedfile import InMemoryUploadedFile +from ckeditor_uploader.utils import storage from PIL import Image, ImageOps @@ -26,7 +26,7 @@ def create_thumbnail(file_path): thumbnail_filename = utils.get_thumb_filename(file_path) thumbnail_format = utils.get_image_format(os.path.splitext(file_path)[1]) - image = default_storage.open(file_path) + image = storage.open(file_path) image = Image.open(image) file_format = image.format @@ -50,11 +50,11 @@ def create_thumbnail(file_path): None) thumbnail.seek(0) - return default_storage.save(thumbnail_filename, thumbnail) + return storage.save(thumbnail_filename, thumbnail) def should_create_thumbnail(file_path): - image = default_storage.open(file_path) + image = storage.open(file_path) try: Image.open(image) except IOError: diff --git a/ckeditor_uploader/utils.py b/ckeditor_uploader/utils.py index f44d37698..e6772ddde 100644 --- a/ckeditor_uploader/utils.py +++ b/ckeditor_uploader/utils.py @@ -7,11 +7,12 @@ import string from django.conf import settings -from django.core.files.storage import default_storage from django.template.defaultfilters import slugify from django.utils.encoding import force_text +from django.utils.module_loading import import_string # Non-image file icons, matched from top to bottom + fileicons_path = '{0}/file-icons/'.format(getattr(settings, 'CKEDITOR_FILEICONS_PATH', '/static/ckeditor')) # This allows adding or overriding the default icons used by Gallerific by getting an additional two-tuple list from # the project settings. If it does not exist, it is ignored. If the same file extension exists twice, the settings @@ -32,6 +33,13 @@ class NotAnImageException(Exception): pass +# Allow for a custom storage backend defined in settings. +def get_storage_class(): + return import_string(getattr(settings, 'CKEDITOR_STORAGE_BACKEND', 'django.core.files.storage.DefaultStorage'))() + +storage = get_storage_class() + + def slugify_filename(filename): """ Slugify filename """ name, ext = os.path.splitext(filename) @@ -74,7 +82,7 @@ def get_media_url(path): """ Determine system file's media URL. """ - return default_storage.url(path) + return storage.url(path) def is_valid_image_extension(file_path): diff --git a/ckeditor_uploader/views.py b/ckeditor_uploader/views.py index e3a1cd684..600bbad78 100644 --- a/ckeditor_uploader/views.py +++ b/ckeditor_uploader/views.py @@ -4,7 +4,6 @@ from datetime import datetime from django.conf import settings -from django.core.files.storage import default_storage from django.http import HttpResponse, JsonResponse from django.shortcuts import render from django.utils.html import escape @@ -15,6 +14,7 @@ from PIL import Image from ckeditor_uploader import image_processing, utils +from ckeditor_uploader.utils import storage from ckeditor_uploader.forms import SearchForm @@ -61,7 +61,7 @@ def get_upload_filename(upload_name, user): generator = import_string(settings.CKEDITOR_FILENAME_GENERATOR) upload_name = generator(upload_name) - return default_storage.get_available_name( + return storage.get_available_name( os.path.join(upload_path, upload_name) ) @@ -118,18 +118,18 @@ def _save_file(request, uploaded_file): img = Image.open(uploaded_file) img = img.resize(img.size, Image.ANTIALIAS) - saved_path = default_storage.save("{}.jpg".format(img_name), uploaded_file) + saved_path = storage.save("{}.jpg".format(img_name), uploaded_file) img.save("{}.jpg".format(img_name), quality=IMAGE_QUALITY, optimize=True) elif(str(img_format).lower() == "jpg" or str(img_format).lower() == "jpeg"): img = Image.open(uploaded_file) img = img.resize(img.size, Image.ANTIALIAS) - saved_path = default_storage.save(filename, uploaded_file) + saved_path = storage.save(filename, uploaded_file) img.save(saved_path, quality=IMAGE_QUALITY, optimize=True) else: - saved_path = default_storage.save(filename, uploaded_file) + saved_path = storage.save(filename, uploaded_file) return saved_path @@ -162,7 +162,7 @@ def get_image_files(user=None, path=''): browse_path = os.path.join(settings.CKEDITOR_UPLOAD_PATH, user_path, path) try: - storage_list = default_storage.listdir(browse_path) + storage_list = storage.listdir(browse_path) except NotImplementedError: return except OSError: From 0e96584913f8b3e5cdefc79a5c407bc72c515134 Mon Sep 17 00:00:00 2001 From: Dustin Torres Date: Sat, 9 Sep 2017 13:52:47 -0700 Subject: [PATCH 02/12] Formatting fix --- ckeditor_uploader/utils.py | 1 + 1 file changed, 1 insertion(+) diff --git a/ckeditor_uploader/utils.py b/ckeditor_uploader/utils.py index e6772ddde..a4ea5c219 100644 --- a/ckeditor_uploader/utils.py +++ b/ckeditor_uploader/utils.py @@ -37,6 +37,7 @@ class NotAnImageException(Exception): def get_storage_class(): return import_string(getattr(settings, 'CKEDITOR_STORAGE_BACKEND', 'django.core.files.storage.DefaultStorage'))() + storage = get_storage_class() From 2fb922de14da075686c5b7fd28e327bf30edbabe Mon Sep 17 00:00:00 2001 From: Jamie Robertson Date: Thu, 25 Jan 2018 18:30:13 +0100 Subject: [PATCH 03/12] Documentation for #377 'Automatically set CKEDITOR_BASEPATH' References changes made to widgets.py on line 68. Also changes admin/base_site.html to admin/change_form.html because it is more specific and is easier to extend. --- README.rst | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/README.rst b/README.rst index d4bd1de5c..478ab2eb4 100644 --- a/README.rst +++ b/README.rst @@ -34,19 +34,23 @@ Required #. Run the ``collectstatic`` management command: ``$ ./manage.py collectstatic``. This will copy static CKEditor required media resources into the directory given by the ``STATIC_ROOT`` setting. See `Django's documentation on managing static files `__ for more info. #. CKEditor needs to know where its assets are located because it loads them - lazily only when needed. The location is determined by looking at a script - tag which includes a URL ending in ``ckeditor.js``. This does not work all + lazily only when needed. The location is determined in the ``ckeditor-init.js`` + script. and defaults to ``static/ckeditor/ckeditor/``. This does not work all the time, for example when using ``ManifestStaticFilesStorage``, any asset - packaging pipeline or whatnot. django-ckeditor is quite good at - automatically detecting the correct place even then, but sometimes you have - to hardcode ``CKEDITOR_BASEPATH`` somewhere. It is recommended to override - the ``admin/base_site.html`` template with your own if you really need to do + packaging pipeline or whatnot. django-ckeditor is quite good at automatically + detecting the correct place even then, but sometimes you have to hardcode + ``CKEDITOR_BASEPATH`` somewhere. This can be hardcoded in settings, i.e.:: + + CKEDITOR_BASEPATH = "/my_static/ckeditor/ckeditor" + + It is possible to override + the ``admin/change_form.html`` template with your own if you really need to do this, i.e.:: - {% extends "admin/base_site.html" %} + {% extends "admin/change_form.html" %} {% block extrahead %} - + {{ block.super }} {% endblock %} From 0354be9bf2375c5d9c41adba8aff63d219ae0b28 Mon Sep 17 00:00:00 2001 From: Matthias Kestenholz Date: Fri, 9 Feb 2018 09:05:00 +0100 Subject: [PATCH 04/12] Fix #468: Misleading error when determining the CKEditor static files prefix fails --- ckeditor/widgets.py | 30 +++++++++++------------------- 1 file changed, 11 insertions(+), 19 deletions(-) diff --git a/ckeditor/widgets.py b/ckeditor/widgets.py index c13b6a9d1..76ef196f6 100644 --- a/ckeditor/widgets.py +++ b/ckeditor/widgets.py @@ -57,25 +57,17 @@ class CKEditorWidget(forms.Textarea): Supports direct image uploads and embed. """ class Media: - js = () - try: - js += ( - JS('ckeditor/ckeditor-init.js', { - 'id': 'ckeditor-init-script', - 'data-ckeditor-basepath': getattr( - settings, - 'CKEDITOR_BASEPATH', - static('ckeditor/ckeditor/'), - ), - }), - 'ckeditor/ckeditor/ckeditor.js', - ) - except AttributeError: - raise ImproperlyConfigured("django-ckeditor requires \ - CKEDITOR_MEDIA_PREFIX setting. This setting specifies a \ - URL prefix to the ckeditor JS and CSS media (not \ - uploaded media). Make sure to use a trailing slash: \ - CKEDITOR_MEDIA_PREFIX = '/media/ckeditor/'") + js = ( + JS('ckeditor/ckeditor-init.js', { + 'id': 'ckeditor-init-script', + 'data-ckeditor-basepath': getattr( + settings, + 'CKEDITOR_BASEPATH', + static('ckeditor/ckeditor/'), + ), + }), + 'ckeditor/ckeditor/ckeditor.js', + ) def __init__(self, config_name='default', extra_plugins=None, external_plugin_resources=None, *args, **kwargs): super(CKEditorWidget, self).__init__(*args, **kwargs) From 3bb98c04f4d385204f754be1dd137e0adec7260c Mon Sep 17 00:00:00 2001 From: Tassoman Date: Tue, 3 Apr 2018 21:25:09 +0200 Subject: [PATCH 05/12] Add template rendering example (#479) I've just added a note on how to render html content inside templates, for newcomers --- README.rst | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.rst b/README.rst index 478ab2eb4..7341b73d7 100644 --- a/README.rst +++ b/README.rst @@ -225,7 +225,8 @@ or you can load the media manually as it is done in the demo app:: {% load static %} - + +When you need to render ``RichTextField``'s HTML output in your templates safely, just use ``{{ content|safe }}``, `Django's safe filter `_ Management Commands From c1e1aa00a5d2230c0c4c236d8799464171c873a9 Mon Sep 17 00:00:00 2001 From: Matthias Kestenholz Date: Sat, 21 Apr 2018 10:39:06 +0200 Subject: [PATCH 06/12] Update CKEditor to 4.9.2 --- CHANGELOG.rst | 3 + README.rst | 10 +- ckeditor/static/ckeditor/ckeditor/CHANGES.md | 1823 +++++++++-------- ckeditor/static/ckeditor/ckeditor/LICENSE.md | 6 +- ckeditor/static/ckeditor/ckeditor/README.md | 2 +- .../ckeditor/ckeditor/adapters/jquery.js | 4 +- .../static/ckeditor/ckeditor/build-config.js | 59 +- ckeditor/static/ckeditor/ckeditor/ckeditor.js | 1314 ++++++------ ckeditor/static/ckeditor/ckeditor/config.js | 4 +- .../static/ckeditor/ckeditor/contents.css | 7 +- ckeditor/static/ckeditor/ckeditor/lang/af.js | 8 +- ckeditor/static/ckeditor/ckeditor/lang/ar.js | 8 +- ckeditor/static/ckeditor/ckeditor/lang/az.js | 8 +- ckeditor/static/ckeditor/ckeditor/lang/bg.js | 8 +- ckeditor/static/ckeditor/ckeditor/lang/bn.js | 8 +- ckeditor/static/ckeditor/ckeditor/lang/bs.js | 8 +- ckeditor/static/ckeditor/ckeditor/lang/ca.js | 8 +- ckeditor/static/ckeditor/ckeditor/lang/cs.js | 8 +- ckeditor/static/ckeditor/ckeditor/lang/cy.js | 8 +- ckeditor/static/ckeditor/ckeditor/lang/da.js | 8 +- .../static/ckeditor/ckeditor/lang/de-ch.js | 8 +- ckeditor/static/ckeditor/ckeditor/lang/de.js | 8 +- ckeditor/static/ckeditor/ckeditor/lang/el.js | 8 +- .../static/ckeditor/ckeditor/lang/en-au.js | 8 +- .../static/ckeditor/ckeditor/lang/en-ca.js | 8 +- .../static/ckeditor/ckeditor/lang/en-gb.js | 8 +- ckeditor/static/ckeditor/ckeditor/lang/en.js | 8 +- ckeditor/static/ckeditor/ckeditor/lang/eo.js | 8 +- .../static/ckeditor/ckeditor/lang/es-mx.js | 8 +- ckeditor/static/ckeditor/ckeditor/lang/es.js | 8 +- ckeditor/static/ckeditor/ckeditor/lang/et.js | 8 +- ckeditor/static/ckeditor/ckeditor/lang/eu.js | 8 +- ckeditor/static/ckeditor/ckeditor/lang/fa.js | 8 +- ckeditor/static/ckeditor/ckeditor/lang/fi.js | 8 +- ckeditor/static/ckeditor/ckeditor/lang/fo.js | 8 +- .../static/ckeditor/ckeditor/lang/fr-ca.js | 8 +- ckeditor/static/ckeditor/ckeditor/lang/fr.js | 8 +- ckeditor/static/ckeditor/ckeditor/lang/gl.js | 8 +- ckeditor/static/ckeditor/ckeditor/lang/gu.js | 8 +- ckeditor/static/ckeditor/ckeditor/lang/he.js | 8 +- ckeditor/static/ckeditor/ckeditor/lang/hi.js | 8 +- ckeditor/static/ckeditor/ckeditor/lang/hr.js | 8 +- ckeditor/static/ckeditor/ckeditor/lang/hu.js | 8 +- ckeditor/static/ckeditor/ckeditor/lang/id.js | 8 +- ckeditor/static/ckeditor/ckeditor/lang/is.js | 8 +- ckeditor/static/ckeditor/ckeditor/lang/it.js | 8 +- ckeditor/static/ckeditor/ckeditor/lang/ja.js | 8 +- ckeditor/static/ckeditor/ckeditor/lang/ka.js | 8 +- ckeditor/static/ckeditor/ckeditor/lang/km.js | 8 +- ckeditor/static/ckeditor/ckeditor/lang/ko.js | 8 +- ckeditor/static/ckeditor/ckeditor/lang/ku.js | 8 +- ckeditor/static/ckeditor/ckeditor/lang/lt.js | 8 +- ckeditor/static/ckeditor/ckeditor/lang/lv.js | 8 +- ckeditor/static/ckeditor/ckeditor/lang/mk.js | 8 +- ckeditor/static/ckeditor/ckeditor/lang/mn.js | 8 +- ckeditor/static/ckeditor/ckeditor/lang/ms.js | 8 +- ckeditor/static/ckeditor/ckeditor/lang/nb.js | 8 +- ckeditor/static/ckeditor/ckeditor/lang/nl.js | 8 +- ckeditor/static/ckeditor/ckeditor/lang/no.js | 8 +- ckeditor/static/ckeditor/ckeditor/lang/oc.js | 8 +- ckeditor/static/ckeditor/ckeditor/lang/pl.js | 8 +- .../static/ckeditor/ckeditor/lang/pt-br.js | 8 +- ckeditor/static/ckeditor/ckeditor/lang/pt.js | 8 +- ckeditor/static/ckeditor/ckeditor/lang/ro.js | 8 +- ckeditor/static/ckeditor/ckeditor/lang/ru.js | 8 +- ckeditor/static/ckeditor/ckeditor/lang/si.js | 8 +- ckeditor/static/ckeditor/ckeditor/lang/sk.js | 8 +- ckeditor/static/ckeditor/ckeditor/lang/sl.js | 8 +- ckeditor/static/ckeditor/ckeditor/lang/sq.js | 8 +- .../static/ckeditor/ckeditor/lang/sr-latn.js | 8 +- ckeditor/static/ckeditor/ckeditor/lang/sr.js | 8 +- ckeditor/static/ckeditor/ckeditor/lang/sv.js | 8 +- ckeditor/static/ckeditor/ckeditor/lang/th.js | 8 +- ckeditor/static/ckeditor/ckeditor/lang/tr.js | 8 +- ckeditor/static/ckeditor/ckeditor/lang/tt.js | 8 +- ckeditor/static/ckeditor/ckeditor/lang/ug.js | 8 +- ckeditor/static/ckeditor/ckeditor/lang/uk.js | 8 +- ckeditor/static/ckeditor/ckeditor/lang/vi.js | 8 +- .../static/ckeditor/ckeditor/lang/zh-cn.js | 8 +- ckeditor/static/ckeditor/ckeditor/lang/zh.js | 8 +- .../plugins/a11yhelp/dialogs/a11yhelp.js | 4 +- .../dialogs/lang/_translationstatus.txt | 4 +- .../plugins/a11yhelp/dialogs/lang/af.js | 4 +- .../plugins/a11yhelp/dialogs/lang/ar.js | 4 +- .../plugins/a11yhelp/dialogs/lang/az.js | 4 +- .../plugins/a11yhelp/dialogs/lang/bg.js | 4 +- .../plugins/a11yhelp/dialogs/lang/ca.js | 4 +- .../plugins/a11yhelp/dialogs/lang/cs.js | 6 +- .../plugins/a11yhelp/dialogs/lang/cy.js | 4 +- .../plugins/a11yhelp/dialogs/lang/da.js | 6 +- .../plugins/a11yhelp/dialogs/lang/de-ch.js | 4 +- .../plugins/a11yhelp/dialogs/lang/de.js | 4 +- .../plugins/a11yhelp/dialogs/lang/el.js | 11 +- .../plugins/a11yhelp/dialogs/lang/en-au.js | 11 + .../plugins/a11yhelp/dialogs/lang/en-gb.js | 4 +- .../plugins/a11yhelp/dialogs/lang/en.js | 4 +- .../plugins/a11yhelp/dialogs/lang/eo.js | 11 +- .../plugins/a11yhelp/dialogs/lang/es-mx.js | 4 +- .../plugins/a11yhelp/dialogs/lang/es.js | 4 +- .../plugins/a11yhelp/dialogs/lang/et.js | 12 +- .../plugins/a11yhelp/dialogs/lang/eu.js | 6 +- .../plugins/a11yhelp/dialogs/lang/fa.js | 4 +- .../plugins/a11yhelp/dialogs/lang/fi.js | 4 +- .../plugins/a11yhelp/dialogs/lang/fo.js | 4 +- .../plugins/a11yhelp/dialogs/lang/fr-ca.js | 4 +- .../plugins/a11yhelp/dialogs/lang/fr.js | 6 +- .../plugins/a11yhelp/dialogs/lang/gl.js | 4 +- .../plugins/a11yhelp/dialogs/lang/gu.js | 4 +- .../plugins/a11yhelp/dialogs/lang/he.js | 4 +- .../plugins/a11yhelp/dialogs/lang/hi.js | 4 +- .../plugins/a11yhelp/dialogs/lang/hr.js | 10 +- .../plugins/a11yhelp/dialogs/lang/hu.js | 8 +- .../plugins/a11yhelp/dialogs/lang/id.js | 4 +- .../plugins/a11yhelp/dialogs/lang/it.js | 4 +- .../plugins/a11yhelp/dialogs/lang/ja.js | 4 +- .../plugins/a11yhelp/dialogs/lang/km.js | 4 +- .../plugins/a11yhelp/dialogs/lang/ko.js | 4 +- .../plugins/a11yhelp/dialogs/lang/ku.js | 12 +- .../plugins/a11yhelp/dialogs/lang/lt.js | 4 +- .../plugins/a11yhelp/dialogs/lang/lv.js | 4 +- .../plugins/a11yhelp/dialogs/lang/mk.js | 4 +- .../plugins/a11yhelp/dialogs/lang/mn.js | 4 +- .../plugins/a11yhelp/dialogs/lang/nb.js | 4 +- .../plugins/a11yhelp/dialogs/lang/nl.js | 4 +- .../plugins/a11yhelp/dialogs/lang/no.js | 4 +- .../plugins/a11yhelp/dialogs/lang/oc.js | 4 +- .../plugins/a11yhelp/dialogs/lang/pl.js | 4 +- .../plugins/a11yhelp/dialogs/lang/pt-br.js | 8 +- .../plugins/a11yhelp/dialogs/lang/pt.js | 4 +- .../plugins/a11yhelp/dialogs/lang/ro.js | 19 +- .../plugins/a11yhelp/dialogs/lang/ru.js | 6 +- .../plugins/a11yhelp/dialogs/lang/si.js | 4 +- .../plugins/a11yhelp/dialogs/lang/sk.js | 6 +- .../plugins/a11yhelp/dialogs/lang/sl.js | 4 +- .../plugins/a11yhelp/dialogs/lang/sq.js | 18 +- .../plugins/a11yhelp/dialogs/lang/sr-latn.js | 4 +- .../plugins/a11yhelp/dialogs/lang/sr.js | 4 +- .../plugins/a11yhelp/dialogs/lang/sv.js | 4 +- .../plugins/a11yhelp/dialogs/lang/th.js | 4 +- .../plugins/a11yhelp/dialogs/lang/tr.js | 4 +- .../plugins/a11yhelp/dialogs/lang/tt.js | 4 +- .../plugins/a11yhelp/dialogs/lang/ug.js | 12 +- .../plugins/a11yhelp/dialogs/lang/uk.js | 4 +- .../plugins/a11yhelp/dialogs/lang/vi.js | 4 +- .../plugins/a11yhelp/dialogs/lang/zh-cn.js | 4 +- .../plugins/a11yhelp/dialogs/lang/zh.js | 10 +- .../ckeditor/plugins/about/dialogs/about.js | 10 +- .../about/dialogs/hidpi/logo_ckeditor.png | Bin 13339 -> 12236 bytes .../plugins/about/dialogs/logo_ckeditor.png | Bin 6757 -> 5650 bytes .../plugins/clipboard/dialogs/paste.js | 15 +- .../colordialog/dialogs/colordialog.css | 4 +- .../colordialog/dialogs/colordialog.js | 22 +- .../copyformatting/styles/copyformatting.css | 4 +- .../plugins/dialog/dialogDefinition.js | 4 +- .../ckeditor/plugins/find/dialogs/find.js | 4 +- .../ckeditor/plugins/flash/dialogs/flash.js | 10 +- .../ckeditor/plugins/forms/dialogs/button.js | 4 +- .../plugins/forms/dialogs/checkbox.js | 4 +- .../ckeditor/plugins/forms/dialogs/form.js | 4 +- .../plugins/forms/dialogs/hiddenfield.js | 4 +- .../ckeditor/plugins/forms/dialogs/radio.js | 14 +- .../ckeditor/plugins/forms/dialogs/select.js | 4 +- .../plugins/forms/dialogs/textarea.js | 4 +- .../plugins/forms/dialogs/textfield.js | 4 +- .../ckeditor/plugins/iframe/dialogs/iframe.js | 6 +- .../ckeditor/plugins/image/dialogs/image.js | 32 +- .../ckeditor/plugins/link/dialogs/anchor.js | 4 +- .../ckeditor/plugins/link/dialogs/link.js | 4 +- .../plugins/liststyle/dialogs/liststyle.js | 4 +- .../plugins/pastefromword/filter/default.js | 104 +- .../ckeditor/plugins/scayt/dialogs/options.js | 58 +- .../ckeditor/plugins/smiley/dialogs/smiley.js | 4 +- .../dialogs/lang/_translationstatus.txt | 4 +- .../plugins/specialchar/dialogs/lang/af.js | 4 +- .../plugins/specialchar/dialogs/lang/ar.js | 4 +- .../plugins/specialchar/dialogs/lang/az.js | 4 +- .../plugins/specialchar/dialogs/lang/bg.js | 4 +- .../plugins/specialchar/dialogs/lang/ca.js | 4 +- .../plugins/specialchar/dialogs/lang/cs.js | 4 +- .../plugins/specialchar/dialogs/lang/cy.js | 4 +- .../plugins/specialchar/dialogs/lang/da.js | 4 +- .../plugins/specialchar/dialogs/lang/de-ch.js | 4 +- .../plugins/specialchar/dialogs/lang/de.js | 4 +- .../plugins/specialchar/dialogs/lang/el.js | 4 +- .../plugins/specialchar/dialogs/lang/en-au.js | 4 +- .../plugins/specialchar/dialogs/lang/en-ca.js | 4 +- .../plugins/specialchar/dialogs/lang/en-gb.js | 4 +- .../plugins/specialchar/dialogs/lang/en.js | 4 +- .../plugins/specialchar/dialogs/lang/eo.js | 4 +- .../plugins/specialchar/dialogs/lang/es-mx.js | 4 +- .../plugins/specialchar/dialogs/lang/es.js | 4 +- .../plugins/specialchar/dialogs/lang/et.js | 4 +- .../plugins/specialchar/dialogs/lang/eu.js | 4 +- .../plugins/specialchar/dialogs/lang/fa.js | 4 +- .../plugins/specialchar/dialogs/lang/fi.js | 4 +- .../plugins/specialchar/dialogs/lang/fr-ca.js | 4 +- .../plugins/specialchar/dialogs/lang/fr.js | 4 +- .../plugins/specialchar/dialogs/lang/gl.js | 4 +- .../plugins/specialchar/dialogs/lang/he.js | 4 +- .../plugins/specialchar/dialogs/lang/hr.js | 4 +- .../plugins/specialchar/dialogs/lang/hu.js | 4 +- .../plugins/specialchar/dialogs/lang/id.js | 4 +- .../plugins/specialchar/dialogs/lang/it.js | 4 +- .../plugins/specialchar/dialogs/lang/ja.js | 4 +- .../plugins/specialchar/dialogs/lang/km.js | 4 +- .../plugins/specialchar/dialogs/lang/ko.js | 4 +- .../plugins/specialchar/dialogs/lang/ku.js | 4 +- .../plugins/specialchar/dialogs/lang/lt.js | 4 +- .../plugins/specialchar/dialogs/lang/lv.js | 4 +- .../plugins/specialchar/dialogs/lang/nb.js | 4 +- .../plugins/specialchar/dialogs/lang/nl.js | 4 +- .../plugins/specialchar/dialogs/lang/no.js | 4 +- .../plugins/specialchar/dialogs/lang/oc.js | 4 +- .../plugins/specialchar/dialogs/lang/pl.js | 4 +- .../plugins/specialchar/dialogs/lang/pt-br.js | 4 +- .../plugins/specialchar/dialogs/lang/pt.js | 4 +- .../plugins/specialchar/dialogs/lang/ro.js | 13 + .../plugins/specialchar/dialogs/lang/ru.js | 4 +- .../plugins/specialchar/dialogs/lang/si.js | 4 +- .../plugins/specialchar/dialogs/lang/sk.js | 4 +- .../plugins/specialchar/dialogs/lang/sl.js | 4 +- .../plugins/specialchar/dialogs/lang/sq.js | 10 +- .../plugins/specialchar/dialogs/lang/sv.js | 4 +- .../plugins/specialchar/dialogs/lang/th.js | 4 +- .../plugins/specialchar/dialogs/lang/tr.js | 4 +- .../plugins/specialchar/dialogs/lang/tt.js | 4 +- .../plugins/specialchar/dialogs/lang/ug.js | 4 +- .../plugins/specialchar/dialogs/lang/uk.js | 4 +- .../plugins/specialchar/dialogs/lang/vi.js | 4 +- .../plugins/specialchar/dialogs/lang/zh-cn.js | 4 +- .../plugins/specialchar/dialogs/lang/zh.js | 4 +- .../specialchar/dialogs/specialchar.js | 4 +- .../ckeditor/plugins/table/dialogs/table.js | 8 +- .../plugins/tabletools/dialogs/tableCell.js | 31 +- .../plugins/templates/dialogs/templates.css | 4 +- .../plugins/templates/dialogs/templates.js | 4 +- .../plugins/templates/templates/default.js | 4 +- .../plugins/wsc/dialogs/tmpFrameset.html | 59 +- .../ckeditor/plugins/wsc/dialogs/wsc.js | 112 +- .../ckeditor/skins/moono-lisa/dialog.css | 4 +- .../ckeditor/skins/moono-lisa/dialog_ie.css | 4 +- .../ckeditor/skins/moono-lisa/dialog_ie8.css | 4 +- .../skins/moono-lisa/dialog_iequirks.css | 4 +- .../ckeditor/skins/moono-lisa/editor.css | 6 +- .../skins/moono-lisa/editor_gecko.css | 6 +- .../ckeditor/skins/moono-lisa/editor_ie.css | 6 +- .../ckeditor/skins/moono-lisa/editor_ie8.css | 6 +- .../skins/moono-lisa/editor_iequirks.css | 6 +- .../ckeditor/skins/moono-lisa/readme.md | 6 +- ckeditor/static/ckeditor/ckeditor/styles.js | 8 +- 250 files changed, 2659 insertions(+), 2371 deletions(-) create mode 100644 ckeditor/static/ckeditor/ckeditor/plugins/a11yhelp/dialogs/lang/en-au.js create mode 100644 ckeditor/static/ckeditor/ckeditor/plugins/specialchar/dialogs/lang/ro.js diff --git a/CHANGELOG.rst b/CHANGELOG.rst index d06d597fc..8ffc6f8ba 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -1,6 +1,9 @@ Changelog ========= +#. CKEditor 4.9.2 + + 5.4.0 ----- #. Django 2.0 compatibility diff --git a/README.rst b/README.rst index 7341b73d7..7cbdafe9d 100644 --- a/README.rst +++ b/README.rst @@ -13,7 +13,7 @@ Provides a ``RichTextField``, ``RichTextUploadingField``, ``CKEditorWidget`` and This version also includes: #. support to django-storages (works with S3) -#. updated ckeditor to version 4.7 +#. updated ckeditor to version 4.9 #. included all ckeditor language and plugin files to made everyone happy! ( `only the plugins maintained by the ckeditor develops team `__ ) .. contents:: Contents @@ -35,10 +35,10 @@ Required #. CKEditor needs to know where its assets are located because it loads them lazily only when needed. The location is determined in the ``ckeditor-init.js`` - script. and defaults to ``static/ckeditor/ckeditor/``. This does not work all + script. and defaults to ``static/ckeditor/ckeditor/``. This does not work all the time, for example when using ``ManifestStaticFilesStorage``, any asset - packaging pipeline or whatnot. django-ckeditor is quite good at automatically - detecting the correct place even then, but sometimes you have to hardcode + packaging pipeline or whatnot. django-ckeditor is quite good at automatically + detecting the correct place even then, but sometimes you have to hardcode ``CKEDITOR_BASEPATH`` somewhere. This can be hardcoded in settings, i.e.:: CKEDITOR_BASEPATH = "/my_static/ckeditor/ckeditor" @@ -225,7 +225,7 @@ or you can load the media manually as it is done in the demo app:: {% load static %} - + When you need to render ``RichTextField``'s HTML output in your templates safely, just use ``{{ content|safe }}``, `Django's safe filter `_ diff --git a/ckeditor/static/ckeditor/ckeditor/CHANGES.md b/ckeditor/static/ckeditor/ckeditor/CHANGES.md index 08036149f..1bd7e1b5c 100644 --- a/ckeditor/static/ckeditor/ckeditor/CHANGES.md +++ b/ckeditor/static/ckeditor/ckeditor/CHANGES.md @@ -1,243 +1,368 @@ CKEditor 4 Changelog ==================== +## CKEditor 4.9.2 + +**Security Updates:** + +* Fixed XSS vulnerability in the [Enhanced Image](https://ckeditor.com/cke4/addon/image2) (`image2`) plugin reported by [Kyaw Min Thein](https://twitter.com/kyawminthein99). + + Issue summary: It was possible to execute XSS inside CKEditor using the `` tag and specially crafted HTML. Please note that the default presets (Basic/Standard/Full) do not include this plugin, so you are only at risk if you made a custom build and enabled this plugin. + +## CKEditor 4.9.1 + +Fixed Issues: + +* [#1835](https://github.com/ckeditor/ckeditor-dev/issues/1835): Fixed: Integration between [CKFinder](https://ckeditor.com/ckeditor-4/ckfinder/) and the [File Browser](https://ckeditor.com/cke4/addon/filebrowser) plugin does not work. + +## CKEditor 4.9 + +New Features: + +* [#932](https://github.com/ckeditor/ckeditor-dev/issues/932): Introduced Easy Image feature for inserting images that are automatically rescaled, optimized, responsive and delivered through a blazing-fast CDN. Three new plugins were added to support it: + * [Easy Image](https://ckeditor.com/cke4/addon/easyimage), + * [Cloud Services](https://ckeditor.com/cke4/addon/cloudservices) + * [Image Base](https://ckeditor.com/cke4/addon/imagebase) +* [#1338](https://github.com/ckeditor/ckeditor-dev/issues/1338): Keystroke labels are displayed for function keys (like F7, F8). +* [#643](https://github.com/ckeditor/ckeditor-dev/issues/643): The [File Browser](https://ckeditor.com/cke4/addon/filebrowser) plugin can now upload files using XHR requests. This allows for setting custom HTTP headers using the [`config.fileTools_requestHeaders`](https://docs.ckeditor.com/ckeditor4/docs/#!/api/CKEDITOR.config-cfg-fileTools_requestHeaders) configuration option. +* [#1365](https://github.com/ckeditor/ckeditor-dev/issues/1365): The [File Browser](https://ckeditor.com/cke4/addon/filebrowser) plugin uses XHR requests by default. +* [#1399](https://github.com/ckeditor/ckeditor-dev/issues/1399): Added the possibility to set [`CKEDITOR.config.startupFocus`](https://docs.ckeditor.com/ckeditor4/docs/#!/api/CKEDITOR.config-cfg-startupFocus) as `start` or `end` to specify where the editor focus should be after the initialization. +* [#1441](https://github.com/ckeditor/ckeditor-dev/issues/1441): The [Magic Line](https://ckeditor.com/cke4/addon/magicline) plugin line element can now be identified by the `data-cke-magic-line="1"` attribute. + +Fixed Issues: + +* [#595](https://github.com/ckeditor/ckeditor-dev/issues/595): Fixed: Pasting does not work on mobile devices. +* [#869](https://github.com/ckeditor/ckeditor-dev/issues/869): Fixed: Empty selection clears cached clipboard data in the editor. +* [#1419](https://github.com/ckeditor/ckeditor-dev/issues/1419): Fixed: The [Widget Selection](https://ckeditor.com/cke4/addon/widgetselection) plugin selects the editor content with the Alt+A key combination on Windows. +* [#1274](https://github.com/ckeditor/ckeditor-dev/issues/1274): Fixed: [Balloon Toolbar](https://ckeditor.com/cke4/addon/balloontoolbar) does not match a single selected image using the [`contextDefinition.cssSelector`](https://docs.ckeditor.com/ckeditor4/docs/#!/api/CKEDITOR.plugins.balloontoolbar.contextDefinition-property-cssSelector) matcher. +* [#1232](https://github.com/ckeditor/ckeditor-dev/issues/1232): Fixed: [Balloon Toolbar](https://ckeditor.com/cke4/addon/balloontoolbar) buttons should be registered as focusable elements. +* [#1342](https://github.com/ckeditor/ckeditor-dev/issues/1342): Fixed: [Balloon Toolbar](https://ckeditor.com/cke4/addon/balloontoolbar) should be re-positioned after the [`change`](https://docs.ckeditor.com/ckeditor4/docs/#!/api/CKEDITOR.editor-event-change) event. +* [#1426](https://github.com/ckeditor/ckeditor-dev/issues/1426): [IE8-9] Fixed: Missing [Balloon Toolbar](https://ckeditor.com/cke4/addon/balloontoolbar) background in the [Kama](https://ckeditor.com/cke4/addon/kama) skin. Thanks to [Christian Elmer](https://github.com/keinkurt)! +* [#1470](https://github.com/ckeditor/ckeditor-dev/issues/1470): Fixed: [Balloon Toolbar](https://ckeditor.com/cke4/addon/balloontoolbar) is not visible after drag and drop of a widget it is attached to. +* [#1048](https://github.com/ckeditor/ckeditor-dev/issues/1048): Fixed: [Balloon Panel](https://ckeditor.com/cke4/addon/balloonpanel) is not positioned properly when a margin is added to its non-static parent. +* [#889](https://github.com/ckeditor/ckeditor-dev/issues/889): Fixed: Unclear error message for width and height fields in the [Image](https://ckeditor.com/cke4/addon/image) and [Enhanced Image](https://ckeditor.com/cke4/addon/image2) plugins. +* [#859](https://github.com/ckeditor/ckeditor-dev/issues/859): Fixed: Cannot edit a link after a double-click on the text in the link. +* [#1013](https://github.com/ckeditor/ckeditor-dev/issues/1013): Fixed: [Paste from Word](https://ckeditor.com/cke4/addon/pastefromword) does not work correctly with the [`config.forcePasteAsPlainText`](https://docs.ckeditor.com/ckeditor4/docs/#!/api/CKEDITOR.config-cfg-forcePasteAsPlainText) option. +* [#1356](https://github.com/ckeditor/ckeditor-dev/issues/1356): Fixed: [Border parse function](https://docs.ckeditor.com/ckeditor4/docs/#!/api/CKEDITOR.tools.style.parse-method-border) does not allow spaces in the color value. +* [#1010](https://github.com/ckeditor/ckeditor-dev/issues/1010): Fixed: The CSS `border` shorthand property was incorrectly expanded ignoring the `border-color` style. +* [#1535](https://github.com/ckeditor/ckeditor-dev/issues/1535): Fixed: [Widget](https://ckeditor.com/cke4/addon/widget) mouseover border contrast is insufficient. +* [#1516](https://github.com/ckeditor/ckeditor-dev/issues/1516): Fixed: Fake selection allows removing content in read-only mode using the Backspace and Delete keys. +* [#1570](https://github.com/ckeditor/ckeditor-dev/issues/1570): Fixed: Fake selection allows cutting content in read-only mode using the Ctrl/Cmd + X keys. +* [#1363](https://github.com/ckeditor/ckeditor-dev/issues/1363): Fixed: Paste notification is unclear and it might confuse users. + +API Changes: + +* [#1346](https://github.com/ckeditor/ckeditor-dev/issues/1346): [Balloon Toolbar](https://ckeditor.com/cke4/addon/balloontoolbar) [context manager API](https://docs.ckeditor.com/ckeditor4/docs/#!/api/CKEDITOR.plugins.balloontoolbar.contextManager) is now available in the [`pluginDefinition.init`](https://docs.ckeditor.com/ckeditor4/docs/#!/api/CKEDITOR.pluginDefinition-method-init) method of the [requiring](https://docs.ckeditor.com/ckeditor4/docs/#!/api/CKEDITOR.pluginDefinition-property-requires) plugin. +* [#1530](https://github.com/ckeditor/ckeditor-dev/issues/1530): Added the possibility to use custom icons for [buttons](https://docs.ckeditor.com/ckeditor4/docs/#!/api/CKEDITOR_ui_button.html). + +Other Changes: + +* Updated [SCAYT](https://ckeditor.com/cke4/addon/scayt) (Spell Check As You Type) and [WebSpellChecker](https://ckeditor.com/cke4/addon/wsc) (WSC) plugins: + * SCAYT [`scayt_minWordLength`](https://docs.ckeditor.com/ckeditor4/latest/api/CKEDITOR_config.html#scayt_minWordLength) configuration option now defaults to 3 instead of 4. + * SCAYT default number of suggested words in the context menu changed to 3. + * [#90](https://github.com/WebSpellChecker/ckeditor-plugin-scayt/issues/90): Fixed: Selection is lost on link creation if SCAYT highlights the word. + * Fixed: SCAYT crashes when the browser `localStorage` is disabled. + * [IE11] Fixed: `Unable to get property type of undefined or null reference` error in the browser console when SCAYT is disabled/enabled. + * [#46](https://github.com/WebSpellChecker/ckeditor-plugin-wsc/issues/46): Fixed: Editing is blocked when remote spell checker server is offline. + * Fixed: User Dictionary cannot be created in WSC due to `You already have the dictionary` error. + * Fixed: Words with apostrophe `'` on the replacement make the WSC dialog inaccessible. + * Fixed: SCAYT/WSC causes the `Uncaught TypeError` error in the browser console. +* [#1337](https://github.com/ckeditor/ckeditor-dev/issues/1337): Updated the samples layout with the new CKEditor 4 logo and color scheme. +* [#1591](https://github.com/ckeditor/ckeditor-dev/issues/1591): CKBuilder and language tools are now downloaded over HTTPS. Thanks to [August Detlefsen](https://github.com/augustd)! + +## CKEditor 4.8 + +**Important Notes:** + +* [#1249](https://github.com/ckeditor/ckeditor-dev/issues/1249): Enabled the [Upload Image](https://ckeditor.com/cke4/addon/uploadimage) plugin by default in standard and full presets. Also, it will no longer log an error in case of missing [`config.imageUploadUrl`](https://docs.ckeditor.com/ckeditor4/docs/#!/api/CKEDITOR.config-cfg-imageUploadUrl) property. + +New Features: + +* [#933](https://github.com/ckeditor/ckeditor-dev/issues/933): Introduced [Balloon Toolbar](https://ckeditor.com/cke4/addon/balloontoolbar) plugin. +* [#662](https://github.com/ckeditor/ckeditor-dev/issues/662): Introduced image inlining for the [Paste from Word](https://ckeditor.com/cke4/addon/pastefromword) plugin. +* [#468](https://github.com/ckeditor/ckeditor-dev/issues/468): [Edge] Introduced support for the Clipboard API. +* [#607](https://github.com/ckeditor/ckeditor-dev/issues/607): Manually inserted Hex color is prefixed with a hash character (`#`) if needed. It ensures a valid Hex color value is used when setting the table cell border or background color with the [Color Dialog](https://ckeditor.com/cke4/addon/colordialog) window. +* [#584](https://github.com/ckeditor/ckeditor-dev/issues/584): [Font size and Family](https://ckeditor.com/cke4/addon/font) and [Format](https://ckeditor.com/cke4/addon/format) drop-downs are not toggleable anymore. Default option to reset styles added. +* [#856](https://github.com/ckeditor/ckeditor-dev/issues/856): Introduced the [`CKEDITOR.tools.keystrokeToArray`](https://docs.ckeditor.com/ckeditor4/docs/#!/api/CKEDITOR.tools-method-keystrokeToArray) method. It converts a keystroke into its string representation, returning every key name as a separate array element. +* [#1053](https://github.com/ckeditor/ckeditor-dev/issues/1053): Introduced the [`CKEDITOR.tools.object.merge`](https://docs.ckeditor.com/ckeditor4/docs/#!/api/CKEDITOR.tools.object-method-merge) method. It allows to merge two objects, returning the new object with all properties from both objects deeply cloned. +* [#1073](https://github.com/ckeditor/ckeditor-dev/issues/1073): Introduced the [`CKEDITOR.tools.array.every`](https://docs.ckeditor.com/ckeditor4/docs/#!/api/CKEDITOR.tools.array-method-every) method. It invokes a given test function on every array element and returns `true` if all elements pass the test. + +Fixed Issues: + +* [#796](https://github.com/ckeditor/ckeditor-dev/issues/796): Fixed: A list is pasted from OneNote in the reversed order. +* [#834](https://github.com/ckeditor/ckeditor-dev/issues/834): [IE9-11] Fixed: The editor does not save the selected state of radio buttons inserted by the [Form Elements](https://ckeditor.com/cke4/addon/forms) plugin. +* [#704](https://github.com/ckeditor/ckeditor-dev/issues/704): [Edge] Fixed: Using Ctrl/Cmd + Z breaks widget structure. +* [#591](https://github.com/ckeditor/ckeditor-dev/issues/591): Fixed: A column is inserted in a wrong order inside the table if any cell has a vertical split. +* [#787](https://github.com/ckeditor/ckeditor-dev/issues/787): Fixed: Using Cut inside a nested table does not cut the selected content. +* [#842](https://github.com/ckeditor/ckeditor-dev/issues/842): Fixed: List style not restored when toggling list indent level in the [Indent List](https://ckeditor.com/cke4/addon/indentlist) plugin. +* [#711](https://github.com/ckeditor/ckeditor-dev/issues/711): Fixed: Dragging widgets should only work with the left mouse button. +* [#862](https://github.com/ckeditor/ckeditor-dev/issues/862): Fixed: The "Object Styles" group in the [Styles Combo](https://ckeditor.com/cke4/addon/stylescombo) plugin is visible only if the whole element is selected. +* [#994](https://github.com/ckeditor/ckeditor-dev/pull/994): Fixed: Typo in the [`CKEDITOR.focusManager.focus`](https://docs.ckeditor.com/ckeditor4/docs/#!/api/CKEDITOR.focusManager-method-focus) API documentation. Thanks to [benjy](https://github.com/benjy)! +* [#1014](https://github.com/ckeditor/ckeditor-dev/issues/1014): Fixed: The [Table Tools](https://ckeditor.com/cke4/addon/tabletools) Cell Properties dialog is now [Advanced Content Filter](https://docs.ckeditor.com/ckeditor4/docs/#!/guide/dev_acf) aware — it is not possible to change the cell width or height if corresponding styles are disabled. +* [#877](https://github.com/ckeditor/ckeditor-dev/issues/877): Fixed: A list with custom bullets with exotic characters crashes the editor when [pasted from Word](https://ckeditor.com/cke4/addon/pastefromword). +* [#605](https://github.com/ckeditor/ckeditor-dev/issues/605): Fixed: Inline widgets do not preserve trailing spaces. +* [#1008](https://github.com/ckeditor/ckeditor-dev/issues/1008): Fixed: Shorthand Hex colors from the [`config.colorButton_colors`](https://docs.ckeditor.com/ckeditor4/docs/#!/api/CKEDITOR.config-cfg-colorButton_colors) option are not correctly highlighted in the [Color Button](https://ckeditor.com/cke4/addon/colorbutton) Text Color or Background Color panel. +* [#1094](https://github.com/ckeditor/ckeditor-dev/issues/1094): Fixed: Widget definition [`upcast`](https://docs.ckeditor.com/ckeditor4/docs/#!/api/CKEDITOR.plugins.widget.definition-property-upcasts) methods are called for every element. +* [#1057](https://github.com/ckeditor/ckeditor-dev/issues/1057): Fixed: The [Notification](https://ckeditor.com/addon/notification) plugin overwrites Web Notifications API due to leakage to the global scope. +* [#1068](https://github.com/ckeditor/ckeditor-dev/issues/1068): Fixed: Upload widget paste listener ignores changes to the [`uploadWidgetDefinition`](https://docs.ckeditor.com/ckeditor4/docs/#!/api/CKEDITOR.fileTools.uploadWidgetDefinition). +* [#921](https://github.com/ckeditor/ckeditor-dev/issues/921): Fixed: [Edge] CKEditor erroneously perceives internal copy and paste as type "external". +* [#1213](https://github.com/ckeditor/ckeditor-dev/issues/1213): Fixed: Multiple images uploaded using [Upload Image](https://ckeditor.com/cke4/addon/uploadimage) plugin are randomly duplicated or mangled. +* [#532](https://github.com/ckeditor/ckeditor-dev/issues/532): Fixed: Removed an outdated user guide link from the [About](https://ckeditor.com/cke4/addon/about) dialog. +* [#1221](https://github.com/ckeditor/ckeditor-dev/issues/1221): Fixed: Invalid CSS loaded by [Balloon Panel](https://ckeditor.com/cke4/addon/balloonpanel) plugin when [`config.skin`](https://docs.ckeditor.com/ckeditor4/docs/#!/api/CKEDITOR.config-cfg-skin) is loaded using a custom path. +* [#522](https://github.com/ckeditor/ckeditor-dev/issues/522): Fixed: Widget selection is not removed when widget is inside table cell with [Table Selection](https://ckeditor.com/cke4/addon/tableselection) plugin enabled. +* [#1027](https://github.com/ckeditor/ckeditor-dev/issues/1027): Fixed: Cannot add multiple images to the table with [Table Selection](https://ckeditor.com/cke4/addon/tableselection) plugin in certain situations. +* [#1069](https://github.com/ckeditor/ckeditor-dev/issues/1069): Fixed: Wrong shape processing by [Paste from Word](https://ckeditor.com/cke4/addon/pastefromword) plugin. +* [#995](https://github.com/ckeditor/ckeditor-dev/issues/995): Fixed: Hyperlinked image gets inserted twice by [Paste from Word](https://ckeditor.com/cke4/addon/pastefromword) plugin. +* [#1287](https://github.com/ckeditor/ckeditor-dev/issues/1287): Fixed: [Widget](https://ckeditor.com/cke4/addon/widget) plugin throws exception if included in editor build but not loaded into editor's instance. + +API Changes: + +* [#1097](https://github.com/ckeditor/ckeditor-dev/issues/1097): Widget [`upcast`](https://docs.ckeditor.com/ckeditor4/docs/#!/api/CKEDITOR.plugins.widget.definition-property-upcast) methods are now called in the [widget definition's](https://docs.ckeditor.com/ckeditor4/docs/#!/api/CKEDITOR.plugins.widget-property-definition) context. +* [#1118](https://github.com/ckeditor/ckeditor-dev/issues/1118): Added the `show` option in the [`balloonPanel.attach`](https://docs.ckeditor.com/ckeditor4/docs/#!/api/CKEDITOR.ui.balloonPanel-method-attach) method, allowing to attach a hidden [Balloon Panel](https://ckeditor.com/cke4/addon/balloonpanel) instance. +* [#1145](https://github.com/ckeditor/ckeditor-dev/issues/1145): Added the [`skipNotifications`](https://docs.ckeditor.com/ckeditor4/docs/#!/api/CKEDITOR.fileTools.uploadWidgetDefinition-property-skipNotifications) option to the [`CKEDITOR.fileTools.uploadWidgetDefinition`](https://docs.ckeditor.com/ckeditor4/docs/#!/api/CKEDITOR.fileTools.uploadWidgetDefinition), allowing to switch off default notifications displayed by upload widgets. + +Other Changes: + +* [#815](https://github.com/ckeditor/ckeditor-dev/issues/815): Removed Node.js dependency from the CKEditor build script. +* [#1041](https://github.com/ckeditor/ckeditor-dev/pull/1041), [#1131](https://github.com/ckeditor/ckeditor-dev/issues/1131): Updated URLs pointing to [CKSource](https://cksource.com/) and [CKEditor](https://ckeditor.com/) resources after the launch of new websites. + ## CKEditor 4.7.3 New Features: -* [#568](https://github.com/ckeditor/ckeditor-dev/issues/568): Added possibility to adjust nested editables' filters using the [`CKEDITOR.filter.disallowedContent`](https://docs.ckeditor.com/#!/api/CKEDITOR.filter-property-disallowedContent) property. +* [#568](https://github.com/ckeditor/ckeditor-dev/issues/568): Added possibility to adjust nested editables' filters using the [`CKEDITOR.filter.disallowedContent`](https://docs.ckeditor.com/ckeditor4/docs/#!/api/CKEDITOR.filter-property-disallowedContent) property. Fixed Issues: -* [#554](https://github.com/ckeditor/ckeditor-dev/issues/554): Fixed: [`change`](https://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-change) event not fired when typing the first character after pasting into the editor. Thanks to [Daniel Miller](https://github.com/millerdev)! +* [#554](https://github.com/ckeditor/ckeditor-dev/issues/554): Fixed: [`change`](https://docs.ckeditor.com/ckeditor4/docs/#!/api/CKEDITOR.editor-event-change) event not fired when typing the first character after pasting into the editor. Thanks to [Daniel Miller](https://github.com/millerdev)! * [#566](https://github.com/ckeditor/ckeditor-dev/issues/566): Fixed: The CSS `border` shorthand property with zero width (`border: 0px solid #000;`) causes the table to have the border attribute set to 1. -* [#779](https://github.com/ckeditor/ckeditor-dev/issues/779): Fixed: The [Remove Format](https://ckeditor.com/addon/removeformat) plugin removes elements with language definition inserted by the [Language](https://ckeditor.com/addon/language) plugin. -* [#423](https://github.com/ckeditor/ckeditor-dev/issues/423): Fixed: The [Paste from Word](https://ckeditor.com/addon/pastefromword) plugin pastes paragraphs into the editor even if [`CKEDITOR.config.enterMode`](https://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-enterMode) is set to `CKEDITOR.ENTER_BR`. -* [#719](https://github.com/ckeditor/ckeditor-dev/issues/719): Fixed: Image inserted using the [Enhanced Image](https://ckeditor.com/addon/image2) plugin can be resized when the editor is in [read-only mode](https://docs.ckeditor.com/#!/guide/dev_readonly). -* [#577](https://github.com/ckeditor/ckeditor-dev/issues/577): Fixed: The "Delete Columns" command provided by the [Table Tools](https://ckeditor.com/addon/tabletools) plugin throws an error when trying to delete columns. +* [#779](https://github.com/ckeditor/ckeditor-dev/issues/779): Fixed: The [Remove Format](https://ckeditor.com/cke4/addon/removeformat) plugin removes elements with language definition inserted by the [Language](https://ckeditor.com/cke4/addon/language) plugin. +* [#423](https://github.com/ckeditor/ckeditor-dev/issues/423): Fixed: The [Paste from Word](https://ckeditor.com/cke4/addon/pastefromword) plugin pastes paragraphs into the editor even if [`CKEDITOR.config.enterMode`](https://docs.ckeditor.com/ckeditor4/docs/#!/api/CKEDITOR.config-cfg-enterMode) is set to `CKEDITOR.ENTER_BR`. +* [#719](https://github.com/ckeditor/ckeditor-dev/issues/719): Fixed: Image inserted using the [Enhanced Image](https://ckeditor.com/cke4/addon/image2) plugin can be resized when the editor is in [read-only mode](https://docs.ckeditor.com/ckeditor4/docs/#!/guide/dev_readonly). +* [#577](https://github.com/ckeditor/ckeditor-dev/issues/577): Fixed: The "Delete Columns" command provided by the [Table Tools](https://ckeditor.com/cke4/addon/tabletools) plugin throws an error when trying to delete columns. * [#867](https://github.com/ckeditor/ckeditor-dev/issues/867): Fixed: Typing into a selected table throws an error. -* [#817](https://github.com/ckeditor/ckeditor-dev/issues/817): Fixed: The [Save](https://ckeditor.com/addon/save) plugin does not work in [Source Mode](https://ckeditor.com/addon/sourcearea). +* [#817](https://github.com/ckeditor/ckeditor-dev/issues/817): Fixed: The [Save](https://ckeditor.com/cke4/addon/save) plugin does not work in [Source Mode](https://ckeditor.com/cke4/addon/sourcearea). Other Changes: -* Updated the [WebSpellChecker](http://ckeditor.com/addon/wsc) plugin: +* Updated the [WebSpellChecker](https://ckeditor.com/cke4/addon/wsc) plugin: * [#40](https://github.com/WebSpellChecker/ckeditor-plugin-wsc/issues/40): Fixed: IE10 throws an error when spell checking is started. -* [#800](https://github.com/ckeditor/ckeditor-dev/issues/800): Added the [`CKEDITOR.dom.selection.isCollapsed`](https://docs.ckeditor.com/#!/api/CKEDITOR.dom.selection-method-isCollapsed) method which is a simpler way to check if the selection is collapsed. -* [#830](https://github.com/ckeditor/ckeditor-dev/issues/830): Added an option to define which dialog tab should be shown by default when creating [`CKEDITOR.dialogCommand`](https://docs.ckeditor.com/#!/api/CKEDITOR.dialogCommand). +* [#800](https://github.com/ckeditor/ckeditor-dev/issues/800): Added the [`CKEDITOR.dom.selection.isCollapsed`](https://docs.ckeditor.com/ckeditor4/docs/#!/api/CKEDITOR.dom.selection-method-isCollapsed) method which is a simpler way to check if the selection is collapsed. +* [#830](https://github.com/ckeditor/ckeditor-dev/issues/830): Added an option to define which dialog tab should be shown by default when creating [`CKEDITOR.dialogCommand`](https://docs.ckeditor.com/ckeditor4/docs/#!/api/CKEDITOR.dialogCommand). ## CKEditor 4.7.2 New Features: -* [#455](https://github.com/ckeditor/ckeditor-dev/issues/455): Added [Advanced Content Filter](https://docs.ckeditor.com/#!/guide/dev_acf) integration with the [Justify](http://ckeditor.com/addon/justify) plugin. +* [#455](https://github.com/ckeditor/ckeditor-dev/issues/455): Added [Advanced Content Filter](https://docs.ckeditor.com/ckeditor4/docs/#!/guide/dev_acf) integration with the [Justify](https://ckeditor.com/cke4/addon/justify) plugin. Fixed Issues: * [#663](https://github.com/ckeditor/ckeditor-dev/issues/663): [Chrome] Fixed: Clicking the scrollbar throws an `Uncaught TypeError: element.is is not a function` error. -* [#694](https://github.com/ckeditor/ckeditor-dev/pull/694): Refactoring in the [Table Selection](http://ckeditor.com/addon/tableselection) plugin: +* [#694](https://github.com/ckeditor/ckeditor-dev/pull/694): Refactoring in the [Table Selection](https://ckeditor.com/cke4/addon/tableselection) plugin: * [#520](https://github.com/ckeditor/ckeditor-dev/issues/520): Fixed: Widgets cannot be properly pasted into a table cell. * [#460](https://github.com/ckeditor/ckeditor-dev/issues/460): Fixed: Editor gone after pasting into an editor within a table. -* [#579](https://github.com/ckeditor/ckeditor-dev/issues/579): Fixed: Internal `cke_table-faked-selection-table` class is visible in the Stylesheet Classes field of the [Table Properties](http://ckeditor.com/addon/table) dialog. -* [#545](https://github.com/ckeditor/ckeditor-dev/issues/545): [Edge] Fixed: Error thrown when pressing the [Select All](https://ckeditor.com/addon/selectall) button in [Source Mode](http://ckeditor.com/addon/sourcearea). -* [#582](https://github.com/ckeditor/ckeditor-dev/issues/582): Fixed: Double slash in the path to stylesheet needed by the [Table Selection](http://ckeditor.com/addon/tableselection) plugin. Thanks to [Marius Dumitru Florea](https://github.com/mflorea)! -* [#491](https://github.com/ckeditor/ckeditor-dev/issues/491): Fixed: Unnecessary dependency on the [Editor Toolbar](http://ckeditor.com/addon/toolbar) plugin inside the [Notification](http://ckeditor.com/addon/notification) plugin. -* [#646](https://github.com/ckeditor/ckeditor-dev/issues/646): Fixed: Error thrown into the browser console after opening the [Styles Combo](http://ckeditor.com/addon/stylescombo) plugin menu in the editor without any selection. -* [#501](https://github.com/ckeditor/ckeditor-dev/issues/501): Fixed: Double click does not open the dialog for modifying anchors inserted via the [Link](http://ckeditor.com/addon/link) plugin. -* [#9780](https://dev.ckeditor.com/ticket/9780): [IE8-9] Fixed: Clicking inside an empty [read-only](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-readOnly) editor throws an error. +* [#579](https://github.com/ckeditor/ckeditor-dev/issues/579): Fixed: Internal `cke_table-faked-selection-table` class is visible in the Stylesheet Classes field of the [Table Properties](https://ckeditor.com/cke4/addon/table) dialog. +* [#545](https://github.com/ckeditor/ckeditor-dev/issues/545): [Edge] Fixed: Error thrown when pressing the [Select All](https://ckeditor.com/cke4/addon/selectall) button in [Source Mode](https://ckeditor.com/cke4/addon/sourcearea). +* [#582](https://github.com/ckeditor/ckeditor-dev/issues/582): Fixed: Double slash in the path to stylesheet needed by the [Table Selection](https://ckeditor.com/cke4/addon/tableselection) plugin. Thanks to [Marius Dumitru Florea](https://github.com/mflorea)! +* [#491](https://github.com/ckeditor/ckeditor-dev/issues/491): Fixed: Unnecessary dependency on the [Editor Toolbar](https://ckeditor.com/cke4/addon/toolbar) plugin inside the [Notification](https://ckeditor.com/cke4/addon/notification) plugin. +* [#646](https://github.com/ckeditor/ckeditor-dev/issues/646): Fixed: Error thrown into the browser console after opening the [Styles Combo](https://ckeditor.com/cke4/addon/stylescombo) plugin menu in the editor without any selection. +* [#501](https://github.com/ckeditor/ckeditor-dev/issues/501): Fixed: Double click does not open the dialog for modifying anchors inserted via the [Link](https://ckeditor.com/cke4/addon/link) plugin. +* [#9780](https://dev.ckeditor.com/ticket/9780): [IE8-9] Fixed: Clicking inside an empty [read-only](https://docs.ckeditor.com/ckeditor4/docs/#!/api/CKEDITOR.editor-property-readOnly) editor throws an error. * [#16820](https://dev.ckeditor.com/ticket/16820): [IE10] Fixed: Clicking below a single horizontal rule throws an error. -* [#426](https://github.com/ckeditor/ckeditor-dev/issues/426): Fixed: The [`range.cloneContents`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.range-method-cloneContents) method selects the whole element when the selection starts at the beginning of that element. -* [#644](https://github.com/ckeditor/ckeditor-dev/issues/644): Fixed: The [`range.extractContents`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.range-method-extractContents) method returns an incorrect result when multiple nodes are selected. -* [#684](https://github.com/ckeditor/ckeditor-dev/issues/684): Fixed: The [`elementPath.contains`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.elementPath-method-contains) method incorrectly excludes the last element instead of root when the `fromTop` parameter is set to `true`. +* [#426](https://github.com/ckeditor/ckeditor-dev/issues/426): Fixed: The [`range.cloneContents`](https://docs.ckeditor.com/ckeditor4/docs/#!/api/CKEDITOR.dom.range-method-cloneContents) method selects the whole element when the selection starts at the beginning of that element. +* [#644](https://github.com/ckeditor/ckeditor-dev/issues/644): Fixed: The [`range.extractContents`](https://docs.ckeditor.com/ckeditor4/docs/#!/api/CKEDITOR.dom.range-method-extractContents) method returns an incorrect result when multiple nodes are selected. +* [#684](https://github.com/ckeditor/ckeditor-dev/issues/684): Fixed: The [`elementPath.contains`](https://docs.ckeditor.com/ckeditor4/docs/#!/api/CKEDITOR.dom.elementPath-method-contains) method incorrectly excludes the last element instead of root when the `fromTop` parameter is set to `true`. Other Changes: -* Updated the [SCAYT](http://ckeditor.com/addon/scayt) (Spell Check As You Type) plugin: +* Updated the [SCAYT](https://ckeditor.com/cke4/addon/scayt) (Spell Check As You Type) plugin: * [#148](https://github.com/WebSpellChecker/ckeditor-plugin-scayt/issues/148): Fixed: SCAYT leaves underlined word after the CKEditor Replace dialog corrects it. -* [#751](https://github.com/ckeditor/ckeditor-dev/issues/751): Added the [`CKEDITOR.dom.nodeList.toArray`](https://docs.ckeditor.com/#!/api/CKEDITOR.dom.nodeList-method-toArray) method which returns an array representation of a [node list](https://docs.ckeditor.com/#!/api/CKEDITOR.dom.nodeList). +* [#751](https://github.com/ckeditor/ckeditor-dev/issues/751): Added the [`CKEDITOR.dom.nodeList.toArray`](https://docs.ckeditor.com/ckeditor4/docs/#!/api/CKEDITOR.dom.nodeList-method-toArray) method which returns an array representation of a [node list](https://docs.ckeditor.com/ckeditor4/docs/#!/api/CKEDITOR.dom.nodeList). ## CKEditor 4.7.1 New Features: * Added a new Mexican Spanish localization. Thanks to [David Alexandro Rodriguez](https://www.transifex.com/user/profile/darsco16/)! -* [#413](https://github.com/ckeditor/ckeditor-dev/issues/413): Added Paste as Plain Text keyboard shortcut to the [Accessibility Help](http://ckeditor.com/addon/a11yhelp) instructions. +* [#413](https://github.com/ckeditor/ckeditor-dev/issues/413): Added Paste as Plain Text keyboard shortcut to the [Accessibility Help](https://ckeditor.com/cke4/addon/a11yhelp) instructions. Fixed Issues: -* [#515](https://github.com/ckeditor/ckeditor-dev/issues/515): [Chrome] Fixed: Mouse actions on CKEditor scrollbar throw an exception when the [Table Selection](http://ckeditor.com/addon/tableselection) plugin is loaded. +* [#515](https://github.com/ckeditor/ckeditor-dev/issues/515): [Chrome] Fixed: Mouse actions on CKEditor scrollbar throw an exception when the [Table Selection](https://ckeditor.com/cke4/addon/tableselection) plugin is loaded. * [#493](https://github.com/ckeditor/ckeditor-dev/issues/493): Fixed: Selection started from a nested table causes an error in the browser while scrolling down. * [#415](https://github.com/ckeditor/ckeditor-dev/issues/415): [Firefox] Fixed: Enter key breaks the table structure when pressed in a table selection. * [#457](https://github.com/ckeditor/ckeditor-dev/issues/457): Fixed: Error thrown when deleting content from the editor with no selection. -* [#478](https://github.com/ckeditor/ckeditor-dev/issues/478): [Chrome] Fixed: Error thrown by the [Enter Key](http://ckeditor.com/addon/enterkey) plugin when pressing Enter with no selection. -* [#424](https://github.com/ckeditor/ckeditor-dev/issues/424): Fixed: Error thrown by [Tab Key Handling](http://ckeditor.com/addon/tab) and [Indent List](http://ckeditor.com/addon/indentlist) plugins when pressing Tab with no selection in inline editor. -* [#476](https://github.com/ckeditor/ckeditor-dev/issues/476): Fixed: Anchors inserted with the [Link](http://ckeditor.com/addon/link) plugin on collapsed selection cannot be edited. -* [#417](https://github.com/ckeditor/ckeditor-dev/issues/417): Fixed: The [Table Resize](http://ckeditor.com/addon/tableresize) plugin throws an error when used with a table with only header or footer rows. -* [#523](https://github.com/ckeditor/ckeditor-dev/issues/523): Fixed: The [`editor.getCommandKeystroke`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-getCommandKeystroke) method does not obtain the correct keystroke. -* [#534](https://github.com/ckeditor/ckeditor-dev/issues/534): [IE] Fixed: [Paste from Word](http://ckeditor.com/addon/pastefromword) does not work in Quirks Mode. -* [#450](https://github.com/ckeditor/ckeditor-dev/issues/450): Fixed: [`CKEDITOR.filter`](http://docs.ckeditor.com/#!/api/CKEDITOR.filter) incorrectly transforms the `margin` CSS property. +* [#478](https://github.com/ckeditor/ckeditor-dev/issues/478): [Chrome] Fixed: Error thrown by the [Enter Key](https://ckeditor.com/cke4/addon/enterkey) plugin when pressing Enter with no selection. +* [#424](https://github.com/ckeditor/ckeditor-dev/issues/424): Fixed: Error thrown by [Tab Key Handling](https://ckeditor.com/cke4/addon/tab) and [Indent List](https://ckeditor.com/cke4/addon/indentlist) plugins when pressing Tab with no selection in inline editor. +* [#476](https://github.com/ckeditor/ckeditor-dev/issues/476): Fixed: Anchors inserted with the [Link](https://ckeditor.com/cke4/addon/link) plugin on collapsed selection cannot be edited. +* [#417](https://github.com/ckeditor/ckeditor-dev/issues/417): Fixed: The [Table Resize](https://ckeditor.com/cke4/addon/tableresize) plugin throws an error when used with a table with only header or footer rows. +* [#523](https://github.com/ckeditor/ckeditor-dev/issues/523): Fixed: The [`editor.getCommandKeystroke`](https://docs.ckeditor.com/ckeditor4/docs/#!/api/CKEDITOR.editor-method-getCommandKeystroke) method does not obtain the correct keystroke. +* [#534](https://github.com/ckeditor/ckeditor-dev/issues/534): [IE] Fixed: [Paste from Word](https://ckeditor.com/cke4/addon/pastefromword) does not work in Quirks Mode. +* [#450](https://github.com/ckeditor/ckeditor-dev/issues/450): Fixed: [`CKEDITOR.filter`](https://docs.ckeditor.com/ckeditor4/docs/#!/api/CKEDITOR.filter) incorrectly transforms the `margin` CSS property. ## CKEditor 4.7 **Important Notes:** -* [#13793](http://dev.ckeditor.com/ticket/13793): The [`embed_provider`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-embed_provider) configuration option for the [Media Embed](http://ckeditor.com/addon/embed) and [Semantic Media Embed](http://ckeditor.com/addon/embedsemantic) plugins is no longer preset by default. -* The [UI Color](http://ckeditor.com/addon/uicolor) plugin now uses a custom color picker instead of the `YUI 2.7.0` library which has some known vulnerabilities (it's a security precaution, there was no security issue in CKEditor due to the way it was used). +* [#13793](https://dev.ckeditor.com/ticket/13793): The [`embed_provider`](https://docs.ckeditor.com/ckeditor4/docs/#!/api/CKEDITOR.config-cfg-embed_provider) configuration option for the [Media Embed](https://ckeditor.com/cke4/addon/embed) and [Semantic Media Embed](https://ckeditor.com/cke4/addon/embedsemantic) plugins is no longer preset by default. +* The [UI Color](https://ckeditor.com/cke4/addon/uicolor) plugin now uses a custom color picker instead of the `YUI 2.7.0` library which has some known vulnerabilities (it's a security precaution, there was no security issue in CKEditor due to the way it was used). New Features: -* [#16755](http://dev.ckeditor.com/ticket/16755): Added the [Table Selection](http://ckeditor.com/addon/tableselection) plugin that lets you select and manipulate an arbitrary rectangular table fragment (a few cells, a row or a column). -* [#16961](http://dev.ckeditor.com/ticket/16961): Added support for pasting from Microsoft Excel. -* [#13381](http://dev.ckeditor.com/ticket/13381): Dynamic code evaluation call in [`CKEDITOR.template`](http://docs.ckeditor.com/#!/api/CKEDITOR.template) removed. CKEditor can now be used without the `unsafe-eval` Content Security Policy. Thanks to [Caridy Patiño](http://caridy.name)! -* [#16971](http://dev.ckeditor.com/ticket/16971): Added support for color in the `background` property containing also other styles for table cells in the [Table Tools](http://ckeditor.com/addon/tabletools) plugin. -* [#16847](http://dev.ckeditor.com/ticket/16847): Added support for parsing and inlining any formatting created using the Microsoft Word style system to the [Paste from Word](http://ckeditor.com/addon/pastefromword) plugin. -* [#16818](http://dev.ckeditor.com/ticket/16818): Added table cell height parsing in the [Paste from Word](http://ckeditor.com/addon/pastefromword) plugin. -* [#16850](http://dev.ckeditor.com/ticket/16850): Added a new [`config.enableContextMenu`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-enableContextMenu) configuration option for enabling and disabling the [context menu](http://ckeditor.com/addon/contextmenu). -* [#16937](http://dev.ckeditor.com/ticket/16937): The `command` parameter in [CKEDITOR.editor.getCommandKeystroke](http://docs.ckeditor.dev/#!/api/CKEDITOR.editor-method-getCommandKeystroke) now also accepts a command name as an argument. -* [#17010](http://dev.ckeditor.com/ticket/17010): The [`CKEDITOR.dom.range.shrink`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.range-method-shrink) method now allows for skipping bogus `
` elements. +* [#16755](https://dev.ckeditor.com/ticket/16755): Added the [Table Selection](https://ckeditor.com/cke4/addon/tableselection) plugin that lets you select and manipulate an arbitrary rectangular table fragment (a few cells, a row or a column). +* [#16961](https://dev.ckeditor.com/ticket/16961): Added support for pasting from Microsoft Excel. +* [#13381](https://dev.ckeditor.com/ticket/13381): Dynamic code evaluation call in [`CKEDITOR.template`](https://docs.ckeditor.com/ckeditor4/docs/#!/api/CKEDITOR.template) removed. CKEditor can now be used without the `unsafe-eval` Content Security Policy. Thanks to [Caridy Patiño](http://caridy.name)! +* [#16971](https://dev.ckeditor.com/ticket/16971): Added support for color in the `background` property containing also other styles for table cells in the [Table Tools](https://ckeditor.com/cke4/addon/tabletools) plugin. +* [#16847](https://dev.ckeditor.com/ticket/16847): Added support for parsing and inlining any formatting created using the Microsoft Word style system to the [Paste from Word](https://ckeditor.com/cke4/addon/pastefromword) plugin. +* [#16818](https://dev.ckeditor.com/ticket/16818): Added table cell height parsing in the [Paste from Word](https://ckeditor.com/cke4/addon/pastefromword) plugin. +* [#16850](https://dev.ckeditor.com/ticket/16850): Added a new [`config.enableContextMenu`](https://docs.ckeditor.com/ckeditor4/docs/#!/api/CKEDITOR.config-cfg-enableContextMenu) configuration option for enabling and disabling the [context menu](https://ckeditor.com/cke4/addon/contextmenu). +* [#16937](https://dev.ckeditor.com/ticket/16937): The `command` parameter in [CKEDITOR.editor.getCommandKeystroke](http://docs.ckeditor.dev/#!/api/CKEDITOR.editor-method-getCommandKeystroke) now also accepts a command name as an argument. +* [#17010](https://dev.ckeditor.com/ticket/17010): The [`CKEDITOR.dom.range.shrink`](https://docs.ckeditor.com/ckeditor4/docs/#!/api/CKEDITOR.dom.range-method-shrink) method now allows for skipping bogus `
` elements. Fixed Issues: -* [#16935](http://dev.ckeditor.com/ticket/16935): [Chrome] Fixed: Blurring the editor in [Source Mode](http://ckeditor.com/addon/sourcearea) throws an error. -* [#16825](http://dev.ckeditor.com/ticket/16825): [Chrome] Fixed: Error thrown when destroying a focused inline editor. -* [#16857](http://dev.ckeditor.com/ticket/16857): Fixed: Ctrl+Shift+V blocked by [Copy Formatting](http://ckeditor.com/addon/copyformatting). -* [#16845](https://dev.ckeditor.com/ticket/16845): [IE] Fixed: Cursor jumps to the top of the scrolled editor after focusing it when the [Copy Formatting](http://ckeditor.com/addon/copyformatting) plugin is enabled. -* [#16786](http://dev.ckeditor.com/ticket/16786): Fixed: Added missing translations for the [Copy Formatting](http://ckeditor.com/addon/copyformatting) plugin. -* [#14714](http://dev.ckeditor.com/ticket/14714): [WebKit/Blink] Fixed: Exception thrown on refocusing a blurred inline editor. -* [#16913](http://dev.ckeditor.com/ticket/16913): [Firefox, IE] Fixed: [Paste as Plain Text](http://ckeditor.com/addon/pastetext) keystroke does not work. -* [#16968](http://dev.ckeditor.com/ticket/16968): Fixed: [Safari] [Paste as Plain Text](http://ckeditor.com/addon/pastetext) is not handled by the editor. -* [#16912](http://dev.ckeditor.com/ticket/16912): Fixed: Exception thrown when a single image is pasted using [Paste from Word](http://ckeditor.com/addon/pastefromword). -* [#16821](http://dev.ckeditor.com/ticket/16821): Fixed: Extraneous `` elements with `height` style stacked when [pasting from Word](http://ckeditor.com/addon/pastefromword). -* [#16866](http://dev.ckeditor.com/ticket/16866): [IE, Edge] Fixed: Whitespaces not preserved when [pasting from Word](http://ckeditor.com/addon/pastefromword). -* [#16860](http://dev.ckeditor.com/ticket/16860): Fixed: Paragraphs which only look like lists incorrectly transformed into them when [pasting from Word](http://ckeditor.com/addon/pastefromword). -* [#16817](http://dev.ckeditor.com/ticket/16817): Fixed: When [pasting from Word](http://ckeditor.com/addon/pastefromword), paragraphs are transformed into lists with some corrupted data. -* [#16833](http://dev.ckeditor.com/ticket/16833): [IE11] Fixed: Malformed list with headers [pasted from Word](http://ckeditor.com/addon/pastefromword). -* [#16826](http://dev.ckeditor.com/ticket/16826): [IE] Fixed: Superfluous paragraphs within lists [pasted from Word](http://ckeditor.com/addon/pastefromword). -* [#12465](http://dev.ckeditor.com/ticket/12465): Fixed: Cannot change the state of checkboxes or radio buttons if the properties dialog was invoked with a double-click. -* [#13062](http://dev.ckeditor.com/ticket/13062): Fixed: Impossible to unlink when the caret is at the edge of the link. -* [#13585](http://dev.ckeditor.com/ticket/13585): Fixed: Error when wrapping two adjacent `
` elements with a `
`. -* [#16811](http://dev.ckeditor.com/ticket/16811): Fixed: Table alignment is not preserved by the [Paste from Word](http://ckeditor.com/addon/pastefromword) plugin. -* [#16810](http://dev.ckeditor.com/ticket/16810): Fixed: Vertical align in tables is not supported by the [Paste from Word](http://ckeditor.com/addon/pastefromword) plugin. -* [#11956](http://dev.ckeditor.com/ticket/11956): [Blink, IE] Fixed: [Link](http://ckeditor.com/addon/link) dialog does not open on a double click on the second word of the link with a background color or other styles. -* [#10472](http://dev.ckeditor.com/ticket/10472): Fixed: Unable to use [Table Resize](http://ckeditor.com/addon/tableresize) on table header and footer. -* [#14762](http://dev.ckeditor.com/ticket/14762): Fixed: Hovering over an empty table (without rows or cells) throws an error when the [Table Resize](http://ckeditor.com/addon/tableresize) plugin is active. -* [#16777](https://dev.ckeditor.com/ticket/16777): [Edge] Fixed: The [Clipboard](http://ckeditor.com/addon/clipboard) plugin does not allow to drop widgets into the editor. +* [#16935](https://dev.ckeditor.com/ticket/16935): [Chrome] Fixed: Blurring the editor in [Source Mode](https://ckeditor.com/cke4/addon/sourcearea) throws an error. +* [#16825](https://dev.ckeditor.com/ticket/16825): [Chrome] Fixed: Error thrown when destroying a focused inline editor. +* [#16857](https://dev.ckeditor.com/ticket/16857): Fixed: Ctrl+Shift+V blocked by [Copy Formatting](https://ckeditor.com/cke4/addon/copyformatting). +* [#16845](https://dev.ckeditor.com/ticket/16845): [IE] Fixed: Cursor jumps to the top of the scrolled editor after focusing it when the [Copy Formatting](https://ckeditor.com/cke4/addon/copyformatting) plugin is enabled. +* [#16786](https://dev.ckeditor.com/ticket/16786): Fixed: Added missing translations for the [Copy Formatting](https://ckeditor.com/cke4/addon/copyformatting) plugin. +* [#14714](https://dev.ckeditor.com/ticket/14714): [WebKit/Blink] Fixed: Exception thrown on refocusing a blurred inline editor. +* [#16913](https://dev.ckeditor.com/ticket/16913): [Firefox, IE] Fixed: [Paste as Plain Text](https://ckeditor.com/cke4/addon/pastetext) keystroke does not work. +* [#16968](https://dev.ckeditor.com/ticket/16968): Fixed: [Safari] [Paste as Plain Text](https://ckeditor.com/cke4/addon/pastetext) is not handled by the editor. +* [#16912](https://dev.ckeditor.com/ticket/16912): Fixed: Exception thrown when a single image is pasted using [Paste from Word](https://ckeditor.com/cke4/addon/pastefromword). +* [#16821](https://dev.ckeditor.com/ticket/16821): Fixed: Extraneous `` elements with `height` style stacked when [pasting from Word](https://ckeditor.com/cke4/addon/pastefromword). +* [#16866](https://dev.ckeditor.com/ticket/16866): [IE, Edge] Fixed: Whitespaces not preserved when [pasting from Word](https://ckeditor.com/cke4/addon/pastefromword). +* [#16860](https://dev.ckeditor.com/ticket/16860): Fixed: Paragraphs which only look like lists incorrectly transformed into them when [pasting from Word](https://ckeditor.com/cke4/addon/pastefromword). +* [#16817](https://dev.ckeditor.com/ticket/16817): Fixed: When [pasting from Word](https://ckeditor.com/cke4/addon/pastefromword), paragraphs are transformed into lists with some corrupted data. +* [#16833](https://dev.ckeditor.com/ticket/16833): [IE11] Fixed: Malformed list with headers [pasted from Word](https://ckeditor.com/cke4/addon/pastefromword). +* [#16826](https://dev.ckeditor.com/ticket/16826): [IE] Fixed: Superfluous paragraphs within lists [pasted from Word](https://ckeditor.com/cke4/addon/pastefromword). +* [#12465](https://dev.ckeditor.com/ticket/12465): Fixed: Cannot change the state of checkboxes or radio buttons if the properties dialog was invoked with a double-click. +* [#13062](https://dev.ckeditor.com/ticket/13062): Fixed: Impossible to unlink when the caret is at the edge of the link. +* [#13585](https://dev.ckeditor.com/ticket/13585): Fixed: Error when wrapping two adjacent `
` elements with a `
`. +* [#16811](https://dev.ckeditor.com/ticket/16811): Fixed: Table alignment is not preserved by the [Paste from Word](https://ckeditor.com/cke4/addon/pastefromword) plugin. +* [#16810](https://dev.ckeditor.com/ticket/16810): Fixed: Vertical align in tables is not supported by the [Paste from Word](https://ckeditor.com/cke4/addon/pastefromword) plugin. +* [#11956](https://dev.ckeditor.com/ticket/11956): [Blink, IE] Fixed: [Link](https://ckeditor.com/cke4/addon/link) dialog does not open on a double click on the second word of the link with a background color or other styles. +* [#10472](https://dev.ckeditor.com/ticket/10472): Fixed: Unable to use [Table Resize](https://ckeditor.com/cke4/addon/tableresize) on table header and footer. +* [#14762](https://dev.ckeditor.com/ticket/14762): Fixed: Hovering over an empty table (without rows or cells) throws an error when the [Table Resize](https://ckeditor.com/cke4/addon/tableresize) plugin is active. +* [#16777](https://dev.ckeditor.com/ticket/16777): [Edge] Fixed: The [Clipboard](https://ckeditor.com/cke4/addon/clipboard) plugin does not allow to drop widgets into the editor. * [#14894](https://dev.ckeditor.com/ticket/14894): [Chrome] Fixed: The editor scrolls to the top after focusing or when a dialog is opened. -* [#14769](https://dev.ckeditor.com/ticket/14769): Fixed: URLs with '-' in host are not detected by the [Auto Link](http://ckeditor.com/addon/autolink) plugin. +* [#14769](https://dev.ckeditor.com/ticket/14769): Fixed: URLs with '-' in host are not detected by the [Auto Link](https://ckeditor.com/cke4/addon/autolink) plugin. * [#16804](https://dev.ckeditor.com/ticket/16804): Fixed: Focus is not on the first menu item when the user opens a context menu or a drop-down list from the editor toolbar. * [#14407](https://dev.ckeditor.com/ticket/14407): [IE] Fixed: Non-editable widgets can be edited. -* [#16927](https://dev.ckeditor.com/ticket/16927): Fixed: An error thrown if a bundle containing the [Color Button](http://ckeditor.com/addon/colorbutton) plugin is run in ES5 strict mode. Thanks to [Igor Rubinovich](https://github.com/IgorRubinovich)! -* [#16920](http://dev.ckeditor.com/ticket/16920): Fixed: Several plugins not using the [Dialog](http://ckeditor.com/addon/dialog) plugin as a direct dependency. -* [PR#336](https://github.com/ckeditor/ckeditor-dev/pull/336): Fixed: Typo in [`CKEDITOR.getCss`](http://docs.ckeditor.com/#!/api/CKEDITOR-method-getCss) API documentation. Thanks to [knusperpixel](https://github.com/knusperpixel)! -* [#17027](http://dev.ckeditor.com/ticket/17027): Fixed: Command event data should be initialized as an empty object. -* Fixed the behavior of HTML parser when parsing `src`/`srcdoc` attributes of the `