skip formatting cleanup when the ytext doesnt have any ContentFormat
also skip iterating the deleted structs entirely when none of the changed ytext had ContentFormat
This commit is contained in:
		
							parent
							
								
									c398448152
								
							
						
					
					
						commit
						08250a9a6c
					
				@ -508,14 +508,16 @@ export const cleanupYTextAfterTransaction = transaction => {
 | 
				
			|||||||
      if (item instanceof GC || needFullCleanup.has(/** @type {YText} */ (item.parent))) {
 | 
					      if (item instanceof GC || needFullCleanup.has(/** @type {YText} */ (item.parent))) {
 | 
				
			||||||
        return
 | 
					        return
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
      const parent = /** @type {YText} */ (item.parent)
 | 
					      const parent = item.parent
 | 
				
			||||||
      if (item.content.constructor === ContentFormat) {
 | 
					      if (parent instanceof YText && parent._needFormattingCleanup) {
 | 
				
			||||||
        needFullCleanup.add(parent)
 | 
					        if (item.content.constructor === ContentFormat) {
 | 
				
			||||||
      } else {
 | 
					          needFullCleanup.add(parent)
 | 
				
			||||||
        // If no formatting attribute was inserted or deleted, we can make due with contextless
 | 
					        } else {
 | 
				
			||||||
        // formatting cleanups.
 | 
					          // If no formatting attribute was inserted or deleted, we can make due with contextless
 | 
				
			||||||
        // Contextless: it is not necessary to compute currentAttributes for the affected position.
 | 
					          // formatting cleanups.
 | 
				
			||||||
        cleanupContextlessFormattingGap(t, item)
 | 
					          // Contextless: it is not necessary to compute currentAttributes for the affected position.
 | 
				
			||||||
 | 
					          cleanupContextlessFormattingGap(t, item)
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    })
 | 
					    })
 | 
				
			||||||
    // If a formatting item was inserted, we simply clean the whole type.
 | 
					    // If a formatting item was inserted, we simply clean the whole type.
 | 
				
			||||||
@ -862,6 +864,7 @@ export class YText extends AbstractType {
 | 
				
			|||||||
     * @type {Array<ArraySearchMarker>}
 | 
					     * @type {Array<ArraySearchMarker>}
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    this._searchMarker = []
 | 
					    this._searchMarker = []
 | 
				
			||||||
 | 
					    this._needFormattingCleanup = false
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /**
 | 
					  /**
 | 
				
			||||||
@ -910,9 +913,18 @@ export class YText extends AbstractType {
 | 
				
			|||||||
    super._callObserver(transaction, parentSubs)
 | 
					    super._callObserver(transaction, parentSubs)
 | 
				
			||||||
    const event = new YTextEvent(this, transaction, parentSubs)
 | 
					    const event = new YTextEvent(this, transaction, parentSubs)
 | 
				
			||||||
    callTypeObservers(this, transaction, event)
 | 
					    callTypeObservers(this, transaction, event)
 | 
				
			||||||
 | 
					    this._needFormattingCleanup = false
 | 
				
			||||||
    // If a remote change happened, we try to cleanup potential formatting duplicates.
 | 
					    // If a remote change happened, we try to cleanup potential formatting duplicates.
 | 
				
			||||||
    if (!transaction.local) {
 | 
					    if (!transaction.local && !transaction._needFormattingCleanup) {
 | 
				
			||||||
      transaction._needFormattingCleanup = true
 | 
					      let item = this._start
 | 
				
			||||||
 | 
					      while (item) {
 | 
				
			||||||
 | 
					        if (!item.deleted && item.content.constructor === ContentFormat) {
 | 
				
			||||||
 | 
					          this._needFormattingCleanup = true
 | 
				
			||||||
 | 
					          transaction._needFormattingCleanup = true
 | 
				
			||||||
 | 
					          break
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        item = item.right
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user