Skip to content

Commit fbca174

Browse files
committed
Add customizable scroll padding
1 parent 5600a73 commit fbca174

File tree

6 files changed

+22
-19
lines changed

6 files changed

+22
-19
lines changed

package/src/code-block.css

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ pre.prism-code-editor {
22
tab-size: var(--tab-size);
33
-webkit-user-select: auto;
44
user-select: auto;
5+
--_sp: 0;
56
}
67

78
code.pce-wrapper {

package/src/layout.css

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@
66
--_pse: var(--padding-inline, 0.75em);
77
--_ns: var(--number-spacing, 0.75em);
88
--padding-left: var(--_pse);
9-
scroll-padding-left: var(--padding-left);
9+
--_sp: var(--pce-scroll-padding, 2ch);
10+
scroll-padding: var(--_sp);
1011
-webkit-user-select: none;
1112
user-select: none;
1213
isolation: isolate;
@@ -15,6 +16,7 @@
1516

1617
.show-line-numbers {
1718
--padding-left: calc(var(--_pse) + var(--number-width) + var(--_ns));
19+
scroll-padding-left: calc(var(--padding-left) + var(--_sp));
1820
grid: 1fr / 0 1fr;
1921
}
2022

package/src/rtl-layout.css

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
.pce-rtl.pce-rtl {
22
direction: rtl;
3-
scroll-padding: 0 var(--padding-left) 0 0;
3+
}
4+
5+
.pce-rtl.show-line-numbers {
6+
scroll-padding: var(--_sp) calc(var(--padding-left) + var(--_sp)) var(--_sp) var(--_sp);
47
}
58

69
.pce-rtl.pce-rtl::before,

package/src/utils/local.ts

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,17 @@
11
import { PrismEditor } from "../index.js"
2-
import { addListener, doc } from "../core.js"
2+
import { addListener } from "../core.js"
33
import { isChrome } from "./index.js"
44
import { PrismCodeBlock } from "../client/code-block.js"
55

66
const scrollToEl = (editor: PrismEditor, el: HTMLElement, paddingTop = 0) => {
7-
const style1 = editor.container.style,
8-
style2 = doc!.documentElement.style
7+
const style = editor.container.style
98

10-
style1.scrollPaddingBlock = style2.scrollPaddingBlock = `${paddingTop}px ${
9+
style.scrollPaddingBlock = `calc(var(--_sp) + ${paddingTop}px) calc(var(--_sp) + ${
1110
isChrome && !el.textContent ? el.offsetHeight : 0
12-
}px`
11+
}px)`
1312

1413
el.scrollIntoView({ block: "nearest" })
15-
style1.scrollPaddingBlock = style2.scrollPaddingBlock = ""
14+
style.scrollPaddingBlock = ""
1615
}
1716

1817
const getLineStart = (text: string, position: number) =>

react-package/src/utils/local.ts

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,14 @@ const voidlessLangs = new Set("xml,rss,atom,jsx,tsx,xquery,xeora,xeoracube,actio
77
const voidTags = /^(?:area|base|w?br|col|embed|hr|img|input|link|meta|source|track)$/i
88

99
const scrollToEl = (editor: PrismEditor, el: HTMLElement, paddingTop = 0) => {
10-
const style1 = editor.container!.style
11-
const style2 = doc!.documentElement.style
10+
const style = editor.container!.style
1211

13-
style1.scrollPaddingBlock = style2.scrollPaddingBlock = `${paddingTop}px ${
12+
style.scrollPaddingBlock = `calc(var(--_sp) + ${paddingTop}px) calc(var(--_sp) + ${
1413
isChrome && !el.textContent ? el.offsetHeight : 0
15-
}px`
14+
}px)`
1615

1716
el.scrollIntoView({ block: "nearest" })
18-
style1.scrollPaddingBlock = style2.scrollPaddingBlock = ""
17+
style.scrollPaddingBlock = ""
1918
}
2019

2120
const getLineStart = (text: string, position: number) =>

solid-package/src/utils/local.ts

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,20 @@
11
import { PrismEditor } from "../types"
2-
import { addListener, doc } from "../core"
2+
import { addListener } from "../core"
33
import { isChrome } from "."
44
import { PrismCodeBlock } from "../code-block"
55

66
const voidlessLangs = new Set("xml,rss,atom,jsx,tsx,xquery,xeora,xeoracube,actionscript".split(","))
77
const voidTags = /^(?:area|base|w?br|col|embed|hr|img|input|link|meta|source|track)$/i
88

99
const scrollToEl = (editor: PrismEditor, el: HTMLElement, paddingTop = 0) => {
10-
const style1 = editor.container.style
11-
const style2 = doc!.documentElement.style
10+
const style = editor.container.style
1211

13-
style1.scrollPaddingBlock = style2.scrollPaddingBlock = `${paddingTop}px ${
12+
style.scrollPaddingBlock = `calc(var(--_sp) + ${paddingTop}px) calc(var(--_sp) + ${
1413
isChrome && !el.textContent ? el.offsetHeight : 0
15-
}px`
14+
}px)`
1615

1716
el.scrollIntoView({ block: "nearest" })
18-
style1.scrollPaddingBlock = style2.scrollPaddingBlock = ""
17+
style.scrollPaddingBlock = ""
1918
}
2019

2120
const getLineStart = (text: string, position: number) =>

0 commit comments

Comments
 (0)