@atlaskit/editor-common
Version:
A package that contains common classes and components for editor and renderer
42 lines (41 loc) • 1.21 kB
JavaScript
import _defineProperty from "@babel/runtime/helpers/defineProperty";
// Ignored via go/ees005
// eslint-disable-next-line @typescript-eslint/no-explicit-any
class ADFTraversor {
// Ignored via go/ees005
// eslint-disable-next-line @typescript-eslint/no-explicit-any
constructor(doc) {
// Ignored via go/ees005
// eslint-disable-next-line @typescript-eslint/no-explicit-any
_defineProperty(this, "subscribers", new Map());
this.doc = doc;
}
subscribe(type, callback) {
const callbacks = this.subscribers.get(type);
if (!callbacks) {
this.subscribers.set(type, [callback]);
} else {
callbacks.push(callback);
}
}
exec() {
if (!this.doc || !Array.isArray(this.doc.content)) {
return;
}
let candidates = this.doc.content.slice(0);
while (candidates.length) {
const node = candidates.shift();
if (Array.isArray(node.content)) {
candidates = candidates.concat(node.content);
}
const callbacks = this.subscribers.get(node.type);
if (!callbacks) {
continue;
}
for (let i = 0; i < callbacks.length; i++) {
callbacks[i](node);
}
}
}
}
export default ADFTraversor;