Răsfoiți Sursa

Merge pull request #956 from ckeditor/t/953

Code style: Aligned the code style after switching to a more picky ESLint. Closes #953.
Piotrek Koszuliński 8 ani în urmă
părinte
comite
b27900eadd
100 a modificat fișierele cu 873 adăugiri și 856 ștergeri
  1. 12 0
      packages/ckeditor5-engine/.eslintrc.js
  2. 0 89
      packages/ckeditor5-engine/.jscsrc
  3. 0 11
      packages/ckeditor5-engine/.jshintrc
  4. 4 10
      packages/ckeditor5-engine/gulpfile.js
  5. 1 0
      packages/ckeditor5-engine/package.json
  6. 1 3
      packages/ckeditor5-engine/src/controller/insertcontent.js
  7. 6 6
      packages/ckeditor5-engine/src/conversion/buildmodelconverter.js
  8. 12 12
      packages/ckeditor5-engine/src/conversion/buildviewconverter.js
  9. 16 13
      packages/ckeditor5-engine/src/conversion/mapper.js
  10. 2 2
      packages/ckeditor5-engine/src/conversion/model-selection-to-view-converters.js
  11. 3 3
      packages/ckeditor5-engine/src/conversion/model-to-view-converters.js
  12. 1 1
      packages/ckeditor5-engine/src/conversion/modelconsumable.js
  13. 22 22
      packages/ckeditor5-engine/src/conversion/modelconversiondispatcher.js
  14. 1 1
      packages/ckeditor5-engine/src/conversion/view-selection-to-model-converters.js
  15. 16 16
      packages/ckeditor5-engine/src/conversion/viewconsumable.js
  16. 3 3
      packages/ckeditor5-engine/src/conversion/viewconversiondispatcher.js
  17. 6 6
      packages/ckeditor5-engine/src/dev-utils/deltareplayer.js
  18. 12 13
      packages/ckeditor5-engine/src/dev-utils/enableenginedebug.js
  19. 7 8
      packages/ckeditor5-engine/src/dev-utils/model.js
  20. 35 29
      packages/ckeditor5-engine/src/dev-utils/view.js
  21. 2 2
      packages/ckeditor5-engine/src/model/batch.js
  22. 6 6
      packages/ckeditor5-engine/src/model/delta/attributedelta.js
  23. 2 1
      packages/ckeditor5-engine/src/model/delta/basic-deltas.js
  24. 6 6
      packages/ckeditor5-engine/src/model/delta/basic-transformations.js
  25. 6 6
      packages/ckeditor5-engine/src/model/delta/delta.js
  26. 4 4
      packages/ckeditor5-engine/src/model/delta/deltafactory.js
  27. 8 2
      packages/ckeditor5-engine/src/model/delta/mergedelta.js
  28. 2 2
      packages/ckeditor5-engine/src/model/delta/removedelta.js
  29. 2 4
      packages/ckeditor5-engine/src/model/delta/renamedelta.js
  30. 6 2
      packages/ckeditor5-engine/src/model/delta/splitdelta.js
  31. 26 24
      packages/ckeditor5-engine/src/model/delta/transform.js
  32. 8 2
      packages/ckeditor5-engine/src/model/delta/unwrapdelta.js
  33. 1 1
      packages/ckeditor5-engine/src/model/delta/weakinsertdelta.js
  34. 13 6
      packages/ckeditor5-engine/src/model/delta/wrapdelta.js
  35. 14 13
      packages/ckeditor5-engine/src/model/document.js
  36. 10 7
      packages/ckeditor5-engine/src/model/documentfragment.js
  37. 11 8
      packages/ckeditor5-engine/src/model/element.js
  38. 3 3
      packages/ckeditor5-engine/src/model/history.js
  39. 7 8
      packages/ckeditor5-engine/src/model/liveposition.js
  40. 0 2
      packages/ckeditor5-engine/src/model/liverange.js
  41. 10 10
      packages/ckeditor5-engine/src/model/liveselection.js
  42. 3 3
      packages/ckeditor5-engine/src/model/markercollection.js
  43. 3 3
      packages/ckeditor5-engine/src/model/node.js
  44. 4 4
      packages/ckeditor5-engine/src/model/nodelist.js
  45. 4 3
      packages/ckeditor5-engine/src/model/operation/attributeoperation.js
  46. 6 7
      packages/ckeditor5-engine/src/model/operation/insertoperation.js
  47. 1 1
      packages/ckeditor5-engine/src/model/operation/markeroperation.js
  48. 9 9
      packages/ckeditor5-engine/src/model/operation/moveoperation.js
  49. 2 2
      packages/ckeditor5-engine/src/model/operation/removeoperation.js
  50. 2 1
      packages/ckeditor5-engine/src/model/operation/rootattributeoperation.js
  51. 32 17
      packages/ckeditor5-engine/src/model/operation/transform.js
  52. 10 10
      packages/ckeditor5-engine/src/model/position.js
  53. 48 21
      packages/ckeditor5-engine/src/model/range.js
  54. 2 1
      packages/ckeditor5-engine/src/model/rootelement.js
  55. 10 10
      packages/ckeditor5-engine/src/model/schema.js
  56. 13 11
      packages/ckeditor5-engine/src/model/selection.js
  57. 1 1
      packages/ckeditor5-engine/src/model/text.js
  58. 1 0
      packages/ckeditor5-engine/src/model/textproxy.js
  59. 9 11
      packages/ckeditor5-engine/src/model/treewalker.js
  60. 4 6
      packages/ckeditor5-engine/src/model/writer.js
  61. 0 2
      packages/ckeditor5-engine/src/view/attributeelement.js
  62. 0 1
      packages/ckeditor5-engine/src/view/containerelement.js
  63. 9 7
      packages/ckeditor5-engine/src/view/document.js
  64. 5 2
      packages/ckeditor5-engine/src/view/documentfragment.js
  65. 28 23
      packages/ckeditor5-engine/src/view/domconverter.js
  66. 1 1
      packages/ckeditor5-engine/src/view/editableelement.js
  67. 19 15
      packages/ckeditor5-engine/src/view/element.js
  68. 2 2
      packages/ckeditor5-engine/src/view/emptyelement.js
  69. 2 2
      packages/ckeditor5-engine/src/view/filler.js
  70. 13 13
      packages/ckeditor5-engine/src/view/matcher.js
  71. 1 1
      packages/ckeditor5-engine/src/view/node.js
  72. 1 1
      packages/ckeditor5-engine/src/view/observer/fakeselectionobserver.js
  73. 6 6
      packages/ckeditor5-engine/src/view/observer/mutationobserver.js
  74. 5 3
      packages/ckeditor5-engine/src/view/observer/selectionobserver.js
  75. 1 1
      packages/ckeditor5-engine/src/view/placeholder.js
  76. 3 3
      packages/ckeditor5-engine/src/view/position.js
  77. 6 5
      packages/ckeditor5-engine/src/view/range.js
  78. 13 10
      packages/ckeditor5-engine/src/view/renderer.js
  79. 7 7
      packages/ckeditor5-engine/src/view/selection.js
  80. 1 0
      packages/ckeditor5-engine/src/view/textproxy.js
  81. 5 5
      packages/ckeditor5-engine/src/view/treewalker.js
  82. 16 16
      packages/ckeditor5-engine/src/view/writer.js
  83. 0 22
      packages/ckeditor5-engine/tests/.jshintrc
  84. 4 4
      packages/ckeditor5-engine/tests/controller/datacontroller.js
  85. 1 1
      packages/ckeditor5-engine/tests/controller/deletecontent.js
  86. 5 9
      packages/ckeditor5-engine/tests/controller/editingcontroller.js
  87. 30 10
      packages/ckeditor5-engine/tests/controller/insertcontent.js
  88. 60 44
      packages/ckeditor5-engine/tests/conversion/advanced-converters.js
  89. 50 37
      packages/ckeditor5-engine/tests/conversion/buildmodelconverter.js
  90. 35 32
      packages/ckeditor5-engine/tests/conversion/buildviewconverter.js
  91. 34 42
      packages/ckeditor5-engine/tests/conversion/mapper.js
  92. 9 11
      packages/ckeditor5-engine/tests/conversion/model-selection-to-view-converters.js
  93. 12 12
      packages/ckeditor5-engine/tests/conversion/model-to-view-converters.js
  94. 4 4
      packages/ckeditor5-engine/tests/conversion/modelconversiondispatcher.js
  95. 2 3
      packages/ckeditor5-engine/tests/conversion/viewconsumable.js
  96. 4 3
      packages/ckeditor5-engine/tests/conversion/viewconversiondispatcher.js
  97. 1 1
      packages/ckeditor5-engine/tests/dataprocessor/_utils/xsstemplates.js
  98. 2 2
      packages/ckeditor5-engine/tests/dataprocessor/htmldataprocessor.js
  99. 2 2
      packages/ckeditor5-engine/tests/dataprocessor/xmldataprocessor.js
  100. 3 3
      packages/ckeditor5-engine/tests/dev-utils/deltareplayer.js

+ 12 - 0
packages/ckeditor5-engine/.eslintrc.js

@@ -0,0 +1,12 @@
+/**
+ * @license Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md.
+ */
+
+/* eslint-env node */
+
+'use strict';
+
+module.exports = {
+	extends: 'ckeditor5'
+};

+ 0 - 89
packages/ckeditor5-engine/.jscsrc

@@ -1,89 +0,0 @@
-{
-  "requireCurlyBraces": [
-    "if",
-    "else",
-    "for",
-    "while",
-    "do",
-    "switch",
-    "try",
-    "catch"
-  ],
-  "requireSpaceBeforeKeywords": true,
-  "requireSpaceAfterKeywords": [
-    "do",
-    "for",
-    "if",
-    "else",
-    "switch",
-    "case",
-    "try",
-    "catch",
-    "void",
-    "while",
-    "with",
-    "return",
-    "typeof"
-  ],
-  "requireSpaceBeforeBlockStatements": true,
-  "requireParenthesesAroundIIFE": true,
-  "requireSpacesInConditionalExpression": {
-    "afterTest": true,
-    "beforeConsequent": true,
-    "afterConsequent": true,
-    "beforeAlternate": true
-  },
-  "requireSpacesInFunction": {
-    "beforeOpeningCurlyBrace": true
-  },
-  "disallowSpacesInFunction": {
-    "beforeOpeningRoundBrace": true
-  },
-  "disallowSpacesInCallExpression": true,
-  "disallowMultipleVarDecl": "exceptUndefined",
-  "requireBlocksOnNewline": true,
-  "disallowPaddingNewlinesInBlocks": true,
-  "requirePaddingNewlinesBeforeKeywords": [
-    "do",
-    "for",
-    "if",
-    "switch",
-    "case",
-    "try",
-    "while",
-    "with",
-    "return"
-  ],
-  "requireSpacesInsideObjectBrackets": "all",
-  "requireSpacesInsideArrayBrackets": "all",
-  "requireSpacesInsideParentheses": "all",
-  "disallowSpaceAfterObjectKeys": true,
-  "requireSpaceBeforeObjectValues": true,
-  "requireCommaBeforeLineBreak": true,
-  "requireOperatorBeforeLineBreak": true,
-  "disallowSpaceAfterPrefixUnaryOperators": true,
-  "disallowSpaceBeforePostfixUnaryOperators": true,
-  "requireSpaceBeforeBinaryOperators": true,
-  "disallowImplicitTypeConversion": [
-    "numeric",
-    "binary",
-    "string"
-  ],
-  "requireCamelCaseOrUpperCaseIdentifiers": true,
-  "requireSpaceAfterBinaryOperators": true,
-  "disallowKeywords": [
-    "with"
-  ],
-  "disallowMultipleLineStrings": true,
-  "disallowMultipleLineBreaks": true,
-  "disallowMixedSpacesAndTabs": true,
-  "disallowTrailingWhitespace": true,
-  "maximumLineLength": 140,
-  "requireCapitalizedConstructors": true,
-  "requireDotNotation": true,
-  "disallowYodaConditions": true,
-  "disallowNewlineBeforeBlockStatements": true,
-  "validateLineBreaks": "LF",
-  "validateQuoteMarks": "'",
-  "validateIndentation": "\t"
-}

+ 0 - 11
packages/ckeditor5-engine/.jshintrc

@@ -1,11 +0,0 @@
-{
-  "esnext": true,
-  "immed": true,
-  "loopfunc": true,
-  "noarg": true,
-  "nonbsp": true,
-  "undef": true,
-  "unused": true,
-  "strict": "implied",
-  "varstmt": true
-}

+ 4 - 10
packages/ckeditor5-engine/gulpfile.js

@@ -3,19 +3,13 @@
  * For licensing, see LICENSE.md.
  */
 
-/* jshint browser: false, node: true, strict: true */
+/* eslint-env node */
 
 'use strict';
 
 const gulp = require( 'gulp' );
-const ckeditor5Lint = require( '@ckeditor/ckeditor5-dev-lint' )( {
-	// Files ignored by `gulp lint` task.
-	// Files from .gitignore will be added automatically during task execution.
-	ignoredFiles: [
-		'src/lib/**'
-	]
-} );
+const ckeditor5Lint = require( '@ckeditor/ckeditor5-dev-lint' );
 
-gulp.task( 'lint', ckeditor5Lint.lint );
-gulp.task( 'lint-staged', ckeditor5Lint.lintStaged );
+gulp.task( 'lint', () => ckeditor5Lint.lint() );
+gulp.task( 'lint-staged', () => ckeditor5Lint.lintStaged() );
 gulp.task( 'pre-commit', [ 'lint-staged' ] );

+ 1 - 0
packages/ckeditor5-engine/package.json

@@ -19,6 +19,7 @@
     "@ckeditor/ckeditor5-paragraph": "^0.8.0",
     "@ckeditor/ckeditor5-typing": "^0.9.1",
     "@ckeditor/ckeditor5-undo": "^0.8.1",
+    "eslint-config-ckeditor5": "^0.0.2",
     "gulp": "^3.9.0",
     "guppy-pre-commit": "^0.4.0"
   },

+ 1 - 3
packages/ckeditor5-engine/src/controller/insertcontent.js

@@ -289,8 +289,6 @@ class Insertion {
 		}
 
 		if ( mergeRight ) {
-			let position;
-
 			/* istanbul ignore if */
 			if ( !this.position.isEqual( mergePosRight ) ) {
 				// Algorithm's correctness check. We should never end up here but it's good to know that we did.
@@ -305,7 +303,7 @@ class Insertion {
 
 			// OK:  <p>xx[]</p> + <p>yy</p> => <p>xx[]yy</p> (when sticks to previous)
 			// NOK: <p>xx[]</p> + <p>yy</p> => <p>xxyy[]</p> (when sticks to next)
-			position = new LivePosition( this.position.root, this.position.path, 'sticksToPrevious' );
+			const position = new LivePosition( this.position.root, this.position.path, 'sticksToPrevious' );
 
 			this.batch.merge( mergePosRight );
 

+ 6 - 6
packages/ckeditor5-engine/src/conversion/buildmodelconverter.js

@@ -144,7 +144,7 @@ class ModelConverterBuilder {
 	fromAttribute( key ) {
 		this._from = {
 			type: 'attribute',
-			key: key,
+			key,
 			priority: null
 		};
 
@@ -228,7 +228,7 @@ class ModelConverterBuilder {
 	toElement( element ) {
 		const priority = this._from.priority === null ? 'normal' : this._from.priority;
 
-		for ( let dispatcher of this._dispatchers ) {
+		for ( const dispatcher of this._dispatchers ) {
 			if ( this._from.type == 'element' ) {
 				// From model element to view element -> insert element.
 				element = typeof element == 'string' ? new ViewContainerElement( element ) : element;
@@ -296,7 +296,7 @@ class ModelConverterBuilder {
 	 * a function that returns view element.
 	 */
 	toStamp( element ) {
-		for ( let dispatcher of this._dispatchers ) {
+		for ( const dispatcher of this._dispatchers ) {
 			if ( this._from.type != 'marker' ) {
 				/**
 				 * To-stamp conversion is supported only for model markers.
@@ -371,12 +371,12 @@ class ModelConverterBuilder {
 			if ( value ) {
 				// If value is set, create "dumb" creator that always returns the same object.
 				attributeCreator = function() {
-					return { key: keyOrCreator, value: value };
+					return { key: keyOrCreator, value };
 				};
 			} else {
 				// If value is not set, take it from the passed parameter.
 				attributeCreator = function( value ) {
-					return { key: keyOrCreator, value: value };
+					return { key: keyOrCreator, value };
 				};
 			}
 		} else {
@@ -384,7 +384,7 @@ class ModelConverterBuilder {
 			attributeCreator = keyOrCreator;
 		}
 
-		for ( let dispatcher of this._dispatchers ) {
+		for ( const dispatcher of this._dispatchers ) {
 			const options = { priority: this._from.priority || 'normal' };
 
 			dispatcher.on( 'addAttribute:' + this._from.key, setAttribute( attributeCreator ), options );

+ 12 - 12
packages/ckeditor5-engine/src/conversion/buildviewconverter.js

@@ -142,7 +142,7 @@ class ViewConverterBuilder {
 	 * @returns {module:engine/conversion/buildviewconverter~ViewConverterBuilder}
 	 */
 	fromAttribute( key, value = /.*/ ) {
-		let pattern = {};
+		const pattern = {};
 
 		if ( key === 'style' || key === 'class' ) {
 			pattern[ key ] = value;
@@ -154,7 +154,7 @@ class ViewConverterBuilder {
 		const matcher = new Matcher( pattern );
 
 		this._from.push( {
-			matcher: matcher,
+			matcher,
 			consume: false,
 			priority: null,
 			attributeKey: key
@@ -183,7 +183,7 @@ class ViewConverterBuilder {
 		}
 
 		this._from.push( {
-			matcher: matcher,
+			matcher,
 			consume: false,
 			priority: null
 		} );
@@ -221,7 +221,7 @@ class ViewConverterBuilder {
 	 * @returns {module:engine/conversion/buildviewconverter~ViewConverterBuilder}
 	 */
 	consuming( consume ) {
-		let lastFrom = this._from[ this._from.length - 1 ];
+		const lastFrom = this._from[ this._from.length - 1 ];
 		lastFrom.consume = consume;
 
 		return this;
@@ -250,7 +250,7 @@ class ViewConverterBuilder {
 	 * @returns {module:engine/conversion/buildviewconverter~ViewConverterBuilder}
 	 */
 	withPriority( priority ) {
-		let lastFrom = this._from[ this._from.length - 1 ];
+		const lastFrom = this._from[ this._from.length - 1 ];
 		lastFrom.priority = priority;
 
 		return this;
@@ -275,7 +275,7 @@ class ViewConverterBuilder {
 			return ( evt, data, consumable, conversionApi ) => {
 				// There is one callback for all patterns in the matcher.
 				// This will be usually just one pattern but we support matchers with many patterns too.
-				let matchAll = from.matcher.matchAll( data.input );
+				const matchAll = from.matcher.matchAll( data.input );
 
 				// If there is no match, this callback should not do anything.
 				if ( !matchAll ) {
@@ -283,7 +283,7 @@ class ViewConverterBuilder {
 				}
 
 				// Now, for every match between matcher and actual element, we will try to consume the match.
-				for ( let match of matchAll ) {
+				for ( const match of matchAll ) {
 					// Create model element basing on creator function or element name.
 					const modelElement = element instanceof Function ? element( data.input ) : new ModelElement( element );
 
@@ -350,7 +350,7 @@ class ViewConverterBuilder {
 			return ( evt, data, consumable, conversionApi ) => {
 				// There is one callback for all patterns in the matcher.
 				// This will be usually just one pattern but we support matchers with many patterns too.
-				let matchAll = from.matcher.matchAll( data.input );
+				const matchAll = from.matcher.matchAll( data.input );
 
 				// If there is no match, this callback should not do anything.
 				if ( !matchAll ) {
@@ -358,7 +358,7 @@ class ViewConverterBuilder {
 				}
 
 				// Now, for every match between matcher and actual element, we will try to consume the match.
-				for ( let match of matchAll ) {
+				for ( const match of matchAll ) {
 					// Try to consume appropriate values from consumable values list.
 					if ( !consumable.consume( data.input, from.consume || match.match ) ) {
 						continue;
@@ -487,7 +487,7 @@ class ViewConverterBuilder {
 	 */
 	_setCallback( eventCallbackGen, defaultPriority ) {
 		// We will add separate event callback for each registered `from` entry.
-		for ( let from of this._from ) {
+		for ( const from of this._from ) {
 			// We have to figure out event name basing on matcher's patterns.
 			// If there is exactly one pattern and it has `name` property we will used that name.
 			const matcherElementName = from.matcher.getElementName();
@@ -497,7 +497,7 @@ class ViewConverterBuilder {
 			const priority = from.priority === null ? defaultPriority : from.priority;
 
 			// Add event to each registered dispatcher.
-			for ( let dispatcher of this._dispatchers ) {
+			for ( const dispatcher of this._dispatchers ) {
 				dispatcher.on( eventName, eventCallback, { priority } );
 			}
 		}
@@ -508,7 +508,7 @@ class ViewConverterBuilder {
 // `module:engine/model/documentfragment~DocumentFragment`.
 function setAttributeOn( toChange, attribute, data, conversionApi ) {
 	if ( isIterable( toChange ) ) {
-		for ( let node of toChange ) {
+		for ( const node of toChange ) {
 			setAttributeOn( node, attribute, data, conversionApi );
 		}
 

+ 16 - 13
packages/ckeditor5-engine/src/conversion/mapper.js

@@ -68,7 +68,7 @@ export default class Mapper {
 				return;
 			}
 
-			let viewContainer = this._modelToViewMapping.get( data.modelPosition.parent );
+			const viewContainer = this._modelToViewMapping.get( data.modelPosition.parent );
 
 			data.viewPosition = this._findPositionIn( viewContainer, data.modelPosition.offset );
 		}, { priority: 'low' } );
@@ -87,7 +87,7 @@ export default class Mapper {
 				modelParent = this._viewToModelMapping.get( viewBlock );
 			}
 
-			let modelOffset = this._toModelOffset( data.viewPosition.parent, data.viewPosition.offset, viewBlock );
+			const modelOffset = this._toModelOffset( data.viewPosition.parent, data.viewPosition.offset, viewBlock );
 
 			data.modelPosition = ModelPosition.createFromParentAndOffset( modelParent, modelOffset );
 		}, { priority: 'low' } );
@@ -188,7 +188,7 @@ export default class Mapper {
 	 */
 	toModelPosition( viewPosition ) {
 		const data = {
-			viewPosition: viewPosition,
+			viewPosition,
 			mapper: this
 		};
 
@@ -206,7 +206,7 @@ export default class Mapper {
 	 */
 	toViewPosition( modelPosition ) {
 		const data = {
-			modelPosition: modelPosition,
+			modelPosition,
 			mapper: this
 		};
 
@@ -340,7 +340,7 @@ export default class Mapper {
 		} else {
 			let len = 0;
 
-			for ( let child of viewNode.getChildren() ) {
+			for ( const child of viewNode.getChildren() ) {
 				len += this.getModelLength( child );
 			}
 
@@ -439,12 +439,13 @@ export default class Mapper {
 
 	/**
 	 * Fired for each model-to-view position mapping request. The purpose of this event is to enable custom model-to-view position
-	 * mapping. Callbacks added to this event take {@link module:engine/model/position~Position model position} and are expected to calculate
-	 * {@link module:engine/view/position~Position view position}. Calculated view position should be added as `viewPosition` value in
-	 * `data` object that is passed as one of parameters to the event callback.
+	 * mapping. Callbacks added to this event take {@link module:engine/model/position~Position model position} and are expected to
+	 * calculate {@link module:engine/view/position~Position view position}. Calculated view position should be added as `viewPosition`
+	 * value in `data` object that is passed as one of parameters to the event callback.
 	 *
 	 * 		// Assume that "captionedImage" model element is converted to <img> and following <span> elements in view,
-	 * 		// and the model element is bound to <img> element. Force mapping model positions inside "captionedImage" to that <span> element.
+	 * 		// and the model element is bound to <img> element. Force mapping model positions inside "captionedImage" to that
+	 * 		// <span> element.
 	 *		mapper.on( 'modelToViewPosition', ( evt, data ) => {
 	 *			const positionParent = modelPosition.parent;
 	 *
@@ -473,8 +474,9 @@ export default class Mapper {
 	 *		const prevViewElement = data.mapper.toViewElement( prevModelElement );
 	 *		// ... Use `prevViewElement` to find correct `data.viewPosition`.
 	 *
-	 * **Note:** default mapping callback is provided with `low` priority setting and does not cancel the event, so it is possible to attach
-	 * a custom callback after default callback and also use `data.viewPosition` calculated by default callback (for example to fix it).
+	 * **Note:** default mapping callback is provided with `low` priority setting and does not cancel the event, so it is possible to
+	 * attach a custom callback after default callback and also use `data.viewPosition` calculated by default callback
+	 * (for example to fix it).
 	 *
 	 * **Note:** default mapping callback will not fire if `data.viewPosition` is already set.
 	 *
@@ -505,8 +507,9 @@ export default class Mapper {
 	 *			}
 	 *		} );
 	 *
-	 * **Note:** default mapping callback is provided with `low` priority setting and does not cancel the event, so it is possible to attach
-	 * a custom callback after default callback and also use `data.modelPosition` calculated by default callback (for example to fix it).
+	 * **Note:** default mapping callback is provided with `low` priority setting and does not cancel the event, so it is possible to
+	 * attach a custom callback after default callback and also use `data.modelPosition` calculated by default callback
+	 * (for example to fix it).
 	 *
 	 * **Note:** default mapping callback will not fire if `data.modelPosition` is already set.
 	 *

+ 2 - 2
packages/ckeditor5-engine/src/conversion/model-selection-to-view-converters.js

@@ -38,7 +38,7 @@ export function convertRangeSelection() {
 
 		conversionApi.viewSelection.removeAllRanges();
 
-		for ( let range of selection.getRanges() ) {
+		for ( const range of selection.getRanges() ) {
 			const viewRange = conversionApi.mapper.toViewRange( range );
 			conversionApi.viewSelection.addRange( viewRange, selection.isBackward );
 		}
@@ -232,7 +232,7 @@ function wrapCollapsedSelectionPosition( modelSelection, viewSelection, viewElem
  */
 export function clearAttributes() {
 	return ( evt, data, consumable, conversionApi ) => {
-		for ( let range of conversionApi.viewSelection.getRanges() ) {
+		for ( const range of conversionApi.viewSelection.getRanges() ) {
 			// Not collapsed selection should not have artifacts.
 			if ( range.isCollapsed ) {
 				// Position might be in the node removed by the view writer.

+ 3 - 3
packages/ckeditor5-engine/src/conversion/model-to-view-converters.js

@@ -373,7 +373,7 @@ export function wrapRange( elementCreator ) {
 		const viewRange = conversionApi.mapper.toViewRange( data.range );
 		const flatViewRanges = viewWriter.breakViewRangePerContainer( viewRange );
 
-		for ( let range of flatViewRanges ) {
+		for ( const range of flatViewRanges ) {
 			viewWriter.wrap( range, viewElement );
 		}
 	};
@@ -417,7 +417,7 @@ export function unwrapRange( elementCreator ) {
 		const viewRange = conversionApi.mapper.toViewRange( data.range );
 		const flatViewRanges = viewWriter.breakViewRangePerContainer( viewRange );
 
-		for ( let range of flatViewRanges ) {
+		for ( const range of flatViewRanges ) {
 			viewWriter.unwrap( range, viewElement );
 		}
 	};
@@ -487,7 +487,7 @@ function _shiftViewPositionByCharacters( position, howMany ) {
 	// We will count visited characters and return the position after `howMany` characters.
 	let charactersFound = 0;
 
-	for ( let value of walker ) {
+	for ( const value of walker ) {
 		if ( value.type == 'text' ) {
 			charactersFound++;
 

+ 1 - 1
packages/ckeditor5-engine/src/conversion/modelconsumable.js

@@ -280,7 +280,7 @@ export default class ModelConsumable {
 	 * @returns {Symbol} Symbol generated for given properties.
 	 */
 	_addSymbolForTextProxy( start, end, parent ) {
-		const symbol = Symbol();
+		const symbol = Symbol( 'textProxySymbol' );
 		let startMap, endMap;
 
 		startMap = this._textProxyRegistry.get( start );

+ 22 - 22
packages/ckeditor5-engine/src/conversion/modelconversiondispatcher.js

@@ -193,11 +193,11 @@ export default class ModelConversionDispatcher {
 		const consumable = this._createInsertConsumable( range );
 
 		// Fire a separate insert event for each node and text fragment contained in the range.
-		for ( let value of range ) {
+		for ( const value of range ) {
 			const item = value.item;
 			const itemRange = Range.createFromPositionAndShift( value.previousPosition, value.length );
 			const data = {
-				item: item,
+				item,
 				range: itemRange
 			};
 
@@ -206,7 +206,7 @@ export default class ModelConversionDispatcher {
 			// Fire a separate addAttribute event for each attribute that was set on inserted items.
 			// This is important because most attributes converters will listen only to add/change/removeAttribute events.
 			// If we would not add this part, attributes on inserted nodes would not be converted.
-			for ( let key of item.getAttributeKeys() ) {
+			for ( const key of item.getAttributeKeys() ) {
 				data.attributeKey = key;
 				data.attributeOldValue = null;
 				data.attributeNewValue = item.getAttribute( key );
@@ -215,7 +215,7 @@ export default class ModelConversionDispatcher {
 			}
 		}
 
-		for ( let marker of this._modelDocument.markers ) {
+		for ( const marker of this._modelDocument.markers ) {
 			const markerRange = marker.getRange();
 
 			// Check if inserted content is inserted into a marker.
@@ -245,8 +245,8 @@ export default class ModelConversionDispatcher {
 		if ( range.start.isBefore( sourcePosition ) ) {
 			this.convertInsertion( range );
 
-			const sourcePositionAfterInsertion
-				= sourcePosition._getTransformedByInsertion( range.start, range.end.offset - range.start.offset );
+			const sourcePositionAfterInsertion =
+				sourcePosition._getTransformedByInsertion( range.start, range.end.offset - range.start.offset );
 
 			this.convertRemove( sourcePositionAfterInsertion, range );
 		} else {
@@ -268,13 +268,13 @@ export default class ModelConversionDispatcher {
 	convertRemove( sourcePosition, range ) {
 		const consumable = this._createConsumableForRange( range, 'remove' );
 
-		for ( let item of range.getItems( { shallow: true } ) ) {
+		for ( const item of range.getItems( { shallow: true } ) ) {
 			const data = {
-				sourcePosition: sourcePosition,
-				item: item
+				sourcePosition,
+				item
 			};
 
-			this._testAndFire( `remove`, data, consumable );
+			this._testAndFire( 'remove', data, consumable );
 		}
 	}
 
@@ -297,11 +297,11 @@ export default class ModelConversionDispatcher {
 		const consumable = this._createConsumableForRange( range, type + ':' + key );
 
 		// Create a separate attribute event for each node in the range.
-		for ( let value of range ) {
+		for ( const value of range ) {
 			const item = value.item;
 			const itemRange = Range.createFromPositionAndShift( value.previousPosition, value.length );
 			const data = {
-				item: item,
+				item,
 				range: itemRange,
 				attributeKey: key,
 				attributeOldValue: oldValue,
@@ -356,9 +356,9 @@ export default class ModelConversionDispatcher {
 
 		this.fire( 'selection', { selection }, consumable, this.conversionApi );
 
-		for ( let marker of markers ) {
+		for ( const marker of markers ) {
 			const data = {
-				selection: selection,
+				selection,
 				name: marker.name
 			};
 
@@ -367,10 +367,10 @@ export default class ModelConversionDispatcher {
 			}
 		}
 
-		for ( let key of selection.getAttributeKeys() ) {
+		for ( const key of selection.getAttributeKeys() ) {
 			const data = {
-				selection: selection,
-				key: key,
+				selection,
+				key,
 				value: selection.getAttribute( key )
 			};
 
@@ -416,12 +416,12 @@ export default class ModelConversionDispatcher {
 	_createInsertConsumable( range ) {
 		const consumable = new Consumable();
 
-		for ( let value of range ) {
+		for ( const value of range ) {
 			const item = value.item;
 
 			consumable.add( item, 'insert' );
 
-			for ( let key of item.getAttributeKeys() ) {
+			for ( const key of item.getAttributeKeys() ) {
 				consumable.add( item, 'addAttribute:' + key );
 			}
 		}
@@ -441,7 +441,7 @@ export default class ModelConversionDispatcher {
 	_createConsumableForRange( range, type ) {
 		const consumable = new Consumable();
 
-		for ( let item of range.getItems() ) {
+		for ( const item of range.getItems() ) {
 			consumable.add( item, type );
 		}
 
@@ -461,11 +461,11 @@ export default class ModelConversionDispatcher {
 
 		consumable.add( selection, 'selection' );
 
-		for ( let marker of markers ) {
+		for ( const marker of markers ) {
 			consumable.add( selection, 'selectionMarker:' + marker.name );
 		}
 
-		for ( let key of selection.getAttributeKeys() ) {
+		for ( const key of selection.getAttributeKeys() ) {
 			consumable.add( selection, 'selectionAttribute:' + key );
 		}
 

+ 1 - 1
packages/ckeditor5-engine/src/conversion/view-selection-to-model-converters.js

@@ -33,7 +33,7 @@ export function convertSelectionChange( modelDocument, mapper ) {
 
 		const ranges = [];
 
-		for ( let viewRange of viewSelection.getRanges() ) {
+		for ( const viewRange of viewSelection.getRanges() ) {
 			ranges.push( mapper.toModelRange( viewRange ) );
 		}
 

+ 16 - 16
packages/ckeditor5-engine/src/conversion/viewconsumable.js

@@ -41,8 +41,8 @@ export default class ViewConsumable {
 		/**
 		 * Map of consumable elements. If {@link module:engine/view/element~Element element} is used as a key,
 		 * {@link module:engine/conversion/viewconsumable~ViewElementConsumables ViewElementConsumables} instance is stored as value.
-		 * For {@link module:engine/view/text~Text text nodes} and {@link module:engine/view/documentfragment~DocumentFragment document fragments}
-		 * boolean value is stored as value.
+		 * For {@link module:engine/view/text~Text text nodes} and
+		 * {@link module:engine/view/documentfragment~DocumentFragment document fragments} boolean value is stored as value.
 		 *
 		 * @protected
 		 * @member {Map.<module:engine/conversion/viewconsumable~ViewElementConsumables|Boolean>}
@@ -246,7 +246,7 @@ export default class ViewConsumable {
 
 		const attributes = element.getAttributeKeys();
 
-		for ( let attribute of attributes ) {
+		for ( const attribute of attributes ) {
 			// Skip classes and styles - will be added separately.
 			if ( attribute == 'style' || attribute == 'class' ) {
 				continue;
@@ -257,13 +257,13 @@ export default class ViewConsumable {
 
 		const classes = element.getClassNames();
 
-		for ( let className of classes ) {
+		for ( const className of classes ) {
 			consumables.class.push( className );
 		}
 
 		const styles = element.getStyleNames();
 
-		for ( let style of styles ) {
+		for ( const style of styles ) {
 			consumables.style.push( style );
 		}
 
@@ -301,7 +301,7 @@ export default class ViewConsumable {
 			instance.add( from );
 		}
 
-		for ( let child of from.getChildren() ) {
+		for ( const child of from.getChildren() ) {
 			instance = ViewConsumable.createFrom( child, instance );
 		}
 
@@ -320,7 +320,7 @@ class ViewElementConsumables {
 	/**
 	 * Creates ViewElementConsumables instance.
 	 */
-	constructor()  {
+	constructor() {
 		/**
 		 * Flag indicating if name of the element can be consumed.
 		 *
@@ -368,7 +368,7 @@ class ViewElementConsumables {
 			this._canConsumeName = true;
 		}
 
-		for ( let type in this._consumables ) {
+		for ( const type in this._consumables ) {
 			if ( type in consumables ) {
 				this._add( type, consumables[ type ] );
 			}
@@ -401,7 +401,7 @@ class ViewElementConsumables {
 			return this._canConsumeName;
 		}
 
-		for ( let type in this._consumables ) {
+		for ( const type in this._consumables ) {
 			if ( type in consumables ) {
 				const value = this._test( type, consumables[ type ] );
 
@@ -438,7 +438,7 @@ class ViewElementConsumables {
 			this._canConsumeName = false;
 		}
 
-		for ( let type in this._consumables ) {
+		for ( const type in this._consumables ) {
 			if ( type in consumables ) {
 				this._consume( type, consumables[ type ] );
 			}
@@ -467,7 +467,7 @@ class ViewElementConsumables {
 			this._canConsumeName = true;
 		}
 
-		for ( let type in this._consumables ) {
+		for ( const type in this._consumables ) {
 			if ( type in consumables ) {
 				this._revert( type, consumables[ type ] );
 			}
@@ -488,7 +488,7 @@ class ViewElementConsumables {
 		const items = isArray( item ) ? item : [ item ];
 		const consumables = this._consumables[ type ];
 
-		for ( let name of items ) {
+		for ( const name of items ) {
 			if ( type === 'attribute' && ( name === 'class' || name === 'style' ) ) {
 				/**
 				 * Class and style attributes should be handled separately.
@@ -515,8 +515,8 @@ class ViewElementConsumables {
 		const items = isArray( item ) ? item : [ item ];
 		const consumables = this._consumables[ type ];
 
-		for ( let name of items ) {
-			if ( type === 'attribute' && ( name === 'class' || name === 'style' ) )  {
+		for ( const name of items ) {
+			if ( type === 'attribute' && ( name === 'class' || name === 'style' ) ) {
 				// Check all classes/styles if class/style attribute is tested.
 				const value = this._test( name, [ ...this._consumables[ name ].keys() ] );
 
@@ -550,7 +550,7 @@ class ViewElementConsumables {
 		const items = isArray( item ) ? item : [ item ];
 		const consumables = this._consumables[ type ];
 
-		for ( let name of items ) {
+		for ( const name of items ) {
 			if ( type === 'attribute' && ( name === 'class' || name === 'style' ) ) {
 				// If class or style is provided for consumption - consume them all.
 				this._consume( name, [ ...this._consumables[ name ].keys() ] );
@@ -571,7 +571,7 @@ class ViewElementConsumables {
 		const items = isArray( item ) ? item : [ item ];
 		const consumables = this._consumables[ type ];
 
-		for ( let name of items ) {
+		for ( const name of items ) {
 			if ( type === 'attribute' && ( name === 'class' || name === 'style' ) ) {
 				// If class or style is provided for reverting - revert them all.
 				this._revert( name, [ ...this._consumables[ name ].keys() ] );

+ 3 - 3
packages/ckeditor5-engine/src/conversion/viewconversiondispatcher.js

@@ -169,7 +169,7 @@ export default class ViewConversionDispatcher {
 	 */
 	_convertItem( input, consumable, additionalData = {} ) {
 		const data = extend( {}, additionalData, {
-			input: input,
+			input,
 			output: null
 		} );
 
@@ -211,8 +211,8 @@ export default class ViewConversionDispatcher {
 		// 2. Filter out items that has not been converted or for which conversion returned wrong result (for those warning is logged).
 		// 3. Extract children from document fragments to flatten results.
 		const convertedChildren = viewChildren
-			.map( ( viewChild ) => this._convertItem( viewChild, consumable, additionalData ) )
-			.filter( ( converted ) => converted instanceof ModelNode || converted instanceof ModelDocumentFragment )
+			.map( viewChild => this._convertItem( viewChild, consumable, additionalData ) )
+			.filter( converted => converted instanceof ModelNode || converted instanceof ModelDocumentFragment )
 			.reduce( ( result, filtered ) => {
 				return result.concat(
 					filtered.is( 'documentFragment' ) ? Array.from( filtered.getChildren() ) : filtered

+ 6 - 6
packages/ckeditor5-engine/src/dev-utils/deltareplayer.js

@@ -59,19 +59,19 @@ export default class DeltaReplayer {
 	 * @returns {Promise}
 	 */
 	play( timeInterval = 1000 ) {
-		const deltaReplayer = this;
+		const deltaReplayer = this; // eslint-disable-line consistent-this
 
 		return new Promise( ( res, rej ) => {
 			play();
 
 			function play() {
-				deltaReplayer.applyNextDelta().then( ( isFinished ) => {
+				deltaReplayer.applyNextDelta().then( isFinished => {
 					if ( isFinished ) {
 						return res();
 					}
 
 					setTimeout( play, timeInterval );
-				} ).catch( ( err ) => {
+				} ).catch( err => {
 					rej( err );
 				} );
 			}
@@ -90,7 +90,7 @@ export default class DeltaReplayer {
 		}
 
 		return this.applyNextDelta()
-			.then( ( isFinished ) => {
+			.then( isFinished => {
 				if ( !isFinished ) {
 					return this.applyDeltas( numberOfDeltas - 1 );
 				}
@@ -104,7 +104,7 @@ export default class DeltaReplayer {
 	 */
 	applyAllDeltas() {
 		return this.applyNextDelta()
-			.then( ( isFinished ) => {
+			.then( isFinished => {
 				if ( !isFinished ) {
 					return this.applyAllDeltas();
 				}
@@ -120,7 +120,7 @@ export default class DeltaReplayer {
 	applyNextDelta() {
 		const document = this._document;
 
-		return new Promise( ( res ) => {
+		return new Promise( res => {
 			document.enqueueChanges( () => {
 				const jsonDelta = this._deltasToReplay.shift();
 

+ 12 - 13
packages/ckeditor5-engine/src/dev-utils/enableenginedebug.js

@@ -25,8 +25,7 @@ import NoOperation from '../model/operation/nooperation';
 import RenameOperation from '../model/operation/renameoperation';
 import RootAttributeOperation from '../model/operation/rootattributeoperation';
 import Delta from '../model/delta/delta';
-import AttributeDelta from '../model/delta/attributedelta';
-import { RootAttributeDelta } from '../model/delta/attributedelta';
+import { default as AttributeDelta, RootAttributeDelta } from '../model/delta/attributedelta';
 import InsertDelta from '../model/delta/insertdelta';
 import MarkerDelta from '../model/delta/markerdelta';
 import MergeDelta from '../model/delta/mergedelta';
@@ -178,7 +177,7 @@ function enableLoggingTools() {
 		this.logExtended();
 		logger.log( 'List of children:' );
 
-		for ( let child of this.getChildren() ) {
+		for ( const child of this.getChildren() ) {
 			child.log();
 		}
 	};
@@ -188,7 +187,7 @@ function enableLoggingTools() {
 
 		string += '\t'.repeat( level ) + `<${ this.rootName || this.name }${ mapToTags( this.getAttributes() ) }>`;
 
-		for ( let child of this.getChildren() ) {
+		for ( const child of this.getChildren() ) {
 			string += '\n';
 
 			if ( child.is( 'text' ) ) {
@@ -228,7 +227,7 @@ function enableLoggingTools() {
 	};
 
 	ModelDocumentFragment.prototype.toString = function() {
-		return `documentFragment`;
+		return 'documentFragment';
 	};
 
 	ModelDocumentFragment.prototype.log = function() {
@@ -238,7 +237,7 @@ function enableLoggingTools() {
 	ModelDocumentFragment.prototype.printTree = function() {
 		let string = 'ModelDocumentFragment: [';
 
-		for ( let child of this.getChildren() ) {
+		for ( const child of this.getChildren() ) {
 			string += '\n';
 
 			if ( child.is( 'text' ) ) {
@@ -314,7 +313,7 @@ function enableLoggingTools() {
 
 		this.log();
 
-		for ( let op of this.operations ) {
+		for ( const op of this.operations ) {
 			op.log();
 		}
 	};
@@ -388,7 +387,7 @@ function enableLoggingTools() {
 	MoveDelta.prototype.toString = function() {
 		const opStrings = [];
 
-		for ( let op of this.operations ) {
+		for ( const op of this.operations ) {
 			const range = ModelRange.createFromPositionAndShift( op.sourcePosition, op.howMany );
 
 			opStrings.push( `${ range } -> ${ op.targetPosition }` );
@@ -458,7 +457,7 @@ function enableLoggingTools() {
 
 		string += '\t'.repeat( level ) + `<${ this.name }${ mapToTags( this.getAttributes() ) }>`;
 
-		for ( let child of this.getChildren() ) {
+		for ( const child of this.getChildren() ) {
 			if ( child.is( 'text' ) ) {
 				string += '\n' + '\t'.repeat( level + 1 ) + child.data;
 			} else {
@@ -482,7 +481,7 @@ function enableLoggingTools() {
 	ViewDocumentFragment.prototype.printTree = function() {
 		let string = 'ViewDocumentFragment: [';
 
-		for ( let child of this.getChildren() ) {
+		for ( const child of this.getChildren() ) {
 			if ( child.is( 'text' ) ) {
 				string += '\n' + '\t'.repeat( 1 ) + child.data;
 			} else {
@@ -611,7 +610,7 @@ class DebugPlugin extends Plugin {
 function dumpTrees( document, version ) {
 	let string = '';
 
-	for ( let root of document.roots.values() ) {
+	for ( const root of document.roots.values() ) {
 		string += root.printTree() + '\n';
 	}
 
@@ -639,7 +638,7 @@ function getClassName( obj ) {
 function mapString( map ) {
 	const obj = {};
 
-	for ( let entry of map ) {
+	for ( const entry of map ) {
 		obj[ entry[ 0 ] ] = entry[ 1 ];
 	}
 
@@ -652,7 +651,7 @@ function mapString( map ) {
 function mapToTags( map ) {
 	let string = '';
 
-	for ( let entry of map ) {
+	for ( const entry of map ) {
 		string += ` ${ entry[ 0 ] }=${ JSON.stringify( entry[ 1 ] ) }`;
 	}
 

+ 7 - 8
packages/ckeditor5-engine/src/dev-utils/model.js

@@ -125,7 +125,7 @@ export function setData( document, data, options = {} ) {
 		if ( selection ) {
 			const ranges = [];
 
-			for ( let range of selection.getRanges() ) {
+			for ( const range of selection.getRanges() ) {
 				let start, end;
 
 				// Each range returned from `parse()` method has its root placed in DocumentFragment.
@@ -220,7 +220,7 @@ export function stringify( node, selectionOrPositionOrRange = null ) {
 			return new ViewAttributeElement( 'model-text-with-attributes', { [ data.attributeKey ]: stringifyAttributeValue( value ) } );
 		}
 	} ) );
-	modelToView.on( 'insert', insertElement( ( data ) => {
+	modelToView.on( 'insert', insertElement( data => {
 		// Stringify object types values for properly display as an output string.
 		const attributes = convertAttributes( data.item.getAttributes(), stringifyAttributeValue );
 
@@ -241,7 +241,7 @@ export function stringify( node, selectionOrPositionOrRange = null ) {
 	}
 
 	// Parse view to data string.
-	let data = viewStringify( viewDocumentFragment, viewSelection, { sameSelectionCharacters: true } );
+	const data = viewStringify( viewDocumentFragment, viewSelection, { sameSelectionCharacters: true } );
 
 	// Replace valid XML `model-text-with-attributes` element name to `$text`.
 	return data.replace( new RegExp( 'model-text-with-attributes', 'g' ), '$text' );
@@ -278,7 +278,7 @@ export function parse( data, schema, options = {} ) {
 	} );
 
 	// Retrieve DocumentFragment and Selection from parsed view.
-	let viewDocumentFragment, viewSelection;
+	let viewDocumentFragment, viewSelection, selection;
 
 	if ( parsedResult.view && parsedResult.selection ) {
 		viewDocumentFragment = parsedResult.view;
@@ -291,7 +291,7 @@ export function parse( data, schema, options = {} ) {
 	const viewToModel = new ViewConversionDispatcher( { schema, mapper } );
 
 	viewToModel.on( 'documentFragment', convertToModelFragment() );
-	viewToModel.on( `element:model-text-with-attributes`, convertToModelText( true ) );
+	viewToModel.on( 'element:model-text-with-attributes', convertToModelText( true ) );
 	viewToModel.on( 'element', convertToModelElement() );
 	viewToModel.on( 'text', convertToModelText() );
 
@@ -304,13 +304,12 @@ export function parse( data, schema, options = {} ) {
 	}
 
 	// Convert view selection to model selection.
-	let selection;
 
 	if ( viewSelection ) {
 		const ranges = [];
 
 		// Convert ranges.
-		for ( let viewRange of viewSelection.getRanges() ) {
+		for ( const viewRange of viewSelection.getRanges() ) {
 			ranges.push( ( mapper.toModelRange( viewRange ) ) );
 		}
 
@@ -430,7 +429,7 @@ function stringifyAttributeValue( data ) {
 
 // Loop trough attributes map and converts each value by passed converter.
 function *convertAttributes( attributes, converter ) {
-	for ( let [ key, value ] of attributes ) {
+	for ( const [ key, value ] of attributes ) {
 		yield [ key, converter( value ) ];
 	}
 }

+ 35 - 29
packages/ckeditor5-engine/src/dev-utils/view.js

@@ -336,8 +336,8 @@ export function parse( data, options = {} ) {
 		selection.setRanges( ranges, !!options.lastRangeBackward );
 
 		return {
-			view: view,
-			selection: selection
+			view,
+			selection
 		};
 	}
 
@@ -394,7 +394,7 @@ class RangeParser {
 				);
 			}
 
-			ranges = this._sortRanges( ranges,  order );
+			ranges = this._sortRanges( ranges, order );
 		}
 
 		return ranges;
@@ -414,7 +414,7 @@ class RangeParser {
 			// items needed for iteration.
 			const children = [ ...node.getChildren() ];
 
-			for ( let child of children ) {
+			for ( const child of children ) {
 				this._getPositions( child );
 			}
 		}
@@ -435,7 +435,7 @@ class RangeParser {
 				const bracket = match[ 0 ];
 
 				brackets.push( {
-					bracket: bracket,
+					bracket,
 					textOffset: index - offset
 				} );
 
@@ -452,12 +452,15 @@ class RangeParser {
 				node.remove();
 			}
 
-			for ( let item of brackets ) {
+			for ( const item of brackets ) {
 				// Non-empty text node.
 				if ( text ) {
 					if (
 						this.sameSelectionCharacters ||
-						( !this.sameSelectionCharacters && ( item.bracket == TEXT_RANGE_START_TOKEN || item.bracket == TEXT_RANGE_END_TOKEN ) )
+						(
+							!this.sameSelectionCharacters &&
+							( item.bracket == TEXT_RANGE_START_TOKEN || item.bracket == TEXT_RANGE_END_TOKEN )
+						)
 					) {
 						// Store information about text range delimiter.
 						this._positions.push( {
@@ -480,7 +483,10 @@ class RangeParser {
 						} );
 					}
 				} else {
-					if ( !this.sameSelectionCharacters && item.bracket == TEXT_RANGE_START_TOKEN || item.bracket == TEXT_RANGE_END_TOKEN ) {
+					if ( !this.sameSelectionCharacters &&
+						item.bracket == TEXT_RANGE_START_TOKEN ||
+						item.bracket == TEXT_RANGE_END_TOKEN
+					) {
 						throw new Error( `Parse error - text range delimiter '${ item.bracket }' is placed inside empty text node. ` );
 					}
 
@@ -508,7 +514,7 @@ class RangeParser {
 		const sortedRanges = [];
 		let index = 0;
 
-		for ( let newPosition of rangesOrder ) {
+		for ( const newPosition of rangesOrder ) {
 			if ( ranges[ newPosition - 1 ] === undefined ) {
 				throw new Error( 'Parse error - provided ranges order is invalid.' );
 			}
@@ -530,7 +536,7 @@ class RangeParser {
 		const ranges = [];
 		let range = null;
 
-		for ( let item of this._positions ) {
+		for ( const item of this._positions ) {
 			// When end of range is found without opening.
 			if ( !range && ( item.bracket == ELEMENT_RANGE_END_TOKEN || item.bracket == TEXT_RANGE_END_TOKEN ) ) {
 				throw new Error( `Parse error - end of range was found '${ item.bracket }' but range was not started before.` );
@@ -602,7 +608,7 @@ class ViewStringify {
 	 */
 	stringify() {
 		let result = '';
-		this._walkView( this.root, ( chunk ) => {
+		this._walkView( this.root, chunk => {
 			result += chunk;
 		} );
 
@@ -628,7 +634,7 @@ class ViewStringify {
 			let offset = 0;
 			callback( this._stringifyElementRanges( root, offset ) );
 
-			for ( let child of root.getChildren() ) {
+			for ( const child of root.getChildren() ) {
 				this._walkView( child, callback );
 				offset++;
 				callback( this._stringifyElementRanges( root, offset ) );
@@ -657,7 +663,7 @@ class ViewStringify {
 		let end = '';
 		let collapsed = '';
 
-		for ( let range of this.ranges ) {
+		for ( const range of this.ranges ) {
 			if ( range.start.parent == element && range.start.offset === offset ) {
 				if ( range.isCollapsed ) {
 					collapsed += ELEMENT_RANGE_START_TOKEN + ELEMENT_RANGE_END_TOKEN;
@@ -699,16 +705,16 @@ class ViewStringify {
 		result[ length ] = '';
 
 		// Represent each letter as object with information about opening/closing ranges at each offset.
-		result = result.map( ( letter ) => {
+		result = result.map( letter => {
 			return {
-				letter: letter,
+				letter,
 				start: '',
 				end: '',
 				collapsed: ''
 			};
-		}  );
+		} );
 
-		for ( let range of this.ranges ) {
+		for ( const range of this.ranges ) {
 			const start = range.start;
 			const end = range.end;
 
@@ -720,7 +726,7 @@ class ViewStringify {
 				}
 			}
 
-			if ( end.parent == node && end.offset >= 0 && end.offset <= length && !range.isCollapsed  ) {
+			if ( end.parent == node && end.offset >= 0 && end.offset <= length && !range.isCollapsed ) {
 				result[ end.offset ].end += rangeEndToken;
 			}
 		}
@@ -742,7 +748,7 @@ class ViewStringify {
 		const priority = this._stringifyElementPriority( element );
 
 		const type = this._stringifyElementType( element );
-		const name = [ type, element.name ].filter( i=> i !== '' ).join( ':' );
+		const name = [ type, element.name ].filter( i => i !== '' ).join( ':' );
 		const attributes = this._stringifyElementAttributes( element );
 		const parts = [ name, priority, attributes ];
 
@@ -760,7 +766,7 @@ class ViewStringify {
 	 */
 	_stringifyElementClose( element ) {
 		const type = this._stringifyElementType( element );
-		const name = [ type, element.name ].filter( i=> i !== '' ).join( ':' );
+		const name = [ type, element.name ].filter( i => i !== '' ).join( ':' );
 
 		return `</${ name }>`;
 	}
@@ -781,7 +787,7 @@ class ViewStringify {
 	 */
 	_stringifyElementType( element ) {
 		if ( this.showType ) {
-			for ( let type in allowedTypes ) {
+			for ( const type in allowedTypes ) {
 				if ( element instanceof allowedTypes[ type ] ) {
 					return type;
 				}
@@ -821,7 +827,7 @@ class ViewStringify {
 		const attributes = [];
 		const keys = [ ...element.getAttributeKeys() ].sort();
 
-		for ( let attribute of keys ) {
+		for ( const attribute of keys ) {
 			attributes.push( `${ attribute }="${ element.getAttribute( attribute ) }"` );
 		}
 
@@ -847,13 +853,13 @@ function _convertViewElements( rootNode ) {
 		const convertedElement = rootNode.is( 'documentFragment' ) ? new ViewDocumentFragment() : _convertElement( rootNode );
 
 		// Convert all child nodes.
-		for ( let child of rootNode.getChildren() ) {
+		for ( const child of rootNode.getChildren() ) {
 			if ( convertedElement.is( 'emptyElement' ) ) {
-				throw new Error( `Parse error - cannot parse inside EmptyElement.` );
+				throw new Error( 'Parse error - cannot parse inside EmptyElement.' );
 			}
 
 			if ( convertedElement.is( 'uiElement' ) ) {
-				throw new Error( `Parse error - cannot parse inside UIElement.` );
+				throw new Error( 'Parse error - cannot parse inside UIElement.' );
 			}
 
 			convertedElement.appendChildren( _convertViewElements( child ) );
@@ -898,7 +904,7 @@ function _convertElement( viewElement ) {
 	}
 
 	// Move attributes.
-	for ( let attributeKey of viewElement.getAttributeKeys() ) {
+	for ( const attributeKey of viewElement.getAttributeKeys() ) {
 		newElement.setAttribute( attributeKey, viewElement.getAttribute( attributeKey ) );
 	}
 
@@ -927,7 +933,7 @@ function _convertElementNameAndPriority( viewElement ) {
 		return {
 			name: parts[ 0 ],
 			type: priority !== null ? 'attribute' : null,
-			priority: priority
+			priority
 		};
 	}
 
@@ -937,8 +943,8 @@ function _convertElementNameAndPriority( viewElement ) {
 	if ( type ) {
 		return {
 			name: parts[ 1 ],
-			type: type,
-			priority: priority
+			type,
+			priority
 		};
 	}
 

+ 2 - 2
packages/ckeditor5-engine/src/model/batch.js

@@ -97,7 +97,7 @@ export default class Batch {
 	 * @returns {Iterable.<module:engine/model/operation/operation~Operation>}
 	 */
 	*getOperations() {
-		for ( let delta of this.deltas ) {
+		for ( const delta of this.deltas ) {
 			yield* delta.operations;
 		}
 	}
@@ -148,7 +148,7 @@ export function register( name, creator ) {
 		 */
 		throw new CKEditorError(
 			'model-batch-register-taken: This batch method name is already taken.',
-			{ name: name } );
+			{ name } );
 	}
 
 	Batch.prototype[ name ] = creator;

+ 6 - 6
packages/ckeditor5-engine/src/model/delta/attributedelta.js

@@ -64,7 +64,7 @@ export default class AttributeDelta extends Delta {
 		let start = null;
 		let end = null;
 
-		for ( let operation of this.operations ) {
+		for ( const operation of this.operations ) {
 			if ( start === null || start.isAfter( operation.range.start ) ) {
 				start = operation.range.start;
 			}
@@ -213,13 +213,13 @@ function changeRange( batch, doc, attributeKey, attributeValue, range ) {
 
 	// Currently position in the scanning range. Because we need value after the position, it is not a current
 	// position of the iterator but the previous one (we need to iterate one more time to get the value after).
-	let position;
+	let position,
 	// Value before the currently position.
-	let attributeValueBefore;
+		attributeValueBefore,
 	// Value after the currently position.
-	let attributeValueAfter;
+		attributeValueAfter;
 
-	for ( let value of range ) {
+	for ( const value of range ) {
 		attributeValueAfter = value.item.getAttribute( attributeKey );
 
 		// At the first run of the iterator the position in undefined. We also do not have a attributeValueBefore, but
@@ -249,7 +249,7 @@ function changeRange( batch, doc, attributeKey, attributeValue, range ) {
 			batch.addDelta( delta );
 		}
 
-		let range = new Range( lastSplitPosition, position );
+		const range = new Range( lastSplitPosition, position );
 		const operation = new AttributeOperation( range, attributeKey, attributeValueBefore, attributeValue, doc.version );
 
 		delta.addOperation( operation );

+ 2 - 1
packages/ckeditor5-engine/src/model/delta/basic-deltas.js

@@ -12,6 +12,7 @@
 // which would already have all default deltas registered.
 
 // Import default suite of deltas so a feature have to include only Batch class file.
+/* eslint-disable no-unused-vars */
 import d01 from './attributedelta';
 import d02 from './insertdelta';
 import d03 from './mergedelta';
@@ -22,4 +23,4 @@ import d07 from './splitdelta';
 import d08 from './unwrapdelta';
 import d09 from './weakinsertdelta';
 import d10 from './wrapdelta';
-/*jshint unused: false*/
+/* eslint-enable no-unused-vars */

+ 6 - 6
packages/ckeditor5-engine/src/model/delta/basic-transformations.js

@@ -55,7 +55,7 @@ addTransformationCase( AttributeDelta, SplitDelta, ( a, b, isStrong ) => {
 
 	const deltas = defaultTransform( a, b, isStrong );
 
-	for ( let operation of a.operations ) {
+	for ( const operation of a.operations ) {
 		// If a node that has been split has it's attribute updated, we should also update attribute of
 		// the node created during splitting.
 		if ( operation.range.containsPosition( splitPosition ) || operation.range.start.isEqual( splitPosition ) ) {
@@ -299,7 +299,7 @@ addTransformationCase( SplitDelta, AttributeDelta, ( a, b ) => {
 	if ( a._cloneOperation instanceof InsertOperation ) {
 		// If element to split had it's attribute changed, we have to reflect this change in an element
 		// that is in SplitDelta's InsertOperation.
-		for ( let operation of b.operations ) {
+		for ( const operation of b.operations ) {
 			if ( operation.range.containsPosition( splitPosition ) || operation.range.start.isEqual( splitPosition ) ) {
 				if ( operation.newValue !== null ) {
 					a._cloneOperation.nodes.getNode( 0 ).setAttribute( operation.key, operation.newValue );
@@ -422,8 +422,8 @@ addTransformationCase( RemoveDelta, SplitDelta, ( a, b, isStrong ) => {
 	const insertPosition = b._cloneOperation.position;
 
 	// In case if `defaultTransform` returned more than one delta.
-	for ( let delta of deltas ) {
-		for ( let operation of delta.operations ) {
+	for ( const delta of deltas ) {
+		for ( const operation of delta.operations ) {
 			const rangeEnd = operation.sourcePosition.getShiftedBy( operation.howMany );
 
 			if ( rangeEnd.isEqual( insertPosition ) ) {
@@ -441,7 +441,7 @@ addTransformationCase( SplitDelta, RemoveDelta, ( a, b, isStrong ) => {
 
 	const insertPosition = a._cloneOperation.position;
 
-	for ( let operation of b.operations ) {
+	for ( const operation of b.operations ) {
 		const rangeEnd = operation.sourcePosition.getShiftedBy( operation.howMany );
 
 		if ( rangeEnd.isEqual( insertPosition ) ) {
@@ -507,7 +507,7 @@ function _getComplementaryAttrDelta( weakInsertDelta, attributeDelta ) {
 // This is "no-op" delta, it has no type and only no-operation, it basically does nothing.
 // It is used when we don't want to apply changes but still we need to return a delta.
 function noDelta() {
-	let noDelta = new Delta();
+	const noDelta = new Delta();
 
 	// BaseVersion will be fixed later anyway.
 	noDelta.addOperation( new NoOperation( 0 ) );

+ 6 - 6
packages/ckeditor5-engine/src/model/delta/delta.js

@@ -60,7 +60,7 @@ export default class Delta {
 	 * @param {Number} baseVersion
 	 */
 	set baseVersion( baseVersion ) {
-		for ( let operation of this.operations ) {
+		for ( const operation of this.operations ) {
 			operation.baseVersion = baseVersion++;
 		}
 	}
@@ -100,9 +100,9 @@ export default class Delta {
 	 * @returns {module:engine/model/delta/delta~Delta} Clone of this delta.
 	 */
 	clone() {
-		let delta = new this.constructor();
+		const delta = new this.constructor();
 
-		for ( let op of this.operations ) {
+		for ( const op of this.operations ) {
 			delta.addOperation( op.clone() );
 		}
 
@@ -121,9 +121,9 @@ export default class Delta {
 	 * @returns {module:engine/model/delta/delta~Delta} Reversed delta.
 	 */
 	getReversed() {
-		let delta = new this._reverseDeltaClass();
+		const delta = new this._reverseDeltaClass();
 
-		for ( let op of this.operations ) {
+		for ( const op of this.operations ) {
 			delta.addOperation( op.getReversed() );
 		}
 
@@ -142,7 +142,7 @@ export default class Delta {
 	 * @returns {Object} Clone of this delta with added class name.
 	 */
 	toJSON() {
-		let json = clone( this );
+		const json = clone( this );
 
 		json.__className = this.constructor.className;
 

+ 4 - 4
packages/ckeditor5-engine/src/model/delta/deltafactory.js

@@ -43,16 +43,16 @@ export default class DeltaFactory {
 			);
 		}
 
-		let Delta = deserializers.get( json.__className );
+		const Delta = deserializers.get( json.__className );
 
-		let delta = new Delta();
+		const delta = new Delta();
 
-		for ( let operation of json.operations ) {
+		for ( const operation of json.operations ) {
 			delta.addOperation( OperationFactory.fromJSON( operation, doc ) );
 		}
 
 		// Rewrite all other properties.
-		for ( let prop in json ) {
+		for ( const prop in json ) {
 			if ( prop != '__className' && delta[ prop ] === undefined ) {
 				delta[ prop ] = json[ prop ];
 			}

+ 8 - 2
packages/ckeditor5-engine/src/model/delta/mergedelta.js

@@ -44,7 +44,7 @@ export default class MergeDelta extends Delta {
 	 * @inheritDoc
 	 */
 	getReversed() {
-		let delta = super.getReversed();
+		const delta = super.getReversed();
 
 		if ( delta.operations.length > 0 ) {
 			delta.operations[ 1 ].isSticky = false;
@@ -120,7 +120,13 @@ register( 'merge', function( position ) {
 	const positionAfter = Position.createFromParentAndOffset( nodeAfter, 0 );
 	const positionBefore = Position.createFromParentAndOffset( nodeBefore, nodeBefore.maxOffset );
 
-	const move = new MoveOperation( positionAfter, nodeAfter.maxOffset, positionBefore, this.document.version );
+	const move = new MoveOperation(
+		positionAfter,
+		nodeAfter.maxOffset,
+		positionBefore,
+		this.document.version
+	);
+
 	move.isSticky = true;
 	delta.addOperation( move );
 	this.document.applyOperation( move );

+ 2 - 2
packages/ckeditor5-engine/src/model/delta/removedelta.js

@@ -47,9 +47,9 @@ register( 'remove', function( itemOrRange ) {
 
 	if ( itemOrRange instanceof Range ) {
 		// The array is reversed, so the ranges are correct and do not have to be updated.
-		let ranges = itemOrRange.getMinimalFlatRanges().reverse();
+		const ranges = itemOrRange.getMinimalFlatRanges().reverse();
 
-		for ( let flat of ranges ) {
+		for ( const flat of ranges ) {
 			addRemoveOperation( this, delta, flat.start, flat.end.offset - flat.start.offset );
 		}
 	} else {

+ 2 - 4
packages/ckeditor5-engine/src/model/delta/renamedelta.js

@@ -68,10 +68,8 @@ register( 'rename', function( element, newName ) {
 	const delta = new RenameDelta();
 	this.addDelta( delta );
 
-	apply(
-		this, delta,
-		new RenameOperation( Position.createBefore( element ), element.name, newName, this.document.version )
-	);
+	const renameOperation = new RenameOperation( Position.createBefore( element ), element.name, newName, this.document.version );
+	apply( this, delta, renameOperation );
 
 	return this;
 } );

+ 6 - 2
packages/ckeditor5-engine/src/model/delta/splitdelta.js

@@ -43,7 +43,7 @@ export default class SplitDelta extends Delta {
 	 * @inheritDoc
 	 */
 	getReversed() {
-		let delta = super.getReversed();
+		const delta = super.getReversed();
 
 		if ( delta.operations.length > 0 ) {
 			delta.operations[ 0 ].isSticky = true;
@@ -131,7 +131,11 @@ register( 'split', function( position ) {
 
 	const copy = new Element( splitElement.name, splitElement.getAttributes() );
 
-	const insert = new InsertOperation( Position.createAfter( splitElement ), copy, this.document.version );
+	const insert = new InsertOperation(
+		Position.createAfter( splitElement ),
+		copy,
+		this.document.version
+	);
 
 	delta.addOperation( insert );
 	this.document.applyOperation( insert );

+ 26 - 24
packages/ckeditor5-engine/src/model/delta/transform.js

@@ -16,8 +16,8 @@ const specialCases = new Map();
 
 const deltaTransform = {
 	/**
-	 * Transforms given {@link module:engine/model/delta/delta~Delta delta} by another {@link module:engine/model/delta/delta~Delta delta} and
-	 * returns the result of that transformation as an array containing one or more {@link module:engine/model/delta/delta~Delta delta}
+	 * Transforms given {@link module:engine/model/delta/delta~Delta delta} by another {@link module:engine/model/delta/delta~Delta delta}
+	 * and returns the result of that transformation as an array containing one or more {@link module:engine/model/delta/delta~Delta delta}
 	 * instances.
 	 *
 	 * Delta transformations heavily base on {@link module:engine/model/operation/transform~transform operational transformations}. Since
@@ -29,8 +29,8 @@ const deltaTransform = {
 	 * we need to handle transformations in special cases in a custom way.
 	 *
 	 * The function itself looks whether two given delta types have a special case function registered. If so, the deltas are
-	 * transformed using that function. If not, {@link module:engine/model/delta/transform~defaultTransform default transformation algorithm}
-	 * is used.
+	 * transformed using that function. If not,
+	 * {@link module:engine/model/delta/transform~defaultTransform default transformation algorithm} is used.
 	 *
 	 * @param {module:engine/model/delta/delta~Delta} a Delta that will be transformed.
 	 * @param {module:engine/model/delta/delta~Delta} b Delta to transform by.
@@ -40,7 +40,7 @@ const deltaTransform = {
 	 * automatically and overwrites this flag.
 	 * @returns {Array.<module:engine/model/delta/delta~Delta>} Result of the transformation.
 	 */
-	transform: function( a, b, isAMoreImportantThanB ) {
+	transform( a, b, isAMoreImportantThanB ) {
 		const transformAlgorithm = deltaTransform.getTransformationCase( a, b ) || deltaTransform.defaultTransform;
 
 		const transformed = transformAlgorithm( a, b, isAMoreImportantThanB );
@@ -63,7 +63,7 @@ const deltaTransform = {
 	 * automatically and overwrites this flag.
 	 * @returns {Array.<module:engine/model/delta/delta~Delta>} Result of the transformation, that is an array with single delta instance.
 	 */
-	defaultTransform: function( a, b, isAMoreImportantThanB ) {
+	defaultTransform( a, b, isAMoreImportantThanB ) {
 		// First, resolve the flag real value.
 		isAMoreImportantThanB = getPriority( a.constructor, b.constructor, isAMoreImportantThanB );
 
@@ -80,13 +80,13 @@ const deltaTransform = {
 		let newByOps = [];
 
 		// We take each operation from original set of operations to transform.
-		for ( let opA of a.operations ) {
+		for ( const opA of a.operations ) {
 			// We wrap the operation in the array. This is important, because operation transformation algorithm returns
 			// an array of operations so we need to make sure that our algorithm is ready to handle arrays.
 			const ops = [ opA ];
 
 			// Now the real algorithm takes place.
-			for ( let opB of byOps ) {
+			for ( const opB of byOps ) {
 				// For each operation that we need transform by...
 				for ( let i = 0; i < ops.length; i++ ) {
 					// We take each operation to transform...
@@ -137,7 +137,7 @@ const deltaTransform = {
 
 			// We add transformed operation from delta A to newly created delta.
 			// Remember that transformed operation from delta A may consist of multiple operations.
-			for ( let op of ops ) {
+			for ( const op of ops ) {
 				transformed.addOperation( op );
 			}
 
@@ -157,7 +157,7 @@ const deltaTransform = {
 	 * @param {Function} B Delta constructor which instance will be transformed by.
 	 * @param {Function} resolver A callback that will handle custom special case transformation for instances of given delta classes.
 	 */
-	addTransformationCase: function( A, B, resolver ) {
+	addTransformationCase( A, B, resolver ) {
 		let casesA = specialCases.get( A );
 
 		if ( !casesA ) {
@@ -174,7 +174,7 @@ const deltaTransform = {
 	 * @param {module:engine/model/delta/delta~Delta} a Delta to transform.
 	 * @param {module:engine/model/delta/delta~Delta} b Delta to be transformed by.
 	 */
-	getTransformationCase: function( a, b ) {
+	getTransformationCase( a, b ) {
 		let casesA = specialCases.get( a.constructor );
 
 		// If there are no special cases registered for class which `a` is instance of, we will
@@ -182,7 +182,7 @@ const deltaTransform = {
 		if ( !casesA || !casesA.get( b.constructor ) ) {
 			const cases = specialCases.keys();
 
-			for ( let caseClass of cases ) {
+			for ( const caseClass of cases ) {
 				if ( a instanceof caseClass && specialCases.get( caseClass ).get( b.constructor ) ) {
 					casesA = specialCases.get( caseClass );
 
@@ -206,23 +206,25 @@ const deltaTransform = {
 	 * @param {Boolean} isAMoreImportantThanB Flag indicating whether the deltas from `deltasA` set should be treated as more
 	 * important when resolving conflicts.
 	 * @returns {Object}
-	 * @returns {Array.<module:engine/model/delta/delta~Delta>} return.deltasA The first set of deltas transformed by the second set of deltas.
-	 * @returns {Array.<module:engine/model/delta/delta~Delta>} return.deltasB The second set of deltas transformed by the first set of deltas.
+	 * @returns {Array.<module:engine/model/delta/delta~Delta>} return.deltasA The first set of deltas transformed by the second
+	 * set of deltas.
+	 * @returns {Array.<module:engine/model/delta/delta~Delta>} return.deltasB The second set of deltas transformed by the first
+	 * set of deltas.
 	 */
-	transformDeltaSets: function( deltasA, deltasB, isAMoreImportantThanB ) {
-		let transformedDeltasA = Array.from( deltasA );
-		let transformedDeltasB = Array.from( deltasB );
+	transformDeltaSets( deltasA, deltasB, isAMoreImportantThanB ) {
+		const transformedDeltasA = Array.from( deltasA );
+		const transformedDeltasB = Array.from( deltasB );
 
 		for ( let i = 0; i < transformedDeltasA.length; i++ ) {
-			let deltaA = [ transformedDeltasA[ i ] ];
+			const deltaA = [ transformedDeltasA[ i ] ];
 
 			for ( let j = 0; j < transformedDeltasB.length; j++ ) {
-				let deltaB = [ transformedDeltasB[ j ] ];
+				const deltaB = [ transformedDeltasB[ j ] ];
 
 				for ( let k = 0; k < deltaA.length; k++ ) {
 					for ( let l = 0; l < deltaB.length; l++ ) {
-						let resultAB = deltaTransform.transform( deltaA[ k ], deltaB[ l ], isAMoreImportantThanB );
-						let resultBA = deltaTransform.transform( deltaB[ l ], deltaA[ k ], !isAMoreImportantThanB );
+						const resultAB = deltaTransform.transform( deltaA[ k ], deltaB[ l ], isAMoreImportantThanB );
+						const resultBA = deltaTransform.transform( deltaB[ l ], deltaA[ k ], !isAMoreImportantThanB );
 
 						deltaA.splice( k, 1, ...resultAB );
 						k += resultAB.length - 1;
@@ -257,8 +259,8 @@ export default deltaTransform;
 
 // Updates base versions of operations inside deltas (which are the results of delta transformation).
 function updateBaseVersion( baseVersion, deltas ) {
-	for ( let delta of deltas ) {
-		for ( let op of delta.operations ) {
+	for ( const delta of deltas ) {
+		for ( const op of delta.operations ) {
 			op.baseVersion = ++baseVersion;
 		}
 	}
@@ -291,7 +293,7 @@ function padWithNoOps( deltas, howMany ) {
 	const lastDelta = deltas[ deltas.length - 1 ];
 	let baseVersion = lastDelta.operations.length + lastDelta.baseVersion;
 
-	let noDelta = new Delta();
+	const noDelta = new Delta();
 
 	for ( let i = 0; i < howMany; i++ ) {
 		noDelta.addOperation( new NoOperation( baseVersion++ ) );

+ 8 - 2
packages/ckeditor5-engine/src/model/delta/unwrapdelta.js

@@ -91,9 +91,15 @@ register( 'unwrap', function( element ) {
 	const delta = new UnwrapDelta();
 	this.addDelta( delta );
 
-	let sourcePosition = Position.createFromParentAndOffset( element, 0 );
+	const sourcePosition = Position.createFromParentAndOffset( element, 0 );
+
+	const move = new MoveOperation(
+		sourcePosition,
+		element.maxOffset,
+		Position.createBefore( element ),
+		this.document.version
+	);
 
-	const move = new MoveOperation( sourcePosition, element.maxOffset, Position.createBefore( element ), this.document.version );
 	move.isSticky = true;
 	delta.addOperation( move );
 	this.document.applyOperation( move );

+ 1 - 1
packages/ckeditor5-engine/src/model/delta/weakinsertdelta.js

@@ -53,7 +53,7 @@ register( 'weakInsert', function( position, nodes ) {
 
 	nodes = normalizeNodes( nodes );
 
-	for ( let node of nodes ) {
+	for ( const node of nodes ) {
 		node.setAttributesTo( this.document.selection.getAttributes() );
 	}
 

+ 13 - 6
packages/ckeditor5-engine/src/model/delta/wrapdelta.js

@@ -37,7 +37,7 @@ export default class WrapDelta extends Delta {
 	 * @type {module:engine/model/range~Range|null}
 	 */
 	get range() {
-		let moveOp = this._moveOperation;
+		const moveOp = this._moveOperation;
 
 		return moveOp ? Range.createFromPositionAndShift( moveOp.sourcePosition, moveOp.howMany ) : null;
 	}
@@ -48,17 +48,19 @@ export default class WrapDelta extends Delta {
 	 * @type {Number}
 	 */
 	get howMany() {
-		let range = this.range;
+		const range = this.range;
 
 		return range ? range.end.offset - range.start.offset : 0;
 	}
 
+	/* eslint-disable max-len */
 	/**
 	 * Operation that inserts wrapping element or `null` if there are no operations in the delta.
 	 *
 	 * @protected
 	 * @type {module:engine/model/operation/insertoperation~InsertOperation|module:engine/model/operation/reinsertoperation~ReinsertOperation}
 	 */
+	/* eslint-enable max-len */
 	get _insertOperation() {
 		return this.operations[ 0 ] || null;
 	}
@@ -114,7 +116,7 @@ register( 'wrap', function( range, elementOrString ) {
 		throw new CKEditorError( 'batch-wrap-range-not-flat: Range to wrap is not flat.' );
 	}
 
-	let element = elementOrString instanceof Element ? elementOrString : new Element( elementOrString );
+	const element = elementOrString instanceof Element ? elementOrString : new Element( elementOrString );
 
 	if ( element.childCount > 0 ) {
 		/**
@@ -137,12 +139,17 @@ register( 'wrap', function( range, elementOrString ) {
 	const delta = new WrapDelta();
 	this.addDelta( delta );
 
-	let insert = new InsertOperation( range.end, element, this.document.version );
+	const insert = new InsertOperation( range.end, element, this.document.version );
 	delta.addOperation( insert );
 	this.document.applyOperation( insert );
 
-	let targetPosition = Position.createFromParentAndOffset( element, 0 );
-	let move = new MoveOperation( range.start, range.end.offset - range.start.offset, targetPosition, this.document.version );
+	const targetPosition = Position.createFromParentAndOffset( element, 0 );
+	const move = new MoveOperation(
+		range.start,
+		range.end.offset - range.start.offset,
+		targetPosition,
+		this.document.version
+	);
 	delta.addOperation( move );
 	this.document.applyOperation( move );
 

+ 14 - 13
packages/ckeditor5-engine/src/model/document.js

@@ -8,8 +8,10 @@
  */
 
 // Load all basic deltas and transformations, they register themselves, but they need to be imported somewhere.
-import deltas from './delta/basic-deltas'; // jshint ignore:line
-import transformations from './delta/basic-transformations'; // jshint ignore:line
+/* eslint-disable no-unused-vars */
+import deltas from './delta/basic-deltas';
+import transformations from './delta/basic-transformations';
+/* eslint-enable no-unused-vars */
 
 import Range from './range';
 import Position from './position';
@@ -110,7 +112,7 @@ export default class Document {
 
 		// Add events that will ensure selection correctness.
 		this.selection.on( 'change:range', () => {
-			for ( let range of this.selection.getRanges() ) {
+			for ( const range of this.selection.getRanges() ) {
 				if ( !this._validateSelectionRange( range ) ) {
 					/**
 					 * Range from document selection starts or ends at incorrect position.
@@ -156,10 +158,10 @@ export default class Document {
 			 */
 			throw new CKEditorError(
 				'model-document-applyOperation-wrong-version: Only operations with matching versions can be applied.',
-				{ operation: operation } );
+				{ operation } );
 		}
 
-		let changes = operation._execute();
+		const changes = operation._execute();
 
 		this.version++;
 
@@ -259,7 +261,7 @@ export default class Document {
 			 */
 			throw new CKEditorError(
 				'model-document-getRoot-root-not-exist: Root with specified name does not exist.',
-				{ name: name }
+				{ name }
 			);
 		}
 
@@ -282,7 +284,7 @@ export default class Document {
 	 * @returns {Array.<String>} Roots names.
 	 */
 	getRootNames() {
-		return Array.from( this.roots.keys() ).filter( ( name ) => name != graveyardName );
+		return Array.from( this.roots.keys() ).filter( name => name != graveyardName );
 	}
 
 	/**
@@ -310,8 +312,7 @@ export default class Document {
 			return new Range( position );
 		}
 
-		let backwardWalker;
-		let forwardWalker;
+		let backwardWalker, forwardWalker;
 
 		if ( direction == 'both' || direction == 'backward' ) {
 			backwardWalker = new TreeWalker( { startPosition: position, direction: 'backward' } );
@@ -321,7 +322,7 @@ export default class Document {
 			forwardWalker = new TreeWalker( { startPosition: position } );
 		}
 
-		for ( let data of combineWalkers( backwardWalker, forwardWalker ) ) {
+		for ( const data of combineWalkers( backwardWalker, forwardWalker ) ) {
 			const type = ( data.walker == backwardWalker ? 'elementEnd' : 'elementStart' );
 			const value = data.value;
 
@@ -359,7 +360,7 @@ export default class Document {
 	 * @returns {module:engine/model/rootelement~RootElement} The default root for this document.
 	 */
 	_getDefaultRoot() {
-		for ( let root of this.roots.values() ) {
+		for ( const root of this.roots.values() ) {
 			if ( root !== this.graveyard ) {
 				return root;
 			}
@@ -477,7 +478,7 @@ function *combineWalkers( backward, forward ) {
 
 			if ( !step.done ) {
 				done = false;
-				yield {
+				yield{
 					walker: backward,
 					value: step.value
 				};
@@ -489,7 +490,7 @@ function *combineWalkers( backward, forward ) {
 
 			if ( !step.done ) {
 				done = false;
-				yield {
+				yield{
 					walker: forward,
 					value: step.value
 				};

+ 10 - 7
packages/ckeditor5-engine/src/model/documentfragment.js

@@ -213,7 +213,7 @@ export default class DocumentFragment {
 	insertChildren( index, nodes ) {
 		nodes = normalize( nodes );
 
-		for ( let node of nodes ) {
+		for ( const node of nodes ) {
 			node.parent = this;
 		}
 
@@ -231,7 +231,7 @@ export default class DocumentFragment {
 	removeChildren( index, howMany = 1 ) {
 		const nodes = this._children.removeNodes( index, howMany );
 
-		for ( let node of nodes ) {
+		for ( const node of nodes ) {
 			node.parent = null;
 		}
 
@@ -245,9 +245,9 @@ export default class DocumentFragment {
 	 * @returns {Object} `DocumentFragment` instance converted to plain object.
 	 */
 	toJSON() {
-		let json = [];
+		const json = [];
 
-		for ( let node of this._children ) {
+		for ( const node of this._children ) {
 			json.push( node.toJSON() );
 		}
 
@@ -262,9 +262,9 @@ export default class DocumentFragment {
 	 * @returns {module:engine/model/documentfragment~DocumentFragment} `DocumentFragment` instance created using given plain object.
 	 */
 	static fromJSON( json ) {
-		let children = [];
+		const children = [];
 
-		for ( let child of json ) {
+		for ( const child of json ) {
 			if ( child.name ) {
 				// If child has name property, it is an Element.
 				children.push( Element.fromJSON( child ) );
@@ -293,5 +293,8 @@ function normalize( nodes ) {
 	}
 
 	// Array.from to enable .map() on non-arrays.
-	return Array.from( nodes ).map( ( node ) => typeof node == 'string' ? new Text( node ) : node );
+	return Array.from( nodes )
+		.map( node => {
+			return typeof node == 'string' ? new Text( node ) : node;
+		} );
 }

+ 11 - 8
packages/ckeditor5-engine/src/model/element.js

@@ -156,7 +156,7 @@ export default class Element extends Node {
 	 * element will be cloned without any child.
 	 */
 	clone( deep = false ) {
-		const children = deep ? Array.from( this._children ).map( ( node ) => node.clone( true ) ) : null;
+		const children = deep ? Array.from( this._children ).map( node => node.clone( true ) ) : null;
 
 		return new Element( this.name, this.getAttributes(), children );
 	}
@@ -201,7 +201,7 @@ export default class Element extends Node {
 	insertChildren( index, nodes ) {
 		nodes = normalize( nodes );
 
-		for ( let node of nodes ) {
+		for ( const node of nodes ) {
 			node.parent = this;
 		}
 
@@ -219,7 +219,7 @@ export default class Element extends Node {
 	removeChildren( index, howMany = 1 ) {
 		const nodes = this._children.removeNodes( index, howMany );
 
-		for ( let node of nodes ) {
+		for ( const node of nodes ) {
 			node.parent = null;
 		}
 
@@ -238,7 +238,7 @@ export default class Element extends Node {
 	 * @returns {module:engine/model/node~Node}
 	 */
 	getNodeByPath( relativePath ) {
-		let node = this;
+		let node = this; // eslint-disable-line consistent-this
 
 		for ( const index of relativePath ) {
 			node = node.getChild( index );
@@ -253,14 +253,14 @@ export default class Element extends Node {
 	 * @returns {Object} `Element` instance converted to plain object.
 	 */
 	toJSON() {
-		let json = super.toJSON();
+		const json = super.toJSON();
 
 		json.name = this.name;
 
 		if ( this._children.length > 0 ) {
 			json.children = [];
 
-			for ( let node of this._children ) {
+			for ( const node of this._children ) {
 				json.children.push( node.toJSON() );
 			}
 		}
@@ -281,7 +281,7 @@ export default class Element extends Node {
 		if ( json.children ) {
 			children = [];
 
-			for ( let child of json.children ) {
+			for ( const child of json.children ) {
 				if ( child.name ) {
 					// If child has name property, it is an Element.
 					children.push( Element.fromJSON( child ) );
@@ -311,5 +311,8 @@ function normalize( nodes ) {
 	}
 
 	// Array.from to enable .map() on non-arrays.
-	return Array.from( nodes ).map( ( node ) => typeof node == 'string' ? new Text( node ) : node );
+	return Array.from( nodes )
+		.map( node => {
+			return typeof node == 'string' ? new Text( node ) : node;
+		} );
 }

+ 3 - 3
packages/ckeditor5-engine/src/model/history.js

@@ -161,7 +161,7 @@ export default class History {
 
 		// Make sure that every updated delta has correct `baseVersion`.
 		// This is crucial for algorithms in `History` and algorithms using `History`.
-		for ( let delta of updatedDeltas ) {
+		for ( const delta of updatedDeltas ) {
 			delta.baseVersion = baseVersion;
 		}
 
@@ -171,7 +171,7 @@ export default class History {
 		// Update history points.
 		const changeBy = updatedDeltas.length - deltas.length;
 
-		for ( let key of this._historyPoints.keys() ) {
+		for ( const key of this._historyPoints.keys() ) {
 			if ( key > baseVersion ) {
 				this._historyPoints.set( key, this._historyPoints.get( key ) + changeBy );
 			}
@@ -185,7 +185,7 @@ export default class History {
 	 * @param {Number} baseVersion Base version of delta.
 	 */
 	_getIndex( baseVersion ) {
-		let index = this._historyPoints.get( baseVersion );
+		const index = this._historyPoints.get( baseVersion );
 
 		// Base version not found - it is either too high or too low, or is in the middle of delta.
 		if ( index === undefined ) {

+ 7 - 8
packages/ckeditor5-engine/src/model/liveposition.js

@@ -134,7 +134,6 @@ export default class LivePosition extends Position {
  * @method module:engine/model/liveposition~LivePosition.bindWithDocument
  */
 function bindWithDocument() {
-	/*jshint validthis: true */
 	// Operation types handled by LivePosition (these are operations that change model tree structure).
 	const supportedTypes = new Set( [ 'insert', 'move', 'remove', 'reinsert' ] );
 
@@ -161,23 +160,22 @@ function bindWithDocument() {
  * @param {module:engine/model/position~Position} [position] Additional position parameter provided by some change events.
  */
 function transform( type, range, position ) {
-	/*jshint validthis: true */
-
-	let howMany = range.end.offset - range.start.offset;
+	/* eslint-disable no-case-declarations */
+	const howMany = range.end.offset - range.start.offset;
 	let transformed;
 
 	switch ( type ) {
 		case 'insert':
-			let insertBefore = this.stickiness == 'sticksToNext';
+			const insertBefore = this.stickiness == 'sticksToNext';
 			transformed = this._getTransformedByInsertion( range.start, howMany, insertBefore );
 			break;
 
 		case 'move':
 		case 'remove':
 		case 'reinsert':
-			let originalRange = Range.createFromPositionAndShift( position, howMany );
+			const originalRange = Range.createFromPositionAndShift( position, howMany );
 
-			let gotMoved = originalRange.containsPosition( this ) ||
+			const gotMoved = originalRange.containsPosition( this ) ||
 				( originalRange.start.isEqual( this ) && this.stickiness == 'sticksToNext' ) ||
 				( originalRange.end.isEqual( this ) && this.stickiness == 'sticksToPrevious' );
 
@@ -185,7 +183,7 @@ function transform( type, range, position ) {
 			if ( gotMoved ) {
 				transformed = this._getCombined( position, range.start );
 			} else {
-				let insertBefore = this.stickiness == 'sticksToNext';
+				const insertBefore = this.stickiness == 'sticksToNext';
 				transformed = this._getTransformedByMove( position, range.start, howMany, insertBefore );
 			}
 			break;
@@ -199,6 +197,7 @@ function transform( type, range, position ) {
 
 		this.fire( 'change', oldPosition );
 	}
+	/* eslint-enable no-case-declarations */
 }
 
 mix( LivePosition, EmitterMixin );

+ 0 - 2
packages/ckeditor5-engine/src/model/liverange.js

@@ -94,7 +94,6 @@ export default class LiveRange extends Range {
  * @method module:engine/model/liverange~LiveRange#bindWithDocument
  */
 function bindWithDocument() {
-	/*jshint validthis: true */
 	// Operation types that a range can be transformed by.
 	const supportedTypes = new Set( [ 'insert', 'move', 'remove', 'reinsert' ] );
 
@@ -122,7 +121,6 @@ function bindWithDocument() {
  * @param {module:engine/model/position~Position} [sourcePosition] Source position for move, remove and reinsert change types.
  */
 function transform( changeType, deltaType, targetRange, sourcePosition ) {
-	/* jshint validthis: true */
 	const howMany = targetRange.end.offset - targetRange.start.offset;
 	let targetPosition = targetRange.start;
 

+ 10 - 10
packages/ckeditor5-engine/src/model/liveselection.js

@@ -128,7 +128,7 @@ export default class LiveSelection extends Selection {
 	 */
 	*getRanges() {
 		if ( this._ranges.length ) {
-			yield *super.getRanges();
+			yield* super.getRanges();
 		} else {
 			yield this._document._getDefaultRange();
 		}
@@ -330,7 +330,7 @@ export default class LiveSelection extends Selection {
 			this._attrs = new Map();
 		} else {
 			// If not, remove only attributes added with `low` priority.
-			for ( let [ key, priority ] of this._attributePriority ) {
+			for ( const [ key, priority ] of this._attributePriority ) {
 				if ( priority == 'low' ) {
 					this._attrs.delete( key );
 					this._attributePriority.delete( key );
@@ -345,14 +345,14 @@ export default class LiveSelection extends Selection {
 
 		// First, loop through all attributes that are set on selection right now.
 		// Check which of them are different than old attributes.
-		for ( let [ newKey, newValue ] of this.getAttributes() ) {
+		for ( const [ newKey, newValue ] of this.getAttributes() ) {
 			if ( !oldAttributes.has( newKey ) || oldAttributes.get( newKey ) !== newValue ) {
 				changed.push( newKey );
 			}
 		}
 
 		// Then, check which of old attributes got removed.
-		for ( let [ oldKey ] of oldAttributes ) {
+		for ( const [ oldKey ] of oldAttributes ) {
 			if ( !this.hasAttribute( oldKey ) ) {
 				changed.push( oldKey );
 			}
@@ -454,7 +454,7 @@ export default class LiveSelection extends Selection {
 	_setAttributesTo( attrs, directChange = true ) {
 		const changed = new Set();
 
-		for ( let [ oldKey, oldValue ] of this.getAttributes() ) {
+		for ( const [ oldKey, oldValue ] of this.getAttributes() ) {
 			// Do not remove attribute if attribute with same key and value is about to be set.
 			if ( attrs.get( oldKey ) === oldValue ) {
 				continue;
@@ -466,7 +466,7 @@ export default class LiveSelection extends Selection {
 			}
 		}
 
-		for ( let [ key, value ] of attrs ) {
+		for ( const [ key, value ] of attrs ) {
 			// Attribute may not be set because of attributes or because same key/value is already added.
 			const gotAdded = this._setAttribute( key, value, directChange );
 
@@ -488,7 +488,7 @@ export default class LiveSelection extends Selection {
 		const selectionParent = this.getFirstPosition().parent;
 
 		if ( this.isCollapsed && selectionParent.childCount === 0 ) {
-			for ( let key of selectionParent.getAttributeKeys() ) {
+			for ( const key of selectionParent.getAttributeKeys() ) {
 				if ( key.indexOf( storePrefix ) === 0 ) {
 					const realKey = key.substr( storePrefix.length );
 
@@ -533,13 +533,13 @@ export default class LiveSelection extends Selection {
 		const selectionParent = this.anchor.parent;
 		const batch = this._document.batch();
 
-		for ( let [ oldKey ] of this._getStoredAttributes() ) {
+		for ( const [ oldKey ] of this._getStoredAttributes() ) {
 			const storeKey = LiveSelection._getStoreAttributeKey( oldKey );
 
 			batch.removeAttribute( selectionParent, storeKey );
 		}
 
-		for ( let [ key, value ] of attrs ) {
+		for ( const [ key, value ] of attrs ) {
 			const storeKey = LiveSelection._getStoreAttributeKey( key );
 
 			batch.setAttribute( selectionParent, storeKey, value );
@@ -564,7 +564,7 @@ export default class LiveSelection extends Selection {
 			const range = this.getFirstRange();
 
 			// ...look for a first character node in that range and take attributes from it.
-			for ( let item of range ) {
+			for ( const item of range ) {
 				// This is not an optimal solution because of https://github.com/ckeditor/ckeditor5-engine/issues/454.
 				// It can be done better by using `break;` instead of checking `attrs === null`.
 				if ( item.type == 'text' && attrs === null ) {

+ 3 - 3
packages/ckeditor5-engine/src/model/markercollection.js

@@ -134,7 +134,7 @@ export default class MarkerCollection {
 	 * @returns {Iterator.<module:engine/model/markercollection~Marker>}
 	 */
 	*getMarkersAtPosition( position ) {
-		for ( let marker of this ) {
+		for ( const marker of this ) {
 			if ( marker.getRange().containsPosition( position ) ) {
 				yield marker;
 			}
@@ -145,7 +145,7 @@ export default class MarkerCollection {
 	 * Destroys markers collection.
 	 */
 	destroy() {
-		for ( let marker of this._markers.values() ) {
+		for ( const marker of this._markers.values() ) {
 			this._destroyMarker( marker );
 		}
 
@@ -168,7 +168,7 @@ export default class MarkerCollection {
 	 * @returns {Iterator.<module:engine/model/markercollection~Marker>}
 	 */
 	*getMarkersGroup( prefix ) {
-		for ( let marker of this._markers.values() ) {
+		for ( const marker of this._markers.values() ) {
 			if ( marker.name.startsWith( prefix + ':' ) ) {
 				yield marker;
 			}

+ 3 - 3
packages/ckeditor5-engine/src/model/node.js

@@ -185,7 +185,7 @@ export default class Node {
 	 * @type {module:engine/model/node~Node|module:engine/model/documentfragment~DocumentFragment}
 	 */
 	get root() {
-		let root = this;
+		let root = this; // eslint-disable-line consistent-this
 
 		while ( root.parent ) {
 			root = root.parent;
@@ -238,7 +238,7 @@ export default class Node {
 	 */
 	getPath() {
 		const path = [];
-		let node = this;
+		let node = this; // eslint-disable-line consistent-this
 
 		while ( node.parent ) {
 			path.unshift( node.startOffset );
@@ -359,7 +359,7 @@ export default class Node {
 	 * @returns {Object} `Node` converted to plain object.
 	 */
 	toJSON() {
-		let json = {};
+		const json = {};
 
 		if ( this._attrs.size ) {
 			json.attributes = [ ...this._attrs ];

+ 4 - 4
packages/ckeditor5-engine/src/model/nodelist.js

@@ -139,8 +139,8 @@ export default class NodeList {
 	offsetToIndex( offset ) {
 		let totalOffset = 0;
 
-		for ( let node of this._nodes ) {
-			if ( offset >= totalOffset && offset < totalOffset + node.offsetSize  ) {
+		for ( const node of this._nodes ) {
+			if ( offset >= totalOffset && offset < totalOffset + node.offsetSize ) {
 				return this.getNodeIndex( node );
 			}
 
@@ -167,7 +167,7 @@ export default class NodeList {
 	 */
 	insertNodes( index, nodes ) {
 		// Validation.
-		for ( let node of nodes ) {
+		for ( const node of nodes ) {
 			if ( !( node instanceof Node ) ) {
 				/**
 				 * Trying to insert an object which is not a Node instance.
@@ -199,6 +199,6 @@ export default class NodeList {
 	 * @returns {Array.<module:engine/model/node~Node>} `NodeList` instance converted to `Array`.
 	 */
 	toJSON() {
-		return this._nodes.map( ( node ) => node.toJSON() );
+		return this._nodes.map( node => node.toJSON() );
 	}
 }

+ 4 - 3
packages/ckeditor5-engine/src/model/operation/attributeoperation.js

@@ -109,7 +109,7 @@ export default class AttributeOperation extends Operation {
 	 */
 	_execute() {
 		// Validation.
-		for ( let item of this.range.getItems() ) {
+		for ( const item of this.range.getItems() ) {
 			if ( this.oldValue !== null && !isEqual( item.getAttribute( this.key ), this.oldValue ) ) {
 				/**
 				 * Changed node has different attribute value than operation's old attribute value.
@@ -120,8 +120,9 @@ export default class AttributeOperation extends Operation {
 				 * @param {*} value
 				 */
 				throw new CKEditorError(
-					'attribute-operation-wrong-old-value: Changed node has different attribute value than operation\'s old attribute value.',
-					{ item: item, key: this.key, value: this.oldValue }
+					'attribute-operation-wrong-old-value: Changed node has different attribute value than operation\'s ' +
+					'old attribute value.',
+					{ item, key: this.key, value: this.oldValue }
 				);
 			}
 

+ 6 - 7
packages/ckeditor5-engine/src/model/operation/insertoperation.js

@@ -11,8 +11,7 @@ import Operation from './operation';
 import Position from '../position';
 import NodeList from '../nodelist';
 import RemoveOperation from './removeoperation';
-import writer from './../writer';
-import { normalizeNodes } from './../writer';
+import { insert, normalizeNodes } from '../writer';
 import Text from '../text';
 import Element from '../element';
 
@@ -61,7 +60,7 @@ export default class InsertOperation extends Operation {
 	 * @returns {module:engine/model/operation/insertoperation~InsertOperation}
 	 */
 	clone() {
-		const nodes = new NodeList( [ ...this.nodes ].map( ( node ) => node.clone( true ) ) );
+		const nodes = new NodeList( [ ...this.nodes ].map( node => node.clone( true ) ) );
 
 		return new InsertOperation( this.position, nodes, this.baseVersion );
 	}
@@ -83,9 +82,9 @@ export default class InsertOperation extends Operation {
 		// to the operation, not modified. For example, text nodes can get merged or cropped while Elements can
 		// get children. It is important that InsertOperation has the copy of original nodes in intact state.
 		const originalNodes = this.nodes;
-		this.nodes = new NodeList( [ ...originalNodes ].map( ( node ) => node.clone( true ) ) );
+		this.nodes = new NodeList( [ ...originalNodes ].map( node => node.clone( true ) ) );
 
-		const range = writer.insert( this.position, originalNodes );
+		const range = insert( this.position, originalNodes );
 
 		return { range };
 	}
@@ -105,9 +104,9 @@ export default class InsertOperation extends Operation {
 	 * @returns {module:engine/model/operation/insertoperation~InsertOperation}
 	 */
 	static fromJSON( json, document ) {
-		let children = [];
+		const children = [];
 
-		for ( let child of json.nodes ) {
+		for ( const child of json.nodes ) {
 			if ( child.name ) {
 				// If child has name property, it is an Element.
 				children.push( Element.fromJSON( child ) );

+ 1 - 1
packages/ckeditor5-engine/src/model/operation/markeroperation.js

@@ -88,7 +88,7 @@ export default class MarkerOperation extends Operation {
 
 		this._markers[ type ]( this.name, this.newRange );
 
-		return { name: this.name, type: type };
+		return { name: this.name, type };
 	}
 
 	/**

+ 9 - 9
packages/ckeditor5-engine/src/model/operation/moveoperation.js

@@ -105,7 +105,7 @@ export default class MoveOperation extends Operation {
 	 * @returns {module:engine/model/operation/moveoperation~MoveOperation}
 	 */
 	getReversed() {
-		let newTargetPosition = this.sourcePosition._getTransformedByInsertion( this.targetPosition, this.howMany );
+		const newTargetPosition = this.sourcePosition._getTransformedByInsertion( this.targetPosition, this.howMany );
 
 		const op = new this.constructor( this.getMovedRangeStart(), this.howMany, newTargetPosition, this.baseVersion + 1 );
 		op.isSticky = this.isSticky;
@@ -117,10 +117,10 @@ export default class MoveOperation extends Operation {
 	 * @inheritDoc
 	 */
 	_execute() {
-		let sourceElement = this.sourcePosition.parent;
-		let targetElement = this.targetPosition.parent;
-		let sourceOffset = this.sourcePosition.offset;
-		let targetOffset = this.targetPosition.offset;
+		const sourceElement = this.sourcePosition.parent;
+		const targetElement = this.targetPosition.parent;
+		const sourceOffset = this.sourcePosition.offset;
+		const targetOffset = this.targetPosition.offset;
 
 		// Validate whether move operation has correct parameters.
 		// Validation is pretty complex but move operation is one of the core ways to manipulate the document state.
@@ -154,7 +154,7 @@ export default class MoveOperation extends Operation {
 			);
 		} else if ( this.sourcePosition.root == this.targetPosition.root ) {
 			if ( compareArrays( this.sourcePosition.getParentPath(), this.targetPosition.getParentPath() ) == 'prefix' ) {
-				let i = this.sourcePosition.path.length - 1;
+				const i = this.sourcePosition.path.length - 1;
 
 				if ( this.targetPosition.path[ i ] >= sourceOffset && this.targetPosition.path[ i ] < sourceOffset + this.howMany ) {
 					/**
@@ -173,7 +173,7 @@ export default class MoveOperation extends Operation {
 
 		return {
 			sourcePosition: this.sourcePosition,
-			range: range
+			range
 		};
 	}
 
@@ -192,8 +192,8 @@ export default class MoveOperation extends Operation {
 	 * @returns {module:engine/model/operation/moveoperation~MoveOperation}
 	 */
 	static fromJSON( json, document ) {
-		let sourcePosition = Position.fromJSON( json.sourcePosition, document );
-		let targetPosition = Position.fromJSON( json.targetPosition, document );
+		const sourcePosition = Position.fromJSON( json.sourcePosition, document );
+		const targetPosition = Position.fromJSON( json.targetPosition, document );
 
 		const move = new this( sourcePosition, json.howMany, targetPosition, json.baseVersion );
 

+ 2 - 2
packages/ckeditor5-engine/src/model/operation/removeoperation.js

@@ -91,7 +91,7 @@ export default class RemoveOperation extends MoveOperation {
 	 * @returns {module:engine/model/operation/removeoperation~RemoveOperation}
 	 */
 	clone() {
-		let removeOperation = new RemoveOperation( this.sourcePosition, this.howMany, this.baseVersion );
+		const removeOperation = new RemoveOperation( this.sourcePosition, this.howMany, this.baseVersion );
 		removeOperation.targetPosition = Position.createFromPosition( this.targetPosition );
 
 		return removeOperation;
@@ -135,7 +135,7 @@ export default class RemoveOperation extends MoveOperation {
 	 * @returns {module:engine/model/operation/removeoperation~RemoveOperation}
 	 */
 	static fromJSON( json, document ) {
-		let sourcePosition = Position.fromJSON( json.sourcePosition, document );
+		const sourcePosition = Position.fromJSON( json.sourcePosition, document );
 
 		const removeOp = new RemoveOperation( sourcePosition, json.howMany, json.baseVersion );
 

+ 2 - 1
packages/ckeditor5-engine/src/model/operation/rootattributeoperation.js

@@ -104,7 +104,8 @@ export default class RootAttributeOperation extends Operation {
 			 * @param {*} value
 			 */
 			throw new CKEditorError(
-				'rootattribute-operation-wrong-old-value: Changed node has different attribute value than operation\'s old attribute value.',
+				'rootattribute-operation-wrong-old-value: Changed node has different attribute value than operation\'s ' +
+				'old attribute value.',
 				{ root: this.root, key: this.key }
 			);
 		}

+ 32 - 17
packages/ckeditor5-engine/src/model/operation/transform.js

@@ -104,7 +104,7 @@ const ot = {
 			const ranges = a.range._getTransformedByInsertion( b.position, b.nodes.maxOffset, true, false );
 
 			// Map transformed range(s) to operations and return them.
-			return ranges.reverse().map( ( range ) => {
+			return ranges.reverse().map( range => {
 				return new AttributeOperation( range, a.key, a.oldValue, a.newValue, a.baseVersion );
 			} );
 		},
@@ -116,7 +116,7 @@ const ot = {
 				// If operations attributes are in conflict, check if their ranges intersect and manage them properly.
 
 				// First, we want to apply change to the part of a range that has not been changed by the other operation.
-				let operations = a.range.getDifference( b.range ).map( ( range ) => {
+				const operations = a.range.getDifference( b.range ).map( range => {
 					return new AttributeOperation( range, a.key, a.oldValue, a.newValue, a.baseVersion );
 				} );
 
@@ -202,7 +202,7 @@ const ot = {
 			}
 
 			// Map transformed range(s) to operations and return them.
-			return ranges.map( ( range ) => {
+			return ranges.map( range => {
 				return new AttributeOperation( range, a.key, a.oldValue, a.newValue, a.baseVersion );
 			} );
 		}
@@ -345,7 +345,7 @@ const ot = {
 			let range = Range.createFromPositionAndShift( a.sourcePosition, a.howMany );
 			range = range._getTransformedByInsertion( b.position, b.nodes.maxOffset, false, a.isSticky )[ 0 ];
 
-			let result = new a.constructor(
+			const result = new a.constructor(
 				range.start,
 				range.end.offset - range.start.offset,
 				a instanceof RemoveOperation ?
@@ -424,14 +424,26 @@ const ot = {
 			const rangeB = Range.createFromPositionAndShift( b.sourcePosition, b.howMany );
 
 			// This will aggregate transformed ranges.
-			let ranges = [];
+			const ranges = [];
 
 			// All the other non-special cases are treated by generic algorithm below.
-			let difference = joinRanges( rangeA.getDifference( rangeB ) );
+			const difference = joinRanges( rangeA.getDifference( rangeB ) );
 
 			if ( difference ) {
-				difference.start = difference.start._getTransformedByMove( b.sourcePosition, b.targetPosition, b.howMany, !a.isSticky, false );
-				difference.end = difference.end._getTransformedByMove( b.sourcePosition, b.targetPosition, b.howMany, a.isSticky, false );
+				difference.start = difference.start._getTransformedByMove(
+					b.sourcePosition,
+					b.targetPosition,
+					b.howMany,
+					!a.isSticky,
+					false
+				);
+				difference.end = difference.end._getTransformedByMove(
+					b.sourcePosition,
+					b.targetPosition,
+					b.howMany,
+					a.isSticky,
+					false
+				);
 
 				ranges.push( difference );
 			}
@@ -446,11 +458,11 @@ const ot = {
 			// That means that we transform common part in two cases:
 			// * `rangeA` is "deeper" than `rangeB` so it does not collide
 			// * `rangeA` is at the same level but is stronger than `rangeB`.
-			let aCompB = compareArrays( a.sourcePosition.getParentPath(), b.sourcePosition.getParentPath() );
+			const aCompB = compareArrays( a.sourcePosition.getParentPath(), b.sourcePosition.getParentPath() );
 
 			// If the `b` MoveOperation points inside the `a` MoveOperation range, the common part will be included in
 			// range(s) that (is) are results of processing `difference`. If that's the case, we cannot include it again.
-			let bTargetsToA = rangeA.containsPosition( b.targetPosition ) ||
+			const bTargetsToA = rangeA.containsPosition( b.targetPosition ) ||
 				( rangeA.start.isEqual( b.targetPosition ) && a.isSticky ) ||
 				( rangeA.end.isEqual( b.targetPosition ) && a.isSticky );
 
@@ -460,8 +472,12 @@ const ot = {
 			// smaller range will be moved to larger range target. The effect of this transformation feels natural.
 			// Also if we wouldn't do that, we would get different results on both sides of transformation (i.e. in
 			// collaborative editing).
-			let aIsInside = rangeB.containsRange( rangeA ) &&
-				( rangeB.containsPosition( a.targetPosition ) || rangeB.start.isEqual( a.targetPosition ) || rangeB.end.isEqual( a.targetPosition ) );
+			const aIsInside = rangeB.containsRange( rangeA ) &&
+				(
+					rangeB.containsPosition( a.targetPosition ) ||
+					rangeB.start.isEqual( a.targetPosition ) ||
+					rangeB.end.isEqual( a.targetPosition )
+				);
 
 			if ( common !== null && ( aCompB === 'extension' || ( aCompB === 'same' && isStrong ) || aIsInside ) && !bTargetsToA ) {
 				// Here we do not need to worry that newTargetPosition is inside moved range, because that
@@ -500,7 +516,7 @@ const ot = {
 			}
 
 			// Target position also could be affected by the other MoveOperation. We will transform it.
-			let newTargetPosition = a.targetPosition._getTransformedByMove(
+			const newTargetPosition = a.targetPosition._getTransformedByMove(
 				b.sourcePosition,
 				b.targetPosition,
 				b.howMany,
@@ -511,7 +527,7 @@ const ot = {
 			// Map transformed range(s) to operations and return them.
 			return ranges.reverse().map( ( range, i ) => {
 				// We want to keep correct operation class.
-				let result = new a.constructor(
+				const result = new a.constructor(
 					range.start,
 					range.end.offset - range.start.offset,
 					a instanceof RemoveOperation ? a.baseVersion : newTargetPosition,
@@ -534,8 +550,7 @@ const ot = {
 };
 
 function transform( a, b, isStrong ) {
-	let group;
-	let algorithm;
+	let group, algorithm;
 
 	if ( a instanceof InsertOperation ) {
 		group = ot.InsertOperation;
@@ -571,7 +586,7 @@ function transform( a, b, isStrong ) {
 		}
 	}
 
-	let transformed = algorithm( a, b, isStrong );
+	const transformed = algorithm( a, b, isStrong );
 
 	return updateBaseVersions( a.baseVersion, transformed );
 }

+ 10 - 10
packages/ckeditor5-engine/src/model/position.js

@@ -59,7 +59,7 @@ export default class Position {
 			 * @error position-path-incorrect
 			 * @param path
 			 */
-			throw new CKEditorError( 'model-position-path-incorrect: Position path must be an Array with at least one item.', { path: path } );
+			throw new CKEditorError( 'model-position-path-incorrect: Position path must be an Array with at least one item.', { path } );
 		}
 
 		// Normalize the root and path (if element was passed).
@@ -166,7 +166,7 @@ export default class Position {
 	 * @type {module:engine/model/text~Text|null}
 	 */
 	get textNode() {
-		let node = this.parent.getChild( this.index );
+		const node = this.parent.getChild( this.index );
 
 		return ( node instanceof Text && node.startOffset < this.offset ) ? node : null;
 	}
@@ -311,9 +311,9 @@ export default class Position {
 		}
 
 		// We find on which tree-level start and end have the lowest common ancestor
-		let cmp = compareArrays( this.path, position.path );
+		const cmp = compareArrays( this.path, position.path );
 		// If comparison returned string it means that arrays are same.
-		let diffAt = ( typeof cmp == 'string' ) ? Math.min( this.path.length, position.path.length ) : cmp;
+		const diffAt = ( typeof cmp == 'string' ) ? Math.min( this.path.length, position.path.length ) : cmp;
 
 		return this.path.slice( 0, diffAt );
 	}
@@ -326,9 +326,9 @@ export default class Position {
 	 * @returns {module:engine/model/position~Position} Shifted position.
 	 */
 	getShiftedBy( shift ) {
-		let shifted = Position.createFromPosition( this );
+		const shifted = Position.createFromPosition( this );
 
-		let offset = shifted.offset + shift;
+		const offset = shifted.offset + shift;
 		shifted.offset = offset < 0 ? 0 : offset;
 
 		return shifted;
@@ -404,7 +404,7 @@ export default class Position {
 	isTouching( otherPosition ) {
 		let left = null;
 		let right = null;
-		let compare = this.compareWith( otherPosition );
+		const compare = this.compareWith( otherPosition );
 
 		switch ( compare ) {
 			case 'same':
@@ -460,7 +460,7 @@ export default class Position {
 	 * @returns {module:engine/model/position~Position|null} Transformed position or `null`.
 	 */
 	_getTransformedByDeletion( deletePosition, howMany ) {
-		let transformed = Position.createFromPosition( this );
+		const transformed = Position.createFromPosition( this );
 
 		// This position can't be affected if deletion was in a different root.
 		if ( this.root != deletePosition.root ) {
@@ -511,7 +511,7 @@ export default class Position {
 	 * @returns {module:engine/model/position~Position} Transformed position.
 	 */
 	_getTransformedByInsertion( insertPosition, howMany, insertBefore ) {
-		let transformed = Position.createFromPosition( this );
+		const transformed = Position.createFromPosition( this );
 
 		// This position can't be affected if insertion was in a different root.
 		if ( this.root != insertPosition.root ) {
@@ -604,7 +604,7 @@ export default class Position {
 		const i = source.path.length - 1;
 
 		// The first part of a path to combined position is a path to the place where nodes were moved.
-		let combined = Position.createFromPosition( target );
+		const combined = Position.createFromPosition( target );
 
 		// Then we have to update the rest of the path.
 

+ 48 - 21
packages/ckeditor5-engine/src/model/range.js

@@ -90,7 +90,8 @@ export default class Range {
 	 * Checks whether this range contains given {@link module:engine/model/position~Position position}.
 	 *
 	 * @param {module:engine/model/position~Position} position Position to check.
-	 * @returns {Boolean} `true` if given {@link module:engine/model/position~Position position} is contained in this range, `false` otherwise.
+	 * @returns {Boolean} `true` if given {@link module:engine/model/position~Position position} is contained in this range,
+	 * `false` otherwise.
 	 */
 	containsPosition( position ) {
 		return position.isAfter( this.start ) && position.isBefore( this.end );
@@ -259,12 +260,12 @@ export default class Range {
 		const ranges = [];
 		const diffAt = this.start.getCommonPath( this.end ).length;
 
-		let pos = Position.createFromPosition( this.start );
+		const pos = Position.createFromPosition( this.start );
 		let posParent = pos.parent;
 
 		// Go up.
 		while ( pos.path.length > diffAt + 1 ) {
-			let howMany = posParent.maxOffset - pos.offset;
+			const howMany = posParent.maxOffset - pos.offset;
 
 			if ( howMany !== 0 ) {
 				ranges.push( new Range( pos, pos.getShiftedBy( howMany ) ) );
@@ -277,8 +278,8 @@ export default class Range {
 
 		// Go down.
 		while ( pos.path.length <= this.end.path.length ) {
-			let offset = this.end.path[ pos.path.length - 1 ];
-			let howMany = offset - pos.offset;
+			const offset = this.end.path[ pos.path.length - 1 ];
+			const howMany = offset - pos.offset;
 
 			if ( howMany !== 0 ) {
 				ranges.push( new Range( pos, pos.getShiftedBy( howMany ) ) );
@@ -327,7 +328,7 @@ export default class Range {
 
 		const treeWalker = new TreeWalker( options );
 
-		for ( let value of treeWalker ) {
+		for ( const value of treeWalker ) {
 			yield value.item;
 		}
 	}
@@ -352,7 +353,7 @@ export default class Range {
 
 		yield treeWalker.position;
 
-		for ( let value of treeWalker ) {
+		for ( const value of treeWalker ) {
 			yield value.nextPosition;
 		}
 	}
@@ -368,12 +369,12 @@ export default class Range {
 	 * @returns {Array.<module:engine/model/range~Range>} Range which is the result of transformation.
 	 */
 	getTransformedByDelta( delta ) {
-		let ranges = [ Range.createFromRange( this ) ];
+		const ranges = [ Range.createFromRange( this ) ];
 
 		// Operation types that a range can be transformed by.
 		const supportedTypes = new Set( [ 'insert', 'move', 'remove', 'reinsert' ] );
 
-		for ( let operation of delta.operations ) {
+		for ( const operation of delta.operations ) {
 			if ( supportedTypes.has( operation.type ) ) {
 				for ( let i = 0; i < ranges.length; i++ ) {
 					const result = ranges[ i ]._getTransformedByDocumentChange(
@@ -405,11 +406,11 @@ export default class Range {
 	 * @returns {Array.<module:engine/model/range~Range>} Range which is the result of transformation.
 	 */
 	getTransformedByDeltas( deltas ) {
-		let ranges = [ Range.createFromRange( this ) ];
+		const ranges = [ Range.createFromRange( this ) ];
 
-		for ( let delta of deltas ) {
+		for ( const delta of deltas ) {
 			for ( let i = 0; i < ranges.length; i++ ) {
-				let result = ranges[ i ].getTransformedByDelta( delta );
+				const result = ranges[ i ].getTransformedByDelta( delta );
 
 				ranges.splice( i, 1, ...result );
 				i += result.length - 1;
@@ -452,7 +453,11 @@ export default class Range {
 		} else {
 			const sourceRange = Range.createFromPositionAndShift( sourcePosition, howMany );
 
-			if ( deltaType == 'merge' && this.isCollapsed && ( this.start.isEqual( sourceRange.start ) || this.start.isEqual( sourceRange.end ) ) ) {
+			if (
+				deltaType == 'merge' &&
+				this.isCollapsed &&
+				( this.start.isEqual( sourceRange.start ) || this.start.isEqual( sourceRange.end ) )
+			) {
 				// Collapsed range is in merged element.
 				// Without fix, the range would end up in the graveyard, together with removed element.
 				// <p>foo</p><p>[]bar</p> -> <p>foobar</p><p>[]</p> -> <p>foobar</p> -> <p>foo[]bar</p>
@@ -464,8 +469,15 @@ export default class Range {
 				// <p>xx</p>^<w>{<p>a[b</p>}</w><p>c]d</p>   -->   <p>xx</p><p>a[b</p><w></w><p>c]d</p>
 				// ^<p>xx</p><w>{<p>a[b</p>}</w><p>c]d</p>   -->   <p>a[b</p><p>xx</p><w></w><p>c]d</p>  // Note <p>xx</p> inclusion.
 				// <w>{<p>a[b</p>}</w>^<p>c]d</p>            -->   <w></w><p>a[b</p><p>c]d</p>
-				if ( sourceRange.containsPosition( this.start ) && this.containsPosition( sourceRange.end ) && this.end.isAfter( targetPosition ) ) {
-					let start = this.start._getCombined( sourcePosition, targetPosition._getTransformedByDeletion( sourcePosition, howMany ) );
+				if (
+					sourceRange.containsPosition( this.start ) &&
+					this.containsPosition( sourceRange.end ) &&
+					this.end.isAfter( targetPosition )
+				) {
+					const start = this.start._getCombined(
+						sourcePosition,
+						targetPosition._getTransformedByDeletion( sourcePosition, howMany )
+					);
 					const end = this.end._getTransformedByMove( sourcePosition, targetPosition, howMany, false, false );
 
 					return [ new Range( start, end ) ];
@@ -475,9 +487,22 @@ export default class Range {
 				// <p>c[d</p><w>{<p>a]b</p>}</w>^<p>xx</p>   -->   <p>c[d</p><w></w><p>a]b</p><p>xx</p>
 				// <p>c[d</p><w>{<p>a]b</p>}</w><p>xx</p>^   -->   <p>c[d</p><w></w><p>xx</p><p>a]b</p>  // Note <p>xx</p> inclusion.
 				// <p>c[d</p>^<w>{<p>a]b</p>}</w>            -->   <p>c[d</p><p>a]b</p><w></w>
-				if ( sourceRange.containsPosition( this.end ) && this.containsPosition( sourceRange.start ) && this.start.isBefore( targetPosition ) ) {
-					const start = this.start._getTransformedByMove( sourcePosition, targetPosition, howMany, true, false );
-					let end = this.end._getCombined( sourcePosition, targetPosition._getTransformedByDeletion( sourcePosition, howMany ) );
+				if (
+					sourceRange.containsPosition( this.end ) &&
+					this.containsPosition( sourceRange.start ) &&
+					this.start.isBefore( targetPosition )
+				) {
+					const start = this.start._getTransformedByMove(
+						sourcePosition,
+						targetPosition,
+						howMany,
+						true,
+						false
+					);
+					const end = this.end._getCombined(
+						sourcePosition,
+						targetPosition._getTransformedByDeletion( sourcePosition, howMany )
+					);
 
 					return [ new Range( start, end ) ];
 				}
@@ -538,8 +563,8 @@ export default class Range {
 		} else {
 			const range = Range.createFromRange( this );
 
-			let insertBeforeStart = range.isCollapsed ? true : !isSticky;
-			let insertBeforeEnd = range.isCollapsed ? true : isSticky;
+			const insertBeforeStart = range.isCollapsed ? true : !isSticky;
+			const insertBeforeEnd = range.isCollapsed ? true : isSticky;
 
 			range.start = range.start._getTransformedByInsertion( insertPosition, howMany, insertBeforeStart );
 			range.end = range.end._getTransformedByInsertion( insertPosition, howMany, insertBeforeEnd );
@@ -701,7 +726,9 @@ export default class Range {
 		const ref = ranges[ 0 ];
 
 		// 2. Sort all the ranges so it's easier to process them.
-		ranges.sort( ( a, b ) => a.start.isAfter( b.start ) ? 1 : -1 );
+		ranges.sort( ( a, b ) => {
+			return a.start.isAfter( b.start ) ? 1 : -1;
+		} );
 
 		// 3. Check at which index the reference range is now.
 		const refIndex = ranges.indexOf( ref );

+ 2 - 1
packages/ckeditor5-engine/src/model/rootelement.js

@@ -19,7 +19,8 @@ export default class RootElement extends Element {
 	 *
 	 * @param {module:engine/model/document~Document} doc Document that is an owner of this root.
 	 * @param {String} name Node name.
-	 * @param {String} [rootName='main'] Unique root name used to identify this root element by {@link module:engine/model/document~Document}.
+	 * @param {String} [rootName='main'] Unique root name used to identify this root
+	 * element by {@link module:engine/model/document~Document}.
 	 */
 	constructor( doc, name, rootName = 'main' ) {
 		super( name );

+ 10 - 10
packages/ckeditor5-engine/src/model/schema.js

@@ -189,7 +189,7 @@ export default class Schema {
 		const path = Schema._normalizeQueryPath( query.inside );
 
 		// Get extension chain of given item and retrieve all schema items that are extended by given item.
-		const schemaItems = this._extensionChains.get( query.name ).map( ( name ) => {
+		const schemaItems = this._extensionChains.get( query.name ).map( name => {
 			return this._getItem( name );
 		} );
 
@@ -199,8 +199,8 @@ export default class Schema {
 		}
 
 		// If there is matching disallow path, this query is not valid with schema.
-		for ( let attribute of query.attributes ) {
-			for ( let schemaItem of schemaItems ) {
+		for ( const attribute of query.attributes ) {
+			for ( const schemaItem of schemaItems ) {
 				if ( schemaItem._hasMatchingPath( 'disallow', path, attribute ) ) {
 					return false;
 				}
@@ -213,10 +213,10 @@ export default class Schema {
 		// we have allowed paths for all of them.
 		// Keep in mind that if the query has no attributes, query.attribute was converted to an array
 		// with a single `undefined` value. This fits the algorithm well.
-		for ( let attribute of query.attributes ) {
+		for ( const attribute of query.attributes ) {
 			let matched = false;
 
-			for ( let schemaItem of schemaItems ) {
+			for ( const schemaItem of schemaItems ) {
 				if ( schemaItem._hasMatchingPath( 'allow', path, attribute ) ) {
 					matched = true;
 					break;
@@ -337,7 +337,7 @@ export default class Schema {
 		let normalized = [];
 
 		if ( isArray( path ) ) {
-			for ( let pathItem of path ) {
+			for ( const pathItem of path ) {
 				if ( pathItem instanceof Element ) {
 					normalized.push( pathItem.name );
 				} else if ( isString( pathItem ) ) {
@@ -454,7 +454,7 @@ export class SchemaItem {
 			attributes = [ attributes ];
 		}
 
-		for ( let attribute of attributes ) {
+		for ( const attribute of attributes ) {
 			this[ member ].push( { path, attribute } );
 		}
 	}
@@ -471,7 +471,7 @@ export class SchemaItem {
 		const source = type === 'allow' ? this._allowed : this._disallowed;
 		const paths = [];
 
-		for ( let item of source ) {
+		for ( const item of source ) {
 			if ( item.attribute === attribute ) {
 				paths.push( item.path );
 			}
@@ -491,10 +491,10 @@ export class SchemaItem {
 	_checkRequiredAttributes( attributesToCheck ) {
 		let found = true;
 
-		for ( let attributeSet of this._requiredAttributes ) {
+		for ( const attributeSet of this._requiredAttributes ) {
 			found = true;
 
-			for ( let attribute of attributeSet ) {
+			for ( const attribute of attributeSet ) {
 				if ( attributesToCheck.indexOf( attribute ) == -1 ) {
 					found = false;
 					break;

+ 13 - 11
packages/ckeditor5-engine/src/model/selection.js

@@ -154,10 +154,10 @@ export default class Selection {
 			return false;
 		}
 
-		for ( let thisRange of this._ranges ) {
+		for ( const thisRange of this._ranges ) {
 			let found = false;
 
-			for ( let otherRange of otherSelection._ranges ) {
+			for ( const otherRange of otherSelection._ranges ) {
 				if ( thisRange.isEqual( otherRange ) ) {
 					found = true;
 					break;
@@ -178,7 +178,7 @@ export default class Selection {
 	 * @returns {Iterator.<module:engine/model/range~Range>}
 	 */
 	*getRanges() {
-		for ( let range of this._ranges ) {
+		for ( const range of this._ranges ) {
 			yield Range.createFromRange( range );
 		}
 	}
@@ -196,7 +196,7 @@ export default class Selection {
 	getFirstRange() {
 		let first = null;
 
-		for ( let range of this._ranges ) {
+		for ( const range of this._ranges ) {
 			if ( !first || range.start.isBefore( first.start ) ) {
 				first = range;
 			}
@@ -218,7 +218,7 @@ export default class Selection {
 	getLastRange() {
 		let last = null;
 
-		for ( let range of this._ranges ) {
+		for ( const range of this._ranges ) {
 			if ( !last || range.end.isAfter( last.end ) ) {
 				last = range;
 			}
@@ -307,12 +307,12 @@ export default class Selection {
 		newRanges = Array.from( newRanges );
 
 		// Check whether there is any range in new ranges set that is different than all already added ranges.
-		const anyNewRange = newRanges.some( ( newRange ) => {
+		const anyNewRange = newRanges.some( newRange => {
 			if ( !( newRange instanceof Range ) ) {
 				throw new CKEditorError( 'model-selection-added-not-range: Trying to add an object that is not an instance of Range.' );
 			}
 
-			return this._ranges.every( ( oldRange ) => {
+			return this._ranges.every( oldRange => {
 				return !oldRange.isEqual( newRange );
 			} );
 		} );
@@ -324,7 +324,7 @@ export default class Selection {
 
 		this._removeAllRanges();
 
-		for ( let range of newRanges ) {
+		for ( const range of newRanges ) {
 			this._pushRange( range );
 		}
 
@@ -406,7 +406,9 @@ export default class Selection {
 			 *
 			 * @error model-selection-setFocus-no-ranges
 			 */
-			throw new CKEditorError( 'model-selection-setFocus-no-ranges: Cannot set selection focus if there are no ranges in selection.' );
+			throw new CKEditorError(
+				'model-selection-setFocus-no-ranges: Cannot set selection focus if there are no ranges in selection.'
+			);
 		}
 
 		const newFocus = Position.createAt( itemOrPosition, offset );
@@ -537,7 +539,7 @@ export default class Selection {
 			// Create a set from keys of old and new attributes.
 			const changed = new Set( Array.from( attrs.keys() ).concat( Array.from( this._attrs.keys() ) ) );
 
-			for ( let [ key, value ] of attrs ) {
+			for ( const [ key, value ] of attrs ) {
 				// If the attribute remains unchanged, remove it from changed set.
 				if ( this._attrs.get( key ) === value ) {
 					changed.delete( key );
@@ -733,7 +735,7 @@ function isUnvisitedBlockContainer( element, visited ) {
 // Marks all ancestors as already visited to not include any of them later on.
 function getParentBlock( position, visited ) {
 	const ancestors = position.parent.getAncestors( { parentFirst: true, includeNode: true } );
-	const block = ancestors.find( ( element ) => isUnvisitedBlockContainer( element, visited ) );
+	const block = ancestors.find( element => isUnvisitedBlockContainer( element, visited ) );
 
 	// Mark all ancestors of this position's parent, because find() might've stopped early and
 	// the found block may be a child of another block.

+ 1 - 1
packages/ckeditor5-engine/src/model/text.js

@@ -65,7 +65,7 @@ export default class Text extends Node {
 	 * @returns {Object} `Text` instance converted to plain object.
 	 */
 	toJSON() {
-		let json = super.toJSON();
+		const json = super.toJSON();
 
 		json.data = this.data;
 

+ 1 - 0
packages/ckeditor5-engine/src/model/textproxy.js

@@ -75,6 +75,7 @@ export default class TextProxy {
 			 */
 			throw new CKEditorError( 'model-textproxy-wrong-length: Given length value is incorrect.' );
 		}
+
 		/**
 		 * Text data represented by this text proxy.
 		 *

+ 9 - 11
packages/ckeditor5-engine/src/model/treewalker.js

@@ -232,7 +232,7 @@ export default class TreeWalker {
 
 			return formatReturnValue( 'elementStart', node, previousPosition, position, 1 );
 		} else if ( node instanceof Text ) {
-			let charactersCount, offsetInTextNode;
+			let charactersCount;
 
 			if ( this.singleCharacters ) {
 				charactersCount = 1;
@@ -246,8 +246,7 @@ export default class TreeWalker {
 				charactersCount = offset - position.offset;
 			}
 
-			offsetInTextNode = position.offset - node.startOffset;
-
+			const offsetInTextNode = position.offset - node.startOffset;
 			const item = new TextProxy( node, offsetInTextNode, charactersCount );
 
 			position.offset += charactersCount;
@@ -314,7 +313,7 @@ export default class TreeWalker {
 				return formatReturnValue( 'elementStart', node, previousPosition, position, 1 );
 			}
 		} else if ( node instanceof Text ) {
-			let charactersCount, offsetInTextNode;
+			let charactersCount;
 
 			if ( this.singleCharacters ) {
 				charactersCount = 1;
@@ -328,8 +327,7 @@ export default class TreeWalker {
 				charactersCount = position.offset - offset;
 			}
 
-			offsetInTextNode = position.offset - node.startOffset;
-
+			const offsetInTextNode = position.offset - node.startOffset;
 			const item = new TextProxy( node, offsetInTextNode - charactersCount, charactersCount );
 
 			position.offset -= charactersCount;
@@ -351,11 +349,11 @@ function formatReturnValue( type, item, previousPosition, nextPosition, length )
 	return {
 		done: false,
 		value: {
-			type: type,
-			item: item,
-			previousPosition: previousPosition,
-			nextPosition: nextPosition,
-			length: length
+			type,
+			item,
+			previousPosition,
+			nextPosition,
+			length
 		}
 	};
 }

+ 4 - 6
packages/ckeditor5-engine/src/model/writer.js

@@ -114,7 +114,6 @@ export function remove( range ) {
  * @returns {module:engine/model/range~Range} Range containing moved nodes.
  */
 export function move( sourceRange, targetPosition ) {
-	/* jshint validthis:true */
 	if ( !sourceRange.isFlat ) {
 		/**
 		 * Trying to move a range that starts and ends in different element.
@@ -147,11 +146,11 @@ export function setAttribute( range, key, value ) {
 	_splitNodeAtPosition( range.end );
 
 	// Iterate over all items in the range.
-	for ( let item of range.getItems() ) {
+	for ( const item of range.getItems() ) {
 		// Iterator will return `TextProxy` instances but we know that those text proxies will
 		// always represent full text nodes (this is guaranteed thanks to splitting we did before).
 		// So, we can operate on those text proxies' text nodes.
-		let node = item.is( 'textProxy' ) ? item.textNode : item;
+		const node = item.is( 'textProxy' ) ? item.textNode : item;
 
 		if ( value !== null ) {
 			node.setAttribute( key, value );
@@ -174,7 +173,6 @@ export function setAttribute( range, key, value ) {
  * @param {String} key Key of attribute to remove.
  */
 export function removeAttribute( range, key ) {
-	/* jshint validthis:true */
 	this.setAttribute( range, key, null );
 }
 
@@ -199,7 +197,7 @@ export function normalizeNodes( nodes ) {
 		} else if ( nodes[ i ] instanceof TextProxy ) {
 			normalized.push( new Text( nodes[ i ].data, nodes[ i ].getAttributes() ) );
 		} else if ( nodes[ i ] instanceof DocumentFragment || nodes[ i ] instanceof NodeList ) {
-			for ( let child of nodes[ i ] ) {
+			for ( const child of nodes[ i ] ) {
 				normalized.push( child );
 			}
 		} else if ( nodes[ i ] instanceof Node ) {
@@ -289,7 +287,7 @@ function _haveSameAttributes( nodeA, nodeB ) {
 	const iteratorA = nodeA.getAttributes();
 	const iteratorB = nodeB.getAttributes();
 
-	for ( let attr of iteratorA ) {
+	for ( const attr of iteratorA ) {
 		if ( attr[ 1 ] !== nodeB.getAttribute( attr[ 0 ] ) ) {
 			return false;
 		}

+ 0 - 2
packages/ckeditor5-engine/src/view/attributeelement.js

@@ -100,8 +100,6 @@ AttributeElement.DEFAULT_PRIORITY = DEFAULT_PRIORITY;
 //
 // @returns {Number|null} Block filler offset or `null` if block filler is not needed.
 function getFillerOffset() {
-	/*jshint validthis:true */
-
 	// <b>foo</b> does not need filler.
 	if ( this.childCount ) {
 		return null;

+ 0 - 1
packages/ckeditor5-engine/src/view/containerelement.js

@@ -78,6 +78,5 @@ export default class ContainerElement extends Element {
 //
 // @returns {Number|null} Block filler offset or `null` if block filler is not needed.
 function getFillerOffset() {
-	/*jshint validthis:true */
 	return this.childCount === 0 ? 0 : null;
 }

+ 9 - 7
packages/ckeditor5-engine/src/view/document.js

@@ -63,7 +63,8 @@ export default class Document {
 
 		/**
 		 * Instance of the {@link module:engine/view/domconverter~DomConverter domConverter} use by
-		 * {@link module:engine/view/document~Document#renderer renderer} and {@link module:engine/view/observer/observer~Observer observers}.
+		 * {@link module:engine/view/document~Document#renderer renderer}
+		 * and {@link module:engine/view/observer/observer~Observer observers}.
 		 *
 		 * @readonly
 		 * @member {module:engine/view/domconverter~DomConverter} module:engine/view/document~Document#domConverter
@@ -149,7 +150,7 @@ export default class Document {
 
 		this._observers.set( Observer, observer );
 
-		for ( let [ name, domElement ] of this.domRoots ) {
+		for ( const [ name, domElement ] of this.domRoots ) {
 			observer.observe( domElement, name );
 		}
 
@@ -182,7 +183,8 @@ export default class Document {
 	 *		document.createRoot( 'body' );
 	 *		document.attachDomRoot( document.querySelector( 'body#editor' ) );
 	 *
-	 * In both cases, {@link module:engine/view/rooteditableelement~RootEditableElement#rootName element name} is always transformed to lower
+	 * In both cases, {@link module:engine/view/rooteditableelement~RootEditableElement#rootName element name} is always
+	 * transformed to lower
 	 * case.
 	 *
 	 * @param {Element|String} domRoot DOM root element or the tag name of view root element if the DOM element will be
@@ -231,7 +233,7 @@ export default class Document {
 		this.renderer.markToSync( 'children', viewRoot );
 		this.renderer.domDocuments.add( domRoot.ownerDocument );
 
-		for ( let observer of this._observers.values() ) {
+		for ( const observer of this._observers.values() ) {
 			observer.observe( domRoot, name );
 		}
 	}
@@ -295,7 +297,7 @@ export default class Document {
 	 * Disables all added observers.
 	 */
 	disableObservers() {
-		for ( let observer of this._observers.values() ) {
+		for ( const observer of this._observers.values() ) {
 			observer.disable();
 		}
 	}
@@ -304,7 +306,7 @@ export default class Document {
 	 * Enables all added observers.
 	 */
 	enableObservers() {
-		for ( let observer of this._observers.values() ) {
+		for ( const observer of this._observers.values() ) {
 			observer.enable();
 		}
 	}
@@ -313,7 +315,7 @@ export default class Document {
 	 * Destroys all observers created by view `Document`.
 	 */
 	destroy() {
-		for ( let observer of this._observers.values() ) {
+		for ( const observer of this._observers.values() ) {
 			observer.destroy();
 		}
 	}

+ 5 - 2
packages/ckeditor5-engine/src/view/documentfragment.js

@@ -149,7 +149,7 @@ export default class DocumentFragment {
 
 		nodes = normalize( nodes );
 
-		for ( let node of nodes ) {
+		for ( const node of nodes ) {
 			node.parent = this;
 
 			this._children.splice( index, 0, node );
@@ -207,5 +207,8 @@ function normalize( nodes ) {
 	}
 
 	// Array.from to enable .map() on non-arrays.
-	return Array.from( nodes ).map( ( node ) => typeof node == 'string' ? new Text( node ) : node );
+	return Array.from( nodes )
+		.map( node => {
+			return typeof node == 'string' ? new Text( node ) : node;
+		} );
 }

+ 28 - 23
packages/ckeditor5-engine/src/view/domconverter.js

@@ -101,7 +101,8 @@ export default class DomConverter {
 
 	/**
 	 * Binds given DOM element that represents fake selection to {@link module:engine/view/selection~Selection view selection}.
-	 * View selection copy is stored and can be retrieved by {@link module:engine/view/domconverter~DomConverter#fakeSelectionToView} method.
+	 * View selection copy is stored and can be retrieved by {@link module:engine/view/domconverter~DomConverter#fakeSelectionToView}
+	 * method.
 	 *
 	 * @param {HTMLElement} domElement
 	 * @param {module:engine/view/selection~Selection} viewSelection
@@ -111,8 +112,8 @@ export default class DomConverter {
 	}
 
 	/**
-	 * Returns {@link module:engine/view/selection~Selection view selection} instance corresponding to given DOM element that represents fake
-	 * selection. Returns `undefined` if binding to given DOM element does not exists.
+	 * Returns {@link module:engine/view/selection~Selection view selection} instance corresponding to given DOM element that represents
+	 * fake selection. Returns `undefined` if binding to given DOM element does not exists.
 	 *
 	 * @param {HTMLElement} domElement
 	 * @returns {module:engine/view/selection~Selection|undefined}
@@ -148,7 +149,7 @@ export default class DomConverter {
 			this._viewToDomMapping.delete( viewElement );
 
 			// Use Array.from because of MS Edge (#923).
-			for ( let child of Array.from( domElement.childNodes ) ) {
+			for ( const child of Array.from( domElement.childNodes ) ) {
 				this.unbindDomElement( child );
 			}
 		}
@@ -207,13 +208,13 @@ export default class DomConverter {
 				}
 
 				// Copy element's attributes.
-				for ( let key of viewNode.getAttributeKeys() ) {
+				for ( const key of viewNode.getAttributeKeys() ) {
 					domElement.setAttribute( key, viewNode.getAttribute( key ) );
 				}
 			}
 
 			if ( options.withChildren || options.withChildren === undefined ) {
-				for ( let child of this.viewChildrenToDom( viewNode, domDocument, options ) ) {
+				for ( const child of this.viewChildrenToDom( viewNode, domDocument, options ) ) {
 					domElement.appendChild( child );
 				}
 			}
@@ -232,10 +233,10 @@ export default class DomConverter {
 	 * @returns {Iterable.<Node>} DOM nodes.
 	 */
 	*viewChildrenToDom( viewElement, domDocument, options = {} ) {
-		let fillerPositionOffset = viewElement.getFillerOffset && viewElement.getFillerOffset();
+		const fillerPositionOffset = viewElement.getFillerOffset && viewElement.getFillerOffset();
 		let offset = 0;
 
-		for ( let childView of viewElement.getChildren() ) {
+		for ( const childView of viewElement.getChildren() ) {
 			if ( fillerPositionOffset === offset ) {
 				yield this.blockFiller( domDocument );
 			}
@@ -296,7 +297,7 @@ export default class DomConverter {
 				offset += INLINE_FILLER_LENGTH;
 			}
 
-			return { parent: domParent, offset: offset };
+			return { parent: domParent, offset };
 		} else {
 			// viewParent is instance of ViewElement.
 			let domParent, domBefore, domAfter;
@@ -330,7 +331,7 @@ export default class DomConverter {
 
 			const offset = domBefore ? indexOf( domBefore ) + 1 : 0;
 
-			return { parent: domParent, offset: offset };
+			return { parent: domParent, offset };
 		}
 	}
 
@@ -344,12 +345,11 @@ export default class DomConverter {
 	 * @param {Boolean} [options.bind=false] Determines whether new elements will be bound.
 	 * @param {Boolean} [options.withChildren=true] If `true`, node's and document fragment's children will be converted too.
 	 * @param {Boolean} [options.keepOriginalCase=false] If `false`, node's tag name will be converter to lower case.
-	 * @returns {module:engine/view/node~Node|module:engine/view/documentfragment~DocumentFragment|null} Converted node or document fragment or
-	 * `null`
-	 * if DOM node is a {@link module:engine/view/filler filler} or the given node is an empty text node.
+	 * @returns {module:engine/view/node~Node|module:engine/view/documentfragment~DocumentFragment|null} Converted node or document fragment
+	 * or `null` if DOM node is a {@link module:engine/view/filler filler} or the given node is an empty text node.
 	 */
 	domToView( domNode, options = {} ) {
-		if ( isBlockFiller( domNode, this.blockFiller )  ) {
+		if ( isBlockFiller( domNode, this.blockFiller ) ) {
 			return null;
 		}
 
@@ -395,7 +395,7 @@ export default class DomConverter {
 			}
 
 			if ( options.withChildren || options.withChildren === undefined ) {
-				for ( let child of this.domChildrenToView( domNode, options ) ) {
+				for ( const child of this.domChildrenToView( domNode, options ) ) {
 					viewElement.appendChildren( child );
 				}
 			}
@@ -543,7 +543,8 @@ export default class DomConverter {
 	 * Gets corresponding view item. This function use
 	 * {@link module:engine/view/domconverter~DomConverter#getCorrespondingViewElement getCorrespondingViewElement}
 	 * for elements, {@link  module:engine/view/domconverter~DomConverter#getCorrespondingViewText getCorrespondingViewText} for text
-	 * nodes and {@link module:engine/view/domconverter~DomConverter#getCorrespondingViewDocumentFragment getCorrespondingViewDocumentFragment}
+	 * nodes and
+	 * {@link module:engine/view/domconverter~DomConverter#getCorrespondingViewDocumentFragment getCorrespondingViewDocumentFragment}
 	 * for document fragments.
 	 *
 	 * Note that for the block or inline {@link module:engine/view/filler filler} this method returns `null`.
@@ -826,11 +827,11 @@ export default class DomConverter {
 	 * @returns {String} Processed text data.
 	 */
 	_processDataFromViewText( node ) {
-		let data = node.data;
+		const data = node.data;
 
 		// If any of node ancestors has a name which is in `preElements` array, then currently processed
 		// view text node is (will be) in preformatted element. We should not change whitespaces then.
-		if ( node.getAncestors().some( ( parent ) => this.preElements.includes( parent.name ) ) )  {
+		if ( node.getAncestors().some( parent => this.preElements.includes( parent.name ) ) ) {
 			return data;
 		}
 
@@ -858,7 +859,7 @@ export default class DomConverter {
 		// `_  x   x`	-> `_ _x _ x`
 		// `_  x    x`	-> `_ _x _ _x`
 		// `_   x    x` -> `_ _ x _ _x`
-		textStart = textStart.replace( /  /g, ' \u00A0' );
+		textStart = textStart.replace( / {2}/g, ' \u00A0' );
 
 		// Process `textEnd` only if there is anything to process.
 		if ( textEnd.length > 0 ) {
@@ -896,7 +897,7 @@ export default class DomConverter {
 				textEnd = '\u00A0' + textEnd.substr( 0, textEnd.length - 1 );
 			}
 
-			textEnd = textEnd.replace( /  /g, ' \u00A0' );
+			textEnd = textEnd.replace( / {2}/g, ' \u00A0' );
 		}
 
 		return textStart + textEnd;
@@ -921,7 +922,7 @@ export default class DomConverter {
 			direction: getNext ? 'forward' : 'backward'
 		} );
 
-		for ( let value of treeWalker ) {
+		for ( const value of treeWalker ) {
 			if ( value.item.is( 'containerElement' ) ) {
 				// ViewContainerElement is found on a way to next ViewText node, so given `node` was first/last
 				// text node in it's container element.
@@ -1027,7 +1028,11 @@ export default class DomConverter {
 			// If there is common ancestor between the text node and next/prev text node,
 			// and there are no block elements on a way from the text node to that ancestor,
 			// and there are no block elements on a way from next/prev text node to that ancestor...
-			if ( lca && !_hasDomParentOfType( node, this.blockElements, lca ) && !_hasDomParentOfType( touchingNode, this.blockElements, lca ) ) {
+			if (
+				lca &&
+				!_hasDomParentOfType( node, this.blockElements, lca ) &&
+				!_hasDomParentOfType( touchingNode, this.blockElements, lca )
+			) {
 				// Then they are in the same container element.
 				return touchingNode;
 			}
@@ -1051,5 +1056,5 @@ function _hasDomParentOfType( node, types, boundaryParent ) {
 		parents = parents.slice( parents.indexOf( boundaryParent ) + 1 );
 	}
 
-	return parents.some( ( parent ) => parent.tagName && types.includes( parent.tagName.toLowerCase() ) );
+	return parents.some( parent => parent.tagName && types.includes( parent.tagName.toLowerCase() ) );
 }

+ 1 - 1
packages/ckeditor5-engine/src/view/editableelement.js

@@ -77,7 +77,7 @@ export default class EditableElement extends ContainerElement {
 		this.bind( 'isFocused' ).to(
 			document,
 			'isFocused',
-			( isFocused ) => isFocused && document.selection.editableElement == this
+			isFocused => isFocused && document.selection.editableElement == this
 		);
 
 		// Update focus state before each rendering. Rendering should not change neither the selection nor the value of

+ 19 - 15
packages/ckeditor5-engine/src/view/element.js

@@ -164,7 +164,7 @@ export default class Element extends Node {
 		const childrenClone = [];
 
 		if ( deep ) {
-			for ( let child of this.getChildren() ) {
+			for ( const child of this.getChildren() ) {
 				childrenClone.push( child.clone( deep ) );
 			}
 		}
@@ -187,8 +187,8 @@ export default class Element extends Node {
 	}
 
 	/**
-	 * {@link module:engine/view/element~Element#insertChildren Insert} a child node or a list of child nodes at the end of this node and sets
-	 * the parent of these nodes to this element.
+	 * {@link module:engine/view/element~Element#insertChildren Insert} a child node or a list of child nodes at the end of this node
+	 * and sets the parent of these nodes to this element.
 	 *
 	 * @fires module:engine/view/node~Node#change
 	 * @param {module:engine/view/node~Node|Iterable.<module:engine/view/node~Node>} nodes Node or the list of nodes to be inserted.
@@ -243,7 +243,7 @@ export default class Element extends Node {
 
 		// This is not an optimal solution because of https://github.com/ckeditor/ckeditor5-engine/issues/454.
 		// It can be simplified to `yield* this._attrs.keys();`.
-		for ( let key of this._attrs.keys() ) {
+		for ( const key of this._attrs.keys() ) {
 			yield key;
 		}
 	}
@@ -287,7 +287,7 @@ export default class Element extends Node {
 			if ( this._styles.size > 0 ) {
 				let styleString = '';
 
-				for ( let [ property, value ] of this._styles ) {
+				for ( const [ property, value ] of this._styles ) {
 					styleString += `${ property }:${ value };`;
 				}
 
@@ -308,7 +308,7 @@ export default class Element extends Node {
 	 */
 	hasAttribute( key ) {
 		if ( key == 'class' ) {
-			return this._classes.size  > 0;
+			return this._classes.size > 0;
 		}
 
 		if ( key == 'style' ) {
@@ -352,7 +352,7 @@ export default class Element extends Node {
 
 		nodes = normalize( nodes );
 
-		for ( let node of nodes ) {
+		for ( const node of nodes ) {
 			node.parent = this;
 
 			this._children.splice( index, 0, node );
@@ -447,21 +447,21 @@ export default class Element extends Node {
 		}
 
 		// Check if attributes are the same.
-		for ( let [ key, value ] of this._attrs ) {
+		for ( const [ key, value ] of this._attrs ) {
 			if ( !otherElement._attrs.has( key ) || otherElement._attrs.get( key ) !== value ) {
 				return false;
 			}
 		}
 
 		// Check if classes are the same.
-		for ( let className of this._classes ) {
+		for ( const className of this._classes ) {
 			if ( !otherElement._classes.has( className ) ) {
 				return false;
 			}
 		}
 
 		// Check if styles are the same.
-		for ( let [ property, value ] of this._styles ) {
+		for ( const [ property, value ] of this._styles ) {
 			if ( !otherElement._styles.has( property ) || otherElement._styles.get( property ) !== value ) {
 				return false;
 			}
@@ -508,7 +508,7 @@ export default class Element extends Node {
 	 * @param {...String} className
 	 */
 	hasClass( ...className ) {
-		for ( let name of className ) {
+		for ( const name of className ) {
 			if ( !this._classes.has( name ) ) {
 				return false;
 			}
@@ -545,7 +545,7 @@ export default class Element extends Node {
 		if ( isPlainObject( property ) ) {
 			const keys = Object.keys( property );
 
-			for ( let key of keys ) {
+			for ( const key of keys ) {
 				this._styles.set( key, property[ key ] );
 			}
 		} else {
@@ -583,7 +583,7 @@ export default class Element extends Node {
 	 * @param {...String} property
 	 */
 	hasStyle( ...property ) {
-		for ( let name of property ) {
+		for ( const name of property ) {
 			if ( !this._styles.has( name ) ) {
 				return false;
 			}
@@ -730,10 +730,11 @@ function parseInlineStyles( stylesMap, stylesString ) {
 
 					break;
 
+				// eslint-disable-next-line no-case-declarations
 				case ';':
 					// Property value just ended.
 					// Use previously stored property value start to obtain property value.
-					let propertyValue = stylesString.substr( propertyValueStart, i - propertyValueStart );
+					const propertyValue = stylesString.substr( propertyValueStart, i - propertyValueStart );
 
 					if ( propertyName ) {
 						// Save parsed part.
@@ -780,5 +781,8 @@ function normalize( nodes ) {
 	}
 
 	// Array.from to enable .map() on non-arrays.
-	return Array.from( nodes ).map( ( node ) => typeof node == 'string' ? new Text( node ) : node );
+	return Array.from( nodes )
+		.map( node => {
+			return typeof node == 'string' ? new Text( node ) : node;
+		} );
 }

+ 2 - 2
packages/ckeditor5-engine/src/view/emptyelement.js

@@ -49,8 +49,8 @@ export default class EmptyElement extends Element {
 
 	/**
 	 * Overrides {@link module:engine/view/element~Element#insertChildren} method.
-	 * Throws {@link module:utils/ckeditorerror~CKEditorError CKEditorError} `view-emptyelement-cannot-add` to prevent adding any child nodes
-	 * to EmptyElement.
+	 * Throws {@link module:utils/ckeditorerror~CKEditorError CKEditorError} `view-emptyelement-cannot-add` to prevent
+	 * adding any child nodes to EmptyElement.
 	 */
 	insertChildren( index, nodes ) {
 		if ( nodes && ( nodes instanceof Node || Array.from( nodes ).length > 0 ) ) {

+ 2 - 2
packages/ckeditor5-engine/src/view/filler.js

@@ -42,7 +42,7 @@ import { keyCodes } from '@ckeditor/ckeditor5-utils/src/keyboard';
  * @see module:engine/view/filler~NBSP_FILLER
  * @function
  */
-export const BR_FILLER = ( domDocument ) => {
+export const BR_FILLER = domDocument => {
 	const fillerBr = domDocument.createElement( 'br' );
 	fillerBr.dataset.ckeFiller = true;
 
@@ -56,7 +56,7 @@ export const BR_FILLER = ( domDocument ) => {
  * @see module:engine/view/filler~BR_FILLER
  * @function
  */
-export const NBSP_FILLER = ( domDocument ) => domDocument.createTextNode( '\u00A0' );
+export const NBSP_FILLER = domDocument => domDocument.createTextNode( '\u00A0' );
 
 /**
  * Length of the {@link module:engine/view/filler~INLINE_FILLER INLINE_FILLER}.

+ 13 - 13
packages/ckeditor5-engine/src/view/matcher.js

@@ -149,15 +149,15 @@ export default class Matcher {
 	 * @returns {Array} [result.match.style] Array with matched style names.
 	 */
 	match( ...element ) {
-		for ( let singleElement of element ) {
-			for ( let pattern of this._patterns ) {
+		for ( const singleElement of element ) {
+			for ( const pattern of this._patterns ) {
 				const match = isElementMatching( singleElement, pattern );
 
 				if ( match ) {
 					return {
 						element: singleElement,
-						pattern: pattern,
-						match: match
+						pattern,
+						match
 					};
 				}
 			}
@@ -179,15 +179,15 @@ export default class Matcher {
 	matchAll( ...element ) {
 		const results = [];
 
-		for ( let singleElement of element ) {
-			for ( let pattern of this._patterns ) {
+		for ( const singleElement of element ) {
+			for ( const pattern of this._patterns ) {
 				const match = isElementMatching( singleElement, pattern );
 
 				if ( match ) {
 					results.push( {
 						element: singleElement,
-						pattern: pattern,
-						match: match
+						pattern,
+						match
 					} );
 				}
 			}
@@ -290,7 +290,7 @@ function matchName( pattern, name ) {
 function matchAttributes( patterns, element ) {
 	const match = [];
 
-	for ( let name in patterns ) {
+	for ( const name in patterns ) {
 		const pattern = patterns[ name ];
 
 		if ( element.hasAttribute( name ) ) {
@@ -323,11 +323,11 @@ function matchAttributes( patterns, element ) {
 function matchClasses( patterns, element ) {
 	const match = [];
 
-	for ( let pattern of patterns ) {
+	for ( const pattern of patterns ) {
 		if ( pattern instanceof RegExp ) {
 			const classes = element.getClassNames();
 
-			for ( let name of classes ) {
+			for ( const name of classes ) {
 				if ( pattern.test( name ) ) {
 					match.push( name );
 				}
@@ -355,7 +355,7 @@ function matchClasses( patterns, element ) {
 function matchStyles( patterns, element ) {
 	const match = [];
 
-	for ( let name in patterns ) {
+	for ( const name in patterns ) {
 		const pattern = patterns[ name ];
 
 		if ( element.hasStyle( name ) ) {
@@ -367,7 +367,7 @@ function matchStyles( patterns, element ) {
 				} else {
 					return null;
 				}
-			} else if ( style === pattern  ) {
+			} else if ( style === pattern ) {
 				match.push( name );
 			} else {
 				return null;

+ 1 - 1
packages/ckeditor5-engine/src/view/node.js

@@ -92,7 +92,7 @@ export default class Node {
 	 * @type {module:engine/view/node~Node|module:engine/view/documentfragment~DocumentFragment}
 	 */
 	get root() {
-		let root = this;
+		let root = this; // eslint-disable-line consistent-this
 
 		while ( root.parent ) {
 			root = root.parent;

+ 1 - 1
packages/ckeditor5-engine/src/view/observer/fakeselectionobserver.js

@@ -97,7 +97,7 @@ export default class FakeSelectionObserver extends Observer {
 
 		const data = {
 			oldSelection: selection,
-			newSelection: newSelection,
+			newSelection,
 			domSelection: null
 		};
 

+ 6 - 6
packages/ckeditor5-engine/src/view/observer/mutationobserver.js

@@ -102,7 +102,7 @@ export default class MutationObserver extends Observer {
 	enable() {
 		super.enable();
 
-		for ( let domElement of this._domElements ) {
+		for ( const domElement of this._domElements ) {
 			this._mutationObserver.observe( domElement, this._config );
 		}
 	}
@@ -139,13 +139,13 @@ export default class MutationObserver extends Observer {
 
 		const domConverter = this.domConverter;
 
-		// Use map and set for deduplication.
+		// Use map and set for deduplication.
 		const mutatedTexts = new Map();
 		const mutatedElements = new Set();
 
 		// Handle `childList` mutations first, so we will be able to check if the `characterData` mutation is in the
 		// element with changed structure anyway.
-		for ( let mutation of domMutations ) {
+		for ( const mutation of domMutations ) {
 			if ( mutation.type === 'childList' ) {
 				const element = domConverter.getCorrespondingViewElement( mutation.target );
 
@@ -156,7 +156,7 @@ export default class MutationObserver extends Observer {
 		}
 
 		// Handle `characterData` mutations later, when we have the full list of nodes which changed structure.
-		for ( let mutation of domMutations ) {
+		for ( const mutation of domMutations ) {
 			if ( mutation.type === 'characterData' ) {
 				const text = domConverter.getCorrespondingViewText( mutation.target );
 
@@ -185,12 +185,12 @@ export default class MutationObserver extends Observer {
 		// List of mutations we will fire.
 		const viewMutations = [];
 
-		for ( let mutatedText of mutatedTexts.values() ) {
+		for ( const mutatedText of mutatedTexts.values() ) {
 			this.renderer.markToSync( 'text', mutatedText.node );
 			viewMutations.push( mutatedText );
 		}
 
-		for ( let viewElement of mutatedElements ) {
+		for ( const viewElement of mutatedElements ) {
 			const domElement = domConverter.getCorrespondingDomElement( viewElement );
 			const viewChildren = viewElement.getChildren();
 			const newViewChildren = domConverter.domChildrenToView( domElement );

+ 5 - 3
packages/ckeditor5-engine/src/view/observer/selectionobserver.js

@@ -32,8 +32,8 @@ export default class SelectionObserver extends Observer {
 
 		/**
 		 * Instance of the mutation observer. Selection observer calls
-		 * {@link module:engine/view/observer/mutationobserver~MutationObserver#flush} to ensure that the mutations will be handled before the
-		 * {@link module:engine/view/document~Document#event:selectionChange} event is fired.
+		 * {@link module:engine/view/observer/mutationobserver~MutationObserver#flush} to ensure that the mutations will be handled
+		 * before the {@link module:engine/view/document~Document#event:selectionChange} event is fired.
 		 *
 		 * @readonly
 		 * @member {module:engine/view/observer/mutationobserver~MutationObserver}
@@ -57,12 +57,14 @@ export default class SelectionObserver extends Observer {
 		 */
 		this.selection = document.selection;
 
+		/* eslint-disable max-len */
 		/**
 		 * Reference to the {@link module:engine/view/document~Document#domConverter}.
 		 *
 		 * @readonly
 		 * @member {module:engine/view/domconverter~DomConverter} module:engine/view/observer/selectionobserver~SelectionObserver#domConverter
 		 */
+		/* eslint-enable max-len */
 		this.domConverter = document.domConverter;
 
 		/**
@@ -167,7 +169,7 @@ export default class SelectionObserver extends Observer {
 		const data = {
 			oldSelection: this.selection,
 			newSelection: newViewSelection,
-			domSelection: domSelection
+			domSelection
 		};
 
 		// Should be fired only when selection change was the only document change.

+ 1 - 1
packages/ckeditor5-engine/src/view/placeholder.js

@@ -82,7 +82,7 @@ export function detachPlaceholder( element ) {
 function updateAllPlaceholders( document ) {
 	const placeholders = documentPlaceholders.get( document );
 
-	for ( let [ element, checkFunction ] of placeholders ) {
+	for ( const [ element, checkFunction ] of placeholders ) {
 		updateSinglePlaceholder( element, checkFunction );
 	}
 }

+ 3 - 3
packages/ckeditor5-engine/src/view/position.js

@@ -129,9 +129,9 @@ export default class Position {
 	 * @returns {module:engine/view/position~Position} Shifted position.
 	 */
 	getShiftedBy( shift ) {
-		let shifted = Position.createFromPosition( this );
+		const shifted = Position.createFromPosition( this );
 
-		let offset = shifted.offset + shift;
+		const offset = shifted.offset + shift;
 		shifted.offset = offset < 0 ? 0 : offset;
 
 		return shifted;
@@ -300,7 +300,7 @@ export default class Position {
 		if ( itemOrPosition instanceof Position ) {
 			return this.createFromPosition( itemOrPosition );
 		} else {
-			let node = itemOrPosition;
+			const node = itemOrPosition;
 
 			if ( offset == 'end' ) {
 				offset = node.is( 'text' ) ? node.data.length : node.childCount;

+ 6 - 5
packages/ckeditor5-engine/src/view/range.js

@@ -132,8 +132,8 @@ export default class Range {
 	getTrimmed() {
 		let start = this.start.getLastMatchingPosition( enlargeShrinkSkip );
 		let end = this.end.getLastMatchingPosition( enlargeShrinkSkip, { direction: 'backward' } );
-		let nodeAfterStart = start.nodeAfter;
-		let nodeBeforeEnd = end.nodeBefore;
+		const nodeAfterStart = start.nodeAfter;
+		const nodeBeforeEnd = end.nodeBefore;
 
 		// Because TreeWalker prefers positions next to text node, we need to move them manually into these text nodes.
 		if ( nodeAfterStart && nodeAfterStart.is( 'text' ) ) {
@@ -161,7 +161,8 @@ export default class Range {
 	 * Checks whether this range contains given {@link module:engine/view/position~Position position}.
 	 *
 	 * @param {module:engine/view/position~Position} position Position to check.
-	 * @returns {Boolean} `true` if given {@link module:engine/view/position~Position position} is contained in this range, `false` otherwise.
+	 * @returns {Boolean} `true` if given {@link module:engine/view/position~Position position} is contained in this range,
+	 * `false` otherwise.
 	 */
 	containsPosition( position ) {
 		return position.isAfter( this.start ) && position.isBefore( this.end );
@@ -313,7 +314,7 @@ export default class Range {
 
 		const treeWalker = new TreeWalker( options );
 
-		for ( let value of treeWalker ) {
+		for ( const value of treeWalker ) {
 			yield value.item;
 		}
 	}
@@ -338,7 +339,7 @@ export default class Range {
 
 		yield treeWalker.position;
 
-		for ( let value of treeWalker ) {
+		for ( const value of treeWalker ) {
 			yield value.nextPosition;
 		}
 	}

+ 13 - 10
packages/ckeditor5-engine/src/view/renderer.js

@@ -198,17 +198,17 @@ export default class Renderer {
 			this.markedChildren.add( inlineFillerPosition.parent );
 		}
 
-		for ( let node of this.markedTexts ) {
+		for ( const node of this.markedTexts ) {
 			if ( !this.markedChildren.has( node.parent ) && this.domConverter.getCorrespondingDom( node.parent ) ) {
 				this._updateText( node, { inlineFillerPosition } );
 			}
 		}
 
-		for ( let element of this.markedAttributes ) {
+		for ( const element of this.markedAttributes ) {
 			this._updateAttrs( element );
 		}
 
-		for ( let element of this.markedChildren ) {
+		for ( const element of this.markedChildren ) {
 			this._updateChildren( element, { inlineFillerPosition } );
 		}
 
@@ -413,12 +413,12 @@ export default class Renderer {
 		const viewAttrKeys = viewElement.getAttributeKeys();
 
 		// Add or overwrite attributes.
-		for ( let key of viewAttrKeys ) {
+		for ( const key of viewAttrKeys ) {
 			domElement.setAttribute( key, viewElement.getAttribute( key ) );
 		}
 
 		// Remove from DOM attributes which do not exists in the view.
-		for ( let key of domAttrKeys ) {
+		for ( const key of domAttrKeys ) {
 			if ( !viewElement.hasAttribute( key ) ) {
 				domElement.removeAttribute( key );
 			}
@@ -465,7 +465,7 @@ export default class Renderer {
 
 		let i = 0;
 
-		for ( let action of actions ) {
+		for ( const action of actions ) {
 			if ( action === 'insert' ) {
 				insertAt( domElement, i, expectedDomChildren[ i ] );
 				i++;
@@ -587,7 +587,10 @@ export default class Renderer {
 				currentSelection: this.selection
 			};
 
-			log.warn( 'renderer-skipped-selection-rendering: The selection was not rendered due to its similarity to the current one.', data );
+			log.warn(
+				'renderer-skipped-selection-rendering: The selection was not rendered due to its similarity to the current one.',
+				data
+			);
 
 			return;
 		}
@@ -610,7 +613,7 @@ export default class Renderer {
 	 * @private
 	 */
 	_removeDomSelection() {
-		for ( let doc of this.domDocuments ) {
+		for ( const doc of this.domDocuments ) {
 			const domSelection = doc.getSelection();
 
 			if ( domSelection.rangeCount ) {
@@ -676,9 +679,9 @@ function trimSelection( selection ) {
 	const newSelection = Selection.createFromSelection( selection );
 	const ranges = newSelection.getRanges();
 
-	let trimmedRanges = [];
+	const trimmedRanges = [];
 
-	for ( let range of ranges ) {
+	for ( const range of ranges ) {
 		trimmedRanges.push( range.getTrimmed() );
 	}
 

+ 7 - 7
packages/ckeditor5-engine/src/view/selection.js

@@ -224,7 +224,7 @@ export default class Selection {
 	 * @returns {Iterator.<module:engine/view/range~Range>}
 	 */
 	*getRanges() {
-		for ( let range of this._ranges ) {
+		for ( const range of this._ranges ) {
 			yield Range.createFromRange( range );
 		}
 	}
@@ -240,7 +240,7 @@ export default class Selection {
 	getFirstRange() {
 		let first = null;
 
-		for ( let range of this._ranges ) {
+		for ( const range of this._ranges ) {
 			if ( !first || range.start.isBefore( first.start ) ) {
 				first = range;
 			}
@@ -259,7 +259,7 @@ export default class Selection {
 	getLastRange() {
 		let last = null;
 
-		for ( let range of this._ranges ) {
+		for ( const range of this._ranges ) {
 			if ( !last || range.end.isAfter( last.end ) ) {
 				last = range;
 			}
@@ -320,10 +320,10 @@ export default class Selection {
 			return false;
 		}
 
-		for ( let thisRange of this._ranges ) {
+		for ( const thisRange of this._ranges ) {
 			let found = false;
 
-			for ( let otherRange of otherSelection._ranges ) {
+			for ( const otherRange of otherSelection._ranges ) {
 				if ( thisRange.isEqual( otherRange ) ) {
 					found = true;
 					break;
@@ -363,7 +363,7 @@ export default class Selection {
 	setRanges( newRanges, isLastBackward ) {
 		this._ranges = [];
 
-		for ( let range of newRanges ) {
+		for ( const range of newRanges ) {
 			if ( !( range instanceof Range ) ) {
 				throw new CKEditorError( 'view-selection-invalid-range: Invalid Range.' );
 			}
@@ -514,7 +514,7 @@ export default class Selection {
 	 * @param {module:engine/view/range~Range} range
 	 */
 	_pushRange( range ) {
-		for ( let storedRange of this._ranges ) {
+		for ( const storedRange of this._ranges ) {
 			if ( range.isIntersecting( storedRange ) ) {
 				/**
 				 * Trying to add a range that intersects with another range from selection.

+ 1 - 0
packages/ckeditor5-engine/src/view/textproxy.js

@@ -66,6 +66,7 @@ export default class TextProxy {
 			 */
 			throw new CKEditorError( 'view-textproxy-wrong-length: Given length value is incorrect.' );
 		}
+
 		/**
 		 * Text data represented by this text proxy.
 		 *

+ 5 - 5
packages/ckeditor5-engine/src/view/treewalker.js

@@ -436,11 +436,11 @@ export default class TreeWalker {
 		return {
 			done: false,
 			value: {
-				type: type,
-				item: item,
-				previousPosition: previousPosition,
-				nextPosition: nextPosition,
-				length: length
+				type,
+				item,
+				previousPosition,
+				nextPosition,
+				length
 			}
 		};
 	}

+ 16 - 16
packages/ckeditor5-engine/src/view/writer.js

@@ -283,7 +283,7 @@ export function breakViewRangePerContainer( range ) {
 
 	let start = range.start;
 
-	for ( let value of walker ) {
+	for ( const value of walker ) {
 		if ( value.item.is( 'containerElement' ) ) {
 			if ( !start.isEqual( value.previousPosition ) ) {
 				ranges.push( new Range( start, value.previousPosition ) );
@@ -427,7 +427,7 @@ export function clear( range, element ) {
 		// When range starts inside Text or TextProxy element.
 		} else if ( !current.nextPosition.isAfter( range.start ) && ( item.is( 'text' ) || item.is( 'textProxy' ) ) ) {
 			// We need to check if parent of this text matches to given element.
-			const parentElement = item.getAncestors().find( ( ancestor ) => {
+			const parentElement = item.getAncestors().find( ancestor => {
 				return ancestor.is( 'element' ) && element.isSimilar( ancestor );
 			} );
 
@@ -532,7 +532,7 @@ export function wrap( range, attribute ) {
 		const parent = range.start.parent.parent;
 		const index = range.start.parent.index;
 
-		return Range.createFromParentsAndOffsets( parent, index, parent, index + 1 ) ;
+		return Range.createFromParentsAndOffsets( parent, index, parent, index + 1 );
 	}
 
 	// Break attributes at range start and end.
@@ -863,7 +863,7 @@ function unwrapChildren( parent, startOffset, endOffset, attribute ) {
 		const child = parent.getChild( i );
 
 		// If attributes are the similar, then unwrap.
-		if (  child.isSimilar( attribute ) ) {
+		if ( child.isSimilar( attribute ) ) {
 			const unwrapped = child.getChildren();
 			const count = child.childCount;
 
@@ -894,7 +894,7 @@ function unwrapChildren( parent, startOffset, endOffset, attribute ) {
 	// Merge at each unwrap.
 	let offsetChange = 0;
 
-	for ( let position of unwrapPositions ) {
+	for ( const position of unwrapPositions ) {
 		position.offset -= offsetChange;
 
 		// Do not merge with elements outside selected children.
@@ -955,7 +955,7 @@ function wrapChildren( parent, startOffset, endOffset, attribute ) {
 	// Merge at each wrap.
 	let offsetChange = 0;
 
-	for ( let position of wrapPositions ) {
+	for ( const position of wrapPositions ) {
 		position.offset -= offsetChange;
 
 		// Do not merge with elements outside selected children.
@@ -1060,7 +1060,7 @@ function wrapAttributeElement( wrapper, toWrap ) {
 	}
 
 	// Check if attributes can be merged.
-	for ( let key of wrapper.getAttributeKeys() ) {
+	for ( const key of wrapper.getAttributeKeys() ) {
 		// Classes and styles should be checked separately.
 		if ( key === 'class' || key === 'style' ) {
 			continue;
@@ -1073,14 +1073,14 @@ function wrapAttributeElement( wrapper, toWrap ) {
 	}
 
 	// Check if styles can be merged.
-	for ( let key of wrapper.getStyleNames() ) {
+	for ( const key of wrapper.getStyleNames() ) {
 		if ( toWrap.hasStyle( key ) && toWrap.getStyle( key ) !== wrapper.getStyle( key ) ) {
 			return false;
 		}
 	}
 
 	// Move all attributes/classes/styles from wrapper to wrapped AttributeElement.
-	for ( let key of wrapper.getAttributeKeys() ) {
+	for ( const key of wrapper.getAttributeKeys() ) {
 		// Classes and styles should be checked separately.
 		if ( key === 'class' || key === 'style' ) {
 			continue;
@@ -1092,13 +1092,13 @@ function wrapAttributeElement( wrapper, toWrap ) {
 		}
 	}
 
-	for ( let key of wrapper.getStyleNames() ) {
+	for ( const key of wrapper.getStyleNames() ) {
 		if ( !toWrap.hasStyle( key ) ) {
 			toWrap.setStyle( key, wrapper.getStyle( key ) );
 		}
 	}
 
-	for ( let key of wrapper.getClassNames() ) {
+	for ( const key of wrapper.getClassNames() ) {
 		if ( !toWrap.hasClass( key ) ) {
 			toWrap.addClass( key );
 		}
@@ -1120,7 +1120,7 @@ function unwrapAttributeElement( wrapper, toUnwrap ) {
 	}
 
 	// Check if AttributeElement has all wrapper attributes.
-	for ( let key of wrapper.getAttributeKeys() ) {
+	for ( const key of wrapper.getAttributeKeys() ) {
 		// Classes and styles should be checked separately.
 		if ( key === 'class' || key === 'style' ) {
 			continue;
@@ -1138,7 +1138,7 @@ function unwrapAttributeElement( wrapper, toUnwrap ) {
 	}
 
 	// Check if AttributeElement has all wrapper styles.
-	for ( let key of wrapper.getStyleNames() ) {
+	for ( const key of wrapper.getStyleNames() ) {
 		// If some styles are missing or different we cannot unwrap.
 		if ( !toUnwrap.hasStyle( key ) || toUnwrap.getStyle( key ) !== wrapper.getStyle( key ) ) {
 			return false;
@@ -1146,7 +1146,7 @@ function unwrapAttributeElement( wrapper, toUnwrap ) {
 	}
 
 	// Remove all wrapper's attributes from unwrapped element.
-	for ( let key of wrapper.getAttributeKeys() ) {
+	for ( const key of wrapper.getAttributeKeys() ) {
 		// Classes and styles should be checked separately.
 		if ( key === 'class' || key === 'style' ) {
 			continue;
@@ -1191,8 +1191,8 @@ function rangeSpansOnAllChildren( range ) {
 // @param Iterable.<module:engine/view/text~Text|module:engine/view/attributeelement~AttributeElement
 // |module:engine/view/containerelement~ContainerElement> nodes
 function validateNodesToInsert( nodes ) {
-	for ( let node of nodes ) {
-		if ( !validNodesToInsert.some( ( validNode => node instanceof validNode ) ) ) {
+	for ( const node of nodes ) {
+		if ( !validNodesToInsert.some( ( validNode => node instanceof validNode ) ) ) { // eslint-disable-line no-use-before-define
 			/**
 			 * Inserted nodes should be valid to insert. of {@link module:engine/view/attributeelement~AttributeElement AttributeElement},
 			 * {@link module:engine/view/containerelement~ContainerElement ContainerElement},

+ 0 - 22
packages/ckeditor5-engine/tests/.jshintrc

@@ -1,22 +0,0 @@
-{
-  "esnext": true,
-  "expr": true,
-  "immed": true,
-  "loopfunc": true,
-  "noarg": true,
-  "nonbsp": true,
-  "strict": "implied",
-  "undef": true,
-  "unused": true,
-  "varstmt": true,
-  "globals": {
-    "after": false,
-    "afterEach": false,
-    "before": false,
-    "beforeEach": false,
-    "describe": false,
-    "expect": false,
-    "it": false,
-    "sinon": false
-  }
-}

+ 4 - 4
packages/ckeditor5-engine/tests/controller/datacontroller.js

@@ -7,8 +7,8 @@ import ModelDocument from '../../src/model/document';
 import DataController from '../../src/controller/datacontroller';
 import HtmlDataProcessor from '../../src/dataprocessor/htmldataprocessor';
 
-import buildViewConverter  from '../../src/conversion/buildviewconverter';
-import buildModelConverter  from '../../src/conversion/buildmodelconverter';
+import buildViewConverter from '../../src/conversion/buildviewconverter';
+import buildModelConverter from '../../src/conversion/buildmodelconverter';
 
 import ModelDocumentFragment from '../../src/model/documentfragment';
 import ModelText from '../../src/model/text';
@@ -436,9 +436,9 @@ describe( 'DataController', () => {
 			data.insertContent( content, modelDocument.selection, batch );
 
 			expect( spy.args[ 0 ][ 1 ] ).to.deep.equal( {
-				batch: batch,
+				batch,
 				selection: modelDocument.selection,
-				content: content
+				content
 			} );
 		} );
 	} );

+ 1 - 1
packages/ckeditor5-engine/tests/controller/deletecontent.js

@@ -39,7 +39,7 @@ describe( 'DataController', () => {
 				'f[]o'
 			);
 
-			it( 'deletes single character (backward selection)' , () => {
+			it( 'deletes single character (backward selection)', () => {
 				setData( doc, 'f[o]o', { lastRangeBackward: true } );
 
 				deleteContent( doc.selection, doc.batch() );

+ 5 - 9
packages/ckeditor5-engine/tests/controller/editingcontroller.js

@@ -194,7 +194,7 @@ describe( 'EditingController', () => {
 			expect( getViewData( editing.view ) ).to.equal( '<p>f{}o</p><p></p><p>bar</p>' );
 		} );
 
-		it( 'should convert selection from view to model', ( done ) => {
+		it( 'should convert selection from view to model', done => {
 			listener.listenTo( editing.view, 'selectionChange', () => {
 				setTimeout( () => {
 					expect( getModelData( model ) ).to.equal(
@@ -352,13 +352,11 @@ describe( 'EditingController', () => {
 
 	describe( 'destroy', () => {
 		it( 'should remove listenters', () => {
-			let model, editing;
-
-			model = new ModelDocument();
+			const model = new ModelDocument();
 			model.createRoot();
 			model.schema.registerItem( 'paragraph', '$block' );
 
-			editing = new EditingController( model );
+			const editing = new EditingController( model );
 
 			const spy = sinon.spy();
 
@@ -377,13 +375,11 @@ describe( 'EditingController', () => {
 		} );
 
 		it( 'should destroy view', () => {
-			let model, editing;
-
-			model = new ModelDocument();
+			const model = new ModelDocument();
 			model.createRoot();
 			model.schema.registerItem( 'paragraph', '$block' );
 
-			editing = new EditingController( model );
+			const editing = new EditingController( model );
 
 			const spy = sinon.spy( editing.view, 'destroy' );
 

+ 30 - 10
packages/ckeditor5-engine/tests/controller/insertcontent.js

@@ -387,7 +387,9 @@ describe( 'DataController', () => {
 				it( 'inserts text + inlineWidget + text + paragraph', () => {
 					setData( doc, '<paragraph>f[]oo</paragraph>' );
 					insertHelper( 'xxx<inlineWidget></inlineWidget>yyy<paragraph>zzz</paragraph>' );
-					expect( getData( doc ) ).to.equal( '<paragraph>fxxx<inlineWidget></inlineWidget>yyy</paragraph><paragraph>zzz[]oo</paragraph>' );
+					expect( getData( doc ) ).to.equal(
+						'<paragraph>fxxx<inlineWidget></inlineWidget>yyy</paragraph><paragraph>zzz[]oo</paragraph>'
+					);
 				} );
 
 				it( 'inserts text + paragraph (at the beginning)', () => {
@@ -431,7 +433,9 @@ describe( 'DataController', () => {
 				it( 'inserts paragraph + text + paragraph', () => {
 					setData( doc, '<paragraph>f[]oo</paragraph>' );
 					insertHelper( '<paragraph>yyy</paragraph>xxx<paragraph>zzz</paragraph>' );
-					expect( getData( doc ) ).to.equal( '<paragraph>fyyy</paragraph><paragraph>xxx</paragraph><paragraph>zzz[]oo</paragraph>' );
+					expect( getData( doc ) ).to.equal(
+						'<paragraph>fyyy</paragraph><paragraph>xxx</paragraph><paragraph>zzz[]oo</paragraph>'
+					);
 				} );
 
 				it( 'inserts paragraph + text (at the beginning)', () => {
@@ -455,13 +459,17 @@ describe( 'DataController', () => {
 				it( 'inserts paragraph + object', () => {
 					setData( doc, '<paragraph>f[]oo</paragraph>' );
 					insertHelper( '<paragraph>xxx</paragraph><blockWidget></blockWidget>' );
-					expect( getData( doc ) ).to.equal( '<paragraph>fxxx</paragraph>[<blockWidget></blockWidget>]<paragraph>oo</paragraph>' );
+					expect( getData( doc ) ).to.equal(
+						'<paragraph>fxxx</paragraph>[<blockWidget></blockWidget>]<paragraph>oo</paragraph>'
+					);
 				} );
 
 				it( 'inserts object + paragraph', () => {
 					setData( doc, '<paragraph>f[]oo</paragraph>' );
 					insertHelper( '<blockWidget></blockWidget><paragraph>xxx</paragraph>' );
-					expect( getData( doc ) ).to.equal( '<paragraph>f</paragraph><blockWidget></blockWidget><paragraph>xxx[]oo</paragraph>' );
+					expect( getData( doc ) ).to.equal(
+						'<paragraph>f</paragraph><blockWidget></blockWidget><paragraph>xxx[]oo</paragraph>'
+					);
 				} );
 			} );
 
@@ -469,7 +477,9 @@ describe( 'DataController', () => {
 				it( 'inserts text', () => {
 					setData( doc, '<paragraph>foo</paragraph>[<blockWidget></blockWidget>]<paragraph>bar</paragraph>' );
 					insertHelper( 'xxx' );
-					expect( getData( doc ) ).to.equal( '<paragraph>foo</paragraph><paragraph>xxx[]</paragraph><paragraph>bar</paragraph>' );
+					expect( getData( doc ) ).to.equal(
+						'<paragraph>foo</paragraph><paragraph>xxx[]</paragraph><paragraph>bar</paragraph>'
+					);
 				} );
 
 				it( 'inserts paragraph', () => {
@@ -482,28 +492,36 @@ describe( 'DataController', () => {
 					setData( doc, '<paragraph>foo</paragraph>[<blockWidget></blockWidget>]<paragraph>bar</paragraph>' );
 					insertHelper( 'yyy<paragraph>xxx</paragraph>' );
 					expect( getData( doc ) )
-						.to.equal( '<paragraph>foo</paragraph><paragraph>yyy</paragraph><paragraph>xxx[]</paragraph><paragraph>bar</paragraph>' );
+						.to.equal(
+							'<paragraph>foo</paragraph><paragraph>yyy</paragraph><paragraph>xxx[]</paragraph><paragraph>bar</paragraph>'
+						);
 				} );
 
 				it( 'inserts two blocks', () => {
 					setData( doc, '<paragraph>foo</paragraph>[<blockWidget></blockWidget>]<paragraph>bar</paragraph>' );
 					insertHelper( '<heading1>xxx</heading1><paragraph>yyy</paragraph>' );
 					expect( getData( doc ) )
-						.to.equal( '<paragraph>foo</paragraph><heading1>xxx</heading1><paragraph>yyy[]</paragraph><paragraph>bar</paragraph>' );
+						.to.equal(
+							'<paragraph>foo</paragraph><heading1>xxx</heading1><paragraph>yyy[]</paragraph><paragraph>bar</paragraph>'
+						);
 				} );
 
 				it( 'inserts block object', () => {
 					setData( doc, '<paragraph>foo</paragraph>[<blockWidget></blockWidget>]<paragraph>bar</paragraph>' );
 					insertHelper( '<blockWidget></blockWidget>' );
 					// It's enough, don't worry.
-					expect( getData( doc ) ).to.equal( '<paragraph>foo</paragraph>[<blockWidget></blockWidget>]<paragraph>bar</paragraph>' );
+					expect( getData( doc ) ).to.equal(
+						'<paragraph>foo</paragraph>[<blockWidget></blockWidget>]<paragraph>bar</paragraph>'
+					);
 				} );
 
 				it( 'inserts inline object', () => {
 					setData( doc, '<paragraph>foo</paragraph>[<blockWidget></blockWidget>]<paragraph>bar</paragraph>' );
 					insertHelper( '<inlineWidget></inlineWidget>' );
 					expect( getData( doc ) )
-						.to.equal( '<paragraph>foo</paragraph><paragraph><inlineWidget></inlineWidget>[]</paragraph><paragraph>bar</paragraph>' );
+						.to.equal(
+							'<paragraph>foo</paragraph><paragraph><inlineWidget></inlineWidget>[]</paragraph><paragraph>bar</paragraph>'
+						);
 				} );
 			} );
 
@@ -541,7 +559,9 @@ describe( 'DataController', () => {
 				it( 'inserts block object', () => {
 					setData( doc, '<paragraph>foo[<inlineWidget></inlineWidget>]bar</paragraph>' );
 					insertHelper( '<blockWidget></blockWidget>' );
-					expect( getData( doc ) ).to.equal( '<paragraph>foo</paragraph>[<blockWidget></blockWidget>]<paragraph>bar</paragraph>' );
+					expect( getData( doc ) ).to.equal(
+						'<paragraph>foo</paragraph>[<blockWidget></blockWidget>]<paragraph>bar</paragraph>'
+					);
 				} );
 			} );
 		} );

+ 60 - 44
packages/ckeditor5-engine/tests/conversion/advanced-converters.js

@@ -63,8 +63,8 @@ describe( 'advanced-converters', () => {
 	function viewAttributesToString( item ) {
 		let result = '';
 
-		for ( let key of item.getAttributeKeys() ) {
-			let value = item.getAttribute( key );
+		for ( const key of item.getAttributeKeys() ) {
+			const value = item.getAttribute( key );
 
 			if ( value ) {
 				result += ' ' + key + '="' + value + '"';
@@ -81,7 +81,7 @@ describe( 'advanced-converters', () => {
 			result = item.data;
 		} else {
 			// ViewElement or ViewDocumentFragment.
-			for ( let child of item.getChildren() ) {
+			for ( const child of item.getChildren() ) {
 				result += viewToString( child );
 			}
 
@@ -96,7 +96,7 @@ describe( 'advanced-converters', () => {
 	function modelAttributesToString( item ) {
 		let result = '';
 
-		for ( let attr of item.getAttributes() ) {
+		for ( const attr of item.getAttributes() ) {
 			result += ' ' + attr[ 0 ] + '="' + attr[ 1 ] + '"';
 		}
 
@@ -107,18 +107,18 @@ describe( 'advanced-converters', () => {
 		let result = '';
 
 		if ( item instanceof ModelTextProxy ) {
-			let attributes = modelAttributesToString( item );
+			const attributes = modelAttributesToString( item );
 
 			result = attributes ? '<$text' + attributes + '>' + item.data + '</$text>' : item.data;
 		} else {
-			let walker = new ModelWalker( { boundaries: ModelRange.createIn( item ), shallow: true } );
+			const walker = new ModelWalker( { boundaries: ModelRange.createIn( item ), shallow: true } );
 
-			for ( let value of walker ) {
+			for ( const value of walker ) {
 				result += modelToString( value.item );
 			}
 
 			if ( item instanceof ModelElement ) {
-				let attributes = modelAttributesToString( item );
+				const attributes = modelAttributesToString( item );
 
 				result = '<' + item.name + attributes + '>' + result + '</' + item.name + '>';
 			}
@@ -220,7 +220,7 @@ describe( 'advanced-converters', () => {
 				if ( consumable.consume( data.input, { name: true } ) ) {
 					const modelImage = new ModelElement( 'image' );
 
-					for ( let attributeKey of data.input.getAttributeKeys() ) {
+					for ( const attributeKey of data.input.getAttributeKeys() ) {
 						modelImage.setAttribute( attributeKey, data.input.getAttribute( attributeKey ) );
 					}
 
@@ -249,7 +249,7 @@ describe( 'advanced-converters', () => {
 		} );
 
 		it( 'should convert model images changes without caption to view', () => {
-			let modelElement = new ModelElement( 'image', { src: 'bar.jpg', title: 'bar' } );
+			const modelElement = new ModelElement( 'image', { src: 'bar.jpg', title: 'bar' } );
 			modelRoot.appendChildren( modelElement );
 			modelDispatcher.convertInsertion( ModelRange.createIn( modelRoot ) );
 
@@ -264,7 +264,7 @@ describe( 'advanced-converters', () => {
 		} );
 
 		it( 'should convert model images changes with caption to view', () => {
-			let modelElement = new ModelElement( 'image', { src: 'foo.jpg', title: 'foo' }, [
+			const modelElement = new ModelElement( 'image', { src: 'foo.jpg', title: 'foo' }, [
 				new ModelElement( 'caption', {}, new ModelText( 'foobar' ) )
 			] );
 			modelRoot.appendChildren( modelElement );
@@ -279,12 +279,14 @@ describe( 'advanced-converters', () => {
 			modelDispatcher.convertAttribute( 'changeAttribute', createRangeOnElementOnly( modelElement ), 'src', 'bar.jpg', 'new.jpg' );
 			modelDispatcher.convertAttribute( 'removeAttribute', createRangeOnElementOnly( modelElement ), 'title', 'bar', null );
 
-			expect( viewToString( viewRoot ) ).to.equal( '<div><figure><img src="new.jpg"></img><figcaption>foobar</figcaption></figure></div>' );
+			expect( viewToString( viewRoot ) ).to.equal(
+				'<div><figure><img src="new.jpg"></img><figcaption>foobar</figcaption></figure></div>'
+			);
 		} );
 
 		it( 'should convert view image to model', () => {
-			let viewElement = new ViewContainerElement( 'img', { src: 'bar.jpg', title: 'bar' } );
-			let modelElement = viewDispatcher.convert( viewElement );
+			const viewElement = new ViewContainerElement( 'img', { src: 'bar.jpg', title: 'bar' } );
+			const modelElement = viewDispatcher.convert( viewElement );
 			// Attaching to tree so tree walker works fine in `modelToString`.
 			modelRoot.appendChildren( modelElement );
 
@@ -292,7 +294,7 @@ describe( 'advanced-converters', () => {
 		} );
 
 		it( 'should convert view figure to model', () => {
-			let viewElement = new ViewContainerElement(
+			const viewElement = new ViewContainerElement(
 				'figure',
 				null,
 				[
@@ -300,7 +302,7 @@ describe( 'advanced-converters', () => {
 					new ViewContainerElement( 'figcaption', null, new ViewText( 'foobar' ) )
 				]
 			);
-			let modelElement = viewDispatcher.convert( viewElement );
+			const modelElement = viewDispatcher.convert( viewElement );
 			// Attaching to tree so tree walker works fine in `modelToString`.
 			modelRoot.appendChildren( modelElement );
 
@@ -331,8 +333,8 @@ describe( 'advanced-converters', () => {
 	describe( 'custom attribute handling for given element', () => {
 		beforeEach( () => {
 			// NORMAL LINK MODEL TO VIEW CONVERTERS
-			modelDispatcher.on( 'addAttribute:linkHref', wrapItem( ( value ) => new ViewAttributeElement( 'a', { href: value } ) ) );
-			modelDispatcher.on( 'addAttribute:linkTitle', wrapItem( ( value ) => new ViewAttributeElement( 'a', { title: value } ) ) );
+			modelDispatcher.on( 'addAttribute:linkHref', wrapItem( value => new ViewAttributeElement( 'a', { href: value } ) ) );
+			modelDispatcher.on( 'addAttribute:linkTitle', wrapItem( value => new ViewAttributeElement( 'a', { title: value } ) ) );
 
 			const changeLinkAttribute = function( elementCreator ) {
 				return ( evt, data, consumable, conversionApi ) => {
@@ -351,22 +353,22 @@ describe( 'advanced-converters', () => {
 
 			modelDispatcher.on(
 				'changeAttribute:linkHref',
-				changeLinkAttribute( ( value ) => new ViewAttributeElement( 'a', { href: value } ) )
+				changeLinkAttribute( value => new ViewAttributeElement( 'a', { href: value } ) )
 			);
 
 			modelDispatcher.on(
 				'changeAttribute:linkTitle',
-				changeLinkAttribute( ( value ) => new ViewAttributeElement( 'a', { title: value } ) )
+				changeLinkAttribute( value => new ViewAttributeElement( 'a', { title: value } ) )
 			);
 
 			modelDispatcher.on(
 				'removeAttribute:linkHref',
-				unwrapItem( ( value ) => new ViewAttributeElement( 'a', { href: value } ) )
+				unwrapItem( value => new ViewAttributeElement( 'a', { href: value } ) )
 			);
 
 			modelDispatcher.on(
 				'removeAttribute:linkTitle',
-				unwrapItem( ( value ) => new ViewAttributeElement( 'a', { title: value } ) )
+				unwrapItem( value => new ViewAttributeElement( 'a', { title: value } ) )
 			);
 
 			// NORMAL LINK VIEW TO MODEL CONVERTERS
@@ -376,7 +378,7 @@ describe( 'advanced-converters', () => {
 						data.output = conversionApi.convertChildren( data.input, consumable );
 					}
 
-					for ( let child of data.output ) {
+					for ( const child of data.output ) {
 						child.setAttribute( 'linkHref', data.input.getAttribute( 'href' ) );
 					}
 				}
@@ -388,7 +390,7 @@ describe( 'advanced-converters', () => {
 						data.output = conversionApi.convertChildren( data.input, consumable );
 					}
 
-					for ( let child of data.output ) {
+					for ( const child of data.output ) {
 						child.setAttribute( 'linkTitle', data.input.getAttribute( 'title' ) );
 					}
 				}
@@ -405,7 +407,9 @@ describe( 'advanced-converters', () => {
 				viewWriter.insert( viewPosition, viewElement );
 
 				if ( consumable.consume( data.item, 'addAttribute:linkHref' ) ) {
-					const viewA = new ViewAttributeElement( 'a', { href: data.item.getAttribute( 'linkHref' ) }, new ViewText( 'see source' ) );
+					const viewA = new ViewAttributeElement(
+						'a', { href: data.item.getAttribute( 'linkHref' ) }, new ViewText( 'see source' )
+					);
 
 					if ( consumable.consume( data.item, 'addAttribute:linkTitle' ) ) {
 						viewA.setAttribute( 'title', data.item.getAttribute( 'linkTitle' ) );
@@ -418,7 +422,7 @@ describe( 'advanced-converters', () => {
 			}, { priority: 'high' } );
 
 			const modelChangeLinkAttrQuoteConverter = function( evt, data, consumable, conversionApi ) {
-				let viewKey = data.attributeKey.substr( 4 ).toLowerCase();
+				const viewKey = data.attributeKey.substr( 4 ).toLowerCase();
 
 				consumable.consume( data.item, eventNameToConsumableType( evt.name ) );
 
@@ -517,9 +521,9 @@ describe( 'advanced-converters', () => {
 		} );
 
 		it( 'should convert a view element to model', () => {
-			let viewElement = new ViewAttributeElement( 'a', { href: 'foo.html', title: 'Foo title' }, new ViewText( 'foo' ) );
+			const viewElement = new ViewAttributeElement( 'a', { href: 'foo.html', title: 'Foo title' }, new ViewText( 'foo' ) );
 
-			let modelText = viewDispatcher.convert( viewElement ).getChild( 0 );
+			const modelText = viewDispatcher.convert( viewElement ).getChild( 0 );
 
 			expect( modelText ).to.be.instanceof( ModelText );
 			expect( modelText.data ).to.equal( 'foo' );
@@ -528,7 +532,7 @@ describe( 'advanced-converters', () => {
 		} );
 
 		it( 'should convert quote model element with linkHref and linkTitle attribute to view', () => {
-			let modelElement = new ModelElement( 'quote', { linkHref: 'foo.html', linkTitle: 'Foo source' }, new ModelText( 'foo' ) );
+			const modelElement = new ModelElement( 'quote', { linkHref: 'foo.html', linkTitle: 'Foo source' }, new ModelText( 'foo' ) );
 			modelRoot.appendChildren( modelElement );
 			modelDispatcher.convertInsertion( ModelRange.createIn( modelRoot ) );
 
@@ -548,8 +552,20 @@ describe( 'advanced-converters', () => {
 			modelElement.removeAttribute( 'linkTitle' );
 			modelElement.setAttribute( 'linkHref', 'bar.html' );
 
-			modelDispatcher.convertAttribute( 'removeAttribute', createRangeOnElementOnly( modelElement ), 'linkTitle', 'Foo source', null );
-			modelDispatcher.convertAttribute( 'changeAttribute', createRangeOnElementOnly( modelElement ), 'linkHref', 'foo.html', 'bar.html' );
+			modelDispatcher.convertAttribute(
+				'removeAttribute',
+				createRangeOnElementOnly( modelElement ),
+				'linkTitle',
+				'Foo source',
+				null
+			);
+			modelDispatcher.convertAttribute(
+				'changeAttribute',
+				createRangeOnElementOnly( modelElement ),
+				'linkHref',
+				'foo.html',
+				'bar.html'
+			);
 
 			expected = '<div><blockquote>foo<strong>bar</strong><a href="bar.html">see source</a></blockquote></div>';
 			expect( viewToString( viewRoot ) ).to.equal( expected );
@@ -562,7 +578,7 @@ describe( 'advanced-converters', () => {
 		} );
 
 		it( 'should convert view blockquote with a element to model', () => {
-			let viewElement = new ViewContainerElement(
+			const viewElement = new ViewContainerElement(
 				'blockquote',
 				null,
 				[
@@ -578,7 +594,7 @@ describe( 'advanced-converters', () => {
 				]
 			);
 
-			let modelElement = viewDispatcher.convert( viewElement );
+			const modelElement = viewDispatcher.convert( viewElement );
 			modelRoot.appendChildren( modelElement );
 
 			expect( modelToString( modelElement ) ).to.equal( '<quote linkHref="foo.html" linkTitle="Foo source">foo</quote>' );
@@ -594,7 +610,7 @@ describe( 'advanced-converters', () => {
 					data.output = conversionApi.convertChildren( data.input, consumable );
 				}
 
-				for ( let child of data.output ) {
+				for ( const child of data.output ) {
 					child.setAttribute( 'linkHref', data.input.getAttribute( 'href' ) );
 				}
 			}
@@ -631,7 +647,7 @@ describe( 'advanced-converters', () => {
 			}
 		} );
 
-		let viewTable = new ViewContainerElement( 'table', null, [
+		const viewTable = new ViewContainerElement( 'table', null, [
 			new ViewContainerElement( 'tr', null, [
 				new ViewContainerElement( 'td', null, new ViewText( 'foo' ) ),
 				new ViewContainerElement( 'td', null, new ViewAttributeElement( 'a', { href: 'bar.html' }, new ViewText( 'bar' ) ) )
@@ -642,8 +658,8 @@ describe( 'advanced-converters', () => {
 			] )
 		] );
 
-		let model = viewDispatcher.convert( viewTable );
-		let modelFragment = new ModelDocumentFragment( model );
+		const model = viewDispatcher.convert( viewTable );
+		const modelFragment = new ModelDocumentFragment( model );
 
 		expect( modelToString( modelFragment ) )
 			.to.equal( '<paragraph>foo <$text linkHref="bar.html">bar</$text></paragraph><paragraph>abc</paragraph>' );
@@ -654,7 +670,7 @@ describe( 'advanced-converters', () => {
 	describe( 'universal converter', () => {
 		beforeEach( () => {
 			// "Universal" converters
-			modelDispatcher.on( 'insert', insertElement( ( data ) => new ViewContainerElement( data.item.name ) ), { priority: 'lowest' } );
+			modelDispatcher.on( 'insert', insertElement( data => new ViewContainerElement( data.item.name ) ), { priority: 'lowest' } );
 			modelDispatcher.on( 'addAttribute', setAttribute(), { priority: 'lowest' } );
 			modelDispatcher.on( 'changeAttribute', setAttribute(), { priority: 'lowest' } );
 			modelDispatcher.on( 'removeAttribute', removeAttribute(), { priority: 'lowest' } );
@@ -663,7 +679,7 @@ describe( 'advanced-converters', () => {
 				if ( consumable.consume( data.input, { name: true } ) ) {
 					data.output = new ModelElement( data.input.name );
 
-					for ( let key of data.input.getAttributeKeys() ) {
+					for ( const key of data.input.getAttributeKeys() ) {
 						if ( consumable.consume( data.input, { attribute: key } ) ) {
 							data.output.setAttribute( key, data.input.getAttribute( key ) );
 						}
@@ -683,7 +699,7 @@ describe( 'advanced-converters', () => {
 				if ( consumable.consume( data.input, { name: true } ) ) {
 					const modelImage = new ModelElement( 'image' );
 
-					for ( let attributeKey of data.input.getAttributeKeys() ) {
+					for ( const attributeKey of data.input.getAttributeKeys() ) {
 						modelImage.setAttribute( attributeKey, data.input.getAttribute( attributeKey ) );
 					}
 
@@ -696,7 +712,7 @@ describe( 'advanced-converters', () => {
 						data.output = conversionApi.convertChildren( data.input, consumable );
 					}
 
-					for ( let child of data.output ) {
+					for ( const child of data.output ) {
 						child.setAttribute( 'bold', true );
 					}
 				}
@@ -704,7 +720,7 @@ describe( 'advanced-converters', () => {
 		} );
 
 		it( 'should convert model to view', () => {
-			let modelElement = new ModelElement( 'table', { cellpadding: 5, cellspacing: 5 }, [
+			const modelElement = new ModelElement( 'table', { cellpadding: 5, cellspacing: 5 }, [
 				new ModelElement( 'tr', null, [
 					new ModelElement( 'td', null, [
 						new ModelText( 'foo ' ),
@@ -733,7 +749,7 @@ describe( 'advanced-converters', () => {
 		} );
 
 		it( 'should convert view to model', () => {
-			let viewElement = new ViewContainerElement( 'table', { cellpadding: 5, cellspacing: 5 }, [
+			const viewElement = new ViewContainerElement( 'table', { cellpadding: 5, cellspacing: 5 }, [
 				new ViewContainerElement( 'tr', null, [
 					new ViewContainerElement( 'td', null, [
 						new ViewText( 'foo ' ),
@@ -744,7 +760,7 @@ describe( 'advanced-converters', () => {
 				] )
 			] );
 
-			let modelElement = viewDispatcher.convert( viewElement );
+			const modelElement = viewDispatcher.convert( viewElement );
 			modelRoot.appendChildren( modelElement );
 
 			expect( modelToString( modelElement ) ).to.equal(

+ 50 - 37
packages/ckeditor5-engine/tests/conversion/buildmodelconverter.js

@@ -39,8 +39,8 @@ import CKEditorError from '@ckeditor/ckeditor5-utils/src/ckeditorerror';
 function viewAttributesToString( item ) {
 	let result = '';
 
-	for ( let key of item.getAttributeKeys() ) {
-		let value = item.getAttribute( key );
+	for ( const key of item.getAttributeKeys() ) {
+		const value = item.getAttribute( key );
 
 		if ( value ) {
 			result += ' ' + key + '="' + value + '"';
@@ -57,7 +57,7 @@ function viewToString( item ) {
 		result = item.data;
 	} else {
 		// ViewElement or ViewDocumentFragment.
-		for ( let child of item.getChildren() ) {
+		for ( const child of item.getChildren() ) {
 			result += viewToString( child );
 		}
 
@@ -70,9 +70,7 @@ function viewToString( item ) {
 }
 
 describe( 'Model converter builder', () => {
-	let dispatcher, mapper;
-	let modelDoc, modelRoot;
-	let viewDoc, viewRoot, viewSelection;
+	let dispatcher, mapper, modelDoc, modelRoot, viewDoc, viewRoot, viewSelection;
 
 	beforeEach( () => {
 		modelDoc = new ModelDocument();
@@ -99,7 +97,7 @@ describe( 'Model converter builder', () => {
 		it( 'using passed view element name', () => {
 			buildModelConverter().for( dispatcher ).fromElement( 'paragraph' ).toElement( 'p' );
 
-			let modelElement = new ModelElement( 'paragraph', null, new ModelText( 'foobar' ) );
+			const modelElement = new ModelElement( 'paragraph', null, new ModelText( 'foobar' ) );
 			modelRoot.appendChildren( modelElement );
 
 			dispatcher.convertInsertion( ModelRange.createIn( modelRoot ) );
@@ -110,7 +108,7 @@ describe( 'Model converter builder', () => {
 		it( 'using passed view element', () => {
 			buildModelConverter().for( dispatcher ).fromElement( 'image' ).toElement( new ViewContainerElement( 'img' ) );
 
-			let modelElement = new ModelElement( 'image' );
+			const modelElement = new ModelElement( 'image' );
 			modelRoot.appendChildren( modelElement );
 
 			dispatcher.convertInsertion( ModelRange.createIn( modelRoot ) );
@@ -121,9 +119,9 @@ describe( 'Model converter builder', () => {
 		it( 'using passed creator function', () => {
 			buildModelConverter().for( dispatcher )
 				.fromElement( 'header' )
-				.toElement( ( data ) => new ViewContainerElement( 'h' + data.item.getAttribute( 'level' ) ) );
+				.toElement( data => new ViewContainerElement( 'h' + data.item.getAttribute( 'level' ) ) );
 
-			let modelElement = new ModelElement( 'header', { level: 2 }, new ModelText( 'foobar' ) );
+			const modelElement = new ModelElement( 'header', { level: 2 }, new ModelText( 'foobar' ) );
 			modelRoot.appendChildren( modelElement );
 
 			dispatcher.convertInsertion( ModelRange.createIn( modelRoot ) );
@@ -140,7 +138,7 @@ describe( 'Model converter builder', () => {
 		it( 'using passed view element name', () => {
 			buildModelConverter().for( dispatcher ).fromAttribute( 'bold' ).toElement( 'strong' );
 
-			let modelElement = new ModelText( 'foo', { bold: true } );
+			const modelElement = new ModelText( 'foo', { bold: true } );
 			modelRoot.appendChildren( modelElement );
 
 			dispatcher.convertInsertion( ModelRange.createIn( modelRoot ) );
@@ -157,7 +155,7 @@ describe( 'Model converter builder', () => {
 		it( 'using passed view element', () => {
 			buildModelConverter().for( dispatcher ).fromAttribute( 'bold' ).toElement( new ViewAttributeElement( 'strong' ) );
 
-			let modelElement = new ModelText( 'foo', { bold: true } );
+			const modelElement = new ModelText( 'foo', { bold: true } );
 			modelRoot.appendChildren( modelElement );
 
 			dispatcher.convertInsertion( ModelRange.createIn( modelRoot ) );
@@ -172,9 +170,9 @@ describe( 'Model converter builder', () => {
 		} );
 
 		it( 'using passed creator function', () => {
-			buildModelConverter().for( dispatcher ).fromAttribute( 'italic' ).toElement( ( value ) => new ViewAttributeElement( value ) );
+			buildModelConverter().for( dispatcher ).fromAttribute( 'italic' ).toElement( value => new ViewAttributeElement( value ) );
 
-			let modelElement = new ModelText( 'foo', { italic: 'em' } );
+			const modelElement = new ModelText( 'foo', { italic: 'em' } );
 			modelRoot.appendChildren( modelElement );
 
 			dispatcher.convertInsertion( ModelRange.createIn( modelRoot ) );
@@ -200,7 +198,7 @@ describe( 'Model converter builder', () => {
 			dispatcher.on( 'selection', convertCollapsedSelection() );
 
 			// Model converter builder should add selection converter.
-			buildModelConverter().for( dispatcher ).fromAttribute( 'italic' ).toElement( ( value ) => new ViewAttributeElement( value ) );
+			buildModelConverter().for( dispatcher ).fromAttribute( 'italic' ).toElement( value => new ViewAttributeElement( value ) );
 
 			modelRoot.appendChildren( new ModelText( 'foo', { italic: 'em' } ) );
 
@@ -266,7 +264,7 @@ describe( 'Model converter builder', () => {
 		it( 'using default 1-to-1 conversion', () => {
 			buildModelConverter().for( dispatcher ).fromAttribute( 'class' ).toAttribute();
 
-			let modelElement = new ModelElement( 'paragraph', { class: 'myClass' }, new ModelText( 'foobar' ) );
+			const modelElement = new ModelElement( 'paragraph', { class: 'myClass' }, new ModelText( 'foobar' ) );
 			modelRoot.appendChildren( modelElement );
 
 			dispatcher.convertInsertion( ModelRange.createIn( modelRoot ) );
@@ -287,7 +285,7 @@ describe( 'Model converter builder', () => {
 		it( 'using passed attribute key', () => {
 			buildModelConverter().for( dispatcher ).fromAttribute( 'theme' ).toAttribute( 'class' );
 
-			let modelElement = new ModelElement( 'paragraph', { theme: 'abc' }, new ModelText( 'foobar' ) );
+			const modelElement = new ModelElement( 'paragraph', { theme: 'abc' }, new ModelText( 'foobar' ) );
 			modelRoot.appendChildren( modelElement );
 
 			dispatcher.convertInsertion( ModelRange.createIn( modelRoot ) );
@@ -308,7 +306,7 @@ describe( 'Model converter builder', () => {
 		it( 'using passed attribute key and value', () => {
 			buildModelConverter().for( dispatcher ).fromAttribute( 'highlighted' ).toAttribute( 'style', 'background:yellow' );
 
-			let modelElement = new ModelElement( 'paragraph', { 'highlighted': true }, new ModelText( 'foobar' ) );
+			const modelElement = new ModelElement( 'paragraph', { 'highlighted': true }, new ModelText( 'foobar' ) );
 			modelRoot.appendChildren( modelElement );
 
 			dispatcher.convertInsertion( ModelRange.createIn( modelRoot ) );
@@ -324,9 +322,9 @@ describe( 'Model converter builder', () => {
 		it( 'using passed attribute creator function', () => {
 			buildModelConverter().for( dispatcher )
 				.fromAttribute( 'theme' )
-				.toAttribute( ( value ) => ( { key: 'class', value: value + '-theme' } ) );
+				.toAttribute( value => ( { key: 'class', value: value + '-theme' } ) );
 
-			let modelElement = new ModelElement( 'paragraph', { theme: 'nice' }, new ModelText( 'foobar' ) );
+			const modelElement = new ModelElement( 'paragraph', { theme: 'nice' }, new ModelText( 'foobar' ) );
 			modelRoot.appendChildren( modelElement );
 
 			dispatcher.convertInsertion( ModelRange.createIn( modelRoot ) );
@@ -353,8 +351,8 @@ describe( 'Model converter builder', () => {
 			modelElement = new ModelElement( 'paragraph', null, [ modelText ] );
 			modelRoot.appendChildren( modelElement );
 
-			let viewText = new ViewText( 'foobar' );
-			let viewElement = new ViewContainerElement( 'p', null, [ viewText ] );
+			const viewText = new ViewText( 'foobar' );
+			const viewElement = new ViewContainerElement( 'p', null, [ viewText ] );
 			viewRoot.appendChildren( viewElement );
 
 			mapper.bindElements( modelElement, viewElement );
@@ -367,7 +365,9 @@ describe( 'Model converter builder', () => {
 
 			expect( viewToString( viewRoot ) ).to.equal( '<div><p>fo<strong>ob</strong>ar</p></div>' );
 
-			dispatcher.convertMarker( 'removeMarker', 'search', ModelRange.createFromParentsAndOffsets( modelElement, 2, modelElement, 4 ) );
+			dispatcher.convertMarker(
+				'removeMarker', 'search', ModelRange.createFromParentsAndOffsets( modelElement, 2, modelElement, 4 )
+			);
 
 			expect( viewToString( viewRoot ) ).to.equal( '<div><p>foobar</p></div>' );
 		} );
@@ -380,28 +380,36 @@ describe( 'Model converter builder', () => {
 
 			expect( viewToString( viewRoot ) ).to.equal( '<div><p>fo<span class="search">ob</span>ar</p></div>' );
 
-			dispatcher.convertMarker( 'removeMarker', 'search', ModelRange.createFromParentsAndOffsets( modelElement, 2, modelElement, 4 ) );
+			dispatcher.convertMarker(
+				'removeMarker', 'search', ModelRange.createFromParentsAndOffsets( modelElement, 2, modelElement, 4 )
+			);
 
 			expect( viewToString( viewRoot ) ).to.equal( '<div><p>foobar</p></div>' );
 		} );
 
 		it( 'using passed creator function', () => {
-			buildModelConverter().for( dispatcher ).fromMarker( 'search' ).toElement( ( data ) => {
+			buildModelConverter().for( dispatcher ).fromMarker( 'search' ).toElement( data => {
 				const className = 'search search-color-' + data.name.split( ':' )[ 1 ];
 
 				return new ViewAttributeElement( 'span', { class: className } );
 			} );
 
-			dispatcher.convertMarker( 'addMarker', 'search:red', ModelRange.createFromParentsAndOffsets( modelElement, 2, modelElement, 4 ) );
+			dispatcher.convertMarker(
+				'addMarker', 'search:red', ModelRange.createFromParentsAndOffsets( modelElement, 2, modelElement, 4 )
+			);
 
 			expect( viewToString( viewRoot ) ).to.equal( '<div><p>fo<span class="search search-color-red">ob</span>ar</p></div>' );
 
-			dispatcher.convertMarker( 'removeMarker', 'search:blue', ModelRange.createFromParentsAndOffsets( modelElement, 2, modelElement, 4 ) );
+			dispatcher.convertMarker(
+				'removeMarker', 'search:blue', ModelRange.createFromParentsAndOffsets( modelElement, 2, modelElement, 4 )
+			);
 
 			// Nothing should change as we remove a marker with different name, which should generate different view attribute element.
 			expect( viewToString( viewRoot ) ).to.equal( '<div><p>fo<span class="search search-color-red">ob</span>ar</p></div>' );
 
-			dispatcher.convertMarker( 'removeMarker', 'search:red', ModelRange.createFromParentsAndOffsets( modelElement, 2, modelElement, 4 ) );
+			dispatcher.convertMarker(
+				'removeMarker', 'search:red', ModelRange.createFromParentsAndOffsets( modelElement, 2, modelElement, 4 )
+			);
 
 			expect( viewToString( viewRoot ) ).to.equal( '<div><p>foobar</p></div>' );
 		} );
@@ -413,7 +421,9 @@ describe( 'Model converter builder', () => {
 
 			expect( viewToString( viewRoot ) ).to.equal( '<div><p>foobar</p></div>' );
 
-			dispatcher.convertMarker( 'removeMarker', 'search', ModelRange.createFromParentsAndOffsets( modelElement, 2, modelElement, 2 ) );
+			dispatcher.convertMarker(
+				'removeMarker', 'search', ModelRange.createFromParentsAndOffsets( modelElement, 2, modelElement, 2 )
+			);
 
 			expect( viewToString( viewRoot ) ).to.equal( '<div><p>foobar</p></div>' );
 		} );
@@ -427,8 +437,8 @@ describe( 'Model converter builder', () => {
 			modelElement = new ModelElement( 'paragraph', null, [ modelText ] );
 			modelRoot.appendChildren( modelElement );
 
-			let viewText = new ViewText( 'foobar' );
-			let viewElement = new ViewContainerElement( 'p', null, [ viewText ] );
+			const viewText = new ViewText( 'foobar' );
+			const viewElement = new ViewContainerElement( 'p', null, [ viewText ] );
 			viewRoot.appendChildren( viewElement );
 
 			mapper.bindElements( modelElement, viewElement );
@@ -465,7 +475,7 @@ describe( 'Model converter builder', () => {
 			} );
 
 			it( 'using passed creator function', () => {
-				buildModelConverter().for( dispatcher ).fromMarker( 'search' ).toStamp( ( data ) => {
+				buildModelConverter().for( dispatcher ).fromMarker( 'search' ).toStamp( data => {
 					const className = 'search search-color-' + data.name.split( ':' )[ 1 ];
 
 					return new ViewUIElement( 'span', { class: className } );
@@ -504,7 +514,9 @@ describe( 'Model converter builder', () => {
 
 				dispatcher.convertMarker( 'addMarker', 'search', range );
 
-				expect( viewToString( viewRoot ) ).to.equal( '<div><p>fo<span class="search"></span>ob<span class="search"></span>ar</p></div>' );
+				expect( viewToString( viewRoot ) ).to.equal(
+					'<div><p>fo<span class="search"></span>ob<span class="search"></span>ar</p></div>'
+				);
 
 				dispatcher.convertMarker( 'removeMarker', 'search', range );
 
@@ -512,7 +524,7 @@ describe( 'Model converter builder', () => {
 			} );
 
 			it( 'using passed creator function', () => {
-				buildModelConverter().for( dispatcher ).fromMarker( 'search' ).toStamp( ( data ) => {
+				buildModelConverter().for( dispatcher ).fromMarker( 'search' ).toStamp( data => {
 					const className = 'search search-color-' + data.name.split( ':' )[ 1 ];
 
 					return new ViewUIElement( 'span', { class: className } );
@@ -520,8 +532,9 @@ describe( 'Model converter builder', () => {
 
 				dispatcher.convertMarker( 'addMarker', 'search:red', range );
 
-				expect( viewToString( viewRoot ) )
-					.to.equal( '<div><p>fo<span class="search search-color-red"></span>ob<span class="search search-color-red"></span>ar</p></div>' );
+				expect( viewToString( viewRoot ) ).to.equal(
+					'<div><p>fo<span class="search search-color-red"></span>ob<span class="search search-color-red"></span>ar</p></div>'
+				);
 
 				dispatcher.convertMarker( 'removeMarker', 'search:red', range );
 
@@ -546,7 +559,7 @@ describe( 'Model converter builder', () => {
 			buildModelConverter().for( dispatcher ).fromElement( 'custom' ).toElement( 'custom' );
 			buildModelConverter().for( dispatcher ).fromElement( 'custom' ).withPriority( 'high' ).toElement( 'other' );
 
-			let modelElement = new ModelElement( 'custom', null, new ModelText( 'foobar' ) );
+			const modelElement = new ModelElement( 'custom', null, new ModelText( 'foobar' ) );
 			modelRoot.appendChildren( modelElement );
 
 			dispatcher.convertInsertion( ModelRange.createIn( modelRoot ) );

+ 35 - 32
packages/ckeditor5-engine/tests/conversion/buildviewconverter.js

@@ -29,7 +29,7 @@ import { stringify } from '../../src/dev-utils/model';
 function modelAttributesToString( item ) {
 	let result = '';
 
-	for ( let attr of item.getAttributes() ) {
+	for ( const attr of item.getAttributes() ) {
 		result += ' ' + attr[ 0 ] + '="' + attr[ 1 ] + '"';
 	}
 
@@ -40,18 +40,18 @@ function modelToString( item ) {
 	let result = '';
 
 	if ( item instanceof ModelTextProxy ) {
-		let attributes = modelAttributesToString( item );
+		const attributes = modelAttributesToString( item );
 
 		result = attributes ? '<$text' + attributes + '>' + item.data + '</$text>' : item.data;
 	} else {
-		let walker = new ModelWalker( { boundaries: ModelRange.createIn( item ), shallow: true } );
+		const walker = new ModelWalker( { boundaries: ModelRange.createIn( item ), shallow: true } );
 
-		for ( let value of walker ) {
+		for ( const value of walker ) {
 			result += modelToString( value.item );
 		}
 
 		if ( item instanceof ModelElement ) {
-			let attributes = modelAttributesToString( item );
+			const attributes = modelAttributesToString( item );
 
 			result = '<' + item.name + attributes + '>' + result + '</' + item.name + '>';
 		}
@@ -108,7 +108,7 @@ describe( 'View converter builder', () => {
 	it( 'should convert from view element to model element using creator function', () => {
 		buildViewConverter().for( dispatcher )
 			.fromElement( 'img' )
-			.toElement( ( viewElement ) => new ModelElement( 'image', { src: viewElement.getAttribute( 'src' ) } ) );
+			.toElement( viewElement => new ModelElement( 'image', { src: viewElement.getAttribute( 'src' ) } ) );
 
 		const conversionResult = dispatcher.convert( new ViewContainerElement( 'img', { src: 'foo.jpg' } ), objWithContext );
 		modelRoot.appendChildren( conversionResult );
@@ -131,7 +131,7 @@ describe( 'View converter builder', () => {
 	it( 'should convert from view element to model attributes using creator function', () => {
 		buildViewConverter().for( dispatcher )
 			.fromElement( 'a' )
-			.toAttribute( ( viewElement ) => ( { key: 'linkHref', value: viewElement.getAttribute( 'href' ) } ) );
+			.toAttribute( viewElement => ( { key: 'linkHref', value: viewElement.getAttribute( 'href' ) } ) );
 
 		const conversionResult = dispatcher.convert(
 			new ViewAttributeElement( 'a', { href: 'foo.html' }, new ViewText( 'foo' ) ), objWithContext
@@ -147,7 +147,7 @@ describe( 'View converter builder', () => {
 
 		buildViewConverter().for( dispatcher )
 			.fromAttribute( 'class' )
-			.toAttribute( ( viewElement ) => ( { key: 'class', value: viewElement.getAttribute( 'class' ) } ) );
+			.toAttribute( viewElement => ( { key: 'class', value: viewElement.getAttribute( 'class' ) } ) );
 
 		const conversionResult = dispatcher.convert(
 			new ViewContainerElement( 'p', { class: 'myClass' }, new ViewText( 'foo' ) ), objWithContext
@@ -227,7 +227,7 @@ describe( 'View converter builder', () => {
 
 	it( 'should convert from element to marker using creator function', () => {
 		buildViewConverter().for( dispatcher ).fromElement( 'p' ).toElement( 'paragraph' );
-		buildViewConverter().for( dispatcher ).fromElement( 'marker' ).toMarker( ( data ) => {
+		buildViewConverter().for( dispatcher ).fromElement( 'marker' ).toMarker( data => {
 			return new ModelElement( '$marker', { 'data-name': data.getAttribute( 'class' ) } );
 		} );
 
@@ -384,13 +384,13 @@ describe( 'View converter builder', () => {
 			.from( { class: 'megatron', attribute: { head: 'megatron', body: 'megatron', legs: 'megatron' } } )
 			.toAttribute( 'transformer', 'megatron' );
 
-		let viewElement = new ViewContainerElement(
+		const viewElement = new ViewContainerElement(
 			'span',
 			{ class: 'megatron', body: 'megatron', legs: 'megatron', head: 'megatron' },
 			new ViewText( 'foo' )
 		);
 
-		let conversionResult = dispatcher.convert( viewElement, objWithContext );
+		const conversionResult = dispatcher.convert( viewElement, objWithContext );
 
 		modelRoot.appendChildren( conversionResult );
 		expect( modelToString( conversionResult ) ).to.equal( '<span transformer="megatron">foo</span>' );
@@ -399,9 +399,9 @@ describe( 'View converter builder', () => {
 	it( 'should return model document fragment when converting attributes on text', () => {
 		buildViewConverter().for( dispatcher ).fromElement( 'strong' ).toAttribute( 'bold', true );
 
-		let viewElement = new ViewAttributeElement( 'strong', null, new ViewText( 'foo' ) );
+		const viewElement = new ViewAttributeElement( 'strong', null, new ViewText( 'foo' ) );
 
-		let conversionResult = dispatcher.convert( viewElement, objWithContext );
+		const conversionResult = dispatcher.convert( viewElement, objWithContext );
 
 		expect( conversionResult.is( 'documentFragment' ) ).to.be.true;
 	} );
@@ -409,10 +409,10 @@ describe( 'View converter builder', () => {
 	it( 'should set different priorities for `toElement` and `toAttribute` conversion', () => {
 		buildViewConverter().for( dispatcher )
 			.fromAttribute( 'class' )
-			.toAttribute( ( viewElement ) => ( { key: 'class', value: viewElement.getAttribute( 'class' ) } ) );
+			.toAttribute( viewElement => ( { key: 'class', value: viewElement.getAttribute( 'class' ) } ) );
 		buildViewConverter().for( dispatcher ).fromElement( 'p' ).toElement( 'paragraph' );
 
-		let conversionResult = dispatcher.convert(
+		const conversionResult = dispatcher.convert(
 			new ViewContainerElement( 'p', { class: 'myClass' }, new ViewText( 'foo' ) ), objWithContext
 		);
 		modelRoot.appendChildren( conversionResult );
@@ -425,7 +425,7 @@ describe( 'View converter builder', () => {
 		buildViewConverter().for( dispatcher ).fromElement( 'p' ).toElement( 'paragraph' );
 		buildViewConverter().for( dispatcher )
 			.fromAttribute( 'class' )
-			.toAttribute( ( viewElement ) => ( { key: 'class', value: viewElement.getAttribute( 'class' ) } ) );
+			.toAttribute( viewElement => ( { key: 'class', value: viewElement.getAttribute( 'class' ) } ) );
 
 		let result;
 
@@ -475,18 +475,18 @@ describe( 'View converter builder', () => {
 		// Universal class converter, synonymous to .fromAttribute( 'class' ).
 		buildViewConverter().for( dispatcher )
 			.from( new ViewMatcher( { class: /.*/ } ) )
-			.toAttribute( ( viewElement ) => ( { key: 'class', value: viewElement.getAttribute( 'class' ) } ) );
+			.toAttribute( viewElement => ( { key: 'class', value: viewElement.getAttribute( 'class' ) } ) );
 
 		// Universal element converter.
 		buildViewConverter().for( dispatcher )
 			.from( new ViewMatcher( { name: /.*/ } ) )
-			.toElement( ( viewElement ) => new ModelElement( viewElement.name ) );
+			.toElement( viewElement => new ModelElement( viewElement.name ) );
 
-		let viewStructure = new ViewContainerElement( 'div', { class: 'myClass' }, [
+		const viewStructure = new ViewContainerElement( 'div', { class: 'myClass' }, [
 			new ViewContainerElement( 'abcd', null, new ViewText( 'foo' ) )
 		] );
 
-		let conversionResult = dispatcher.convert( viewStructure, objWithContext );
+		const conversionResult = dispatcher.convert( viewStructure, objWithContext );
 		modelRoot.appendChildren( conversionResult );
 
 		expect( modelToString( conversionResult ) ).to.equal( '<div class="myClass"><abcd>foo</abcd></div>' );
@@ -500,13 +500,13 @@ describe( 'View converter builder', () => {
 
 		dispatcher.on( 'element', convertToModelFragment(), { priority: 'lowest' } );
 
-		let viewElement = new ViewContainerElement( 'div', null,
+		const viewElement = new ViewContainerElement( 'div', null,
 			new ViewContainerElement( 'p', null,
 				new ViewText( 'foo' )
 			)
 		);
 
-		let conversionResult = dispatcher.convert( viewElement, objWithContext );
+		const conversionResult = dispatcher.convert( viewElement, objWithContext );
 
 		expect( modelToString( conversionResult ) ).to.equal( '<paragraph>foo</paragraph>' );
 	} );
@@ -519,23 +519,26 @@ describe( 'View converter builder', () => {
 
 		dispatcher.on( 'element', convertToModelFragment(), { priority: 'lowest' } );
 
-		let viewElement = new ViewContainerElement( 'p', null,
+		const viewElement = new ViewContainerElement( 'p', null,
 			new ViewAttributeElement( 'strong', null,
 				new ViewText( 'foo' )
 			)
 		);
 
-		let conversionResult = dispatcher.convert( viewElement, objWithContext );
+		const conversionResult = dispatcher.convert( viewElement, objWithContext );
 
 		expect( modelToString( conversionResult ) ).to.equal( '<paragraph>foo</paragraph>' );
 	} );
 
 	it( 'should stop to element conversion if creating function returned null', () => {
-		buildViewConverter().for( dispatcher ).fromElement( 'p' ).toElement(
-			( viewElement ) => viewElement.hasAttribute( 'stop' ) ? null : new ModelElement( 'paragraph' )
-		);
-
-		let viewElement = new ViewContainerElement( 'p' );
+		buildViewConverter()
+			.for( dispatcher )
+			.fromElement( 'p' )
+			.toElement( viewElement => {
+				return viewElement.hasAttribute( 'stop' ) ? null : new ModelElement( 'paragraph' );
+			} );
+
+		const viewElement = new ViewContainerElement( 'p' );
 		let conversionResult = dispatcher.convert( viewElement, objWithContext );
 		expect( modelToString( conversionResult ) ).to.equal( '<paragraph></paragraph>' );
 
@@ -551,13 +554,13 @@ describe( 'View converter builder', () => {
 
 		buildViewConverter().for( dispatcher ).fromElement( 'p' ).toElement( 'paragraph' );
 
-		buildViewConverter().for( dispatcher ).fromAttribute( 'data-type' ).toAttribute( ( viewElement ) => {
+		buildViewConverter().for( dispatcher ).fromAttribute( 'data-type' ).toAttribute( viewElement => {
 			const value = viewElement.getAttribute( 'data-type' );
 
-			return value == 'stop' ? null : { key: 'type', value: value };
+			return value == 'stop' ? null : { key: 'type', value };
 		} );
 
-		let viewElement = new ViewContainerElement( 'p', { 'data-type': 'foo' } );
+		const viewElement = new ViewContainerElement( 'p', { 'data-type': 'foo' } );
 		let conversionResult = dispatcher.convert( viewElement, objWithContext );
 		expect( modelToString( conversionResult ) ).to.equal( '<paragraph type="foo"></paragraph>' );
 

+ 34 - 42
packages/ckeditor5-engine/tests/conversion/mapper.js

@@ -90,26 +90,10 @@ describe( 'Mapper', () => {
 	} );
 
 	describe( 'Standard mapping', () => {
-		function createToViewTest( modelElement, modelOffset, viewElement, viewOffset ) {
-			const modelPosition = ModelPosition.createFromParentAndOffset( modelElement, modelOffset );
-			const viewPosition = mapper.toViewPosition( modelPosition );
-			expect( viewPosition.parent ).to.equal( viewElement );
-			expect( viewPosition.offset ).to.equal( viewOffset );
-		}
-
-		function createToModelTest( viewElement, viewOffset, modelElement, modelOffset ) {
-			const viewPosition = new ViewPosition( viewElement, viewOffset );
-			const modelPosition = mapper.toModelPosition( viewPosition );
-			expect( modelPosition.parent ).to.equal( modelElement );
-			expect( modelPosition.offset ).to.equal( modelOffset );
-		}
-
-		let modelDiv, modelP, modelImg;
-
-		let viewDiv, viewP, viewB, viewI, viewU, viewSup, viewImg;
-		let viewTextB, viewTextO, viewTextM, viewTextX, viewTextY, viewTextZZ, viewTextFOO, viewTextBAR;
-
-		let mapper;
+		let modelDiv, modelP, modelImg,
+			viewDiv, viewP, viewB, viewI, viewU, viewSup, viewImg,
+			viewTextB, viewTextO, viewTextM, viewTextX, viewTextY, viewTextZZ, viewTextFOO, viewTextBAR,
+			mapper;
 
 		beforeEach( () => {
 			// Tree Model:
@@ -378,9 +362,7 @@ describe( 'Mapper', () => {
 				expect( viewRange.end.offset ).to.equal( 2 );
 			} );
 		} );
-	} );
 
-	describe( 'Widget mapping', () => {
 		function createToViewTest( modelElement, modelOffset, viewElement, viewOffset ) {
 			const modelPosition = ModelPosition.createFromParentAndOffset( modelElement, modelOffset );
 			const viewPosition = mapper.toViewPosition( modelPosition );
@@ -394,13 +376,13 @@ describe( 'Mapper', () => {
 			expect( modelPosition.parent ).to.equal( modelElement );
 			expect( modelPosition.offset ).to.equal( modelOffset );
 		}
+	} );
 
-		let modelDiv, modelWidget, modelImg, modelCaption;
-
-		let viewDiv, viewWidget, viewMask, viewWrapper, viewImg, viewCaption;
-		let viewTextX, viewTextFOO, viewTextZZ, viewTextLABEL;
-
-		let mapper;
+	describe( 'Widget mapping', () => {
+		let modelDiv, modelWidget, modelImg, modelCaption,
+			viewDiv, viewWidget, viewMask, viewWrapper, viewImg, viewCaption,
+			viewTextX, viewTextFOO, viewTextZZ, viewTextLABEL,
+			mapper;
 
 		before( () => {
 			// Tree Model:
@@ -510,26 +492,29 @@ describe( 'Mapper', () => {
 			it( 'should transform modelCaption 2', () => createToViewTest( modelCaption, 2, viewTextFOO, 2 ) );
 			it( 'should transform modelCaption 3', () => createToViewTest( modelCaption, 3, viewTextFOO, 3 ) );
 		} );
-	} );
 
-	describe( 'List mapping (test registerViewToModelLength)', () => {
+		function createToViewTest( modelElement, modelOffset, viewElement, viewOffset ) {
+			const modelPosition = ModelPosition.createFromParentAndOffset( modelElement, modelOffset );
+			const viewPosition = mapper.toViewPosition( modelPosition );
+			expect( viewPosition.parent ).to.equal( viewElement );
+			expect( viewPosition.offset ).to.equal( viewOffset );
+		}
+
 		function createToModelTest( viewElement, viewOffset, modelElement, modelOffset ) {
 			const viewPosition = new ViewPosition( viewElement, viewOffset );
 			const modelPosition = mapper.toModelPosition( viewPosition );
 			expect( modelPosition.parent ).to.equal( modelElement );
 			expect( modelPosition.offset ).to.equal( modelOffset );
 		}
+	} );
 
-		let mapper;
-
-		let modelRoot;
-		let modelListItem1, modelListItem2;
-		let modelListItem11, modelListItem12;
-
-		let viewRoot;
-		let viewList, viewListNested;
-		let viewListItem1, viewListItem2;
-		let viewListItem11, viewListItem12;
+	describe( 'List mapping (test registerViewToModelLength)', () => {
+		let mapper, modelRoot, viewRoot,
+			modelListItem1, modelListItem2,
+			modelListItem11, modelListItem12,
+			viewList, viewListNested,
+			viewListItem1, viewListItem2,
+			viewListItem11, viewListItem12;
 
 		before( () => {
 			modelListItem1 = new ModelElement( 'listItem', null, new ModelText( 'aaa' ) );
@@ -559,9 +544,9 @@ describe( 'Mapper', () => {
 			function getViewListItemLength( element ) {
 				let length = 1;
 
-				for ( let child of element.getChildren() ) {
+				for ( const child of element.getChildren() ) {
 					if ( child.name == 'ul' || child.name == 'ol' ) {
-						for ( let item of child.getChildren() ) {
+						for ( const item of child.getChildren() ) {
 							length += getViewListItemLength( item );
 						}
 					}
@@ -580,6 +565,13 @@ describe( 'Mapper', () => {
 			it( 'should transform viewList 1', () => createToModelTest( viewList, 1, modelRoot, 3 ) );
 			it( 'should transform viewList 2', () => createToModelTest( viewList, 2, modelRoot, 4 ) );
 		} );
+
+		function createToModelTest( viewElement, viewOffset, modelElement, modelOffset ) {
+			const viewPosition = new ViewPosition( viewElement, viewOffset );
+			const modelPosition = mapper.toModelPosition( viewPosition );
+			expect( modelPosition.parent ).to.equal( modelElement );
+			expect( modelPosition.offset ).to.equal( modelOffset );
+		}
 	} );
 
 	describe( 'getModelLength', () => {

+ 9 - 11
packages/ckeditor5-engine/tests/conversion/model-selection-to-view-converters.js

@@ -39,9 +39,7 @@ const spanViewElementForMarker = new ViewAttributeElement( 'span' );
 spanViewElementForMarker.priority = 1;
 
 describe( 'model-selection-to-view-converters', () => {
-	let dispatcher, mapper;
-	let modelDoc, modelRoot, modelSelection;
-	let viewDoc, viewRoot, viewSelection;
+	let dispatcher, mapper, modelDoc, modelRoot, modelSelection, viewDoc, viewRoot, viewSelection;
 
 	beforeEach( () => {
 		modelDoc = new ModelDocument();
@@ -268,7 +266,7 @@ describe( 'model-selection-to-view-converters', () => {
 
 			it( 'in marker - using view element as element creator function for selection marker conversion', () => {
 				dispatcher.on( 'selectionMarker:marker2', convertSelectionMarker(
-					( data ) => new ViewAttributeElement( 'span', { 'class': data.name } )
+					data => new ViewAttributeElement( 'span', { 'class': data.name } )
 				) );
 
 				setModelData( modelDoc, 'foobar' );
@@ -293,7 +291,7 @@ describe( 'model-selection-to-view-converters', () => {
 
 			it( 'should do nothing if creator return null', () => {
 				dispatcher.on( 'selectionMarker:marker3', convertSelectionMarker( () => {
-					return;
+
 				} ) );
 
 				setModelData( modelDoc, 'foobar' );
@@ -531,7 +529,7 @@ describe( 'model-selection-to-view-converters', () => {
 
 			it( 'convertSelectionAttribute should do nothing if creator return null', () => {
 				dispatcher.on( 'selectionAttribute:bold', convertSelectionAttribute( () => {
-					return;
+
 				} ) );
 
 				test(
@@ -556,7 +554,7 @@ describe( 'model-selection-to-view-converters', () => {
 			modelDoc.schema.allow( { name: '$text', inside: 'td' } );
 
 			// "Universal" converter to convert table structure.
-			const tableConverter = insertElement( ( data ) => new ViewContainerElement( data.item.name ) );
+			const tableConverter = insertElement( data => new ViewContainerElement( data.item.name ) );
 			dispatcher.on( 'insert:table', tableConverter );
 			dispatcher.on( 'insert:tr', tableConverter );
 			dispatcher.on( 'insert:td', tableConverter );
@@ -569,13 +567,13 @@ describe( 'model-selection-to-view-converters', () => {
 					return;
 				}
 
-				for ( let range of selection.getRanges() ) {
+				for ( const range of selection.getRanges() ) {
 					const node = range.start.nodeAfter;
 
 					if ( node == range.end.nodeBefore && node instanceof ModelElement && node.name == 'td' ) {
 						consumable.consume( selection, 'selection' );
 
-						let viewNode = conversionApi.mapper.toViewElement( node );
+						const viewNode = conversionApi.mapper.toViewElement( node );
 						viewNode.addClass( 'selected' );
 					}
 				}
@@ -632,8 +630,8 @@ describe( 'model-selection-to-view-converters', () => {
 		modelSelection.refreshAttributes();
 
 		// And add or remove passed attributes.
-		for ( let key in selectionAttributes ) {
-			let value = selectionAttributes[ key ];
+		for ( const key in selectionAttributes ) {
+			const value = selectionAttributes[ key ];
 
 			if ( value ) {
 				modelSelection.setAttribute( key, value );

+ 12 - 12
packages/ckeditor5-engine/tests/conversion/model-to-view-converters.js

@@ -51,8 +51,8 @@ describe( 'model-to-view-converters', () => {
 	function viewAttributesToString( item ) {
 		let result = '';
 
-		for ( let key of item.getAttributeKeys() ) {
-			let value = item.getAttribute( key );
+		for ( const key of item.getAttributeKeys() ) {
+			const value = item.getAttribute( key );
 
 			if ( value ) {
 				result += ' ' + key + '="' + value + '"';
@@ -69,7 +69,7 @@ describe( 'model-to-view-converters', () => {
 			result = item.data;
 		} else {
 			// ViewElement or ViewDocumentFragment.
-			for ( let child of item.getChildren() ) {
+			for ( const child of item.getChildren() ) {
 				result += viewToString( child );
 			}
 
@@ -202,7 +202,7 @@ describe( 'model-to-view-converters', () => {
 
 			const themeConverter = ( value, key, data ) => {
 				if ( data.item instanceof ModelElement && data.item.childCount > 0 ) {
-					value += ' ' + 'fix-content';
+					value += ' fix-content';
 				}
 
 				return { key: 'class', value };
@@ -301,7 +301,7 @@ describe( 'model-to-view-converters', () => {
 			const modelElement = new ModelElement( 'paragraph', null, new ModelText( 'foobar', { style: 'bold' } ) );
 			const viewP = new ViewContainerElement( 'p' );
 
-			const elementGenerator = ( value ) => {
+			const elementGenerator = value => {
 				if ( value == 'bold' ) {
 					return new ViewAttributeElement( 'b' );
 				}
@@ -333,7 +333,7 @@ describe( 'model-to-view-converters', () => {
 
 			const viewP = new ViewContainerElement( 'p' );
 
-			const elementGenerator = ( href ) => new ViewAttributeElement( 'a', { href } );
+			const elementGenerator = href => new ViewAttributeElement( 'a', { href } );
 
 			modelRoot.appendChildren( modelElement );
 			dispatcher.on( 'insert:paragraph', insertElement( viewP ) );
@@ -490,7 +490,7 @@ describe( 'model-to-view-converters', () => {
 		} );
 
 		it( 'should convert insert/remove of attribute in model with wrapping element generating function as a parameter', () => {
-			const converterCallback = ( data ) => {
+			const converterCallback = data => {
 				const name = data.name.split( ':' )[ 1 ];
 
 				return new ViewAttributeElement( 'span', { class: name } );
@@ -542,7 +542,7 @@ describe( 'model-to-view-converters', () => {
 		} );
 
 		it( 'should be possible to override wrapRange', () => {
-			const converterCallback = ( data ) => {
+			const converterCallback = data => {
 				const name = data.name.split( ':' )[ 1 ];
 
 				return new ViewAttributeElement( 'span', { class: name } );
@@ -559,7 +559,7 @@ describe( 'model-to-view-converters', () => {
 		} );
 
 		it( 'should be possible to override unwrapRange', () => {
-			const converterCallback = ( data ) => {
+			const converterCallback = data => {
 				const name = data.name.split( ':' )[ 1 ];
 
 				return new ViewAttributeElement( 'span', { class: name } );
@@ -609,7 +609,7 @@ describe( 'model-to-view-converters', () => {
 		} );
 
 		it( 'multiple overlapping non-collapsed markers', () => {
-			const converterCallbackName = ( data ) => {
+			const converterCallbackName = data => {
 				const name = data.name.split( ':' )[ 1 ];
 				const element = new ViewAttributeElement( 'span', { class: name } );
 				element.priority = name.charCodeAt( 0 );
@@ -719,7 +719,7 @@ describe( 'model-to-view-converters', () => {
 		} );
 
 		it( 'should insert and remove ui element - function as a creator', () => {
-			const viewUi = ( data ) => new ViewUIElement( 'span', { 'class': data.name } );
+			const viewUi = data => new ViewUIElement( 'span', { 'class': data.name } );
 
 			dispatcher.on( 'addMarker:marker', insertUIElement( viewUi ) );
 			dispatcher.on( 'removeMarker:marker', removeUIElement( viewUi ) );
@@ -863,7 +863,7 @@ describe( 'model-to-view-converters', () => {
 			} );
 
 			it( 'should insert and remove ui element - function as a creator', () => {
-				const viewUi = ( data ) => new ViewUIElement( 'span', { 'class': data.name } );
+				const viewUi = data => new ViewUIElement( 'span', { 'class': data.name } );
 
 				dispatcher.on( 'addMarker:marker', insertUIElement( viewUi ) );
 				dispatcher.on( 'removeMarker:marker', removeUIElement( viewUi ) );

+ 4 - 4
packages/ckeditor5-engine/tests/conversion/modelconversiondispatcher.js

@@ -172,7 +172,7 @@ describe( 'ModelConversionDispatcher', () => {
 		it( 'should not fire any event if changed range in graveyard root and change type is different than remove', () => {
 			sinon.spy( dispatcher, 'fire' );
 
-			let gyNode = new ModelElement( 'image' );
+			const gyNode = new ModelElement( 'image' );
 			doc.graveyard.appendChildren( gyNode );
 
 			doc.batch().setAttribute( gyNode, 'key', 'value' );
@@ -184,7 +184,7 @@ describe( 'ModelConversionDispatcher', () => {
 			// This may happen during OT.
 			sinon.spy( dispatcher, 'fire' );
 
-			let gyNode = new ModelElement( 'image' );
+			const gyNode = new ModelElement( 'image' );
 			doc.graveyard.appendChildren( gyNode );
 
 			doc.batch().remove( gyNode );
@@ -196,7 +196,7 @@ describe( 'ModelConversionDispatcher', () => {
 			// This may happen during OT.
 			sinon.spy( dispatcher, 'fire' );
 
-			let gyNode = new ModelElement( 'image' );
+			const gyNode = new ModelElement( 'image' );
 			doc.graveyard.appendChildren( gyNode );
 
 			doc.batch().rename( gyNode, 'p' );
@@ -385,7 +385,7 @@ describe( 'ModelConversionDispatcher', () => {
 				loggedEvents.push( log );
 			} );
 
-			dispatcher.convertRemove( ModelPosition.createFromParentAndOffset( root , 3 ), range );
+			dispatcher.convertRemove( ModelPosition.createFromParentAndOffset( root, 3 ), range );
 
 			expect( loggedEvents ).to.deep.equal( [ 'remove:3:3' ] );
 		} );

+ 2 - 3
packages/ckeditor5-engine/tests/conversion/viewconsumable.js

@@ -9,8 +9,7 @@ import ViewDocumentFragment from '../../src/view/documentfragment';
 import ViewConsumable from '../../src/conversion/viewconsumable';
 
 describe( 'ViewConsumable', () => {
-	let viewConsumable;
-	let el;
+	let viewConsumable, el;
 
 	beforeEach( () => {
 		viewConsumable = new ViewConsumable();
@@ -44,7 +43,7 @@ describe( 'ViewConsumable', () => {
 
 			expect( viewConsumable.test( el, { attribute: 'href' } ) ).to.be.true;
 			expect( viewConsumable.test( el, { class: 'foobar' } ) ).to.be.true;
-			expect( viewConsumable.test( el, { style: 'color' }  ) ).to.be.true;
+			expect( viewConsumable.test( el, { style: 'color' } ) ).to.be.true;
 			expect( viewConsumable.test( el, { name: true } ) ).to.be.null;
 		} );
 

+ 4 - 3
packages/ckeditor5-engine/tests/conversion/viewconversiondispatcher.js

@@ -196,8 +196,8 @@ describe( 'ViewConversionDispatcher', () => {
 	} );
 
 	describe( 'conversionApi', () => {
-		let spy, spyP, spyText, viewP, viewText, modelP, modelText, consumableMock, dispatcher;
-		let spyNull, spyArray, viewDiv, viewNull, viewArray;
+		let spy, spyP, spyText, viewP, viewText, modelP, modelText, consumableMock, dispatcher,
+			spyNull, spyArray, viewDiv, viewNull, viewArray;
 
 		beforeEach( () => {
 			spy = sinon.spy();
@@ -308,7 +308,8 @@ describe( 'ViewConversionDispatcher', () => {
 		} );
 
 		describe( 'convertChildren', () => {
-			it( 'should fire conversion for all children of passed element and return conversion results wrapped in document fragment', () => {
+			it( 'should fire conversion for all children of passed element and return conversion results ' +
+				'wrapped in document fragment', () => {
 				silenceWarnings();
 
 				dispatcher.on( 'documentFragment', ( evt, data, consumable, conversionApi ) => {

+ 1 - 1
packages/ckeditor5-engine/tests/dataprocessor/_utils/xsstemplates.js

@@ -9,5 +9,5 @@ export default {
 	'video onerror + src': '<p><video onerror="%xss%" src="produce404">foo</video></p>',
 	'video with source onerror': '<p><video><source onerror="%xss%" /></video></p>',
 	'video with source onerror 2': '<p><video><source onerror="%xss%" src="produce404" /></video></p>',
-	'script': '<script>%xss%<\/script>'
+	'script': '<script>%xss%</script>'
 };

+ 2 - 2
packages/ckeditor5-engine/tests/dataprocessor/htmldataprocessor.js

@@ -45,10 +45,10 @@ describe( 'HtmlDataProcessor', () => {
 		} );
 
 		// Test against XSS attacks.
-		for ( let name in xssTemplates ) {
+		for ( const name in xssTemplates ) {
 			const input = xssTemplates[ name ].replace( /%xss%/g, 'testXss()' );
 
-			it( 'should prevent XSS attacks: ' + name, ( done ) => {
+			it( 'should prevent XSS attacks: ' + name, done => {
 				window.testXss = sinon.spy();
 				dataProcessor.toView( input );
 

+ 2 - 2
packages/ckeditor5-engine/tests/dataprocessor/xmldataprocessor.js

@@ -65,10 +65,10 @@ describe( 'XmlDataProcessor', () => {
 		} );
 
 		// Test against XSS attacks.
-		for ( let name in xssTemplates ) {
+		for ( const name in xssTemplates ) {
 			const input = xssTemplates[ name ].replace( /%xss%/g, 'testXss()' );
 
-			it( 'should prevent XSS attacks: ' + name, ( done ) => {
+			it( 'should prevent XSS attacks: ' + name, done => {
 				window.testXss = sinon.spy();
 				dataProcessor.toView( input );
 

+ 3 - 3
packages/ckeditor5-engine/tests/dev-utils/deltareplayer.js

@@ -33,7 +33,7 @@ describe( 'DeltaReplayer', () => {
 
 			const deltaReplayer = new DeltaReplayer( doc, '---', JSON.stringify( delta ) );
 
-			return deltaReplayer.applyNextDelta().then( ( isFinished ) => {
+			return deltaReplayer.applyNextDelta().then( isFinished => {
 				expect( deltaReplayer.getDeltasToReplay() ).to.deep.equal( [] );
 				expect( isFinished ).to.equal( false );
 			} );
@@ -54,7 +54,7 @@ describe( 'DeltaReplayer', () => {
 			const doc = getDocument();
 			const deltaReplayer = new DeltaReplayer( doc, '---', '' );
 
-			return deltaReplayer.applyNextDelta().then( ( isFinished ) => {
+			return deltaReplayer.applyNextDelta().then( isFinished => {
 				expect( isFinished ).to.equal( true );
 			} );
 		} );
@@ -147,7 +147,7 @@ describe( 'DeltaReplayer', () => {
 			return deltaReplayer.play( 1 )
 				.then( () => {
 					throw new Error( 'It should throw an error' );
-				}, ( err ) => {
+				}, err => {
 					expect( err.message ).to.match( /^model-document-applyOperation-wrong-version:/ );
 				} );
 		} );

Unele fișiere nu au fost afișate deoarece prea multe fișiere au fost modificate în acest diff