@@ -9,21 +9,52 @@ import { updateGutterSpace } from "./update_display"
99export function alignHorizontally ( cm ) {
1010 let display = cm . display , view = display . view
1111 if ( ! display . alignWidgets && ( ! display . gutters . firstChild || ! cm . options . fixedGutter ) ) return
12- let comp = compensateForHScroll ( display ) - display . scroller . scrollLeft + cm . doc . scrollLeft
13- let gutterW = display . gutters . offsetWidth , left = comp + "px"
12+ let isLtr = cm . doc . direction == "ltr"
13+ let scroll = display . scroller . scrollLeft - cm . doc . scrollLeft
14+ let comp = compensateForHScroll ( display , isLtr ) + ( isLtr ? - scroll : scroll )
15+ let offset = comp + "px"
16+ let side = isLtr ? "left" : "right"
17+ let otherSide = isLtr ? "right" : "left"
1418 for ( let i = 0 ; i < view . length ; i ++ ) if ( ! view [ i ] . hidden ) {
1519 if ( cm . options . fixedGutter ) {
16- if ( view [ i ] . gutter )
17- view [ i ] . gutter . style . left = left
18- if ( view [ i ] . gutterBackground )
19- view [ i ] . gutterBackground . style . left = left
20+ if ( view [ i ] . gutter ) {
21+ view [ i ] . gutter . style [ side ] = offset
22+ view [ i ] . gutter . style [ otherSide ] = null
23+ }
24+ if ( view [ i ] . gutterBackground ) {
25+ view [ i ] . gutterBackground . style [ side ] = offset
26+ view [ i ] . gutterBackground . style [ otherSide ] = null
27+ }
2028 }
2129 let align = view [ i ] . alignable
22- if ( align ) for ( let j = 0 ; j < align . length ; j ++ )
23- align [ j ] . style . left = left
30+ if ( align ) for ( let j = 0 ; j < align . length ; j ++ ) {
31+ align [ j ] . style [ side ] = offset
32+ align [ j ] . style [ otherSide ] = null
33+ }
2434 }
25- if ( cm . options . fixedGutter )
26- display . gutters . style . left = ( comp + gutterW ) + "px"
35+ setGutterOffset ( cm )
36+ }
37+
38+ function setGutterOffset ( cm , fixed = cm . options . fixedGutter , alsoIfNotFixed = false ) {
39+ let isLtr = cm . doc . direction == "ltr"
40+ let side = isLtr ? "left" : "right"
41+ let display = cm . display
42+ if ( ! fixed ) {
43+ if ( alsoIfNotFixed ) {
44+ display . gutters . style [ side ] = "0"
45+ display . gutters . style [ isLtr ? "right" : "left" ] = null
46+ }
47+ return
48+ }
49+ let scroll = display . scroller . scrollLeft - cm . doc . scrollLeft
50+ let comp = compensateForHScroll ( display , isLtr ) + ( isLtr ? - scroll : scroll )
51+ let gutterW = display . gutters . offsetWidth
52+ display . gutters . style [ side ] = ( comp + gutterW ) + "px"
53+ display . gutters . style [ isLtr ? "right" : "left" ] = null
54+ }
55+
56+ export function updateFixedGutter ( cm , val ) {
57+ setGutterOffset ( cm , val , true )
2758}
2859
2960// Used to ensure that the line number gutter is still the right
0 commit comments