Skip to content

Commit fbdec72

Browse files
committed
Code blocks with syntax highlight
1 parent de9a379 commit fbdec72

File tree

4 files changed

+42
-8
lines changed

4 files changed

+42
-8
lines changed

elm.json

+2-1
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,9 @@
1717
"elm/core": "1.0.5",
1818
"elm/html": "1.0.0",
1919
"elm/json": "1.1.3",
20+
"elm/time": "1.0.0",
2021
"elm/url": "1.0.0",
22+
"pablohirafuji/elm-syntax-highlight": "3.4.1",
2123
"rtfeldman/elm-css": "17.0.5"
2224
},
2325
"indirect": {
@@ -34,7 +36,6 @@
3436
"elm/project-metadata-utils": "1.0.2",
3537
"elm/random": "1.0.0",
3638
"elm/regex": "1.0.0",
37-
"elm/time": "1.0.0",
3839
"elm/virtual-dom": "1.0.2",
3940
"elm-community/dict-extra": "2.4.0",
4041
"elm-community/list-extra": "8.5.2",

public/style.css

+17
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
pre.elmsh {
2+
padding: 10px 2px;
3+
margin: 0;
4+
text-align: left;
5+
overflow-x: scroll;
6+
}
7+
code.elmsh {
8+
padding: 0;
9+
}
10+
.elmsh-line:before {
11+
content: attr(data-elmsh-lc);
12+
display: inline-block;
13+
text-align: right;
14+
width: 15px;
15+
padding: 0 15px 0 0;
16+
opacity: 0.3;
17+
}

src/Comic.elm

+5-4
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,8 @@ shelf =
4343
, Css.margin <| Css.px 0
4444
, Css.fontFamilies [ "Verdana, sans-serif" ]
4545
, Css.lineHeight <| Css.rem 1.5
46-
, Css.maxWidth <| Css.px 900
47-
, Css.width <| Css.pct 100
46+
, Css.maxWidth <| Css.pct 100
47+
, Css.width <| Css.px 900
4848
, Css.margin2 (Css.px 0) Css.auto
4949
]
5050

@@ -65,8 +65,8 @@ book =
6565
]
6666
in
6767
Css.batch
68-
[ Css.maxWidth <| Css.px 800
69-
, Css.width <| Css.pct 100
68+
[ Css.maxWidth <| Css.pct 100
69+
, Css.width <| Css.px 800
7070
, Css.position Css.relative
7171
, Css.margin3 (Css.px 40) Css.auto (Css.px 0)
7272
, Css.boxShadow5 (Css.px 0) (Css.px 6) (Css.px 6) (Css.px -6) color.shadow
@@ -139,6 +139,7 @@ panel =
139139
, Css.backgroundColor color.page
140140
, Css.color color.ink
141141
, font.small
142+
, Css.maxWidth <| Css.vw 83
142143
]
143144

144145

src/Data.elm

+18-3
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import Cockpit exposing (Cockpit(..), fetchData)
55
import Comic
66
import Css
77
import DataSource exposing (DataSource)
8-
import Html.Styled as Html
8+
import Html.Styled as Html exposing (fromUnstyled)
99
import Html.Styled.Attributes as Html
1010
import Markdown.Block as Block
1111
import Markdown.Html
@@ -15,6 +15,7 @@ import OptimizedDecoder as Decoder exposing (Decoder)
1515
import OptimizedDecoder.Pipeline as Decoder
1616
import Render
1717
import SPLAT exposing (fromURL, toURL)
18+
import SyntaxHighlight
1819

1920

2021
type alias Entries =
@@ -222,7 +223,11 @@ markdownToHTML raw =
222223
, strong = \children -> Html.strong [] children
223224
, emphasis = \children -> Html.em [] children
224225
, strikethrough = \children -> Html.del [] children
225-
, codeSpan = \content -> Html.code [ Html.css [ Comic.font.extraSmall ] ] [ Html.text content ]
226+
, codeSpan =
227+
\content ->
228+
Html.code
229+
[ Html.css [ Comic.font.extraSmall ] ]
230+
[ Html.text content ]
226231
, image = \_ -> Html.div [] []
227232
, text = Html.text
228233
, orderedList =
@@ -241,7 +246,17 @@ markdownToHTML raw =
241246
)
242247
)
243248
, html = Markdown.Html.oneOf []
244-
, codeBlock = \_ -> Html.div [] []
249+
, codeBlock =
250+
\{ body } ->
251+
Html.div [ Html.css [ Comic.font.extraSmall ] ]
252+
[ SyntaxHighlight.useTheme SyntaxHighlight.oneDark
253+
|> fromUnstyled
254+
, SyntaxHighlight.elm body
255+
|> Result.map (SyntaxHighlight.toBlockHtml (Just 1))
256+
|> Result.map fromUnstyled
257+
|> Result.withDefault
258+
(Html.pre [] [ Html.code [] [ Html.text body ] ])
259+
]
245260
, thematicBreak = Html.hr [] []
246261
, table = Html.table []
247262
, tableHeader = Html.thead []

0 commit comments

Comments
 (0)