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)ReinsertOperation is transformed by specific RemoveOperation. Closes #946. (6875eff)SplitDelta transformation might cause undo to throw an error in some cases. Closes #1084. (cb9d409)Fix: Fixed remove model-to-view converter for some edge cases. Closes #1068.
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.
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)view.Document#scrollToTheSelection() method. Closes #660. (4479c40)controller.DataController#hasContent. Closes #1114. (712ccfc)model.Node#getCommonAncestor() and view.Node#getCommonAncestor(). Closes #1033. (f913aee)Position#getCommonAncestor( position ) and Range#getCommonAncestor() methods for the view and model. Closes #1002. (0e29844)Schema#getLimitElement(). Closes #1042. (691e53e)view.Document#keyup event (fired by the KeyObserver). Closes #1026. (cc766ab)Selection#isEntireContentSelected( element ) method. Closes #1063. (1902d7a)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.
#history property. Closes #940. (7d8db49)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)model.Document#event:change, even if the operation "does not do" anything (for example, if operation changes attribute to the same value). Closes #1099. (6502bbb)options.includeSelf to getCommonAncestor(). Closes #1036. (4a4a89a)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).
DataController.deleteContent() option was renamed from merge to leaveUnmerged and the default behavior of the function was changed to merge blocks.includeNode option of Node#getAncestors() methods (model and view) was renamed to includeSelf. See #1036.deltaTransform#transformDeltaSets() is now an internal method. Use Document#transformDeltas() instead.Renderer#getCorrespondingDom() and Renderer#getCorrespondingView() methods.Renderer#getCorrespondingDomText() method to Renderer#findCorrespondingDomText() and Renderer#getCorrespondingViewText() to Renderer#findCorrespondingViewText().Renderer#getCorrespondingDomElement() and Renderer#getCorrespondingDomDocumentFragment() into one method Renderer#mapViewToDom().Renderer#getCorrespondingViewElement() and Renderer#getCorrespondingViewDocumentFragment() into Renderer#mapDomToView().History API for deleting undone deltas has been removed.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:
ViewConversionBuilder will not convert if "creator function" returned null.ViewConversionBuilder#toAttribute() value param optional. If not set, the attribute value is taken from converted view element.view.Element's inline styles parser. Big property values (like base64 encoded images) should not crash the editor anymore. Closes #881. (3d494a3)dev-utils.DeltaReplayer. Closes #906. (69cfdd1)data.output during view-to-model conversion. See breaking changes. Closes #932. (16ae05a)model.MarkerCollection will now include marker name after semicolon. Closes #911. (3a8ebed)model.Element#clone() now does not clone children when passed false and recursively clones children when passed true. Closes #689. (ccb0659)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.DataController#insertContent() behavior, so it doesn't clone given nodes. Closes #869. (45f0f33)AttributeDelta should not be added to batch. Closes #875. (425399b)LiveRange position would be lost when using wrap and unwrap deltas. Closes #841. (efe3987)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.
<br> at the end of the block element are filtered out by the mutation observer. Closes #882. (3583cae)ReinsertOperation targets back to same graveyard holder from which the nodes were re-inserted. Closes #891. (ea6c881)DataController#insertContent() now accepts also model items. Closes #870. (d00c973)dev-utils.DeltaReplayer. Introduced new logging methods in dev-utils.enableEngineDebug(). Closes #828. (eb855d9)DataController#deleteContent() in a case of nested elements to better match situations like using Backspace after a block quotation. Closes #710. (42a4429)SelectionObserver's infinite loop check which should improve its stability. Closes #889. (8b859fb)BuildModelConverter#fromMarkerCollapsed() is removed. Use BuildModelConverter#fromMarker() instead.insertUIElement() model to view converter now supports collapsed and non-collapsed ranges.view.Matcher#getElementName() now returns proper value when named function is used as a pattern. Closes #850. (93f41c5)model.Range no longer sticks to its neighbour node when that node is moved. Closes #852. (ccd23d1)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)null from the element creators in converters for selection attributes and markers. It does not crash the conversion anymore. Closes #833. (8ffa038)Schema#limits with DataController's methods. Closes #818. (e3c3e33)is() method in model and view tree nodes and document fragments. Closes #809. (1525bde)model.Selection#getSelectedBlocks(). Closes #811. (9f3f35f)Schema#limits map. See #818. (a66bcdd)view.Document#selectionChangeDone event. Closes #791. (3a15236)view.Range#getEnlarged(), view.Range#getTrimmed(), view.Position#getLastMatchingPosition(), model.Position#getLastMatchingPosition(), view.TreeWalker#skip(), model.TreeWalker#skip(). Closes #789. (973f2ba)view.UIElement class and view.writer.clear() method. Closes #788. (64be1f6)view.UIElement. Closes #792. (1731e69)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)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.view.DocumentFragment#getAncestors(). Closes #803. Closes #805.Position.getAncestors() should return elements in the same order as Node.getAncestors().Range#getTrimmed() or Range#getEnlarged() before operating on a range returned from Mapper.