UNPKG

jodit

Version:

Jodit is awesome and usefully wysiwyg editor with filebrowser

132 lines (117 loc) 3.61 kB
/*! * Jodit Editor (https://xdsoft.net/jodit/) * Released under MIT see LICENSE.txt in the project root for license information. * Copyright (c) 2013-2020 Valeriy Chupurnov. All rights reserved. https://xdsoft.net */ import { JoditObject } from './jodit-object'; import { JoditArray } from './jodit-array'; import { isFunction, isPlainObject } from './checker/'; /** * Copy the values of all of the enumerable own properties from one or more source objects to a * target object. Returns the target object. * @param target The target object to copy to. * @param source The source object from which to copy properties. */ export function extend<T, U>(target: T, source: U): T & U; export function extend<U, V>(deep: true, source1: U, source2: V): U & V; /** * Copy the values of all of the enumerable own properties from one or more source objects to a * target object. Returns the target object. * @param target The target object to copy to. * @param source1 The first source object from which to copy properties. * @param source2 The second source object from which to copy properties. */ export function extend<T, U, V>(target: T, source1: U, source2: V): T & U & V; export function extend<T, U, V>( deep: true, target: T, source1: U, source2: V ): T & U & V; /** * Copy the values of all of the enumerable own properties from one or more source objects to a * target object. Returns the target object. * @param target The target object to copy to. * @param source1 The first source object from which to copy properties. * @param source2 The second source object from which to copy properties. * @param source3 The third source object from which to copy properties. */ export function extend<T, U, V, W>( target: T, source1: U, source2: V, source3: W ): T & U & V & W; export function extend<T, U, V, W>( deep: true, target: T, source1: U, source2: V, source3: W ): T & U & V & W; /** * Copy the values of all of the enumerable own properties from one or more source objects to a * target object. Returns the target object. * @param target The target object to copy to. * @param sources One or more source objects from which to copy properties */ export function extend(target: object, ...sources: any[]): any; export function extend(deep: true, target: object, ...sources: any[]): any; export function extend<T>(this: T, ...args: any[]): any { const length = args.length; let options, name, src, copy, copyIsArray, clone, target: boolean | any = args[0] || {}, i = 1, j, keys, deep = false; if (typeof target === 'boolean') { deep = target; target = args[i] || {}; i += 1; } if (typeof target !== 'object' && isFunction(target)) { target = {}; } if (i === length) { target = this; i += 1; } for (i; i < length; i += 1) { options = args[i]; if (options !== null && options !== undefined) { keys = Object.keys(options); for (j = 0; j < keys.length; j += 1) { name = keys[j]; src = target[name]; copy = options[name]; if (target === copy) { continue; } if ( deep && copy && ((isPlainObject(copy) && !(copy instanceof JoditObject)) || (Array.isArray(copy) && !(copy instanceof JoditArray))) ) { copyIsArray = Array.isArray(copy); if (copyIsArray) { copyIsArray = false; clone = src && Array.isArray(src) ? src : []; } else { clone = src && isPlainObject(src) ? src : {}; } target[name] = extend(deep, clone, copy); } else if (copy !== undefined) { target[name] = copy; } } } } return target; }