14.0.0 (2019-08-26)
transformSets()
will now return aMap
instance linking transformed operations to the original operations. (61da3ec)- Brought support for RTL content in the
bindTwoStepCaretToAttribute()
helper. See ckeditor/ckeditor5#1151. (d57ff5a) - Introduced
model.Differ#refreshItem()
. (7dc8710) - Introduced the
is()
method to additional objects from the model and view realms. Closes #1667. (89dbe43)
- Fixed problem with handling very large text nodes. (a7ae813)
- Prevented
Differ
crashing in some scenarios involving attribute changes on elements. Closes #1764. (482e55e)
- Add
unwrapElement()
method to UpcastWriter. (9e97196) - Allowed for unbinding single elements from a marker name in
Mapper
. Closes #1758. (52e701d) - The issue tracker for this package was moved to https://github.com/ckeditor/ckeditor5/issues. See ckeditor/ckeditor5#1988. (6ed94c6)
- Introduced automatic marker re-rendering during conversion for markers which view element was unbound. Closes #1780. (5661fb6)
- Position getters (such as
#parent
or#index
) will throw when position points at an incorrect place in its root. Closes #1776. (a359866)
- New parameter introduced in
DowncastDispatcher#convertChanges()
. Now it isconvertChanges( differ, markers, writer )
. - Although it was rather impossible to use
DowncastDispatcher
without specifying any conversion API in the constructor, now it is a required parameter. - The
bindTwoStepCaretToAttribute()
helper arguments syntax has changed (replaced by an object). Please refer to the helper documentation to learn more. Mapper#unbindElementsFromMarkerName( markerName )
was replaced byMapper#unbindElementFromMarkerName( element, markerName )
.
13.2.1 (2019-07-10)
Internal changes only (updated dependencies, documentation, etc.).
13.2.0 (2019-07-04)
- Added
view.Document#event:beforeinput
. (c74c3d6) - Introduced the
type
parameter to themodel.createBatch()
method. (389b72e)
model.Writer#insert()
will no longer crash when the data to set contains markers that are already in the editor content. Closes #1721. (4ff0656)- Selection will not change during forbidden copy-paste operation inside table cell. Closes ckeditor/ckeditor5#1380. (ab15b17)
13.1.1 (2019-06-05)
- Prevented from losing selection attributes between operations (fixes a bug with text composition). Closes https://github.com/ckeditor/ckeditor5-typing/issues/188. (42dcb25)
13.1.0 (2019-04-10)
-
Model#insertContent()
will return a range affected by the insertion. (f4e4644)In
Model#deleteContent()
, addeddoNotAutoparagraph
flag tooptions
.Position
andLivePosition
static creators should handlestickiness
param. -
Added possibility to refresh the marker with no changes through
Writer#updateMarker()
method. Closes #1649. (cf56d90) -
Introduced
Schema#setAttributeProperties()
andSchema#getAttributeProperties()
methods. Closes ckeditor/ckeditor5#1659. (1c6f83a) -
Introduced
UpcastConversionApi#getSplitParts()
. Also, provided a way to set upcast conversion helper fired for every view element. Closes ckeditor/ckeditor5#1580. Closes ckeditor/ckeditor5#1581. (d0ee3f4)
view.DowncastWriter
will now correctly wrap and unwrap nested attribute elements. Closes #1716. Closes ckeditor/ckeditor5-font#30. (4126359)- Attribute and remove change on intersecting ranges done in the same change block will be correctly saved in
Differ
and downcasted. Closes ckeditor/ckeditor5#1645. (b2a9d86) - Editor will no longer crash during undo in some pasting+remove scenarios. Closes #1701. (ca619e7)
- Made sure that
Schema#getAttributeProperties()
always returns an object. Closes #1717. (b3f5da3) - Markers should be now correctly upcasted inside any element. Closes #1697. (3706324)
Model#deleteContent()
will not throw anymore if the passed selection is in the graveyard root. Closes #1706. (bd875c7)- The editor will not throw an error when updating an empty fake selection container. Closes #1714. (c48f5a4)
13.0.0 (2019-02-28)
- Added an additional event in markers conversion. Improved how
MarkerOperation
is transformed during undo. Closes #1604. (da5a390) - Implemented
Selection#is()
andDocumentSelection#is()
methods in both the model and the view. Closes #1663. (aac4948) - Introduce the
selection.getTopMostBlocks()
method. (a9c41c8) - Introduce the read-only
View#isRenderingInProgress
flag to check if the document is in the rendering phase. Closes ckeditor/ckeditor5#1530. (6577d04) - Introduced
Differ#getChangedMarkers
. Closes #1658. (2e04af7) - Introduced
DocumentSelection#markers
collection. Closes #1615. (b2c1d72) - Introduced support for inline objects (enables support for inline widgets). Introduced
Schema#isInline()
. Closes [ckeditor/ckeditor5#1049](ckeditor/ckeditor5#1049). Closes [ckeditor/ckeditor5#1426](ckeditor/ckeditor5#1426). (6b36bf1) - Introduced whitespace trimming to
Model#hasContent()
.DataController#get()
method can now trim empty data (so it returns empty string instead of<p> </p>
). Closes [ckeditor/ckeditor5#401](ckeditor/ckeditor5#401). (2b95dc3) - Moved the root element DOM attributes management from the UI to the engine. Made it possible to use
addPlaceholder()
(nowenablePlaceholder()
) on the root editable. Introduced theView.detachDomRoot()
method. Implemented additional placeholder helpers (showPlaceholder()
,hidePlaceholder()
,needsPlaceholder()
) (see ckeditor/ckeditor5#479). Closes #899. (21dee6b)
-
MarkerOperation
transformation in undo. Closes #1668. (c9932b8) -
Selection#getTopMostBlocks()
should not leak from limit elements. Closes ckeditor/ckeditor5-table#163. (7bc0338) -
All content is properly removed after undoing paste in some scenarios. Closes [ckeditor/ckeditor5#1540](ckeditor/ckeditor5#1540). (08855d3)
-
Converter priority passing in
conversion.attributeToElement()
. Closes #1617. (fe6d17d) -
Fake selection container should be correctly appended to the new editable element when creating a new fake selection in a different editable element than the one which was focused before. Closes [ckeditor/ckeditor5#1523](ckeditor/ckeditor5#1523). (3b53d5a)
-
Filter out fake selection container before comparing DOM view root children in view renderer. Closes ckeditor/ckeditor5#1578. (6591f87)
-
Moving to the same position is not handled by the
Differ
as a change. (7dfaae6) -
Prevented
model.Writer
from inserting empty text nodes. Closes #1320. (47070b5) -
Prevented
View
from firing therender
event if there were no changes since the last rendering. Closes #1653. Closes #1660. (558638c) -
Renamed the event during selection attributes conversion.
attribute:key
becomes toattribute:key:$text
. Closes #1597. (fd7734e) -
Stopped invoking
view.render()
byEditingController
when the model document isn't changed. Closes #1653. (5d97fd6) -
Fixed memory leaks during editor initialization and destruction (see ckeditor/ckeditor5#1341). (bf86ffa)
-
Undo and redo no longer crashes in scenarios featuring pasting content into earlier pasted content. Closes [ckeditor/ckeditor5#1385](ckeditor/ckeditor5#1385). (551ab50)
-
Update model selection attributes and markers after each change that affects the selection. Closes #1673. (4f9ac0e)
-
Add selection post-fixer improvements. Closes #1593. (7f40831)
- Added support for handling data in multiple roots in
DataController
. Closes #1626. (0fb4295) - Change
Conversion
class API. Closes #1640. (e7d09cd) - Introduced
editor.data#ready
event. (46d9243) - Removed
wrap()
from public API. Closes #1616. (1c7ef68) - Swapped the order of parameters in
Schema#findAllowedParent()
. Now those parameters match to parameters in other methods of theSchema
class. Closes #1636. (6515558) - Upcast element to attribute defaults to
low
priority instead ofnormal
. Closes ckeditor/ckeditor5#1399. (c33c49c) - Expose conversion utilities. Closes #1556. (9306c22)
- Upgraded minimal versions of Node to
8.0.0
and npm to5.7.1
. See: ckeditor/ckeditor5#1507. (612ea3c) DataController#get()
method now returns an empty string when the editor content is empty (instead of returning e.g.<p> </p>
).- The wrap() conversion helper was removed from public API.
- The
attachPlaceholder()
has been renamed toenablePlaceholder()
. enablePlaceholder()
accepts a configuration object instead of separate parameters.- The
detachPlaceholder()
has been renamed todisablePlaceholder()
. - The
Conversion#register()
method was removed from the public API. Use constructor parameters to pass dispatchers andConversion#addAlias()
to register an alternative conversion group for registered upcast or downcast dispatchers. - The
editor#dataReady
event was removed. Theeditor.data#ready
event has been introduced and should be used instead. - Swapped the order of parameters in
Schema#findAllowedParent()
. - The second parameter (
rootName
) fromDataController#init()
method has been removed. To initialize data on a root different than default one an object withrootName
-data
pair should be passed. - The second parameter (
rootName
) fromDataController#set()
method has been removed. To set data on a root different than default one an object withrootName
-data
pair should be passed. - The
editing.view.render()
method was renamed toediting.view.forceRender()
. It should be used with caution as it will re-render editing view and repaint the UI. - The
conversion.register()
method now accepts single options object as a parameter. - The
downcastElementToElement()
helper was removed from public API. Useconversion.for( 'downcast' ).elementToElement()
instead. - The
downcastAttributeToElement()
helper was removed from public API. Useconversion.for( 'downcast' ).attributeToElement()
instead. - The
downcastAttributeToAttribute()
helper was removed from public API. Useconversion.for( 'downcast' ).attributeToAttribute()
instead. - The
downcastMarkerToElement()
helper was removed from public API. Useconversion.for( 'downcast' ).markerToElement()
instead. - The
downcastMarkerToHighlight()
helper was removed from public API. Useconversion.for( 'downcast' ).markerToHighlight()
instead. - The
upcastElementToElement()
helper was removed from public API. Useconversion.for( 'upcast' ).elementToElement()
instead. - The
upcastElementToAttribute()
helper was removed from public API. Useconversion.for( 'upcast' ).elementToAttribute()
instead. - The
upcastAttributeToAttribute()
helper was removed from public API. Useconversion.for( 'upcast' ).attributeToAttribute()
instead. - The
upcastElementToMarker()
helper was removed from public API. Useconversion.for( 'upcast' ).elementToMarker()
instead. - The
insertUIElement()
andremoveUIElement()
downcast converters were removed from public API. Useconversion.for( 'downcast' ).markerToElement()
instead. - The
highlightText()
,highlightElement()
andremoveHighlight()
downcast converters were removed from public API. Useconversion.for( 'downcast' ).markerToHighlight()
instead. - The
insertElement()
downcast converter was removed from public API. Useconversion.for( 'downcast' ).elementToElement()
instead. - The
changeAttribute()
downcast converter was removed from public API. Useconversion.for( 'downcast' ).attributeToAttribute()
instead.
12.0.0 (2018-12-05)
-
Introduced
createDocumentFragment()
,createElement()
andcreateText()
methods inUpcastWriter
. Additionally, theView#change()
method now returns the return value of its callback. Closes #1549. (ec13c85) -
The
Model#insertContent()
method will accept offset parameter. (00dd70c) -
Made
Position.createAt()
require theoffset
when the first parameter is a model/view item. This change affected the following methods too. Closes #1554. (00dd70c)model.Position.createAt()
model.Range.createCollapsedAt()
model.Selection#setFocus()
model.Writer#insert()
model.Writer#insertText()
model.Writer#insertElement()
model.Writer#move()
model.Writer#setSelectionFocus()
view.Writer#setSelectionFocus()
view.Position.createAt()
view.Range.createCollapsedAt()
view.Selection#setFocus()
See breaking changes.
Model#deleteContent()
will properly merge elements inside a limit element. Closes ckeditor/ckeditor5#1265. (5d26bc3)- Added
MoveOperation
xSplitOperation
transformation for a case when graveyard element is moved. Closes #1580. (f88c918) - Better handling for
MoveOperation
xSplitOperation
transformation special case. Closes ckeditor/ckeditor5#1288. (b92a800) - Corrected transformations for pasting and undo scenarios. Closes ckeditor/ckeditor5#1287. (b1e8975)
- Do not run attribute-to-attribute downcast conversion on text node attributes. Closes #1587. (6659582)
- Firefox should visually move the caret to a new line after a soft break. Closes #1439. (80392ad)
- Made markers created by
Writer#insert()
affect the data. Closes #1583. (72aaaf0)
ContainerElement#getFillerOffset()
can now be re-used in other places in the code (it is now exported by the module). See ckeditor/ckeditor5-list#117. (12f28bb)- Moved
Position
,Range
andSelection
static factories from those classes to the model/view writers andModel
/View
instances. Previously, those factories were available as static methods of thePosition
,Range
andSelection
classes which meant that you needed to import those classes to your plugin's code to create new instances. That required your package to depend on@ckeditor/ckeditor5-engine
and was not very useful in general. After this change, you can create instances of those classes without importing anything. See the "Breaking changes" section for more details. Closes #1555. (e7f8467) - Vairous fixes in the API docs. Thanks to @denisname!
- The model
Position.createAt()
method was removed from the public API. Usewriter.createPositionAt()
instead. This method is also available on theModel
instance. - The
offset
parameter of the following methods does not default to0
and hence is no longer optional whenitemOrPosition
is a model/view item:model.Position.createAt()
model.Range.createCollapsedAt()
model.Selection#setFocus()
model.Writer#insert()
model.Writer#insertText()
model.Writer#insertElement()
model.Writer#move()
model.Writer#setSelectionFocus()
view.Writer#setSelectionFocus()
view.Position.createAt()
view.Range.createCollapsedAt()
view.Selection#setFocus()
- The model
Position.createBefore()
method was removed from the public API. Usewriter.createPositionBefore()
instead. This method is also available on theModel
instance. - The model
Position.createFromPosition()
method was removed. Usewriter.createPositionAt( position )
to create a new position instance. This method is also available on theModel
instance. - The model
Position.createFromParentAndOffset()
method was removed. Usewriter.createPositionAt( parent, offset )
instead. This method is also available on theModel
instance. - The model
Range.createIn()
method was removed from the public API. Usewriter.createRangeIn()
instead. This method is also available on theModel
instance. - The model
Range.createOn()
method was removed from the public API. Usewriter.createRangeOn()
instead. This method is also available on theModel
instance. - The model
Range.createFromRange()
method was removed from the public API. - The model
Range.createFromParentsAndOffsets()
method was removed from the public API. - The model
Range.createFromPositionAndShift()
method was removed from the public API. - The model
Range.createCollapsedAt()
method removed method was removed. Usewriter.createRange( position )
to create collapsed range. This method is also available on theModel
instance. - The model
Position.createAfter()
method was removed from the public API. Usewriter.createPositionAfter()
instead. This method is also available on theModel
instance. - The view
Position.createAt()
method was removed from the public API. Usewriter.createPositionAt()
instead. This method is also available on theView
instance. - The view
Position.createAfter()
method was removed from the public API. Usewriter.createPositionAfter()
instead. This method is also available on theView
instance. - The view
Position.createBefore()
method was removed from the public API. Usewriter.createPositionBefore()
instead. This method is also available on theView
instance. - The view
Position.createFromPosition()
method was removed. Usewriter.createPositionAt( position )
to create a new position instance. This method is also available on theView
instance. - The view
Range.createIn()
method was removed from the public API. Usewriter.createRangeIn()
instead. This method is also available on theView
instance. - The view
Range.createOn()
method was removed from the public API. Usewriter.createRangeOn()
instead. This method is also available on theView
instance. - The view
Range.createFromRange()
method was removed from the public API. - The view
Range.createFromPositionAndShift()
method was removed from the public API. - The view
Range.createFromParentsAndOffsets()
method was removed from the public API. - The view
Range.createCollapsedAt()
method removed method was removed. Usewriter.createRange( position )
to create a collapsed range. This method is also available on theView
instance. - The model
Range.createFromRanges()
method was removed from the public API.
11.0.0 (2018-10-08)
-
Range transformation by the split operation will expand it if
insertionPosition
is equal to the range end. Modified transformations to align with that change. Closes ckeditor/ckeditor5#1278. (e0e961f) -
Schema#checkAttributeInSelection()
will include selection's attributes in the context of the check. Closes #1546. (8fa632c) -
startsWithFiller
should correctly work with DOMText
nodes that are inside of an iframe. (16b0280)Huge thanks to Dmitri Pisarev for this contribution!
-
Marked reused element attributes to be rendered if the element being replaced was also marked. Closes #1560. Closes #1561. (6619a1f)
-
Remove clone groups in
view.DowncastWriter
manually. Closes #1571. (420166a) -
Use numbers instead of booleans in
Array.sort()
. (00fbf7f)
-
Removed the concept of deltas. Added new operations (replacing removed deltas). Rewritten OT algorithms. Simple. 10k LOC added, 12.5k LOC removed. Closes #1162. (a5cf8b1)
-
Added new OT tests, reached 100% code coverage again, fixed multiple OT scenarios, removed unreachable code. Closes #1474. (6c2151a)
-
Allowed using
Mapper
outside the conversion scope. Closes #1415. (6de6a00)Huge thanks to Mate Bartus for this contribution!
-
Always update attributes of reused elements while rendering. Closes #1560. (9b95a8a)
-
Changed long name returned by
Operation.className
property to a short one. Closes #1513. (7765953) -
Made the view's
stringify()
dev util output the content of theUIElement
(see ckeditor/ckeditor5-media-embed#1). (49cd795) -
Made
toJSON()
methods serialize nested objects. Closes #1477. (27ab310)Aligned
Schema#getValidRanges()
results to changes inAttributeOperation
.Unified
RemoveOperation
andReinsertOperation
to have just oneMoveOperation
.Simplified
LiveRange#event:change
second parameter which is now an object containingPosition
not anOperation
. -
Prevent rendering when in the
model.change()
ormodel.enqueueChange()
block. Closes #1528. (2ef33b1) -
Renamed view
Writer
toDowncastWriter
. Closes #1515. (5fd1ea5) -
Swapped parameters order in the
DowncastWriter#rename()
method. TheDowncastWriter#remove()
method now accepts range or item. Closes #1521. (d289b74) -
The
model.insertContent()
accepts range and position. Closes ckeditor/ckeditor5#1243. (bcdaaa9) -
View post-fixer should be called once while rendering model changes. Closes #1564. (2f5af98)
- View post-fixers are now called only a single once when rendering model changes.
- Swapped parameters order in the
DowncastWriter#rename()
method. See #1521. - The
src/view/writer
module was renamed tosrc//view/downcastwriter
. LiveRange#event:change
second parameter is now an object containing propertydeletionPosition
. It can bemodel.Position
instance, if the range was moved to the graveyard root. The position is equal to the position from which nodes were removed. Otherwise, it is set tonull
.Schema#getValidRanges()
will now return only flat ranges. If an attribute is allowed on some nodes and in those nodes children, multiple "nested" ranges will be returned.Schema#getValidRanges()
is now a generator.- The concept of deltas (sets of operations) was removed from the engine. They were replaced by opertations matching the types of removed deltas.
model.Writer#setAttribute()
(andAttributeOperation
) now applies attribute only to the top-level nodes in therange
(instead of all the nodes in the range).
10.2.0 (2018-07-18)
-
Attributes were incorrectly set on an element's children during upcast. Closes #1443. (dfa0b39)
-
Element to attribute upcast should set an attribute on all the elements inside the converted element. See #1443. (26673a0)
-
Expand selection mechanism will work correctly with the inline elements. Closes ckeditor/ckeditor5#1064. (e23742c)
-
Improved selection post-fixing mechanism for selections which cross limit element boundaries. Closes #1436. (e0a5a0b)
Feature: The
schema.getLimitElement()
method now accepts alsoRange
andPosition
as a parameter.
10.1.0 (2018-06-21)
- Introduce
ElementDefinition#priority
property which allows specifying the priority of created element during the downcast conversion. Closes #1408. (e20e133) - Introduced
ModelDocument#change:data
event. Closes #1418. (872f4ff) - Introduced a selection post-fixer. Its role is to ensure that after all changes are applied the selection is placed in a correct position. Closes #1156. Closes #1176. Closes #1182. Closes ckeditor/ckeditor5-table#11. Closes ckeditor/ckeditor5-table#12. Closes ckeditor/ckeditor5-table#15. Closes ckeditor/ckeditor5#562. Closes ckeditor/ckeditor5#611. (6cf91a1)
- Block filler will be inserted into the container if its last child is a
<br>
element. Closes #1422. (ba3d641) - Fixed view <-> DOM conversion of whitespaces around
<br>
elements. Closes ckeditor/ckeditor5#1024. (3e74554) - Renderer should avoid doing unnecessary DOM structure changes. Ensuring that the DOM gets updated less frequently fixes many issues with text composition. Closes #1417. Closes #1409. Closes #1349. Closes #1334. Closes #898. Closes ckeditor/ckeditor5-typing#129. Closes ckeditor/ckeditor5-typing#89. Closes #1427. (457afde)
- Renderer now uses partial text replacing when updating text nodes instead of replacing entire nodes. Closes #403. (797cd97)
10.0.0 (2018-04-25)
- Changed the license to GPL2+ only. See ckeditor/ckeditor5#991. (af46d16)
- The license under which CKEditor 5 is released has been changed from a triple GPL, LGPL and MPL license to a GPL2+ only. See ckeditor/ckeditor5#991 for more information.
1.0.0-beta.4 (2018-04-19)
model.Differ
should handle attribute change transformation correctly. Closes #1404. (3769a02)view.Writer
should deeply add and removeview.AttributeElement
s to/from their clone groups. Closes #1401. (e6bb59b)- The
bindTwoStepCaretToAttribute()
behavioral helper should not fail in more complex cases. Closes #1301. Closes #1346. Closes ckeditor/ckeditor5#937. Closes ckeditor/ckeditor5#922. Closes ckeditor/ckeditor5#946. (f0fd2d8)
1.0.0-beta.2 (2018-04-10)
- Introduced
writer#updateMarker()
method. Closes #1299. (bed647f) - Introduced
#isBefore
and#isAfter
inmodel.Node
andview.Node
. Additionally,model.Node#is()
andview.Node#is()
andview.Node#getPath()
were added. Closes #1365. (4c38683)
model.Differ
should not throw when multiple, intersecting remove changes were buffered. Closes #1392. (3a348fd)model.Range#getTransformedByDelta
should not crash forMoveDelta
which moves no nodes. Closes #1358. (ff8ba9e)conversion.downcast-converters.changeAttribute
should not consume if element creators returned null. Closes #1369. (6866256)conversion.downcast-converters.downcastAttributeToElement
should let specify from what element the model attribute will be converted. Closes #1370. (f8dec1e)
- Increased the specificity of CSS rules. Introduced the
.ck
class for editor UI components (see: ckeditor/ckeditor5#494). (6bf32c0) - Refactored how markers removal is converted from the model to the view. Closes #1226. (f6de5f5)
- Removed the unnecesary
model.Writer#setTextData()
method. Closes #1363. (b484822) - Renamed plural method names to singular and singular attribute names to plural. See ckeditor/ckeditor5#742. (9465c82)
- View selection is now split onto Selection and DocumentSelection. Closes #1304 . (b466e3f)
- The
writer#setMarker()
method is used only to create a new marker and it does not accept amarker
instance as a parameter. To update existing marker usewriter#updateMarker()
method. - The
options.usingOperation
option inwriter#setMarker()
is now a required one. - The
range
parameter was removed. Useoptions.range
instead. - Properties in
MatcherPattern
, viewElementDefinition
and options for conversion utils have been renamed:class
toclasses
,style
tostyles
,attribute
toattributes
. - Introduced
view.DocumentSelection
. It has protected API and can be modified only by the view writer. Observers creating instance of selection (likeSelectionObserver
,MutationObserver
) use theview.Selection
class now.
1.0.0-beta.1 (2018-03-15)
In 1.0.0-beta.1 the engine's API has underwent a thorough review which resulted in a deep refactoring. Most of the underlying concepts and architecture remained untouched. The API, though, is brand new. The changes are huge and, in this package exclusively, resulted in changing 40.000 LOC. Therefore, the list of changes below is neither complete nor will explain you how the engine is structured now and how to should migrate to this version.
Instead, we recommend reading https://ckeditor.com/docs/ckeditor5/latest/framework/guides/architecture/editing-engine.html once more (it will be updated in a couple of days after the release).
The good news is that the our focus when designing the new API was on developer experience. APIs which were dangerous or confusing were removed or hidden and new APIs were added in their place. The engine is now safer and more useful library and we hope you'll enjoy it :).
-
Add support for the
'word'
unit in themodifySelection()
helper. (f37a97a) -
Allowed passing
true
asview.Matcher
's attribute match to check if that attribute is set. Closes #1239. (bc1c3e5) -
Consumable type name is now normalized inside
conversion.ModelConsumable
methods. Closes #1214. (131e9c8) -
Convert view to model using position. Closes #1213. Closes #1250. (1961395)
Feature:
Schema#findAllowedParent()
has been introduced. Feature:SchemaContext#concat()
has been introduced. -
Engine debug tools can be easily disabled using disableEngineDebug() function. Closes #1193. (0934496)
-
Introduced
ViewElementDefinition
anddefinition-based-converters
module with a set of utils allowing to turn element definitions to converters. Closes #1198. (d2e9f06) -
Introduced decorable DataController#init metohd. Closes ckeditor/ckeditor5-core#120. (d20d660)
-
Introduced two-step caret movement mechanism. Closes #1289. (88bb94c)
- [Firefox] Added fix for typing space on the edge of inline elements. Closes ckeditor/ckeditor5#692. (3ea70f3)
DocumenSelection#change:range
event will be fired only once after multiple selection live ranges have changed. Closes #1281. (b26935c)model.DocumentSelection
should update it's attributes after each change, including external changes. Closes #1267. (b91d967)Model#insertContent()
will not merge nodes if the model after the merge would violate schema rules. Closes ckeditor/ckeditor5#730. (2a73830)Schema#getLimitElement()
will return a proper limit element (the root element) if one of the selection's ranges have the root element as the limit element. Closes #1275. (050a415)- Added a 50ms timeout after
Document#focus
event before rendering to be sure that selection changes are processed on Firefox and Safari. Closes ckeditor/ckeditor5#676. Closes #1157. Closes #1155. Closes #1153. (aba8e68) - Added missing parse context in
DataController#set()
. Closes #1278. (8c56dce) - Corrected how change items in
model.Differ
are dismissed if they are in inserted/removed parent. Closes ckeditor/ckeditor5#733. (e70ab96) - Corrected offsets transformation in
model.Differ
when multiple change items interfere with each other. Closes #1309. Closes ckeditor/ckeditor5#849. (30dcf6c) - Fixed a bug where Firefox would throw an
NS_ERROR_FAILURE
error when moving selection from a nested editable to the root editable. Closes ckeditor/ckeditor5#721. (4b7d435) - Fixed memory leak in
DocumentSelection
. Closes #903. (7e352e3) - Improved how
model.Differ
checks whether the operation should be buffered or not. Closes #1326. (3e9f81b) - It should not be possible to move a
model.Node
from amodel.Document
to amodel.DocumentFragment
. Closes #1337. (24b97f5) - Registered $marker element in Schema. Closes #1317. (2d1d62f)
- The fake selection container will not leak into the viewport. Closes ckeditor/ckeditor5#752. (3f059a7)
- View stringify utility now sorts CSS classes and values in
style
attribute. Closes #1179. (fc7da80)
-
Cleaned up the model, document and controllers API. Closes #1208. (aea6119)
-
Fixed
render()
andchange()
methods flow. Introduced post-fixers in the view. Closes #1312. (63b9d14) -
Introduced several improvements to conversion helpers. Closes #1295. Closes #1293. Closes #1292. Closes #1291. Closes #1290. Closes #1305. (809ea24)
-
Keep the same marker instance when marker is updated. (8eba5e9)
-
Make
Position
andRange
immutable in model and view. Closes #897. (836dfd8) -
Manual test for #475 now works correctly. Closes #1271. (c2d4cec)
-
Methods which modify the model's and view's tree are now protected and shouldn't be used directly in the code. Iinstance of
Writer
should be used instead. Closes #738. (a4f3dad) -
Migrated package styles to PostCSS. Moved visual styles to ckeditor5-theme-lark (see ckeditor/ckeditor5-ui#144). (5f65823)
-
Moved
consumable
parameter toconversionApi
parameter in downcast. Closes #1294. Closes #1261. (731db37) -
Moved
Document#getNearesetSelectionRange
toSchema
. Closes #1227. (d1838a4) -
Moved selection methods to
Writer
, introducedLiveSelection
. Closes #1209. (7db1fee) -
Operations that do not operate on a document should have
baseVersion
set tonull
. Closes #1211. (b527d7f)Fixed: Markers again are properly converted in
engine.controller.DataController
. Fixed: Markers are cleared now before an operation is applied tomodel.Document
tree to fix scenarios where marker range could not be converted to the view after the model changed. -
Prevented
Writer
from usage outside of thechange
block. Closes #1212. (2592bf1) -
Provided one API for two types of markers, improved docs. Closes #1086. (bfe23c9)
-
Refactor: engine/model reorganization, introducing new chnage and enqueueChange block, split batch/writer. Related: #1186. (5be1ad6)
-
Refactored events fired by model classes. Closes #1207. (f56bddf)
-
Refactoring: Conversion refactoring. Introduced
model.Differ
. Changes now will be converted after all changes in a change block are done. Closes #1172. (6479bfd) -
Refactoring: make writer a protected operations util. (440dfc7)
-
Simplified model to view selection conversion. Closes #1238. (9a53251)
-
UIElement custom
render()
method can be now provided without using inheritance. Closes #1254. (e05b8b1)
- Note: See the "Major refactoring" section above.
view.Writer
is no longer an object literal with functions but a class.- Introduced new method of creating custom UIElements.
- View document is now separated from the DOM.
view.Renderer
,view.DomConverter
and observers are moved toview.View
. view#event:render
is introduced to indicate a moment when all changes are applied and document may be rendered to the DOM.- Downcast converter helpers no longer accepts view elements instances as constructors are now protected. Callbacks using view writer should be used.
- Writer should be now used to set or remove markers, instead of MarkerCollection.
- View controller
view.View
is introduced. Changes to the view document tree structure should be done by using writer provided to callback inview.change()
method. ViewConversionApi#splitToAllowedParent
has been introduced.ViewConversionApi#storage
has been introduced.ViewConsumable
has been merged toViewConversionApi
.- Format od data object passed across conversion callback has been changed.
Feature:
Schema#findAllowedParent
has been introduced. Feature:SchemaContext#concat
has been introduced. DataController#parse
,DataController#toModel
,ViewConversionDispatcher#convert
getsSchemaContextDefinition
as a contex instead ofString
.
1.0.0-alpha.2 (2017-11-14)
model.Range
will now be extended if it was collapsed and it was transformed by insertion. Closes #1159. (5f020b0)- Prevent adding inline filler to non-editable content. Closes #1170. (07a01b1)
- The
deleteContent()
algorithm will use merging to "remove" empty element which will ensure a better conflict resolution on collaborative editing. Closes #1161. (0dd29d4)
- Removed the
renderer-skipped-selection-rendering
warning since it doesn't bring any value. Closes #1158. (4a5a5d1) - The
removeHighlight()
function now accepts descriptor id instead of aHighlightDescriptor
object. Closes #1164. (7bde6f7)
1.0.0-alpha.1 (2017-10-03)
model.Range
will now be correctly transformed if it was at the end of a split element. Instead of sticking to the old element, it will be moved to the end of the new element. Closes #1142. (1be7ed1)- Fixed a bug in
Range#getTransformedByDelta()
that caused editor to crash after someMergeDelta
s were transformed. Closes #1132. (97a4f4b) - Fixed a bug when a block quote could not be applied to an empty paragraph with a basic style (bold, etc.) active in it. Closes #1127. (6d33b9f)
- Fixed a bug when editor crashed during
MergeDelta
transformation in a specific case. Closes #1103. (ef1b07e) - Spaces inside
<code>
will be rendered in a normal way (previouslyDomConverter
tried to treat<code>
like a preformatted block which is not what HTML needs). Closes #1126. (88630b7) - Fixed a bug when undo did no changes instead of merging elements, in a scenario when an element was split and then the "new" element was removed. See https://github.com/ckeditor/ckeditor5-undo/issues/65#issuecomment-323682195. (60024c0)
- View and model nodes will now be removed from their old parents when they are added to a new parent to prevent having same node on multiple elements' children lists. Closes #1139. (dec9c28)
- Introduced
model.DocumentSelection#hasOwnRange
property. Closes #1137. (4feb678) - Introduced
Schema#removeDisallowedAttributes()
method to filter out disallowed attributes from given nodes. Closes #1120. (d776c71)
- View and model nodes are now automatically removed from their old parents when they are inserted into new elements. This is important e.g. if you iterate through element's children and they are moved during that iteration. In that case, it's safest to cache the element's children in an array.
0.11.0 (2017-09-03)
-
[Firefox] Prevented setting incorrect initial selection when placeholder was clicked. See ckeditor/ckeditor5#469. (34498a8)
-
AttributeElement
s created by selection conversion were not merged withAttributeElement
s created by markers conversion. Closes #1117. (e6c5bcf) -
DataController#insertContent()
andDataController#deleteContent()
should strip disallowed attributes from text nodes. Closes #1088. (df83343) -
DomConverter
should actively prevent unwanted scrolling on focus. Closes #951. Closes #707. Closes #706. (cb18a95) -
LiveSelection
will correctly set its properties in case of a non-collapsed default range. This will fix loading data which starts with an object element. Closes #699. (e6e92e9) -
LiveSelection
will not read attributes from object element's children. Closes #986. (93639d0) -
MarkerDelta
transformation should no longer cause editor to crash, if aMarkerOperation
hadnull
as it'soldRange
ornewRange
. Closes #943. (d328811) -
model.Element#getNodeByPath()
andmodel.DocumentFragment#getNodeByPath()
should work with offsets not indexes (because path is an array of offsets). Closes #1009. (331d2f4) -
Schema.checkAttributeInSelection
should use element's existing attributes when querying schema. Closes #1110. (25ef1a8) -
view.Range#getTrimmed()
was returning incorrect ranges in some cases. Fixes #1058. (d99c568) -
AttributeElement
with bogus<br />
will now be placed after all UI elements which will fix how those elements are rendered. Closes #1072. (43b6ea9) -
Editor will no longer crash when
ReinsertOperation
is transformed by a specificRemoveOperation
. Closes #946. (6875eff) -
Fixed a bug when
SplitDelta
transformation might cause undo to throw an error in some cases. Closes #1084. (cb9d409) -
Fixed incorrect markers transformations and conversions. Closes #1112. Closes #1080. Closes #1079. (b71adfb)
-
Multiple spaces in an empty paragraph are now allowed. Closes ckeditor/ckeditor5-typing#101. (9ca61d5)
-
Mutation observer will ignore children mutations if as a result of several native mutations the element's children haven't changed. Closes #1031. (552198e)
-
None of the editable's ancestors should scroll when the
DomConverter
focuses an editable. Closes #957. (e3bc4d1) -
Placeholder text now will not be hidden if the element has only ui elements. Closes #1018. (299628b)
-
Prevent unbinding elements that are reused during rendering. Closes #922. (88fcdcb)
-
Prevented editor throwing during
SplitDelta
xRemoveDelta
transformation when SplitDelta's first operation was neither InsertOperation nor ReinsertOperation. Closes #1065. (85e38e1) -
Fixed remove model-to-view converter for some edge cases. Closes #1068.
-
Singular white spaces (new lines, tabs and carriage returns) will be ignored when loading data when used outside/between block elements. Closes #822. (4c9a0af)
Also, the range of characters which are being normalized during DOM to view conversion was reduced to
[ \n\t\r]
to avoid losing space characters (which matches/\s/
) that could be significant. -
Splitting paragraph twice in the same position will now be undoable. Also fixed SplitDelta x SplitDelta transformation. Closes #1096. Closes #1097. (b7cc243)
-
Writer will create a consistent hierarchy for attribute elements with same priorities. Introduced viewElement.getIdentity() method. Closes #1060. (85c96ef)
-
Selection attributes should be cleared in an
enqueueChanges()
block. Fixed also a bug concerningAttributeDelta
xSplitDelta
transformation. Closes #1055. (ed1b7e7) -
Fixed a bug when additional list item has been created when undoing applying block quote to a list followed by splitting list item in that list. Closes #1053. (a6c6167)
-
Fixed a bug when renaming followed by merge or split resulted in multiple elements being incorrectly renamed during undo. Closes #1051. (033e850)
-
If a new position of
DocumentSelection
cannot be calculated after the content in which the selection was located was removed from the document, the position of the selection should use the "default selection" so it does not end up in disallowed places. Closes #1046. (9f7e0a2) -
Block filler was rendered before UI elements, interfering with their positioning. Now it will be properly rendered at the end of an element. Closes #1021. (7c014f7)
-
Live ranges and markers, that are at the end of an element, are now correctly transformed when they are split. Closes #1006. (690f32c)
-
DataController#deleteContent()
will leave a paragraph if the entire content was selected. Closes #1012. (17e70c3)On the occasion
$root
element has been marked as a limit element inSchema
in order to simplify the checks. -
model.LiveRange#event:change
got renamed tochange:range
. Introducedmodel.LiveRange#event:change:content
. Closes #1089. (ec22a29) -
model.LiveRange#event:change
now containsdata.batch
instance which changed the range. Closes #1076. (c6f5e9f) -
Enhanced
Selection#setTo()
, introducedSelection#setIn()
,Selection#setOn()
,Range.createCollapsedAt()
and renamed few existingSelection
methods for both model and view. Closes #1074. (070c313) -
Hide the caret when the editor is read-only.
EditingControler
is observable from now. Observable propertyisReadOnly
was added to theViewDocument
andEditingController
. Closes #1024. Closes ckeditor/ckeditor5#503. (e8fd17d) -
Highlights on text nodes will be now unwrapped basing on descriptor id (which by default is marker name). Closes #1108. (885901f)
-
Implemented
view.Document#scrollToTheSelection()
method. Closes #660. (4479c40) -
Introduced the highlights feature. (af34f31)
-
Introduced
DataController#hasContent()
. Closes #1114. (712ccfc) -
Introduced
model.Node#getCommonAncestor()
andview.Node#getCommonAncestor()
. Closes #1033. (f913aee) -
Introduced
Position#getCommonAncestor( position )
andRange#getCommonAncestor()
methods for the view and model. Closes #1002. (0e29844) -
Introduced
Schema#getLimitElement()
. Closes #1042. (691e53e) -
Introduced
view.Document#keyup
event (fired by theKeyObserver
). Closes #1026. (cc766ab) -
Introduced the
Selection#isEntireContentSelected( element )
method. Closes #1063. (1902d7a) -
OT will use context information to achieve better conflict resolution. (481eb9b)
This change includes refactoring of:
History
,RemoveOperation
, operational transformation algorithms, delta transformation algorithms and more.Context information will be used instead of removing deltas from history, which caused bugs in more complicated scenarios. This mostly affects undo algorithms.
-
UIElement
has its own render method used by DomConverter and can create DOM children. Improved integration with observers and other view elements. Closes #799. (7fc52ea) -
When engine debugging is on, additional logs will be provided when delta transformation causes editor to throw an error. (2ae80ca)
-
When engine debugging is on, deltas that are results of transformation will keep their history of changes in
#history
property. Closes #940. (7d8db49) -
Introduced two
Schema
helpers –#checkAttributeInSelection()
and#getValidRanges()
. Closes #969. (34a7a06)
-
Changed the
merge
option ofDataController.deleteContent()
toleaveUnmerged
. The default value stayedfalse
, so the default behavior of the function was changed to merge blocks. Closes #982. (56347d1) -
From now, every operation execution will fire
model.Document#event:change
, even if the operation does nothing (for example, if operation changes attribute to the same value). Closes #1099. (6502bbb) -
Introduced
options.includeSelf
togetCommonAncestor()
. Closes #1036. (4a4a89a) -
The
Selection#getSelectedBlocks()
method will not return a block in which selection ends if no content of that block is selected. Closes #984. (d3e7afa)For example, in the following case only the first two paragraphs will be returned:
<paragraph>[Foo</paragraph> <paragraph>Bar</paragraph> <paragraph>]Baz</paragraph>
The reasoning behind this change is that the user doesn't consider the last block as selected in such a case (as its selection isn't even visible).
ModelConverterBuilder#toStamp()
functionality is renamed toModelConverterBuilder#toElement()
. IntroducedModelConverterBuilder#toVirtualSelection()
which replaces current marker to element conversion.- The
DataController#deleteContent()
option was renamed frommerge
toleaveUnmerged
and the default behavior of the function was changed to merge blocks. - Removed
wrapRange()
andunwrapRange()
functions frommodel-to-view-converters.js
as they're no longer used. - Renamed marker stamps to marker elements in code and docs.
- Renamed
Selection#collapse()
toSelection#setCollapsedAt()
. - Renamed
Selection#setFocus()
toSelection#moveFocusTo()
. - The
includeNode
option ofNode#getAncestors()
methods (model and view) was renamed toincludeSelf
. See #1036. - Parameter change for
convertSelectionMarker()
function frommodel-selection-to-view-converters.js
. deltaTransform#transformDeltaSets()
is now an internal method. UseDocument#transformDeltas()
instead.- Removed
Renderer#getCorrespondingDom()
andRenderer#getCorrespondingView()
methods. - Renamed
Renderer#getCorrespondingDomText()
method toRenderer#findCorrespondingDomText()
andRenderer#getCorrespondingViewText()
toRenderer#findCorrespondingViewText()
. - Merged
Renderer#getCorrespondingDomElement()
andRenderer#getCorrespondingDomDocumentFragment()
into one methodRenderer#mapViewToDom()
. - Merged
Renderer#getCorrespondingViewElement()
andRenderer#getCorrespondingViewDocumentFragment()
intoRenderer#mapDomToView()
. History
API for deleting undone deltas has been removed.
0.10.0 (2017-05-07)
-
DomConverter#domToView()
will not throw when converting a comment. Closes #647. (ffc41d4) -
ViewConverterBuilder#fromAttribute()
should not create incorrect matcher object forMatcher
if passed attribute was other thanclass
orstyle
. Closes #919. (6701c4b)Minor upgrades to
ViewConversionBuilder
:- converters from
ViewConversionBuilder
will not convert if "creator function" returnednull
. - simplified view converters building by making
ViewConversionBuilder#toAttribute()
value
param optional. If not set, the attribute value is taken from converted view element.
- converters from
-
Improved compatibility with MS Edge. See #923. Closes #925. (1af4a50)
-
Improved performance of the
view.Element
's inline styles parser. Big property values (like base64 encoded images) should not crash the editor anymore. Closes #881. (3d494a3) -
Removed invalid promise catches from
dev-utils.DeltaReplayer
. Closes #906. (69cfdd1) -
Unified values returned in
data.output
during view-to-model conversion. See breaking changes. Closes #932. (16ae05a)
- Allow passing ranges to the selection constructors (in the model and in the view). Closes #600. (da8a609)
- Events fired by
model.MarkerCollection
will now include marker name after semicolon. Closes #911. (3a8ebed)
model.Element#clone()
now does not clone children when passedfalse
and recursively clones children when passedtrue
. Closes #689. (ccb0659)
ViewConversionDispatcher#convert()
will always returnmodel.DocumentFragment
(which may be empty in various cases).conversionApi#convertItem()
will log a warning ifdata.output
contains a different value thanmodel.Node
ormodel.DocumentFragment
ornull
.conversionApi#convertChildren()
will always returnmodel.DocumentFragment
.model.Element#clone()
does not clone children when not in thedeep
mode. See #689.
0.9.0 (2017-04-05)
-
Changed
DataController#insertContent()
behavior, so it doesn't clone given nodes. Closes #869. (45f0f33) -
Empty
AttributeDelta
should not be added to batch. Closes #875. (425399b) -
Fixed a bug where
LiveRange
position would be lost when using wrap and unwrap deltas. Closes #841. (efe3987) -
Fixed various issues with the move and unwrap deltas conversion. Closes #847. (39c34a5)
-
Live ranges, selections and markers no longer lose content when using the move delta. Closes #877. (e08b019)
The base algorithm implemented in
Range#_getTransformedByDocumentChange()
will now include all model items between the old and new range boundary. See https://github.com/ckeditor/ckeditor5-engine/issues/877#issuecomment-287740021 for more details. -
Mutations inserting bogus
<br>
at the end of the block element are filtered out by the mutation observer. Closes #882. (3583cae) -
Renderer should not change the native selection if the one it's about to render is visually similar to the current one. Closes #887. Closes #880. (d8ee5fa)
-
Renderer will unbind DOM elements from view elements when removing them from DOM. Closes #888. (86ea5b5)
-
Reversed
ReinsertOperation
targets back to same graveyard holder from which the nodes were re-inserted. Closes #891. (ea6c881) -
View document is now re-rendered after focusing. Closes #795. (115a91b)
-
Renderer will deeply unbind DOM elements when they are removed from DOM. Closes #888. (0aec182)
DataController#insertContent()
now accepts also model items. Closes #870. (d00c973)- Added placeholder utility that can be applied to view elements. Closes #857. (79b42da)
- Introduced
dev-utils.DeltaReplayer
. Introduced new logging methods indev-utils.enableEngineDebug()
. Closes #828. (eb855d9) - Introduced markers serialization. Closes #787. Closes #846. (2e7f75d)
- Changed the behavior of
DataController#deleteContent()
in a case of nested elements to better match situations like using Backspace after a block quotation. Closes #710. (42a4429) - Default conversion.Mapper position mapping algorithms are now added as callbacks with low priority and are fired only if earlier callbacks did not provide a result. Closes #884. (5627993)
- Simplified
SelectionObserver
's infinite loop check which should improve its stability. Closes #889. (8b859fb)
- Since the default position mapping algorithms are attached with low priority, custom position mapping callbacks added with higher priority won't receive position calculated by default algorithms in data. To execute default position mapping algorithms and use their value, hook custom callback with lower priority.
BuildModelConverter#fromMarkerCollapsed()
is removed. UseBuildModelConverter#fromMarker()
instead.
- The
insertUIElement()
model to view converter now supports collapsed and non-collapsed ranges.
0.8.0 (2017-03-06)
view.Matcher#getElementName()
now returns proper value when named function is used as a pattern. Closes #850. (93f41c5)- Collapsed
model.Range
no longer sticks to its neighbour node when that node is moved. Closes #852. (ccd23d1) - Default
remove()
converter no longer removesview.UIElements
that are next to removed nodes. Closes #854. (c054ded) dev-utils/model#setData()
should work with custom roots. Closes #815. (0ad3074)- You can now return
null
from the element creators in converters for selection attributes and markers. It does not crash the conversion anymore. Closes #833. (8ffa038)
- Integrated
Schema#limits
withDataController
's methods. Closes #818. (e3c3e33) - Introduced
is()
method in model and view tree nodes and document fragments. Closes #809. (1525bde) - Introduced
model.Selection#getSelectedBlocks()
. Closes #811. (9f3f35f) - Introduced
Schema#limits
map. See #818. (a66bcdd) - Introduced
view.Document#selectionChangeDone
event. Closes #791. (3a15236) - Introduced
view.Range#getEnlarged()
,view.Range#getTrimmed()
,view.Position#getLastMatchingPosition()
,model.Position#getLastMatchingPosition()
,view.TreeWalker#skip()
,model.TreeWalker#skip()
. Closes #789. (973f2ba) - Introduced
view.UIElement
class andview.writer.clear()
method. Closes #788. (64be1f6) - Introduced debugging tools for the engine. Closes #808. (7b56e4a)
- Introduced converters from model markers to
view.UIElement
. Closes #792. (1731e69)
ModelConversionDispatcher
now usesremove
+insert
events to convertmove
andrename
changes, instead of dedicatedmove
andrename
events. Closes #837. (f63657c)view.Range.enlarge()
andview.Range.shrink()
should not pass the container limit because theview.Writer
expects that the whole range is in the same container. Closes #830. (8d4a1ca)
ModelConversionDispatcher
no longer firesmove
andrename
events. This means that feature converters added as callbacks to those should be replaced byremove
andinsert
converters.- Removed
view.DocumentFragment#getAncestors()
. Closes #803. Closes #805. Position.getAncestors()
should return elements in the same order asNode.getAncestors()
.
- It is advised to use either
Range#getTrimmed()
orRange#getEnlarged()
before operating on a range returned fromMapper
.