Explorar o código

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

Szymon Cofalik %!s(int64=10) %!d(string=hai) anos
pai
achega
68bb06d3d8
Modificáronse 1 ficheiros con 57 adicións e 0 borrados
  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 ] ];