Selaa lähdekoodia

Corrected typos and documentation for Tree Model classes.
Prepared Tree Model classes for OT algorithms.
Introduced ReinsertOperation class.
Introduced RootElement class.

Szymon Cofalik 10 vuotta sitten
vanhempi
sitoutus
68bb06d3d8
1 muutettua tiedostoa jossa 57 lisäystä ja 0 poistoa
  1. 57 0
      packages/ckeditor5-ui/src/utils.js

+ 57 - 0
packages/ckeditor5-ui/src/utils.js

@@ -53,9 +53,66 @@ CKEDITOR.define( [ 'utils-lodash', 'lib/lodash/lodash-ckeditor' ], function( lod
 		 */
 		isIterable( value ) {
 			return !!( value && value[ Symbol.iterator ] );
+		},
+
+		/**
+		 * Compares how given arrays relate to each other. One array can be: same as another array, prefix of another array
+		 * or completely different.
+		 *
+		 *   compareArrays( [ 0, 2 ], [ 0, 2 ] ); // SAME
+		 *   compareArrays( [ 0, 2 ], [ 0 ] ); // PREFIX
+		 *   compareArrays( [ 0, 2 ], [ 0, 2, 1 ] ); // DIFFERENT
+		 *   compareArrays( [ 0, 2 ], [ 1, 3 ] ); // DIFFERENT
+		 *
+		 * @param {Array} a Array that is compared.
+		 * @param {Array} b Array to compare with.
+		 * @returns {Number} How array `a` is related to array `b`. Represented by one of flags:
+		 * `a` is {@link utils.compareArrays#SAME same}, `a` is a {@link utils.compareArrays#PREFIX prefix}
+		 * or `a` is {@link utils.compareArrays#DIFFERENT different}.
+		 */
+		compareArrays( a, b ) {
+			var minLen = Math.min( a.length, b.length );
+
+			for ( var i = 0; i < minLen; i++ ) {
+				if ( a[ i ] != b[ i ] ) {
+					// The arrays are different.
+					return this.DIFFERENT;
+				}
+			}
+
+			// Both arrays were same at all points.
+			if ( a.length == b.length ) {
+				// If their length is also same, they are the same.
+				return this.SAME;
+			} else if ( a.length < b.length ) {
+				// Compared array is shorter so it is a prefix of the other array.
+				return this.PREFIX;
+			}
+
+			// In other case, the arrays are different.
+			return this.DIFFERENT;
 		}
 	};
 
+	/**
+	 * Flag for "is same as" relation between arrays.
+	 *
+	 * @type {number}
+	 */
+	utils.compareArrays.SAME = 0;
+	/**
+	 * Flag for "is a prefix of" relation between arrays.
+	 *
+	 * @type {number}
+	 */
+	utils.compareArrays.PREFIX = 1;
+	/**
+	 * Flag for "is different than" relation between arrays.
+	 *
+	 * @type {number}
+	 */
+	utils.compareArrays.DIFFERENT = 2;
+
 	// Extend "utils" with Lo-Dash methods.
 	for ( var i = 0; i < lodashIncludes.length; i++ ) {
 		utils[ lodashIncludes[ i ] ] = lodash[ lodashIncludes[ i ] ];