/** * @module types */ import { YEvent } from '../utils/YEvent.js' import { Type } from '../structs/Type.js' // eslint-disable-line import { Transaction } from '../utils/Transaction.js' // eslint-disable-line /** * An Event that describes changes on a YXml Element or Yxml Fragment * * @protected */ export class YXmlEvent extends YEvent { /** * @param {Type} target The target on which the event is created. * @param {Set} subs The set of changed attributes. `null` is included if the * child list changed. * @param {Boolean} remote Whether this change was created by a remote peer. * @param {Transaction} transaction The transaction instance with wich the * change was created. */ constructor (target, subs, remote, transaction) { super(target) /** * The transaction instance for the computed change. * @type {Transaction} */ this._transaction = transaction /** * Whether the children changed. * @type {Boolean} */ this.childListChanged = false /** * Set of all changed attributes. * @type {Set} */ this.attributesChanged = new Set() /** * Whether this change was created by a remote peer. * @type {Boolean} */ this.remote = remote subs.forEach((sub) => { if (sub === null) { this.childListChanged = true } else { this.attributesChanged.add(sub) } }) } }