overleaf/services/web/frontend/js/features/source-editor/extensions/symbol-palette.ts
Tim Down 7f37ba737c Move source editor out of module (#12457)
* Update Copybara options in preparation for open-sourcing the source editor

* Move files

* Update paths

* Remove source-editor module and checks for its existence

* Explicitly mention CM6 license in files that contain code adapted from CM6

GitOrigin-RevId: 89b7cc2b409db01ad103198ccbd1b126ab56349b
2023-04-13 08:40:56 +00:00

39 lines
936 B
TypeScript

import { ViewPlugin } from '@codemirror/view'
import { EditorSelection } from '@codemirror/state'
export const symbolPalette = () => {
return ViewPlugin.define(view => {
const listener = (event: Event) => {
const symbol = (event as CustomEvent<{ command: string }>).detail
view.focus()
const spec = view.state.changeByRange(range => {
const changeSet = view.state.changes([
{
from: range.from,
to: range.to,
insert: symbol.command,
},
])
return {
range: EditorSelection.cursor(changeSet.mapPos(range.to, 1)),
changes: changeSet,
}
})
view.dispatch(spec, {
scrollIntoView: true,
})
}
window.addEventListener('editor:insert-symbol', listener)
return {
destroy() {
window.removeEventListener('editor:insert-symbol', listener)
},
}
})
}