diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 00000000..27d2dae2 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,2 @@ +*/node_modules +*.log diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 00000000..c7f1856c --- /dev/null +++ b/Dockerfile @@ -0,0 +1,10 @@ +FROM node:lts + +WORKDIR /app/website + +EXPOSE 3000 35729 +COPY ./docs /app/docs +COPY ./website /app/website +RUN yarn install + +CMD ["yarn", "start"] diff --git a/build.sbt b/build.sbt index 1f8e6c3f..36cdb5b8 100644 --- a/build.sbt +++ b/build.sbt @@ -58,17 +58,17 @@ lazy val root = project .settings(noPublishSettings) lazy val docs = project - .enablePlugins(ParadoxPlugin) + .in(file("cats-parse-docs")) + .enablePlugins(MdocPlugin, DocusaurusPlugin) .disablePlugins(MimaPlugin) .settings(noPublishSettings) + .dependsOn(core.jvm) .settings( - name := "paradox-docs", - paradoxTheme := Some(builtinParadoxTheme("generic")), - paradoxProperties in Compile ++= Map( - "empty" -> "", - "version" -> version.value - ), - githubWorkflowArtifactUpload := false + moduleName := "cats-parse-docs", + watchSources += baseDirectory.in(ThisBuild).value / "docs", + mdocVariables := Map( + "VERSION" -> version.value + ) ) lazy val core = crossProject(JSPlatform, JVMPlatform) diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 00000000..6711192a --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,18 @@ +version: "3" + +services: + docusaurus: + build: . + ports: + - 3000:3000 + - 35729:35729 + volumes: + - ./docs:/app/docs + - ./website/blog:/app/website/blog + - ./website/core:/app/website/core + - ./website/i18n:/app/website/i18n + - ./website/pages:/app/website/pages + - ./website/static:/app/website/static + - ./website/sidebars.json:/app/website/sidebars.json + - ./website/siteConfig.js:/app/website/siteConfig.js + working_dir: /app/website diff --git a/docs/installation.md b/docs/installation.md new file mode 100644 index 00000000..0813d3d7 --- /dev/null +++ b/docs/installation.md @@ -0,0 +1,27 @@ +--- +id: installation +title: Installation +--- + +Cats Parse is currently available for Scala 2.13, 2.12, [Scala.js](https://www.scala-js.org) and [Dotty](https://dotty.epfl.ch). + + +## SBT + +```scala +libraryDependencies += "com.typelevel" %% "cats-parse" % "@VERSION@" +``` + +## Mill + +```scala +import mill._, scalalib._ + +object foo extends ScalaModule { + def scalaVersion = "2.13.1" + + def ivyDeps = Agg( + ivy"org.typelevel::cats-parse:@VERSION@", + ) +} +``` \ No newline at end of file diff --git a/project/plugins.sbt b/project/plugins.sbt index 4b1e9c3c..98f2d917 100644 --- a/project/plugins.sbt +++ b/project/plugins.sbt @@ -1,8 +1,8 @@ addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.15.0") addSbtPlugin("com.eed3si9n" % "sbt-buildinfo" % "0.10.0") -addSbtPlugin("com.lightbend.paradox" % "sbt-paradox" % "0.8.0") addSbtPlugin("org.portable-scala" % "sbt-scalajs-crossproject" % "1.0.0") addSbtPlugin("org.scala-js" % "sbt-scalajs" % "1.3.0") +addSbtPlugin("org.scalameta" % "sbt-mdoc" % "2.2.11") addSbtPlugin("org.scoverage" % "sbt-scoverage" % "1.6.1") addSbtPlugin("pl.project13.scala" % "sbt-jmh" % "0.4.0") addSbtPlugin("com.codecommit" % "sbt-spiewak-sonatype" % "0.17.0") diff --git a/website/README.md b/website/README.md new file mode 100644 index 00000000..6477a55a --- /dev/null +++ b/website/README.md @@ -0,0 +1,198 @@ +This website was created with [Docusaurus](https://docusaurus.io/). + +# What's In This Document + +- [Get Started in 5 Minutes](#get-started-in-5-minutes) +- [Directory Structure](#directory-structure) +- [Editing Content](#editing-content) +- [Adding Content](#adding-content) +- [Full Documentation](#full-documentation) + +# Get Started in 5 Minutes + +1. Make sure all the dependencies for the website are installed: + +```sh +# Install dependencies +$ yarn +``` + +2. Run your dev server: + +```sh +# Start the site +$ yarn start +``` + +## Directory Structure + +Your project file structure should look something like this + +``` +my-docusaurus/ + docs/ + doc-1.md + doc-2.md + doc-3.md + website/ + blog/ + 2016-3-11-oldest-post.md + 2017-10-24-newest-post.md + core/ + node_modules/ + pages/ + static/ + css/ + img/ + package.json + sidebars.json + siteConfig.js +``` + +# Editing Content + +## Editing an existing docs page + +Edit docs by navigating to `docs/` and editing the corresponding document: + +`docs/doc-to-be-edited.md` + +```markdown +--- +id: page-needs-edit +title: This Doc Needs To Be Edited +--- + +Edit me... +``` + +For more information about docs, click [here](https://docusaurus.io/docs/en/navigation) + +## Editing an existing blog post + +Edit blog posts by navigating to `website/blog` and editing the corresponding post: + +`website/blog/post-to-be-edited.md` + +```markdown +--- +id: post-needs-edit +title: This Blog Post Needs To Be Edited +--- + +Edit me... +``` + +For more information about blog posts, click [here](https://docusaurus.io/docs/en/adding-blog) + +# Adding Content + +## Adding a new docs page to an existing sidebar + +1. Create the doc as a new markdown file in `/docs`, example `docs/newly-created-doc.md`: + +```md +--- +id: newly-created-doc +title: This Doc Needs To Be Edited +--- + +My new content here.. +``` + +1. Refer to that doc's ID in an existing sidebar in `website/sidebars.json`: + +```javascript +// Add newly-created-doc to the Getting Started category of docs +{ + "docs": { + "Getting Started": [ + "quick-start", + "newly-created-doc" // new doc here + ], + ... + }, + ... +} +``` + +For more information about adding new docs, click [here](https://docusaurus.io/docs/en/navigation) + +## Adding a new blog post + +1. Make sure there is a header link to your blog in `website/siteConfig.js`: + +`website/siteConfig.js` + +```javascript +headerLinks: [ + ... + { blog: true, label: 'Blog' }, + ... +] +``` + +2. Create the blog post with the format `YYYY-MM-DD-My-Blog-Post-Title.md` in `website/blog`: + +`website/blog/2018-05-21-New-Blog-Post.md` + +```markdown +--- +author: Frank Li +authorURL: https://twitter.com/foobarbaz +authorFBID: 503283835 +title: New Blog Post +--- + +Lorem Ipsum... +``` + +For more information about blog posts, click [here](https://docusaurus.io/docs/en/adding-blog) + +## Adding items to your site's top navigation bar + +1. Add links to docs, custom pages or external links by editing the headerLinks field of `website/siteConfig.js`: + +`website/siteConfig.js` + +```javascript +{ + headerLinks: [ + ... + /* you can add docs */ + { doc: 'my-examples', label: 'Examples' }, + /* you can add custom pages */ + { page: 'help', label: 'Help' }, + /* you can add external links */ + { href: 'https://github.com/facebook/docusaurus', label: 'GitHub' }, + ... + ], + ... +} +``` + +For more information about the navigation bar, click [here](https://docusaurus.io/docs/en/navigation) + +## Adding custom pages + +1. Docusaurus uses React components to build pages. The components are saved as .js files in `website/pages/en`: +1. If you want your page to show up in your navigation header, you will need to update `website/siteConfig.js` to add to the `headerLinks` element: + +`website/siteConfig.js` + +```javascript +{ + headerLinks: [ + ... + { page: 'my-new-custom-page', label: 'My New Custom Page' }, + ... + ], + ... +} +``` + +For more information about custom pages, click [here](https://docusaurus.io/docs/en/custom-pages). + +# Full Documentation + +Full documentation can be found on the [website](https://docusaurus.io/). diff --git a/website/blog/2017-10-24-new-version-1.0.0.md b/website/blog/2017-10-24-new-version-1.0.0.md new file mode 100644 index 00000000..60761c02 --- /dev/null +++ b/website/blog/2017-10-24-new-version-1.0.0.md @@ -0,0 +1,8 @@ +--- +title: New Version 1.0.0 +author: Eric Nakagawa +authorURL: http://twitter.com/ericnakagawa +authorFBID: 661277173 +--- + +This blog post will test file name parsing issues when periods are present. diff --git a/website/core/Footer.js b/website/core/Footer.js new file mode 100644 index 00000000..90d0f6ed --- /dev/null +++ b/website/core/Footer.js @@ -0,0 +1,116 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +const React = require('react'); + +class Footer extends React.Component { + docUrl(doc) { + const baseUrl = this.props.config.baseUrl; + const docsUrl = this.props.config.docsUrl; + const docsPart = `${docsUrl ? `${docsUrl}/` : ''}`; + return `${baseUrl}${docsPart}${doc}`; + } + + render() { + return ( + + ); + } +} + +module.exports = Footer; diff --git a/website/i18n/en.json b/website/i18n/en.json new file mode 100644 index 00000000..0811b87f --- /dev/null +++ b/website/i18n/en.json @@ -0,0 +1,26 @@ +{ + "_comment": "This file is auto-generated by write-translations.js", + "localized-strings": { + "next": "Next", + "previous": "Previous", + "tagline": "parsing library for the cats ecosystem", + "docs": { + "installation": { + "title": "Installation" + } + }, + "links": { + "Docs": "Docs", + "Blog": "Blog", + "GitHub": "GitHub" + }, + "categories": { + "Overview": "Overview" + } + }, + "pages-strings": { + "Help Translate|recruit community translators for your project": "Help Translate", + "Edit this Doc|recruitment message asking to edit the doc source": "Edit", + "Translate this Doc|recruitment message asking to translate the docs": "Translate" + } +} diff --git a/website/package.json b/website/package.json new file mode 100644 index 00000000..a92c8b6e --- /dev/null +++ b/website/package.json @@ -0,0 +1,14 @@ +{ + "scripts": { + "examples": "docusaurus-examples", + "start": "docusaurus-start", + "build": "docusaurus-build", + "publish-gh-pages": "docusaurus-publish", + "write-translations": "docusaurus-write-translations", + "version": "docusaurus-version", + "rename-version": "docusaurus-rename-version" + }, + "devDependencies": { + "docusaurus": "^1.14.6" + } +} diff --git a/website/pages/en/index.js b/website/pages/en/index.js new file mode 100644 index 00000000..6eda2450 --- /dev/null +++ b/website/pages/en/index.js @@ -0,0 +1,213 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +const React = require('react'); + +const CompLibrary = require('../../core/CompLibrary.js'); + +const MarkdownBlock = CompLibrary.MarkdownBlock; /* Used to read markdown */ +const Container = CompLibrary.Container; +const GridBlock = CompLibrary.GridBlock; + +class HomeSplash extends React.Component { + render() { + const {siteConfig, language = ''} = this.props; + const {baseUrl, docsUrl} = siteConfig; + const docsPart = `${docsUrl ? `${docsUrl}/` : ''}`; + const langPart = `${language ? `${language}/` : ''}`; + const docUrl = (doc) => `${baseUrl}${docsPart}${langPart}${doc}`; + + const SplashContainer = (props) => ( +
+
+
{props.children}
+
+
+ ); + + const Logo = (props) => ( +
+ Project Logo +
+ ); + + const ProjectTitle = (props) => ( +

+ {props.title} + {props.tagline} +

+ ); + + const PromoSection = (props) => ( +
+
+
{props.children}
+
+
+ ); + + const Button = (props) => ( +
+ + {props.children} + +
+ ); + + return ( + + +
+ + + + + + +
+
+ ); + } +} + +class Index extends React.Component { + render() { + const {config: siteConfig, language = ''} = this.props; + const {baseUrl} = siteConfig; + + const Block = (props) => ( + + + + ); + + const FeatureCallout = () => ( +
+

Feature Callout

+ These are features of this project +
+ ); + + const TryOut = () => ( + + {[ + { + content: + 'To make your landing page more attractive, use illustrations! Check out ' + + '[**unDraw**](https://undraw.co/) which provides you with customizable illustrations which are free to use. ' + + 'The illustrations you see on this page are from unDraw.', + image: `${baseUrl}img/undraw_code_review.svg`, + imageAlign: 'left', + title: 'Wonderful SVG Illustrations', + }, + ]} + + ); + + const Description = () => ( + + {[ + { + content: + 'This is another description of how this project is useful', + image: `${baseUrl}img/undraw_note_list.svg`, + imageAlign: 'right', + title: 'Description', + }, + ]} + + ); + + const LearnHow = () => ( + + {[ + { + content: + 'Each new Docusaurus project has **randomly-generated** theme colors.', + image: `${baseUrl}img/undraw_youtube_tutorial.svg`, + imageAlign: 'right', + title: 'Randomly Generated Theme Colors', + }, + ]} + + ); + + const Features = () => ( + + {[ + { + content: 'This is the content of my feature', + image: `${baseUrl}img/undraw_react.svg`, + imageAlign: 'top', + title: 'Feature One', + }, + { + content: 'The content of my second feature', + image: `${baseUrl}img/undraw_operating_system.svg`, + imageAlign: 'top', + title: 'Feature Two', + }, + ]} + + ); + + const Showcase = () => { + if ((siteConfig.users || []).length === 0) { + return null; + } + + const showcase = siteConfig.users + .filter((user) => user.pinned) + .map((user) => ( + + {user.caption} + + )); + + const pageUrl = (page) => + baseUrl + (language ? `${language}/` : '') + page; + + return ( +
+

Who is Using This?

+

This project is used by all these people

+
{showcase}
+
+ + More {siteConfig.title} Users + +
+
+ ); + }; + + return ( +
+ +
+ + + + + + +
+
+ ); + } +} + +module.exports = Index; diff --git a/website/sidebars.json b/website/sidebars.json new file mode 100644 index 00000000..5fe11127 --- /dev/null +++ b/website/sidebars.json @@ -0,0 +1,6 @@ +{ + "docs": { + "Overview": ["installation"] + } +} + diff --git a/website/siteConfig.js b/website/siteConfig.js new file mode 100644 index 00000000..5bc3934d --- /dev/null +++ b/website/siteConfig.js @@ -0,0 +1,47 @@ +// See https://docusaurus.io/docs/site-config for all the possible +// site configuration options. + +const repoUrl = 'https://github.com/typelevel/cats-parse'; + +const siteConfig = { + title: 'Cats Parse', + tagline: 'parsing library for the cats ecosystem', + url: 'https://typelevel.org', + baseUrl: '/cats-parse/', + + projectName: 'cats-parse', + organizationName: 'typelevel', + + // For no header links in the top nav bar -> headerLinks: [], + headerLinks: [ + {doc: 'installation', label: 'Docs'}, + {blog: true, label: 'Blog'}, + {href: repoUrl, label: "GitHub", external: true}, + ], + + headerIcon: 'img/favicon.ico', + footerIcon: 'img/favicon.ico', + favicon: 'img/favicon.ico', + + colors: { + primaryColor: '#516094', + secondaryColor: '#384367', + }, + + // This copyright info is used in /core/Footer.js and blog RSS/Atom feeds. + copyright: `Copyright © ${new Date().getFullYear()} The Typelevel cats-parse Project Developers`, + + highlight: { + theme: 'default', + }, + + scripts: ['https://buttons.github.io/buttons.js'], + + onPageNav: 'separate', + cleanUrl: true, + + ogImage: 'img/undraw_online.svg', + twitterImage: 'img/undraw_tweetstorm.svg', +}; + +module.exports = siteConfig; diff --git a/website/static/css/custom.css b/website/static/css/custom.css new file mode 100644 index 00000000..9b05c48e --- /dev/null +++ b/website/static/css/custom.css @@ -0,0 +1,17 @@ + +/* your custom css */ + +@media only screen and (min-device-width: 360px) and (max-device-width: 736px) { +} + +@media only screen and (min-width: 1024px) { +} + +@media only screen and (max-width: 1023px) { +} + +@media only screen and (min-width: 1400px) { +} + +@media only screen and (min-width: 1500px) { +} diff --git a/website/static/img/favicon.ico b/website/static/img/favicon.ico new file mode 100644 index 00000000..be74abd6 Binary files /dev/null and b/website/static/img/favicon.ico differ diff --git a/website/static/img/oss_logo.png b/website/static/img/oss_logo.png new file mode 100644 index 00000000..8183e289 Binary files /dev/null and b/website/static/img/oss_logo.png differ diff --git a/website/static/img/undraw_code_review.svg b/website/static/img/undraw_code_review.svg new file mode 100644 index 00000000..8215fc9e --- /dev/null +++ b/website/static/img/undraw_code_review.svg @@ -0,0 +1 @@ +code review diff --git a/website/static/img/undraw_monitor.svg b/website/static/img/undraw_monitor.svg new file mode 100644 index 00000000..84803ef7 --- /dev/null +++ b/website/static/img/undraw_monitor.svg @@ -0,0 +1 @@ +monitor diff --git a/website/static/img/undraw_note_list.svg b/website/static/img/undraw_note_list.svg new file mode 100644 index 00000000..d2b93d24 --- /dev/null +++ b/website/static/img/undraw_note_list.svg @@ -0,0 +1 @@ +note list diff --git a/website/static/img/undraw_online.svg b/website/static/img/undraw_online.svg new file mode 100644 index 00000000..a4d5c807 --- /dev/null +++ b/website/static/img/undraw_online.svg @@ -0,0 +1 @@ +online diff --git a/website/static/img/undraw_open_source.svg b/website/static/img/undraw_open_source.svg new file mode 100644 index 00000000..415f1c15 --- /dev/null +++ b/website/static/img/undraw_open_source.svg @@ -0,0 +1 @@ +open source diff --git a/website/static/img/undraw_operating_system.svg b/website/static/img/undraw_operating_system.svg new file mode 100644 index 00000000..8794d3bd --- /dev/null +++ b/website/static/img/undraw_operating_system.svg @@ -0,0 +1 @@ +operating system diff --git a/website/static/img/undraw_react.svg b/website/static/img/undraw_react.svg new file mode 100644 index 00000000..46aa32ba --- /dev/null +++ b/website/static/img/undraw_react.svg @@ -0,0 +1 @@ +react diff --git a/website/static/img/undraw_tweetstorm.svg b/website/static/img/undraw_tweetstorm.svg new file mode 100644 index 00000000..a009e609 --- /dev/null +++ b/website/static/img/undraw_tweetstorm.svg @@ -0,0 +1 @@ +tweetstorm diff --git a/website/static/img/undraw_youtube_tutorial.svg b/website/static/img/undraw_youtube_tutorial.svg new file mode 100644 index 00000000..bb30a59e --- /dev/null +++ b/website/static/img/undraw_youtube_tutorial.svg @@ -0,0 +1 @@ +youtube tutorial