Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit f610937

Browse files
committedOct 17, 2018
Open Graph Protocol metadata for version pages
Renders OGP metadata for package documentation pages which could be used to enable prettier rendering of Elm package links when shared at social sites, chat rooms and forums. For example `elm/http` would have following metadata section: ```html <meta property="og:site_name" content="Elm Packages"> <meta property="og:title" content="http 1.0.0"> <meta property="og:image" content="https://package.elm-lang.org/assets/elm_logo.svg"> <meta property="og:description" content="Make HTTP requests"> ``` Could resolve #236.
1 parent a8b9f08 commit f610937

File tree

3 files changed

+70
-10
lines changed

3 files changed

+70
-10
lines changed
 

‎assets/elm_logo.svg

+39
Loading

‎src/backend/Main.hs

+4-3
Original file line numberDiff line numberDiff line change
@@ -187,15 +187,16 @@ serveVersion memory author project maybeVersion info =
187187
Nothing ->
188188
S.pass
189189

190-
Just (Memory.Summary versions _ _) ->
190+
Just (Memory.Summary versions maybeDetails _) ->
191191
case verifyVersion maybeVersion versions of
192192
Nothing ->
193193
S.pass
194194

195195
Just version ->
196196
case info of
197197
Readme ->
198-
ServeFile.version name version Nothing
198+
ServeFile.version name version Nothing $
199+
maybe Nothing (Just . fst) maybeDetails
199200

200201
Module asset ->
201202
serveVersionHelp name version asset
@@ -220,7 +221,7 @@ serveVersionHelp name version asset =
220221
_ ->
221222
case Module.fromHyphenPath asset of
222223
Just moduleName ->
223-
ServeFile.version name version (Just moduleName)
224+
ServeFile.version name version (Just moduleName) Nothing
224225

225226
Nothing ->
226227
S.pass

‎src/backend/ServeFile.hs

+27-7
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ import qualified Elm.Package as Pkg
2828

2929
misc :: B.Builder -> Snap ()
3030
misc title =
31-
makeHtml title mempty
31+
makeHtml title mempty (makeOgpMetadata title Nothing)
3232

3333

3434

@@ -37,15 +37,18 @@ misc title =
3737

3838
project :: Pkg.Name -> Snap ()
3939
project pkg =
40-
makeHtml (B.stringUtf8 (Pkg.toString pkg)) mempty
40+
let
41+
title = (B.stringUtf8 (Pkg.toString pkg))
42+
in
43+
makeHtml title mempty (makeOgpMetadata title Nothing)
4144

4245

4346

4447
-- VERSION
4548

4649

47-
version :: Pkg.Name -> Pkg.Version -> Maybe Module.Raw -> Snap ()
48-
version pkg@(Pkg.Name _ prjct) vsn maybeName =
50+
version :: Pkg.Name -> Pkg.Version -> Maybe Module.Raw -> Maybe Text.Text -> Snap ()
51+
version pkg@(Pkg.Name _ prjct) vsn maybeName maybeDescription =
4952
let
5053
versionString =
5154
Pkg.versionToString vsn
@@ -58,6 +61,7 @@ version pkg@(Pkg.Name _ prjct) vsn maybeName =
5861
++ Text.unpack prjct ++ " " ++ versionString
5962
in
6063
makeHtml (B.stringUtf8 title) (makeCanonicalLink pkg maybeName)
64+
(makeOgpMetadata (B.stringUtf8 title) maybeDescription)
6165

6266

6367

@@ -106,19 +110,35 @@ renames =
106110
(,)
107111

108112

113+
-- OGP METADATA
114+
115+
makeOgpMetadata :: B.Builder -> Maybe Text.Text -> B.Builder
116+
makeOgpMetadata title maybeDescription =
117+
let
118+
description =
119+
maybe "" (B.stringUtf8 . Text.unpack . \d ->
120+
[r|<meta property="og:description" content="|] <> d <> [r|">|]
121+
) maybeDescription
122+
in
123+
[r|<meta property="og:type" content="website">
124+
<meta property="og:site_name" content="Elm Packages">
125+
<meta property="og:title" content="|] <> title <> [r|">
126+
<meta property="og:image" content="https://package.elm-lang.org/assets/elm_logo.svg">|]
127+
<> description
128+
109129

110130
-- SKELETON
111131

112132

113-
makeHtml :: B.Builder -> B.Builder -> Snap ()
114-
makeHtml title canonicalLink =
133+
makeHtml :: B.Builder -> B.Builder -> B.Builder -> Snap ()
134+
makeHtml title canonicalLink ogpMetadata =
115135
writeBuilder $
116136
[r|<!DOCTYPE HTML>
117137
<html>
118138
<head>
119139
<meta charset="UTF-8">
120140
<link rel="shortcut icon" size="16x16, 32x32, 48x48, 64x64, 128x128, 256x256" href="/assets/favicon.ico">
121-
<title>|] <> title <> [r|</title>|] <> canonicalLink <> [r|
141+
<title>|] <> title <> [r|</title>|] <> canonicalLink <> ogpMetadata <> [r|
122142
<link rel="stylesheet" href="/assets/highlight/styles/default.css?|] <> uniqueToken <> [r|">
123143
<link rel="stylesheet" href="/assets/style.css?|] <> uniqueToken <> [r|">
124144
<script src="/assets/highlight/highlight.pack.js?|] <> uniqueToken <> [r|"></script>

0 commit comments

Comments
 (0)
Please sign in to comment.