Skip to content

Commit c248a06

Browse files
committed
fix: prevent horizontal scroll in message viewport
1 parent 9149955 commit c248a06

2 files changed

Lines changed: 81 additions & 0 deletions

File tree

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
package net.thunderbird.feature.mail.message.reader.impl.css
2+
3+
import assertk.assertThat
4+
import assertk.assertions.contains
5+
import kotlin.test.Test
6+
import net.thunderbird.core.common.mail.html.HtmlSettings
7+
import net.thunderbird.feature.mail.message.reader.api.css.CssClassNameProvider
8+
import net.thunderbird.feature.mail.message.reader.api.css.CssVariableNameProvider
9+
10+
class DefaultGlobalCssStyleProviderTest {
11+
12+
@Test
13+
fun `style should set main content box sizing to border box`() {
14+
// Arrange
15+
val testSubject = createTestSubject()
16+
17+
// Act
18+
val style = testSubject.create(createHtmlSettings()).style
19+
20+
// Assert
21+
assertThat(style).contains("box-sizing: border-box")
22+
}
23+
24+
@Test
25+
fun `style should preserve main content width and padding`() {
26+
// Arrange
27+
val testSubject = createTestSubject()
28+
29+
// Act
30+
val style = testSubject.create(createHtmlSettings()).style
31+
val mainContentRule = style.mainContentRule()
32+
33+
// Assert
34+
assertThat(mainContentRule).contains("width: 100%")
35+
assertThat(mainContentRule).contains("padding: 0 8px")
36+
}
37+
38+
@Test
39+
fun `style should preserve pre wrapping`() {
40+
// Arrange
41+
val testSubject = createTestSubject()
42+
43+
// Act
44+
val style = testSubject.create(createHtmlSettings()).style
45+
46+
// Assert
47+
assertThat(style).contains("white-space: pre-wrap")
48+
}
49+
50+
private fun createTestSubject(): DefaultGlobalCssStyleProvider.Factory {
51+
return DefaultGlobalCssStyleProvider.Factory(
52+
cssClassNameProvider = FakeCssClassNameProvider,
53+
cssVariableNameProvider = FakeCssVariableNameProvider,
54+
)
55+
}
56+
57+
private fun createHtmlSettings(): HtmlSettings {
58+
return HtmlSettings(
59+
useDarkMode = false,
60+
useFixedWidthFont = false,
61+
)
62+
}
63+
64+
private fun String.mainContentRule(): String {
65+
return substringAfter(" .root.main-content {")
66+
.substringBefore(" .root.main-content pre {")
67+
}
68+
69+
private object FakeCssClassNameProvider : CssClassNameProvider {
70+
override val defaultNamespaceClassName = "default-namespace"
71+
override val rootClassName = "root"
72+
override val mainContentClassName = "main-content"
73+
override val plainTextMessagePreClassName = "plain-text-message-pre"
74+
override val signatureClassName = "signature"
75+
}
76+
77+
private object FakeCssVariableNameProvider : CssVariableNameProvider {
78+
override val blockquoteDefaultBorderLeftColor = "--blockquote-default-border-left-color"
79+
}
80+
}

feature/mail/message/reader/impl/src/commonMain/kotlin/net/thunderbird/feature/mail/message/reader/impl/css/DefaultGlobalCssStyleProvider.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ internal class DefaultGlobalCssStyleProvider private constructor(
2626
| -webkit-user-select: auto;
2727
| }
2828
| .${cssClassNameProvider.rootClassName}.${cssClassNameProvider.mainContentClassName} {
29+
| box-sizing: border-box;
2930
| width: 100%;
3031
| overflow-wrap: break-word;
3132
| padding: 0 8px;

0 commit comments

Comments
 (0)