Skip to content

Commit ba8052f

Browse files
authored
Merge pull request #899 from streamich/peritext-ui-events
Peritext UI events location
2 parents 4ecf757 + 5c02568 commit ba8052f

31 files changed

+91
-83
lines changed

src/json-crdt-peritext-ui/events/PeritextEventTarget.ts renamed to src/json-crdt-extensions/peritext/events/PeritextEventTarget.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import {SubscriptionEventTarget} from '../../util/events/TypedEventTarget';
1+
import {SubscriptionEventTarget} from '../../../util/events/TypedEventTarget';
22
import type {
33
PeritextEventDetailMap,
44
CursorDetail,

src/json-crdt-peritext-ui/events/__tests__/cursor.spec.ts renamed to src/json-crdt-extensions/peritext/events/__tests__/cursor.spec.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
import {CursorAnchor} from '../../../json-crdt-extensions';
2-
import {type Kit, runAlphabetKitTestSuite} from '../../../json-crdt-extensions/peritext/__tests__/setup';
1+
import {CursorAnchor} from '../../../../json-crdt-extensions';
2+
import {type Kit, runAlphabetKitTestSuite} from '../../../../json-crdt-extensions/peritext/__tests__/setup';
33
import {PeritextEventDefaults} from '../defaults/PeritextEventDefaults';
44
import {PeritextEventTarget} from '../PeritextEventTarget';
55

src/json-crdt-peritext-ui/events/__tests__/delete.spec.ts renamed to src/json-crdt-extensions/peritext/events/__tests__/delete.spec.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import {type Kit, runAlphabetKitTestSuite} from '../../../json-crdt-extensions/peritext/__tests__/setup';
1+
import {type Kit, runAlphabetKitTestSuite} from '../../../../json-crdt-extensions/peritext/__tests__/setup';
22
import {PeritextEventDefaults} from '../defaults/PeritextEventDefaults';
33
import {PeritextEventTarget} from '../PeritextEventTarget';
44

src/json-crdt-peritext-ui/events/__tests__/inline.spec.ts renamed to src/json-crdt-extensions/peritext/events/__tests__/inline.spec.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import {type Kit, runAlphabetKitTestSuite} from '../../../json-crdt-extensions/peritext/__tests__/setup';
1+
import {type Kit, runAlphabetKitTestSuite} from '../../../../json-crdt-extensions/peritext/__tests__/setup';
22
import {PeritextEventDefaults} from '../defaults/PeritextEventDefaults';
33
import {PeritextEventTarget} from '../PeritextEventTarget';
44

src/json-crdt-peritext-ui/events/__tests__/insert.spec.ts renamed to src/json-crdt-extensions/peritext/events/__tests__/insert.spec.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import {type Kit, runAlphabetKitTestSuite} from '../../../json-crdt-extensions/peritext/__tests__/setup';
1+
import {type Kit, runAlphabetKitTestSuite} from '../../../../json-crdt-extensions/peritext/__tests__/setup';
22
import {PeritextEventDefaults} from '../defaults/PeritextEventDefaults';
33
import {PeritextEventTarget} from '../PeritextEventTarget';
44

src/json-crdt-peritext-ui/events/__tests__/marker.spec.ts renamed to src/json-crdt-extensions/peritext/events/__tests__/marker.spec.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import {createEvents} from '..';
2-
import {type Kit, runAlphabetKitTestSuite} from '../../../json-crdt-extensions/peritext/__tests__/setup';
3-
import {SliceTypeCon} from '../../../json-crdt-extensions/peritext/slice/constants';
4-
import {create as createTransfer} from '../../../json-crdt-extensions/peritext/transfer/create';
2+
import {type Kit, runAlphabetKitTestSuite} from '../../../../json-crdt-extensions/peritext/__tests__/setup';
3+
import {SliceTypeCon} from '../../../../json-crdt-extensions/peritext/slice/constants';
4+
import {create as createTransfer} from '../../../../json-crdt-extensions/peritext/transfer/create';
55

66
const testSuite = (getKit: () => Kit) => {
77
const setup = () => {

src/json-crdt-peritext-ui/events/clipboard/DomClipboard.ts renamed to src/json-crdt-extensions/peritext/events/clipboard/DomClipboard.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import {saveSelection} from '../../web/util';
1+
import {saveSelection} from '../../../../util/dom';
22
import type {PeritextClipboard, PeritextClipboardData} from './types';
33

44
const toText = (buf: Uint8Array) => new TextDecoder().decode(buf);

src/json-crdt-peritext-ui/events/defaults/PeritextEventDefaults.ts renamed to src/json-crdt-extensions/peritext/events/defaults/PeritextEventDefaults.ts

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,18 @@
1-
import {Anchor} from '../../../json-crdt-extensions/peritext/rga/constants';
1+
import {Anchor} from '../../../../json-crdt-extensions/peritext/rga/constants';
22
import {placeCursor} from './annals';
3-
import {Cursor} from '../../../json-crdt-extensions/peritext/editor/Cursor';
4-
import {CursorAnchor, type Peritext} from '../../../json-crdt-extensions/peritext';
5-
import {PersistedSlice} from '../../../json-crdt-extensions/peritext/slice/PersistedSlice';
6-
import type {Range} from '../../../json-crdt-extensions/peritext/rga/Range';
7-
import type {PeritextDataTransfer} from '../../../json-crdt-extensions/peritext/transfer/PeritextDataTransfer';
3+
import {Cursor} from '../../../../json-crdt-extensions/peritext/editor/Cursor';
4+
import {CursorAnchor, type Peritext} from '../../../../json-crdt-extensions/peritext';
5+
import {PersistedSlice} from '../../../../json-crdt-extensions/peritext/slice/PersistedSlice';
6+
import type {Range} from '../../../../json-crdt-extensions/peritext/rga/Range';
7+
import type {PeritextDataTransfer} from '../../../../json-crdt-extensions/peritext/transfer/PeritextDataTransfer';
88
import type {PeritextEventHandlerMap, PeritextEventTarget} from '../PeritextEventTarget';
9-
import type {EditorSlices} from '../../../json-crdt-extensions/peritext/editor/EditorSlices';
9+
import type {EditorSlices} from '../../../../json-crdt-extensions/peritext/editor/EditorSlices';
1010
import type * as events from '../types';
1111
import type {PeritextClipboard, PeritextClipboardData} from '../clipboard/types';
12-
import type {UndoCollector} from '../../types';
12+
import type {UndoCollector} from './types';
1313
import type {UiHandle} from './ui/UiHandle';
14-
import type {Point} from '../../../json-crdt-extensions/peritext/rga/Point';
15-
import type {EditorUi} from '../../../json-crdt-extensions/peritext/editor/types';
14+
import type {Point} from '../../../../json-crdt-extensions/peritext/rga/Point';
15+
import type {EditorUi} from '../../../../json-crdt-extensions/peritext/editor/types';
1616

1717
const toText = (buf: Uint8Array) => new TextDecoder().decode(buf);
1818

src/json-crdt-peritext-ui/events/defaults/annals.ts renamed to src/json-crdt-extensions/peritext/events/defaults/annals.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
import type {Peritext} from '../../../json-crdt-extensions';
2-
import {Anchor} from '../../../json-crdt-extensions/peritext/rga/constants';
3-
import {DelOp, equal, InsArrOp, InsBinOp, InsStrOp, type Patch, Timestamp} from '../../../json-crdt-patch';
4-
import type {Range} from '../../../json-crdt-extensions/peritext/rga/Range';
1+
import {Anchor} from '../../../../json-crdt-extensions/peritext/rga/constants';
2+
import {DelOp, equal, InsArrOp, InsBinOp, InsStrOp, type Patch, Timestamp} from '../../../../json-crdt-patch';
3+
import type {Peritext} from '../../../../json-crdt-extensions';
4+
import type {Range} from '../../../../json-crdt-extensions/peritext/rga/Range';
55

66
/**
77
* Given an undo/redo patch/batch, calculates a good cursor position to place
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
export interface UndoCollector {
2+
/**
3+
* Mark the currently minted change {@link Patch} in {@link Builder} for undo.
4+
* It will be picked up during the next flush.
5+
*/
6+
capture(): void;
7+
}

src/json-crdt-peritext-ui/events/defaults/ui/UiHandle.ts renamed to src/json-crdt-extensions/peritext/events/defaults/ui/UiHandle.ts

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
1-
import {tick} from '../../../../json-crdt-patch';
2-
import {Anchor} from '../../../../json-crdt-extensions/peritext/rga/constants';
3-
import type {Peritext} from '../../../../json-crdt-extensions';
4-
import type {Point} from '../../../../json-crdt-extensions/peritext/rga/Point';
5-
import type {Rect} from '../../../web/types';
6-
import type {PeritextUiApi, UiLineEdge, UiLineInfo} from './types';
1+
import {Anchor} from '../../../../../json-crdt-extensions/peritext/rga/constants';
2+
import type {Peritext} from '../../../../../json-crdt-extensions';
3+
import type {Point} from '../../../../../json-crdt-extensions/peritext/rga/Point';
4+
import type {PeritextUiApi, Rect, UiLineEdge, UiLineInfo} from './types';
75

86
export class UiHandle {
97
constructor(

src/json-crdt-peritext-ui/events/defaults/ui/types.ts renamed to src/json-crdt-extensions/peritext/events/defaults/ui/types.ts

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,12 @@
1-
import type {Point} from '../../../../json-crdt-extensions/peritext/rga/Point';
2-
import type {ITimestampStruct} from '../../../../json-crdt-patch';
3-
import type {Rect} from '../../../web/types';
1+
import type {Point} from '../../../../../json-crdt-extensions/peritext/rga/Point';
2+
import type {ITimestampStruct} from '../../../../../json-crdt-patch';
3+
4+
export interface Rect {
5+
x: number;
6+
y: number;
7+
width: number;
8+
height: number;
9+
}
410

511
/**
612
* API which a rendering surface (UI) must implement to be used by the event

src/json-crdt-peritext-ui/events/index.ts renamed to src/json-crdt-extensions/peritext/events/index.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import {PeritextEventDefaults, type PeritextEventDefaultsOpts} from './defaults/PeritextEventDefaults';
22
import {PeritextEventTarget} from './PeritextEventTarget';
33
import {DomClipboard} from './clipboard/DomClipboard';
4-
import {create as createDataTransfer} from '../../json-crdt-extensions/peritext/transfer/create';
5-
import type {Peritext} from '../../json-crdt-extensions';
4+
import {create as createDataTransfer} from '../../../json-crdt-extensions/peritext/transfer/create';
5+
import type {Peritext} from '../../../json-crdt-extensions';
66

77
/**
88
* @todo Move into separately importable file.

src/json-crdt-peritext-ui/events/types.ts renamed to src/json-crdt-extensions/peritext/events/types.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1-
import type {Point} from '../../json-crdt-extensions/peritext/rga/Point';
2-
import type {EditorPosition, EditorSelection} from '../../json-crdt-extensions/peritext/editor/types';
3-
import type {SliceType} from '../../json-crdt-extensions/peritext/slice/types';
4-
import type {Patch} from '../../json-crdt-patch';
5-
import type {Cursor} from '../../json-crdt-extensions/peritext/editor/Cursor';
6-
import type {Range} from '../../json-crdt-extensions/peritext/rga/Range';
1+
import type {Point} from '../../../json-crdt-extensions/peritext/rga/Point';
2+
import type {EditorPosition, EditorSelection} from '../../../json-crdt-extensions/peritext/editor/types';
3+
import type {SliceType} from '../../../json-crdt-extensions/peritext/slice/types';
4+
import type {Patch} from '../../../json-crdt-patch';
5+
import type {Cursor} from '../../../json-crdt-extensions/peritext/editor/Cursor';
6+
import type {Range} from '../../../json-crdt-extensions/peritext/rga/Range';
77

88
/**
99
* Dispatched every time any other event is dispatched.

src/json-crdt-peritext-ui/plugins/cursor/state.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import {ValueSyncStore} from '../../../util/events/sync-store';
2-
import type {ChangeDetail} from '../../events/types';
2+
import type {ChangeDetail} from '../../../json-crdt-extensions/peritext/events';
33
import type {PeritextSurfaceState, UiLifeCycles} from '../../web';
44

55
export class CursorState implements UiLifeCycles {

src/json-crdt-peritext-ui/plugins/minimal/RenderPeritext.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@ import * as React from 'react';
22
import {Chrome} from './Chrome';
33
import {context, type MinimalPluginContextValue} from './context';
44
import {ValueSyncStore} from '../../../util/events/sync-store';
5-
import type {ChangeDetail} from '../../events/types';
65
import type {PeritextSurfaceState} from '../../web';
6+
import type {ChangeDetail} from '../../../json-crdt-extensions/peritext/events';
77

88
export interface RenderPeritextProps {
99
ctx: PeritextSurfaceState;

src/json-crdt-peritext-ui/plugins/toolbar/cursor/caret/CaretBottomOverlay/index.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import * as React from 'react';
33
import {FormattingsManagePane} from '../../../formatting/FormattingsManagePane';
44
import {BottomPanePortal} from '../../util/BottomPanePortal';
55
import {useToolbarPlugin} from '../../../context';
6-
import type {PeritextEventDetailMap} from '../../../../../events';
6+
import type {PeritextEventDetailMap} from '../../../../../../json-crdt-extensions/peritext/events';
77
import type {CaretViewProps} from '../../../../../web/react/cursor/CaretView';
88

99
const isDirectCaretPlacement = (event: PeritextEventDetailMap['change']['ev'] | undefined): boolean => {

src/json-crdt-peritext-ui/plugins/toolbar/state/ToolbarState.tsx

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,14 @@ import {SliceTypeCon} from '../../../../json-crdt-extensions/peritext/slice/cons
1212
import {NewFormatting} from './formattings';
1313
import * as behavior from '../formatting/tags';
1414
import type {UiLifeCycles} from '../../../web/types';
15-
import type {BufferDetail, PeritextCursorEvent, PeritextEventDetailMap} from '../../../events/types';
1615
import type {PeritextSurfaceState} from '../../../web';
1716
import type {MenuItem} from '../types';
1817
import type {ToolbarPluginOpts} from '../ToolbarPlugin';
18+
import type {
19+
BufferDetail,
20+
PeritextCursorEvent,
21+
PeritextEventDetailMap,
22+
} from '../../../../json-crdt-extensions/peritext/events';
1923

2024
export class ToolbarState implements UiLifeCycles {
2125
public readonly txt: Peritext;

src/json-crdt-peritext-ui/types.ts

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,3 @@
1-
export interface UndoCollector {
2-
/**
3-
* Mark the currently minted change {@link Patch} in {@link Builder} for undo.
4-
* It will be picked up during the next flush.
5-
*/
6-
capture(): void;
7-
}
8-
91
export interface UndoManager {
102
push<U, R>(undo: UndoItem<U, R>): void;
113
undo(): void;

src/json-crdt-peritext-ui/web/dom/CursorController.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,10 @@ import {ElementAttr} from '../constants';
33
import {throttle} from '../../../util/throttle';
44
import {ValueSyncStore} from '../../../util/events/sync-store';
55
import type {Printable} from 'tree-dump';
6-
import type {PeritextEventTarget} from '../../events/PeritextEventTarget';
76
import type {UiLifeCycles} from '../types';
87
import type {Inline} from '../../../json-crdt-extensions/peritext/block/Inline';
98
import type {DomController} from './DomController';
9+
import type {PeritextEventTarget} from '../../../json-crdt-extensions/peritext/events/PeritextEventTarget';
1010

1111
/**
1212
* Controller for handling text selection and cursor movements. Listens to

src/json-crdt-peritext-ui/web/dom/DomController.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,16 +8,16 @@ import {CompositionController} from './CompositionController';
88
import {AnnalsController} from './annals/AnnalsController';
99
import {ElementAttr} from '../constants';
1010
import {Anchor} from '../../../json-crdt-extensions/peritext/rga/constants';
11-
import {UiHandle} from '../../events/defaults/ui/UiHandle';
1211
import {compare, type ITimestampStruct} from '../../../json-crdt-patch';
12+
import {UiHandle} from '../../../json-crdt-extensions/peritext/events/defaults/ui/UiHandle';
1313
import type {Point} from '../../../json-crdt-extensions/peritext/rga/Point';
14-
import type {PeritextEventDefaults} from '../../events/defaults/PeritextEventDefaults';
1514
import type {Log} from '../../../json-crdt/log/Log';
16-
import type {PeritextEventTarget} from '../../events/PeritextEventTarget';
1715
import type {Rect, UiLifeCycles} from '../types';
1816
import type {Inline, Peritext} from '../../../json-crdt-extensions';
1917
import type {Range} from '../../../json-crdt-extensions/peritext/rga/Range';
20-
import type {PeritextUiApi} from '../../events/defaults/ui/types';
18+
import type {PeritextEventTarget} from '../../../json-crdt-extensions/peritext/events/PeritextEventTarget';
19+
import type {PeritextUiApi} from '../../../json-crdt-extensions/peritext/events/defaults/ui/types';
20+
import type {PeritextEventDefaults} from '../../../json-crdt-extensions/peritext/events/defaults/PeritextEventDefaults';
2121

2222
export class DomController implements UiLifeCycles, Printable, PeritextUiApi {
2323
public readonly txt: Peritext;

src/json-crdt-peritext-ui/web/dom/InputController.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import {unit} from '../util';
22
import {SliceTypeCon} from '../../../json-crdt-extensions/peritext/slice/constants';
33
import type {Peritext} from '../../../json-crdt-extensions/peritext';
4-
import type {PeritextEventTarget} from '../../events/PeritextEventTarget';
4+
import type {PeritextEventTarget} from '../../../json-crdt-extensions/peritext/events/PeritextEventTarget';
55
import type {TypedEventTarget} from '../../../util/events/TypedEventTarget';
66
import type {UiLifeCycles} from '../types';
77
import type {DomController} from './DomController';

src/json-crdt-peritext-ui/web/dom/annals/AnnalsController.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,10 @@ import {printTree, type Printable} from 'tree-dump';
33
import type {Patch} from '../../../../json-crdt-patch';
44
import type {Peritext} from '../../../../json-crdt-extensions';
55
import type {UiLifeCycles} from '../../types';
6-
import type {RedoCallback, RedoItem, UndoCallback, UndoCollector, UndoItem} from '../../../types';
6+
import type {RedoCallback, RedoItem, UndoCallback, UndoItem} from '../../../types';
77
import type {Log} from '../../../../json-crdt/log/Log';
8-
import type {PeritextEventTarget} from '../../../events/PeritextEventTarget';
8+
import type {UndoCollector} from '../../../../json-crdt-extensions/peritext/events/defaults/types';
9+
import type {PeritextEventTarget} from '../../../../json-crdt-extensions/peritext/events/PeritextEventTarget';
910

1011
export interface UndoRedoControllerOpts {
1112
log: Log;

src/json-crdt-peritext-ui/web/dom/annals/WebUndo.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import {saveSelection} from '../../util';
1+
import {saveSelection} from '../../../../util/dom';
22
import type {UndoManager, UndoItem} from '../../../types';
33
import type {UiLifeCycles} from '../../types';
44

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
export * from './react';
2+
export * from './types';
23
export {PeritextSurfaceState} from './state';
3-
export {UiLifeCycles, Rect} from './types';
4+
export {UiLifeCycles} from './types';

src/json-crdt-peritext-ui/web/react/PeritextView.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,10 @@ import {CssClass} from '../constants';
44
import {CursorPlugin} from '../../plugins/cursor';
55
import {defaultPlugin} from '../../plugins/minimal';
66
import {PeritextSurfaceState} from '../state';
7-
import {createEvents} from '../../events';
87
import {context} from './context';
98
import {BlockView} from './BlockView';
109
import {useBehaviorSubject} from 'nice-ui/lib/hooks/useBehaviorSubject';
10+
import {createEvents} from '../../../json-crdt-extensions/peritext/events';
1111
import type {PeritextPlugin} from './types';
1212
import type {Peritext} from '../../../json-crdt-extensions';
1313

src/json-crdt-peritext-ui/web/state/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import {Log} from '../../../json-crdt/log/Log';
33
import {DomController} from '../dom/DomController';
44
import type {PeritextPlugin} from '../react/types';
55
import type {Peritext} from '../../../json-crdt-extensions/peritext/Peritext';
6-
import type {PeritextEventDefaults} from '../../events/defaults/PeritextEventDefaults';
6+
import type {PeritextEventDefaults} from '../../../json-crdt-extensions/peritext/events/defaults/PeritextEventDefaults';
77
import type {UiLifeCycles} from '../types';
88

99
export class PeritextSurfaceState implements UiLifeCycles {

src/json-crdt-peritext-ui/web/types.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,4 +11,4 @@ export interface UiLifeCycles {
1111
start(): () => void;
1212
}
1313

14-
export type Rect = Pick<DOMRect, 'x' | 'y' | 'width' | 'height'>;
14+
export {Rect} from '../../json-crdt-extensions/peritext/events/defaults/ui/types';

src/json-crdt-peritext-ui/web/util.ts

Lines changed: 0 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -14,23 +14,6 @@ export const getCursorPosition: GetCursorPosition =
1414
export const unit = (event: KeyboardEvent): '' | 'word' | 'vline' =>
1515
event.metaKey ? 'vline' : event.altKey || event.ctrlKey ? 'word' : '';
1616

17-
/**
18-
* Save the current browser selection, so that it can be restored later. Returns
19-
* a callback to restore the selection.
20-
*
21-
* @returns Callback to restore the selection.
22-
*/
23-
export const saveSelection = (): (() => void) | undefined => {
24-
const selection = window?.getSelection();
25-
if (!selection) return;
26-
const ranges: Range[] = [];
27-
for (let i = 0; i < selection.rangeCount; i++) ranges.push(selection.getRangeAt(i));
28-
return () => {
29-
selection.removeAllRanges();
30-
for (const range of ranges) selection.addRange(range);
31-
};
32-
};
33-
3417
export const getDomain = (url: string): string | undefined =>
3518
url.match(/^(?:[^:\/]+:)?(?:\/{1,5})?(([^\/$ \.]+)\.([^\/$ ]+))/i)?.[1];
3619

src/util/dom.ts

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
/**
2+
* Save the current browser selection, so that it can be restored later. Returns
3+
* a callback to restore the selection.
4+
*
5+
* @returns Callback to restore the selection.
6+
*/
7+
export const saveSelection = (): (() => void) | undefined => {
8+
const selection = window?.getSelection();
9+
if (!selection) return;
10+
const ranges: Range[] = [];
11+
for (let i = 0; i < selection.rangeCount; i++) ranges.push(selection.getRangeAt(i));
12+
return () => {
13+
selection.removeAllRanges();
14+
for (const range of ranges) selection.addRange(range);
15+
};
16+
};

0 commit comments

Comments
 (0)