Merge pull request #19418 from overleaf/mj-write-and-cite-custom-render

[web] Write & Cite autocomplete prototype

GitOrigin-RevId: f51edb9b1ab9cc2ac8f18277cb291ee87650c213
This commit is contained in:
Mathias Jakobsen 2024-07-23 10:33:46 +01:00 committed by Copybot
parent f4896b2152
commit 34422b1428
8 changed files with 33 additions and 18 deletions

13
package-lock.json generated
View file

@ -3274,9 +3274,9 @@
},
"node_modules/@codemirror/autocomplete": {
"version": "6.12.0",
"resolved": "git+ssh://git@github.com/overleaf/codemirror-autocomplete.git#51ba3679f062cd0d216095bc1dc0b0cf64576939",
"resolved": "git+ssh://git@github.com/overleaf/codemirror-autocomplete.git#7af69bc097a328a123f116c05787436e34e5b572",
"integrity": "sha512-cjfnTZXLQJ19SFIzsdW6HEVUgiZ9vJu16KwbfLIXu8pEz5B5stubsSFrYUw/vyFuvllaT7xVIEF+tiUaqwdVVA==",
"dev": true,
"license": "MIT",
"dependencies": {
"@codemirror/language": "^6.0.0",
"@codemirror/state": "^6.0.0",
@ -44276,7 +44276,7 @@
"@babel/preset-react": "^7.22.15",
"@babel/preset-typescript": "^7.23.2",
"@babel/register": "^7.22.15",
"@codemirror/autocomplete": "github:overleaf/codemirror-autocomplete#v6.12.0-overleaf-1",
"@codemirror/autocomplete": "github:overleaf/codemirror-autocomplete#v6.12.0-overleaf-2",
"@codemirror/commands": "^6.4.0",
"@codemirror/lang-markdown": "^6.2.4",
"@codemirror/language": "^6.10.0",
@ -47881,9 +47881,10 @@
"dev": true
},
"@codemirror/autocomplete": {
"version": "git+ssh://git@github.com/overleaf/codemirror-autocomplete.git#51ba3679f062cd0d216095bc1dc0b0cf64576939",
"version": "git+ssh://git@github.com/overleaf/codemirror-autocomplete.git#7af69bc097a328a123f116c05787436e34e5b572",
"integrity": "sha512-cjfnTZXLQJ19SFIzsdW6HEVUgiZ9vJu16KwbfLIXu8pEz5B5stubsSFrYUw/vyFuvllaT7xVIEF+tiUaqwdVVA==",
"dev": true,
"from": "@codemirror/autocomplete@github:overleaf/codemirror-autocomplete#v6.12.0-overleaf-1",
"from": "@codemirror/autocomplete@github:overleaf/codemirror-autocomplete#v6.12.0-overleaf-2",
"requires": {
"@codemirror/language": "^6.0.0",
"@codemirror/state": "^6.0.0",
@ -52596,7 +52597,7 @@
"@babel/preset-react": "^7.22.15",
"@babel/preset-typescript": "^7.23.2",
"@babel/register": "^7.22.15",
"@codemirror/autocomplete": "github:overleaf/codemirror-autocomplete#v6.12.0-overleaf-1",
"@codemirror/autocomplete": "github:overleaf/codemirror-autocomplete#v6.12.0-overleaf-2",
"@codemirror/commands": "^6.4.0",
"@codemirror/lang-markdown": "^6.2.4",
"@codemirror/language": "^6.10.0",

View file

@ -338,6 +338,7 @@ const _ProjectController = {
'track-pdf-download',
!anonymous && 'writefull-oauth-promotion',
'ieee-stylesheet',
'write-and-cite',
].filter(Boolean)
const getUserValues = async userId =>

View file

@ -1152,6 +1152,7 @@
"saving_notification_with_seconds": "",
"search": "",
"search_bib_files": "",
"search_by_citekey_author_year_title": "",
"search_command_find": "",
"search_command_replace": "",
"search_in_all_projects": "",

View file

@ -167,7 +167,7 @@ export const makeMultipleArgumentCompletionSource = (
CompletionBuilderOptions,
'completions' | 'context' | 'existingKeys' | 'from' | 'validFor'
>
) => CompletionResult | null
) => ReturnType<CompletionSource>
): CompletionSource => {
const completionSource: CompletionSource = (context: CompletionContext) => {
const token = context.tokenBefore(ifInSpec)

View file

@ -21,6 +21,10 @@ export function buildReferenceCompletions(
type: 'reference',
label: referenceKey,
extend: extendRequiredParameter,
deduplicate: {
key: referenceKey,
priority: 1,
},
})
}
}

View file

@ -21,7 +21,7 @@ export const ifInType = (
}
}
export function isInEmptyArgumentNodeForAutocomplete(state: EditorState) {
function isInEmptyArgumentNodeOfType(state: EditorState, types: string[]) {
const main = state.selection.main
if (!main.empty) {
return false
@ -44,8 +44,16 @@ export function isInEmptyArgumentNodeForAutocomplete(state: EditorState) {
return false
}
const ancestor = ancestorOfNodeWithType(
nodeLeft,
const ancestor = ancestorOfNodeWithType(nodeLeft, ...types)
if (!ancestor) {
return false
}
return ancestor.from === nodeLeft.from && ancestor.to === nodeRight.to
}
export function isInEmptyArgumentNodeForAutocomplete(state: EditorState) {
return isInEmptyArgumentNodeOfType(state, [
'EnvNameGroup',
'BibliographyStyleArgument',
'BibliographyArgument',
@ -53,11 +61,10 @@ export function isInEmptyArgumentNodeForAutocomplete(state: EditorState) {
'DocumentClassArgument',
'FilePathArgument',
'RefArgument',
'PackageArgument'
)
if (!ancestor) {
return false
}
return ancestor.from === nodeLeft.from && ancestor.to === nodeRight.to
'PackageArgument',
])
}
export function isInEmptyCiteArgumentNode(state: EditorState) {
return isInEmptyArgumentNodeOfType(state, ['BibKeyArgument'])
}

View file

@ -1692,6 +1692,7 @@
"saving_notification_with_seconds": "Saving __docname__... (__seconds__ seconds of unsaved changes)",
"search": "Search",
"search_bib_files": "Search by author, title, year",
"search_by_citekey_author_year_title": "Search by citation key, author, title, year",
"search_command_find": "Find",
"search_command_replace": "Replace",
"search_in_all_projects": "Search in all projects",

View file

@ -182,7 +182,7 @@
"@babel/preset-react": "^7.22.15",
"@babel/preset-typescript": "^7.23.2",
"@babel/register": "^7.22.15",
"@codemirror/autocomplete": "github:overleaf/codemirror-autocomplete#v6.12.0-overleaf-1",
"@codemirror/autocomplete": "github:overleaf/codemirror-autocomplete#v6.12.0-overleaf-2",
"@codemirror/commands": "^6.4.0",
"@codemirror/lang-markdown": "^6.2.4",
"@codemirror/language": "^6.10.0",