mirror of
https://github.com/yjs/yjs.git
synced 2025-12-16 19:57:45 +01:00
fixes for accepting / rejecting suggestions
This commit is contained in:
@@ -1081,7 +1081,6 @@ export class YText extends AbstractType {
|
|||||||
*/
|
*/
|
||||||
const formattingAttribution = object.assign({}, d.usedAttribution)
|
const formattingAttribution = object.assign({}, d.usedAttribution)
|
||||||
const attributesChanged = /** @type {{ [key: string]: Array<any> }} */ (formattingAttribution.attributes = object.assign({}, formattingAttribution.attributes ?? {}))
|
const attributesChanged = /** @type {{ [key: string]: Array<any> }} */ (formattingAttribution.attributes = object.assign({}, formattingAttribution.attributes ?? {}))
|
||||||
debugger
|
|
||||||
if (value === null) {
|
if (value === null) {
|
||||||
delete attributesChanged[key]
|
delete attributesChanged[key]
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -26,7 +26,8 @@ import {
|
|||||||
getItemCleanStart,
|
getItemCleanStart,
|
||||||
Transaction,
|
Transaction,
|
||||||
StructStore,
|
StructStore,
|
||||||
intersectSets
|
intersectSets,
|
||||||
|
ContentFormat
|
||||||
} from '../internals.js'
|
} from '../internals.js'
|
||||||
|
|
||||||
import * as error from 'lib0/error'
|
import * as error from 'lib0/error'
|
||||||
@@ -249,7 +250,7 @@ const getItemContent = (store, client, clock, len) => {
|
|||||||
if (diffStart > 0) {
|
if (diffStart > 0) {
|
||||||
content = content.splice(diffStart)
|
content = content.splice(diffStart)
|
||||||
}
|
}
|
||||||
if (len > 0) {
|
if (len < content.getLength()) {
|
||||||
content.splice(len)
|
content.splice(len)
|
||||||
}
|
}
|
||||||
return content
|
return content
|
||||||
@@ -266,14 +267,24 @@ const collectSuggestedChanges = (tr, am, start, end, collectAll) => {
|
|||||||
const inserts = createIdSet()
|
const inserts = createIdSet()
|
||||||
const deletes = createIdSet()
|
const deletes = createIdSet()
|
||||||
const store = am._nextDoc.store
|
const store = am._nextDoc.store
|
||||||
|
/**
|
||||||
|
* make sure to collect suggestions until all formats are closed
|
||||||
|
* @type {Set<string>}
|
||||||
|
*/
|
||||||
|
const openedCollectedFormats = new Set()
|
||||||
/**
|
/**
|
||||||
* @type {Item?}
|
* @type {Item?}
|
||||||
*/
|
*/
|
||||||
let item = getItem(store, start)
|
let item = getItem(store, start)
|
||||||
const endItem = start === end ? item : (end == null ? null : getItem(store, end))
|
const endItem = start === end ? item : (end == null ? null : getItem(store, end))
|
||||||
|
|
||||||
// walk to the left and find first un-attributed change that is rendered
|
// walk to the left and find first un-attributed change that is rendered
|
||||||
while (item.left != null) {
|
while (item.left != null) {
|
||||||
item = item.left
|
item = item.left
|
||||||
|
if (item.content instanceof ContentFormat && item.content.value == null) {
|
||||||
|
item = item.right
|
||||||
|
break
|
||||||
|
}
|
||||||
if (!item.deleted) {
|
if (!item.deleted) {
|
||||||
const slice = am.inserts.slice(item.id.client, item.id.clock, item.length)
|
const slice = am.inserts.slice(item.id.client, item.id.clock, item.length)
|
||||||
if (slice.some(s => s.attrs === null)) {
|
if (slice.some(s => s.attrs === null)) {
|
||||||
@@ -312,11 +323,19 @@ const collectSuggestedChanges = (tr, am, start, end, collectAll) => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
if (item.content instanceof ContentFormat) {
|
||||||
|
const {key, value} = item.content
|
||||||
|
if (value == null) {
|
||||||
|
openedCollectedFormats.delete(key)
|
||||||
|
} else {
|
||||||
|
openedCollectedFormats.add(key)
|
||||||
|
}
|
||||||
|
}
|
||||||
for (let i = 0; i < slice.length; i++) {
|
for (let i = 0; i < slice.length; i++) {
|
||||||
const s = slice[i]
|
const s = slice[i]
|
||||||
if (s.attrs != null) {
|
if (s.attrs != null) {
|
||||||
inserts.add(itemClient, s.clock, s.len)
|
inserts.add(itemClient, s.clock, s.len)
|
||||||
} else if (foundEndItem) {
|
} else if (foundEndItem && openedCollectedFormats.size === 0) {
|
||||||
break itemLoop
|
break itemLoop
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user