function PaneWrapper (Wrappee, opts) { assert(validate.isInteger(opts.x), `${opts.x} is not an integer`) assert(validate.isInteger(opts.y), `${opts.y} is not an integer`) assert(validate.isInteger(opts.width), `${opts.width} is not an integer`) assert(validate.isInteger(opts.height), `${opts.height} is not an integer`) const offset = (opts.grid && opts.grid.offset) || { x: 0, y: 0 } const wrapped = getWrappedObject(Wrappee, opts, offset) if (typeof wrapped.setBounds === 'function') { const currentBounds = wrapped.getBounds() wrapped.setBounds(Object.assign({}, currentBounds, { x: opts.x + offset.x, y: opts.y + offset.y, width: opts.width, height: opts.height })) } if (!validate.isDefined(opts.id) && !validate.isDefined(wrapped.id)) { if (typeof wrapped.close === 'function') wrapped.close() throw new Error('id is not defined') } let state = { wrapped, grid: opts.grid, id: opts.id || wrapped.id, width: opts.width, height: opts.height, x: opts.x, y: opts.y } const emitter = new EventEmitter() return Object.assign( state, { on: emitter.on, once: emitter.once, emit: emitter.emit, removeListener: emitter.removeListener, removeAllListeners: emitter.removeAllListeners // TODO: rest of relevant emitter methods }, sizeChanger(state), locationChanger(state), directionalResizer(state), destructor(state) ) }
getPane: function getPane (id) { const pane = state.panes.find(w => w.id === id) assert(validate.isDefined(pane), `${id} does not exist`) return pane }
.filter(p => validate.isDefined(pane.id) && validate.isDefined(p.id) ? p.id !== pane.id : true