Skip to content

Latest commit

 

History

History
714 lines (524 loc) · 89.6 KB

CHANGELOG.md

File metadata and controls

714 lines (524 loc) · 89.6 KB

Changelog

14.0.0 (2019-08-26)

Features

  • transformSets() will now return a Map 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)

Bug fixes

  • Fixed problem with handling very large text nodes. (a7ae813)
  • Prevented Differ crashing in some scenarios involving attribute changes on elements. Closes #1764. (482e55e)

Other changes

BREAKING CHANGES

  • New parameter introduced in DowncastDispatcher#convertChanges(). Now it is convertChanges( 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 by Mapper#unbindElementFromMarkerName( element, markerName ).

13.2.1 (2019-07-10)

Internal changes only (updated dependencies, documentation, etc.).

13.2.0 (2019-07-04)

Features

  • Added view.Document#event:beforeinput. (c74c3d6)
  • Introduced the type parameter to the model.createBatch() method. (389b72e)

Bug fixes

  • 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)

Other changes

  • Changed how  s are generated on the view->DOM rendering. Closes #1747. (da5670a)

13.1.1 (2019-06-05)

Bug fixes

Other changes

  • Added more cases of affected markers on merging in model.Writer. Closes #1738. (01ff6e6)

13.1.0 (2019-04-10)

Features

  • Model#insertContent() will return a range affected by the insertion. (f4e4644)

    In Model#deleteContent(), added doNotAutoparagraph flag to options. Position and LivePosition static creators should handle stickiness param.

  • Added possibility to refresh the marker with no changes through Writer#updateMarker() method. Closes #1649. (cf56d90)

  • Introduced Schema#setAttributeProperties() and Schema#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)

Bug fixes

  • 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)

Features

  • Added an additional event in markers conversion. Improved how MarkerOperation is transformed during undo. Closes #1604. (da5a390)
  • Implemented Selection#is() and DocumentSelection#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>&nbsp;</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() (now enablePlaceholder()) on the root editable. Introduced the View.detachDomRoot() method. Implemented additional placeholder helpers (showPlaceholder(), hidePlaceholder(), needsPlaceholder()) (see ckeditor/ckeditor5#479). Closes #899. (21dee6b)

Bug fixes

Other changes

  • 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 the Schema class. Closes #1636. (6515558)
  • Upcast element to attribute defaults to low priority instead of normal. Closes ckeditor/ckeditor5#1399. (c33c49c)
  • Expose conversion utilities. Closes #1556. (9306c22)

BREAKING CHANGES

  • Upgraded minimal versions of Node to 8.0.0 and npm to 5.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>&nbsp;</p>).
  • The wrap() conversion helper was removed from public API.
  • The attachPlaceholder() has been renamed to enablePlaceholder().
  • enablePlaceholder() accepts a configuration object instead of separate parameters.
  • The detachPlaceholder() has been renamed to disablePlaceholder().
  • The Conversion#register() method was removed from the public API. Use constructor parameters to pass dispatchers and Conversion#addAlias() to register an alternative conversion group for registered upcast or downcast dispatchers.
  • The editor#dataReady event was removed. The editor.data#ready event has been introduced and should be used instead.
  • Swapped the order of parameters in Schema#findAllowedParent().
  • The second parameter (rootName) from DataController#init() method has been removed. To initialize data on a root different than default one an object with rootName - data pair should be passed.
  • The second parameter (rootName) from DataController#set() method has been removed. To set data on a root different than default one an object with rootName - data pair should be passed.
  • The editing.view.render() method was renamed to editing.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. Use conversion.for( 'downcast' ).elementToElement() instead.
  • The downcastAttributeToElement() helper was removed from public API. Use conversion.for( 'downcast' ).attributeToElement() instead.
  • The downcastAttributeToAttribute() helper was removed from public API. Use conversion.for( 'downcast' ).attributeToAttribute() instead.
  • The downcastMarkerToElement() helper was removed from public API. Use conversion.for( 'downcast' ).markerToElement() instead.
  • The downcastMarkerToHighlight() helper was removed from public API. Use conversion.for( 'downcast' ).markerToHighlight() instead.
  • The upcastElementToElement() helper was removed from public API. Use conversion.for( 'upcast' ).elementToElement() instead.
  • The upcastElementToAttribute() helper was removed from public API. Use conversion.for( 'upcast' ).elementToAttribute() instead.
  • The upcastAttributeToAttribute() helper was removed from public API. Use conversion.for( 'upcast' ).attributeToAttribute() instead.
  • The upcastElementToMarker() helper was removed from public API. Use conversion.for( 'upcast' ).elementToMarker() instead.
  • The insertUIElement() and removeUIElement() downcast converters were removed from public API. Use conversion.for( 'downcast' ).markerToElement() instead.
  • The highlightText(), highlightElement() and removeHighlight() downcast converters were removed from public API. Use conversion.for( 'downcast' ).markerToHighlight() instead.
  • The insertElement() downcast converter was removed from public API. Use conversion.for( 'downcast' ).elementToElement() instead.
  • The changeAttribute() downcast converter was removed from public API. Use conversion.for( 'downcast' ).attributeToAttribute() instead.

12.0.0 (2018-12-05)

Features

  • Introduced createDocumentFragment(), createElement() and createText() methods in UpcastWriter. Additionally, the View#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 the offset 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.

Bug fixes

  • Model#deleteContent() will properly merge elements inside a limit element. Closes ckeditor/ckeditor5#1265. (5d26bc3)
  • Added MoveOperation x SplitOperation transformation for a case when graveyard element is moved. Closes #1580. (f88c918)
  • Better handling for MoveOperation x SplitOperation 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)

Other changes

  • 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 and Selection static factories from those classes to the model/view writers and Model/View instances. Previously, those factories were available as static methods of the Position, Range and Selection 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!

BREAKING CHANGES

  • The model Position.createAt() method was removed from the public API. Use writer.createPositionAt() instead. This method is also available on the Model instance.
  • The offset parameter of the following methods does not default to 0 and hence is no longer optional when itemOrPosition 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. Use writer.createPositionBefore() instead. This method is also available on the Model instance.
  • The model Position.createFromPosition() method was removed. Use writer.createPositionAt( position ) to create a new position instance. This method is also available on the Model instance.
  • The model Position.createFromParentAndOffset() method was removed. Use writer.createPositionAt( parent, offset ) instead. This method is also available on the Model instance.
  • The model Range.createIn() method was removed from the public API. Use writer.createRangeIn() instead. This method is also available on the Model instance.
  • The model Range.createOn() method was removed from the public API. Use writer.createRangeOn() instead. This method is also available on the Model 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. Use writer.createRange( position ) to create collapsed range. This method is also available on the Model instance.
  • The model Position.createAfter() method was removed from the public API. Use writer.createPositionAfter() instead. This method is also available on the Model instance.
  • The view Position.createAt() method was removed from the public API. Use writer.createPositionAt() instead. This method is also available on the View instance.
  • The view Position.createAfter() method was removed from the public API. Use writer.createPositionAfter() instead. This method is also available on the View instance.
  • The view Position.createBefore() method was removed from the public API. Use writer.createPositionBefore() instead. This method is also available on the View instance.
  • The view Position.createFromPosition() method was removed. Use writer.createPositionAt( position ) to create a new position instance. This method is also available on the View instance.
  • The view Range.createIn() method was removed from the public API. Use writer.createRangeIn() instead. This method is also available on the View instance.
  • The view Range.createOn() method was removed from the public API. Use writer.createRangeOn() instead. This method is also available on the View 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. Use writer.createRange( position ) to create a collapsed range. This method is also available on the View instance.
  • The model Range.createFromRanges() method was removed from the public API.

11.0.0 (2018-10-08)

Bug fixes

  • 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 DOM Text 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)

Other changes

  • 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 logging for new operations. Closes #1491. (5c0a34d)

  • 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 the UIElement (see ckeditor/ckeditor5-media-embed#1). (49cd795)

  • Made toJSON() methods serialize nested objects. Closes #1477. (27ab310)

    Aligned Schema#getValidRanges() results to changes in AttributeOperation.

    Unified RemoveOperation and ReinsertOperation to have just one MoveOperation.

    Simplified LiveRange#event:change second parameter which is now an object containing Position not an Operation.

  • Prevent rendering when in the model.change() or model.enqueueChange() block. Closes #1528. (2ef33b1)

  • Renamed view Writer to DowncastWriter. Closes #1515. (5fd1ea5)

  • Swapped parameters order in the DowncastWriter#rename() method. The DowncastWriter#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)

BREAKING CHANGES

  • 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 to src//view/downcastwriter.
  • LiveRange#event:change second parameter is now an object containing property deletionPosition. It can be model.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 to null.
  • 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() (and AttributeOperation) now applies attribute only to the top-level nodes in the range (instead of all the nodes in the range).

10.2.0 (2018-07-18)

Features

  • Introduced ViewDocument#layoutChanged event. Closes #1445. (dab70e6)

Bug fixes

  • 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 also Range and Position as a parameter.

10.1.0 (2018-06-21)

Features

Bug fixes

Other changes

  • Renderer now uses partial text replacing when updating text nodes instead of replacing entire nodes. Closes #403. (797cd97)

10.0.0 (2018-04-25)

Other changes

BREAKING CHANGES

  • 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)

Bug fixes

1.0.0-beta.2 (2018-04-10)

Features

  • Introduced writer#updateMarker() method. Closes #1299. (bed647f)
  • Introduced #isBefore and #isAfter in model.Node and view.Node. Additionally, model.Node#is() and view.Node#is() and view.Node#getPath() were added. Closes #1365. (4c38683)

Bug fixes

  • model.Differ should not throw when multiple, intersecting remove changes were buffered. Closes #1392. (3a348fd)
  • model.Range#getTransformedByDelta should not crash for MoveDelta 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)

Other changes

  • 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)

BREAKING CHANGES

  • The writer#setMarker() method is used only to create a new marker and it does not accept a marker instance as a parameter. To update existing marker use writer#updateMarker() method.
  • The options.usingOperation option in writer#setMarker() is now a required one.
  • The range parameter was removed. Use options.range instead.
  • Properties in MatcherPattern, view ElementDefinition and options for conversion utils have been renamed: class to classes, style to styles, attribute to attributes.
  • Introduced view.DocumentSelection. It has protected API and can be modified only by the view writer. Observers creating instance of selection (like SelectionObserver, MutationObserver) use the view.Selection class now.

1.0.0-beta.1 (2018-03-15)

Major refactoring

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 :).

Features

  • Add support for the 'word' unit in the modifySelection() helper. (f37a97a)

  • Allowed passing true as view.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 and definition-based-converters module with a set of utils allowing to turn element definitions to converters. Closes #1198. (d2e9f06)

  • Introduced composition observer. Closes #1329. (a0ad8fe)

  • Introduced decorable DataController#init metohd. Closes ckeditor/ckeditor5-core#120. (d20d660)

  • Introduced two-step caret movement mechanism. Closes #1289. (88bb94c)

Bug fixes

  • [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 a model.Document to a model.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)

Other changes

  • Cleaned up the model, document and controllers API. Closes #1208. (aea6119)

  • Conversion utilities refactor. Closes #1236. (fd128a1)

  • Fixed render() and change() 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 and Range 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 to conversionApi parameter in downcast. Closes #1294. Closes #1261. (731db37)

  • Moved Document#getNearesetSelectionRange to Schema. Closes #1227. (d1838a4)

  • Moved selection methods to Writer, introduced LiveSelection. Closes #1209. (7db1fee)

  • Operations that do not operate on a document should have baseVersion set to null. Closes #1211. (b527d7f)

    Fixed: Markers again are properly converted in engine.controller.DataController. Fixed: Markers are cleared now before an operation is applied to model.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 the change 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 of the view API. Closes #1210. (dd9ae51)

  • 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)

  • Rewritten the Schema API. Closes #532. (4e4f5c3)

  • Simplified model to view selection conversion. Closes #1238. (9a53251)

  • UIElement custom render() method can be now provided without using inheritance. Closes #1254. (e05b8b1)

BREAKING CHANGES

  • 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 to view.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 in view.change() method.
  • ViewConversionApi#splitToAllowedParent has been introduced.
  • ViewConversionApi#storage has been introduced.
  • ViewConsumable has been merged to ViewConversionApi.
  • 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 gets SchemaContextDefinition as a contex instead of String.

1.0.0-alpha.2 (2017-11-14)

Bug fixes

  • 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)

Other changes

  • 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 a HighlightDescriptor object. Closes #1164. (7bde6f7)

1.0.0-alpha.1 (2017-10-03)

Bug fixes

  • 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 some MergeDeltas 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 (previously DomConverter 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)

Features

  • Introduced model.DocumentSelection#hasOwnRange property. Closes #1137. (4feb678)
  • Introduced Schema#removeDisallowedAttributes() method to filter out disallowed attributes from given nodes. Closes #1120. (d776c71)

BREAKING CHANGES

  • 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)

Bug fixes

  • [Firefox] Prevented setting incorrect initial selection when placeholder was clicked. See ckeditor/ckeditor5#469. (34498a8)

  • AttributeElements created by selection conversion were not merged with AttributeElements created by markers conversion. Closes #1117. (e6c5bcf)

  • DataController#insertContent() and DataController#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 a MarkerOperation had null as it's oldRange or newRange. Closes #943. (d328811)

  • model.Element#getNodeByPath() and model.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 specific RemoveOperation. 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 x RemoveDelta 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 concerning AttributeDelta x SplitDelta 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)

Features

  • 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 in Schema in order to simplify the checks.

  • model.LiveRange#event:change got renamed to change:range. Introduced model.LiveRange#event:change:content. Closes #1089. (ec22a29)

  • model.LiveRange#event:change now contains data.batch instance which changed the range. Closes #1076. (c6f5e9f)

  • Enhanced Selection#setTo(), introduced Selection#setIn(), Selection#setOn(), Range.createCollapsedAt() and renamed few existing Selection methods for both model and view. Closes #1074. (070c313)

  • Hide the caret when the editor is read-only. EditingControler is observable from now. Observable property isReadOnly was added to the ViewDocument and EditingController. 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() and view.Node#getCommonAncestor(). Closes #1033. (f913aee)

  • Introduced Position#getCommonAncestor( position ) and Range#getCommonAncestor() methods for the view and model. Closes #1002. (0e29844)

  • Introduced Schema#getLimitElement(). Closes #1042. (691e53e)

  • Introduced view.Document#keyup event (fired by the KeyObserver). 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)

Other changes

  • Changed the merge option of DataController.deleteContent() to leaveUnmerged. The default value stayed false, 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 to getCommonAncestor(). 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).

BREAKING CHANGES

  • ModelConverterBuilder#toStamp() functionality is renamed to ModelConverterBuilder#toElement(). Introduced ModelConverterBuilder#toVirtualSelection() which replaces current marker to element conversion.
  • The DataController#deleteContent() option was renamed from merge to leaveUnmerged and the default behavior of the function was changed to merge blocks.
  • Removed wrapRange() and unwrapRange() functions from model-to-view-converters.js as they're no longer used.
  • Renamed marker stamps to marker elements in code and docs.
  • Renamed Selection#collapse() to Selection#setCollapsedAt().
  • Renamed Selection#setFocus() to Selection#moveFocusTo().
  • The includeNode option of Node#getAncestors() methods (model and view) was renamed to includeSelf. See #1036.
  • Parameter change for convertSelectionMarker() function from model-selection-to-view-converters.js.
  • deltaTransform#transformDeltaSets() is now an internal method. Use Document#transformDeltas() instead.
  • Removed Renderer#getCorrespondingDom() and Renderer#getCorrespondingView() methods.
  • Renamed Renderer#getCorrespondingDomText() method to Renderer#findCorrespondingDomText() and Renderer#getCorrespondingViewText() to Renderer#findCorrespondingViewText().
  • Merged Renderer#getCorrespondingDomElement() and Renderer#getCorrespondingDomDocumentFragment() into one method Renderer#mapViewToDom().
  • Merged Renderer#getCorrespondingViewElement() and Renderer#getCorrespondingViewDocumentFragment() into Renderer#mapDomToView().
  • History API for deleting undone deltas has been removed.

0.10.0 (2017-05-07)

Bug fixes

  • DomConverter#domToView() will not throw when converting a comment. Closes #647. (ffc41d4)

  • ViewConverterBuilder#fromAttribute() should not create incorrect matcher object for Matcher if passed attribute was other than class or style. Closes #919. (6701c4b)

    Minor upgrades to ViewConversionBuilder:

    • converters from ViewConversionBuilder will not convert if "creator function" returned null.
    • simplified view converters building by making ViewConversionBuilder#toAttribute() value param optional. If not set, the attribute value is taken from converted view element.
  • 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)

Features

  • 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)

Other changes

  • model.Element#clone() now does not clone children when passed false and recursively clones children when passed true. Closes #689. (ccb0659)

BREAKING CHANGES

  • ViewConversionDispatcher#convert() will always return model.DocumentFragment (which may be empty in various cases). conversionApi#convertItem() will log a warning if data.output contains a different value than model.Node or model.DocumentFragment or null. conversionApi#convertChildren() will always return model.DocumentFragment.
  • model.Element#clone() does not clone children when not in the deep mode. See #689.

0.9.0 (2017-04-05)

Bug fixes

  • 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)

Features

  • 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 in dev-utils.enableEngineDebug(). Closes #828. (eb855d9)
  • Introduced markers serialization. Closes #787. Closes #846. (2e7f75d)

Other changes

  • 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)

BREAKING CHANGES

  • 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. Use BuildModelConverter#fromMarker() instead.

NOTE

  • The insertUIElement() model to view converter now supports collapsed and non-collapsed ranges.

0.8.0 (2017-03-06)

Bug fixes

  • 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 removes view.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)

Features

  • Integrated Schema#limits with DataController'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 and view.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)

Other changes

  • ModelConversionDispatcher now uses remove + insert events to convert move and rename changes, instead of dedicated move and rename events. Closes #837. (f63657c)
  • view.Range.enlarge() and view.Range.shrink() should not pass the container limit because the view.Writer expects that the whole range is in the same container. Closes #830. (8d4a1ca)

BREAKING CHANGES

  • ModelConversionDispatcher no longer fires move and rename events. This means that feature converters added as callbacks to those should be replaced by remove and insert converters.
  • Removed view.DocumentFragment#getAncestors(). Closes #803. Closes #805.
  • Position.getAncestors() should return elements in the same order as Node.getAncestors().

NOTE

  • It is advised to use either Range#getTrimmed() or Range#getEnlarged() before operating on a range returned from Mapper.