removeRelationship(/* index, id, instance or sourceId, targetId */) { const me = this; const args = lang.toArray(arguments); let relationship; if (args.length === 1) { relationship = args[0]; if (!(relationship instanceof Relationship)) { if (lang.isNumber(relationship)) { relationship = me.relationships[relationship]; } else if (lang.isString(relationship)) { relationship = me.relationshipById[relationship]; } } } else { const sourceId = args[0]; const targetId = args[1]; const attrs = {}; attrs[CONST.ATTR_END1] = sourceId; attrs[CONST.ATTR_END2] = targetId; const relationshipNode = utils.findChildNode(me.relationshipsNode, { tagName: CONST.TAG_RELATIONSHIP, attributes: attrs, }); if (relationshipNode) relationship = me.relationshipById[relationshipNode.getAttribute(CONST.ATTR_ID)]; } if (relationship) { delete me.relationshipById[relationship.id]; me.relationships = lang.difference(me.relationships, [relationship]); relationship.destroy(); return me.setModifiedTime(); } return me; }
function declare(/* name, superClasses, protoObj */) { const args = lang.toArray(arguments); const lin = '_linearization'; const Tmp = function Tmp() {}; const name = lang.isString(args[0]) ? args.shift() : ''; let superClasses = lang.isArray(args[0]) || lang.isFunction(args[0]) ? args.shift() : []; superClasses = lang.isArray(superClasses) ? superClasses : [superClasses]; const finalProtoObj = args[0] ? args.shift() : {}; let bases = []; lang.each(superClasses, (clazz) => { clazz[lin] = clazz[lin] || [clazz]; bases.push(clazz[lin]); }); if (bases.length) { bases.push(superClasses); bases = c3mroMerge.apply(null, bases); } let ctor = function ctor() {}; const tempConstructor = finalProtoObj.constructor; if (tempConstructor !== Object.prototype.constructor) { ctor = tempConstructor; } ctor[lin] = [ctor].concat(bases); ctor.parents = lang.toArray(bases); let protoObj = {}; let uberClass; while ((uberClass = bases.pop())) { protoObj = lang.extend(protoObj, uberClass.prototype); Tmp.prototype = protoObj; protoObj.constructor = uberClass; protoObj = new Tmp(); } ctor.className = name; ctor.prototype = protoObj; ctor.prototype.constructor = ctor; lang.extend(ctor.prototype, finalProtoObj); return ctor; }