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)Range#getTransformedByDelta() that caused editor to crash after some MergeDeltas were transformed. Closes #1132. (97a4f4b)MergeDelta transformation in a specific case. Closes #1103. (ef1b07e)<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)model.DocumentSelection#hasOwnRange property. Closes #1137. (4feb678)Schema#removeDisallowedAttributes() method to filter out disallowed attributes from given nodes. Closes #1120. (d776c71)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)ReinsertOperation is transformed by a specific RemoveOperation. Closes #946. (6875eff)SplitDelta transformation might cause undo to throw an error in some cases. Closes #1084. (cb9d409)DomConverter focuses an editable. Closes #957. (e3bc4d1)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.
enqueueChanges() block. Fixed also a bug concerning AttributeDelta x SplitDelta transformation. Closes #1055. (ed1b7e7)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)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)Selection#setTo(), introduced Selection#setIn(), Selection#setOn(), Range.createCollapsedAt() and renamed few existing Selection methods for both model and view. Closes #1074. (070c313)EditingControler is observable from now. Observable property isReadOnly was added to the ViewDocument and EditingController. Closes #1024. Closes ckeditor/ckeditor5#503. (e8fd17d)view.Document#scrollToTheSelection() method. Closes #660. (4479c40)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.
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)#history property. Closes #940. (7d8db49)Schema helpers – #checkAttributeInSelection() and #getValidRanges(). Closes #969. (34a7a06)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 nothing (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).
ModelConverterBuilder#toStamp() functionality is renamed to ModelConverterBuilder#toElement(). Introduced ModelConverterBuilder#toVirtualSelection() which replaces current marker to element conversion.DataController#deleteContent() option was renamed from merge to leaveUnmerged and the default behavior of the function was changed to merge blocks.wrapRange() and unwrapRange() functions from model-to-view-converters.js as they're no longer used.Selection#collapse() to Selection#setCollapsedAt().Selection#setFocus() to Selection#moveFocusTo().includeNode option of Node#getAncestors() methods (model and view) was renamed to includeSelf. See #1036.convertSelectionMarker() function from model-selection-to-view-converters.js.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.