UNPKG

fabric-pure-browser

Version:

Fabric.js package with no node-specific dependencies (node-canvas, jsdom). The project is published once a day (in case if a new version appears) from 'master' branch of https://github.com/fabricjs/fabric.js repository. You can keep original imports in

76 lines (71 loc) 2.6 kB
(function() { /** * Copies all enumerable properties of one js object to another * this does not and cannot compete with generic utils. * Does not clone or extend fabric.Object subclasses. * This is mostly for internal use and has extra handling for fabricJS objects * it skips the canvas and group properties in deep cloning. * @memberOf fabric.util.object * @param {Object} destination Where to copy to * @param {Object} source Where to copy from * @param {Boolean} [deep] Whether to extend nested objects * @return {Object} */ function extend(destination, source, deep) { // JScript DontEnum bug is not taken care of // the deep clone is for internal use, is not meant to avoid // javascript traps or cloning html element or self referenced objects. if (deep) { if (!fabric.isLikelyNode && source instanceof Element) { // avoid cloning deep images, canvases, destination = source; } else if (source instanceof Array) { destination = []; for (var i = 0, len = source.length; i < len; i++) { destination[i] = extend({ }, source[i], deep); } } else if (source && typeof source === 'object') { for (var property in source) { if (property === 'canvas' || property === 'group') { // we do not want to clone this props at all. // we want to keep the keys in the copy destination[property] = null; } else if (source.hasOwnProperty(property)) { destination[property] = extend({ }, source[property], deep); } } } else { // this sounds odd for an extend but is ok for recursive use destination = source; } } else { for (var property in source) { destination[property] = source[property]; } } return destination; } /** * Creates an empty object and copies all enumerable properties of another object to it * This method is mostly for internal use, and not intended for duplicating shapes in canvas. * @memberOf fabric.util.object * @param {Object} object Object to clone * @param {Boolean} [deep] Whether to clone nested objects * @return {Object} */ //TODO: this function return an empty object if you try to clone null function clone(object, deep) { return extend({ }, object, deep); } /** @namespace fabric.util.object */ fabric.util.object = { extend: extend, clone: clone }; fabric.util.object.extend(fabric.util, fabric.Observable); })();