const sAssertGetAll = (editor: Editor, expected: Record<string, number>, name: string) => Step.sync(() => { const annotations = editor.annotator.getAll(name); const keys = Obj.keys(annotations); const sortedKeys = Arr.sort(keys); const expectedKeys = Arr.sort(Obj.keys(expected)); Assertions.assertEq('Checking keys of getAll response', expectedKeys, sortedKeys); Obj.each(annotations, (markers, uid) => { Assertions.assertEq('Checking number of markers for uid', expected[uid], markers.length); assertMarker(editor, { uid, name }, markers); }); });
const onNodeChange = Throttler.last(() => { const callbackMap = changeCallbacks.get(); const annotations = Arr.sort(Obj.keys(callbackMap)); Arr.each(annotations, (name) => { updateCallbacks(name, (data) => { const prev = data.previous.get(); identify(editor, Option.some(name)).fold( () => { if (prev.isSome()) { // Changed from something to nothing. fireNoAnnotation(name); data.previous.set(Option.none()); } }, ({ uid, name, elements }) => { // Changed from a different annotation (or nothing) if (! prev.is(uid)) { fireCallbacks(name, uid, elements); data.previous.set(Option.some(uid)); } } ); return { previous: data.previous, listeners: data.listeners }; }); }); }, 30);
const sortPatterns = <T extends Pattern>(patterns: T[]): T[] => { return Arr.sort(patterns, (a, b) => { if (a.start.length === b.start.length) { return 0; } return a.start.length > b.start.length ? -1 : 1; }); };
const getMaxHeight = (heights: number[]) => { return Arr.head(Arr.sort(heights, (a, b) => { if (a > b) { return -1; } else if (a < b) { return +1; } else { return 0; } })); };