Skip to content

Commit 666f235

Browse files
committed
meta tags
1 parent 14d00a1 commit 666f235

File tree

14 files changed

+106
-132
lines changed

14 files changed

+106
-132
lines changed

app/root.res

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,10 @@ let default = () => {
4545
<link rel="stylesheet" href={hljsCss} />
4646
<link rel="stylesheet" href={utilsCss} />
4747
<link rel="icon" href="/favicon.ico" />
48+
<meta
49+
name="viewport"
50+
content="width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=1, minimal-ui"
51+
/>
4852
<meta charSet="UTF-8" />
4953
</head>
5054
<body>

app/routes/BlogRoute.res

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,15 @@ let loader: ReactRouter.Loader.t<loaderData> = async ({request}) => {
1717
let default = () => {
1818
let {posts, category} = ReactRouter.useLoaderData()
1919
<>
20-
<title>
21-
{React.string(
22-
`${switch category {
23-
| All => "All Posts"
24-
| Archived => "Archived Posts"
25-
}} | ReScript Blog`,
26-
)}
27-
</title>
20+
<Meta
21+
siteName="ReScript Blog"
22+
title={`${switch category {
23+
| All => "All Posts"
24+
| Archived => "Archived Posts"
25+
}} | ReScript Blog`}
26+
description="News, Announcements, Release Notes and more"
27+
/>
28+
2829
<Blog posts category />
2930
</>
3031
}

app/routes/CommunityRoute.res

Lines changed: 0 additions & 4 deletions
This file was deleted.

app/routes/LandingPageRoute.res

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,17 @@
11
let default = () => {
22
<>
3-
<title> {React.string("The ReScript Programming Language")} </title>
3+
<Meta
4+
title="The ReScript Programming Language"
5+
description="Fast, Simple, Fully Typed JavaScript from the Future"
6+
keywords=[
7+
"JavaScript",
8+
"JS",
9+
"programming language",
10+
"ReScript",
11+
"rescriptlang",
12+
"web development",
13+
]
14+
/>
415
<LandingPageLayout>
516
<> </>
617
</LandingPageLayout>

app/routes/MdxRoute.res

Lines changed: 30 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
open ReactRouter
21
open Mdx
32

43
type loaderData = {
@@ -133,7 +132,7 @@ let communityTableOfContents = async () => {
133132
categories
134133
}
135134

136-
let loader: Loader.t<loaderData> = async ({request}) => {
135+
let loader: ReactRouter.Loader.t<loaderData> = async ({request}) => {
137136
let {pathname} = WebAPI.URL.make(~url=request.url)
138137

139138
let mdx = await loadMdx(request, ~options={remarkPlugins: [Mdx.gfm]})
@@ -264,39 +263,41 @@ let loader: Loader.t<loaderData> = async ({request}) => {
264263
}
265264

266265
let default = () => {
267-
let {pathname} = useLocation()
266+
let {pathname} = ReactRouter.useLocation()
268267
let component = useMdxComponent(~components)
269268
let attributes = useMdxAttributes()
270269

271-
let loaderData: loaderData = useLoaderData()
270+
let loaderData: loaderData = ReactRouter.useLoaderData()
272271

273272
let {entries, categories, title} = loaderData
274273

275274
<>
276-
{title != "" ? <title> {React.string(title)} </title> : React.null}
277-
<meta name="description" content={attributes.description->Nullable.getOr("")} />
278275
{if (pathname :> string) == "/docs/manual/api" {
279-
<ApiOverviewLayout.Docs>
280-
<div className="markdown-body"> {component()} </div>
281-
</ApiOverviewLayout.Docs>
276+
<>
277+
<Meta title=title description={attributes.description->Nullable.getOr("ReScript API")} />
278+
<ApiOverviewLayout.Docs>
279+
<div className="markdown-body"> {component()} </div>
280+
</ApiOverviewLayout.Docs>
281+
</>
282282
} else if (
283283
(pathname :> string)->String.includes("docs/manual") ||
284284
(pathname :> string)->String.includes("docs/react")
285285
) {
286-
<DocsLayout
287-
categories
288-
activeToc={title: "Introduction", entries}
289-
breadcrumbs=?loaderData.breadcrumbs
290-
editHref={`https://github.com/rescript-lang/rescript-lang.org/blob/master/pages${attributes.path}.mdx`}
291-
>
292-
<div className="markdown-body pt-20 md:pt-0"> {component()} </div>
293-
</DocsLayout>
286+
<>
287+
<Meta title=title description={attributes.description->Nullable.getOr("")} />
288+
<DocsLayout
289+
categories
290+
activeToc={title: "Introduction", entries}
291+
breadcrumbs=?loaderData.breadcrumbs
292+
editHref={`https://github.com/rescript-lang/rescript-lang.org/blob/master/pages${attributes.path}.mdx`}
293+
>
294+
<div className="markdown-body pt-20 md:pt-0"> {component()} </div>
295+
</DocsLayout>
296+
</>
294297
} else if (pathname :> string)->String.includes("community") {
295-
<div>
296-
<CommunityLayout categories entries>
297-
<div className="markdown-body"> {component()} </div>
298-
</CommunityLayout>
299-
</div>
298+
<CommunityLayout categories entries>
299+
<div className="markdown-body"> {component()} </div>
300+
</CommunityLayout>
300301
} else if (pathname :> string)->String.includes("blog") {
301302
switch loaderData.blogPost {
302303
| Some({frontmatter, archived, path}) =>
@@ -307,13 +308,13 @@ let default = () => {
307308
switch loaderData.mdxSources {
308309
| Some(mdxSources) =>
309310
<>
310-
<title>
311-
{React.string(
312-
`${loaderData.activeSyntaxItem
313-
->Option.map(item => item.name)
314-
->Option.getOr("Syntax Lookup")} | ReScript API`,
315-
)}
316-
</title>
311+
<Meta
312+
title={loaderData.activeSyntaxItem
313+
->Option.map(item => item.name)
314+
->Option.getOr("Syntax Lookup | ReScript API")}
315+
description={attributes.description->Nullable.getOr("")}
316+
/>
317+
317318
<SyntaxLookup mdxSources activeItem=?loaderData.activeSyntaxItem>
318319
{component()}
319320
</SyntaxLookup>
@@ -322,6 +323,4 @@ let default = () => {
322323
}
323324
}}
324325
</>
325-
326-
// </ManualDocsLayout.V1200Layout>
327326
}

app/routes/PackagesRoute.res

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,11 @@ let loader = async () => {
77
let default = () => {
88
let props = ReactRouter.useLoaderData()
99
<>
10-
<title> {React.string("Package Index | ReScript Documentation")} </title>
10+
<Meta
11+
ogSiteName="ReScript Packages"
12+
title="Package Index | ReScript Documentation"
13+
description="Official and unofficial resources, libraries and bindings for ReScript"
14+
/>
1115
<Packages {...props} />
1216
</>
1317
}

app/routes/TryRoute.res

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,10 @@ module ClientOnly = {
4949
let default = () => {
5050
let {bundleBaseUrl, versions} = ReactRouter.useLoaderData()
5151
<>
52-
<title> {React.string("ReScript Playground")} </title>
52+
<Meta
53+
title="ReScript Playground" description="Try ReScript in the browser" ogImage="/og/try.png"
54+
/>
55+
5356
<ClientOnly bundleBaseUrl versions />
5457
</>
5558
}

src/Blog.res

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -196,7 +196,6 @@ type params = {slug: string}
196196
@react.component
197197
let make = (~posts: array<BlogApi.post>, ~category: category): React.element => {
198198
let content = if Array.length(posts) === 0 {
199-
/* <div> {React.string("Currently no posts available")} </div>; */
200199
<div className="mt-8">
201200
<Markdown.H1> {React.string("Blog not yet available")} </Markdown.H1>
202201
<Markdown.Warn> {React.string("This blog is currently in the works.")} </Markdown.Warn>
@@ -259,12 +258,8 @@ let make = (~posts: array<BlogApi.post>, ~category: category): React.element =>
259258
}
260259

261260
let (isOverlayOpen, setOverlayOpen) = React.useState(() => false)
262-
let title = "Blog | ReScript Documentation"
263261

264262
<>
265-
<Meta
266-
siteName="ReScript Blog" title description="News, Announcements, Release Notes and more"
267-
/>
268263
<div className="mt-16 pt-2">
269264
<div className="text-gray-80 text-18">
270265
<div className="flex justify-center overflow-hidden">

src/common/Util.res

Lines changed: 8 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -1,44 +1,3 @@
1-
/**
2-
module Debounce = {
3-
// See: https://davidwalsh.name/javascript-debounce-function
4-
let debounce = (~wait, fn) => {
5-
let timeout = ref(None)
6-
7-
() => {
8-
let unset = () => timeout := None
9-
10-
switch timeout.contents {
11-
| Some(id) => Js.Global.clearTimeout(id)
12-
| None => fn()
13-
}
14-
timeout := Some(Js.Global.setTimeout(unset, wait))
15-
}
16-
}
17-
18-
let debounce3 = (~wait, ~immediate=false, fn) => {
19-
let timeout = ref(None)
20-
21-
(a1, a2, a3) => {
22-
let unset = () => {
23-
timeout := None
24-
immediate ? fn(a1, a2, a3) : ()
25-
}
26-
27-
switch timeout.contents {
28-
| Some(id) => Js.Global.clearTimeout(id)
29-
| None => fn(a1, a2, a3)
30-
}
31-
timeout := Some(Js.Global.setTimeout(unset, wait))
32-
33-
if immediate && timeout.contents === None {
34-
fn(a1, a2, a3)
35-
} else {
36-
()
37-
}
38-
}
39-
}
40-
}
41-
**/
421
module Unsafe = {
432
external elementAsString: React.element => string = "%identity"
443
}
@@ -51,9 +10,16 @@ module String = {
5110
let capitalize: string => string = %raw("str => {
5211
return str && str.charAt(0).toUpperCase() + str.substring(1);
5312
}")
13+
14+
let capitalizeSentence = str =>
15+
str
16+
->String.split(" ")
17+
->Array.map(str => str->String.length > 2 ? str->String.capitalize : str)
18+
->Array.join(" ")
5419
}
5520

5621
module Url = {
22+
// TODO: convert to ReScript
5723
let isAbsolute: string => bool = %raw(`
5824
function(str) {
5925
var r = new RegExp('^(?:[a-z]+:)?//', 'i');
@@ -63,7 +29,7 @@ module Url = {
6329
}
6430
return false;
6531
}
66-
`) //', 'i');
32+
`)
6733
}
6834

6935
module Date = {

src/common/Util.resi

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ module Unsafe: {
99
module String: {
1010
let camelCase: string => string
1111
let capitalize: string => string
12+
let capitalizeSentence: string => string
1213
}
1314

1415
module Date: {

0 commit comments

Comments
 (0)