Nathan Sobo
1d634e471e
Revert "Don't obscure the last line of the editor with the horizontal scrollbar"
...
This reverts commit babbdbf9e5 .
2014-04-23 14:03:33 -06:00
Nathan Sobo
babbdbf9e5
Don't obscure the last line of the editor with the horizontal scrollbar
...
This assumes the scrollbar is 15px high, which is incorrect when using
overlay scrollbars or when the scrollbar is styled to have a different
height. We'll need to measure it in a subsequent commit.
2014-04-23 13:59:35 -06:00
Nathan Sobo
752aa9a8e9
Handle editor:page-up/down commands
2014-04-22 17:10:23 -06:00
Nathan Sobo
e4639281f8
Handle 'editor:scroll-to-cursor' command
...
Add Editor::scrollToCursorPosition in the model layer
2014-04-22 17:10:23 -06:00
Nathan Sobo
f53d489abb
Add DisplayBuffer::scrollToScreen/BufferPosition
...
Also add delegators in Editor and ReactEditorView
2014-04-22 17:10:23 -06:00
Nathan Sobo
1f768a21f0
Update absolute position of lines and line numbers when text changes
...
When lines are inserted or removed, we need to manually shift the
on-screen lines since everything is absolutely positioned now.
2014-04-22 17:10:22 -06:00
Nathan Sobo
22496ceeb1
WIP: Minimize paint when scrolling and composite lines with the GPU
2014-04-22 17:10:22 -06:00
Nathan Sobo
fdccc0bcc2
Measure DOM dimensions before rendering elements that depend on them
...
This commit breaks the initial render of the editor component into two
stages.
The first stage just renders the shell of the editor so the height,
width, line height, and default character width can be measured. Nothing
that depends on these values is rendered on the first render pass.
Once the editor component is mounted, all these values are measured and
we force another update, which fills in the lines, line numbers,
selections, etc.
We also refrain from assigning an explicit height and width on the
model if these values aren't explicitly styled in the DOM, and just
assume the editor will stretch to accommodate its contents.
2014-04-22 17:10:21 -06:00
Nathan Sobo
a0ff6f5325
Handle 'autoscroll' option in model when setting selected buffer range
2014-04-22 17:09:45 -06:00
Nathan Sobo
dd4b6a6d28
Don't render empty selections
2014-04-22 17:09:45 -06:00
Nathan Sobo
51ee591282
Don't render cursors for non-empty selections
2014-04-22 17:09:45 -06:00
Nathan Sobo
9b6fa967be
Handle the editor:consolidate-selections command in the React editor
2014-04-22 17:09:45 -06:00
Nathan Sobo
f02d956362
Preserve the only the target screen row when scrolling via mousewheel
...
When the target of a mousewheel event is removed, it breaks velocity
scrolling.
Previously, we were preserving the entire screen range when scrolling
with the mouse wheel, which caused a lot of DOM nodes to accumulate. Now
we only preserve the individual line and line number associated with the
target of the mousewheel event, moving them just off screen below all
the on-screen lines and line numbers. This keeps the number of DOM nodes
limited while retaining velocity effects.
2014-04-22 17:09:44 -06:00
Nathan Sobo
6607f99c6c
Use padding-top/bottom rather than spacer divs in lines and gutter
...
It creates a simpler DOM structure.
2014-04-22 17:09:44 -06:00
Nathan Sobo
ae9f79bfc4
Only add indent guide to trailing whitespace on whitespace-only lines
2014-04-22 17:09:44 -06:00
Nathan Sobo
0d03e388f1
💄 spec description
2014-04-22 17:09:42 -06:00
Nathan Sobo
e952ab2e02
Extract a LinesComponent
2014-04-22 17:09:42 -06:00
Nathan Sobo
5c2eb053d8
Extract an EditorScrollView component
2014-04-22 17:09:42 -06:00
Nathan Sobo
f1f93f2f70
Spy on setInterval explicitly when needed in EditorComponent spec
2014-04-22 17:09:41 -06:00
Nathan Sobo
de773e4f75
Revert "Remove setInterval spy. It's now spied in the spec helper w/ setTimeout"
...
This reverts commit 930f1d7f018bb9949b0ee0e4ca7330a8a4ce0ec7.
I actually don't want to globally spy on setInterval because it interferes with
expected behaviors and eventually I'd like both of these to be opt-in.
2014-04-22 17:09:41 -06:00
Nathan Sobo
ca4dd5a29a
Explicitly disable use of react editor in specs
2014-04-22 17:09:41 -06:00
Nathan Sobo
4b9871fa13
Enable advanced scroll management only when editor is used by react view
...
This preserves the original behavior of the editor model with respect
to scroll position and autoscroll unless it's being used by the react
component, which flips the ::manageScrollPosition flag to true.
2014-04-22 17:09:41 -06:00
Nathan Sobo
28dd7d4acd
Treat all whitespace lines as not having leading whitespace
...
Instead it's treated as all trailing whitespace, as it was originally.
2014-04-22 17:09:41 -06:00
Nathan Sobo
e3eb51c135
Don't expect trailing whitespace invisibles on soft-wrapped lines
...
Now that trailing whitespace status of tokens is assigned at
construction time, we no longer render invisibles at the end of
soft-wrapped lines. Pretty sure this is not a behavior we wanted anyway.
2014-04-22 17:09:41 -06:00
Nathan Sobo
9ec38ddb0d
Remove setInterval spy. It's now spied in the spec helper w/ setTimeout
2014-04-22 17:09:41 -06:00
Nathan Sobo
7a4dc0b9a4
Eliminate duplicate key to pass coffeelint
2014-04-22 17:09:40 -06:00
Nathan Sobo
495b1571ca
Add 'editor' class to ReactEditorView wrapper for backward compatibility
2014-04-22 17:09:40 -06:00
Nathan Sobo
59709a92ba
Include SpacePen wrapper view in spec
...
During the transition to React, it will be easier if the EditorComponent
assumes it's rendered inside the ReactEditorView. This will make it
easier to test compatibility with existing editor APIs.
2014-04-22 17:09:40 -06:00
Nathan Sobo
022f5ca219
Replace previous character when inserting accented characters
2014-04-22 17:09:40 -06:00
Nathan Sobo
96ebb9bf03
Correctly position cursor on mousedown when editor is scrolled left
2014-04-22 17:09:40 -06:00
Nathan Sobo
95b24fb933
Position the hidden input on the most recent cursor when in view
...
We won't position the hidden input out of the scroll view's bounds to
prevent Chromium's autoscrolling behavior.
2014-04-22 17:09:40 -06:00
Nathan Sobo
9bdc78df2e
Correctly render lines containing only whitespace
2014-04-22 17:09:40 -06:00
David Graham & Nathan Sobo
241731f9c8
Render indent guides on empty lines
2014-04-22 17:09:39 -06:00
David Graham & Nathan Sobo
6997adece9
Associate TokenizedLines with an ::indentLevel
...
This can be used to render the appropriate number of indent guide spans
for empty lines.
2014-04-22 17:09:39 -06:00
David Graham & Nathan Sobo
d0a917ed14
Prevent scrollLeft/scrollTop from going out of bounds
2014-04-22 17:09:39 -06:00
David Graham & Nathan Sobo
1c48f60e42
Render indent guide for react editors on non-empty lines
2014-04-22 17:09:39 -06:00
David Graham & Nathan Sobo
cf27826156
Mark tokens on whitespace-only lines as having leading whitespace
...
This makes it easy to decide to render the indent guide for a token. If
the token has leading whitespace, we can render it.
2014-04-22 17:09:39 -06:00
David Graham & Nathan Sobo
5e38add177
Only mark trailing whitespace on the last segment of a soft-wrapped line
2014-04-22 17:09:39 -06:00
David Graham & Nathan Sobo
b4af0a79d0
Mark tokens with leading/trailing whitespace when building TokenizedLine
2014-04-22 17:09:39 -06:00
David Graham & Nathan Sobo
985662b8f0
Only scroll in one direction a time with the mousewheel
2014-04-22 17:09:39 -06:00
David Graham & Nathan Sobo
cfdea7e73f
Update the scrollLeft of the model when the horizontal scrollbar changes
2014-04-22 17:09:39 -06:00
David Graham & Nathan Sobo
48135a1e8d
Update the horizontal scrollbar when scrollLeft changes in the model
2014-04-22 17:09:38 -06:00
Nathan Sobo
84bb624b5b
Set x-transform of .scroll-view-content based on the model's scrollLeft
2014-04-22 17:09:38 -06:00
Nathan Sobo
171631d20f
Autoscroll cursors horizontally at the model layer
...
Still need to respect the horizontal scroll position in the editor view
2014-04-22 17:09:38 -06:00
Nathan Sobo
486a7937b5
Render • instead of line number for soft-wrapped lines
2014-04-22 17:09:38 -06:00
Nathan Sobo
1162af61ed
Render a basic gutter
2014-04-22 17:09:38 -06:00
Nathan Sobo
0fd8c5441c
💄 spec organization
2014-04-22 17:09:38 -06:00
Nathan Sobo
f5551929d8
Account for half-visible lines in DisplayBuffer::getVisibleRowRange
...
We need to add 1 to the editor's height in lines, because it's possible
to have *partially visible* lines at the top and the bottom.
2014-04-22 17:09:38 -06:00
Nathan Sobo
4a501a7c31
Fix incorrect triple-click spec
2014-04-22 17:09:38 -06:00
Nathan Sobo
d0c61eb2be
Pause cursor blinking when the cursor moves
2014-04-22 17:09:38 -06:00