Show foldable icon on the last screen row belonging to a buffer row

This commit is contained in:
Antonio Scandurra
2017-05-16 14:26:53 +02:00
parent 4c5127ca2f
commit ad6202cadb
2 changed files with 22 additions and 3 deletions

View File

@@ -210,6 +210,16 @@ describe('TextEditorComponent', () => {
expect(lineNumberNodeForScreenRow(component, 0).querySelector('.foldable')).toBeNull()
})
it('shows the foldable icon on the last screen row of a buffer row that can be folded', async () => {
const {component, element, editor} = buildComponent({text: 'abc\n de\nfghijklm\n no', softWrapped: true})
await setEditorWidthInCharacters(component, 5)
expect(lineNumberNodeForScreenRow(component, 0).classList.contains('foldable')).toBe(true)
expect(lineNumberNodeForScreenRow(component, 1).classList.contains('foldable')).toBe(false)
expect(lineNumberNodeForScreenRow(component, 2).classList.contains('foldable')).toBe(false)
expect(lineNumberNodeForScreenRow(component, 3).classList.contains('foldable')).toBe(true)
expect(lineNumberNodeForScreenRow(component, 4).classList.contains('foldable')).toBe(false)
})
it('renders dummy vertical and horizontal scrollbars when content overflows', async () => {
const {component, element, editor} = buildComponent({height: 100, width: 100})
const verticalScrollbar = component.refs.verticalScrollbar.element

View File

@@ -823,7 +823,7 @@ class TextEditorComponent {
const endRow = this.getRenderedEndRow()
const renderedRowCount = this.getRenderedRowCount()
const bufferRows = model.bufferRowsForScreenRows(startRow, endRow - 1)
const bufferRows = model.bufferRowsForScreenRows(startRow, endRow)
const keys = new Array(endRow - startRow)
const foldableFlags = new Array(endRow - startRow)
const softWrappedFlags = new Array(endRow - startRow)
@@ -836,17 +836,26 @@ class TextEditorComponent {
if (bufferRow === previousBufferRow) {
softWrapCount++
softWrappedFlags[i] = true
foldableFlags[i] = false
keys[i] = bufferRow + '-' + softWrapCount
} else {
softWrapCount = 0
softWrappedFlags[i] = false
foldableFlags[i] = model.isFoldableAtBufferRow(bufferRow)
keys[i] = bufferRow
}
const nextBufferRow = bufferRows[i + 1]
if (bufferRow !== nextBufferRow) {
foldableFlags[i] = model.isFoldableAtBufferRow(bufferRow)
} else {
foldableFlags[i] = false
}
previousBufferRow = bufferRow
}
// Delete extra buffer row at the end because it's not currently on screen.
bufferRows.pop()
this.lineNumbersToRender.bufferRows = bufferRows
this.lineNumbersToRender.keys = keys
this.lineNumbersToRender.foldableFlags = foldableFlags