• Stars
    star
    3,365
  • Rank 13,296 (Top 0.3 %)
  • Language
    JavaScript
  • License
    MIT License
  • Created over 11 years ago
  • Updated about 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

reveal.js on steroids! Get beautiful reveal.js presentations from any Markdown file

reveal-md

reveal.js on steroids! Get beautiful reveal.js presentations from Markdown files.

Installation

npm install -g reveal-md

Usage

reveal-md slides.md

This starts a local server and opens any Markdown file as a reveal.js presentation in the default browser.

Docker

You can use Docker to run this tool without needing Node.js installed on your machine. Run the public Docker image, providing your markdown slides as a volume. A few examples:

docker run --rm -p 1948:1948 -v <path-to-your-slides>:/slides webpronl/reveal-md:latest
docker run --rm -p 1948:1948 -v <path-to-your-slides>:/slides webpronl/reveal-md:latest --help

The service is now running at http://localhost:1948.

To enable live reload in the container, port 35729 should be mapped as well:

docker run --rm -p 1948:1948 -p 35729:35729 -v <path-to-your-slides>:/slides webpronl/reveal-md:latest /slides --watch

Features

Markdown

The Markdown feature of reveal.js is awesome, and has an easy (and configurable) syntax to separate slides. Use three dashes surrounded by two blank lines (\n---\n). Example:

# Title

- Point 1
- Point 2

---

## Second slide

> Best quote ever.

Note: speaker notes FTW!

Code section

Syntax highlighting
```js
console.log('Hello world!');
```
Highlight some lines

You can highlight one line, multiple lines or both.

```python [1|3-6]
n = 0
while n < 10:
  if n % 2 == 0:
    print(f"{n} is even")
  else:
    print(f"{n} is odd")
  n += 1
```

Theme

Override theme (default: black):

reveal-md slides.md --theme solarized

See available themes.

Override reveal theme with a custom one. In this example, the file is at ./theme/my-custom.css:

reveal-md slides.md --theme theme/my-custom.css

Override reveal theme with a remote one (use rawgit.com because the url must allow cross-site access):

reveal-md slides.md --theme https://rawgit.com/puzzle/pitc-revealjs-theme/master/theme/puzzle.css

Highlight Theme

Override highlight theme (default: zenburn):

reveal-md slides.md --highlight-theme github

See available themes.

Custom Slide Separators

Override slide separator (default: \n---\n):

reveal-md slides.md --separator "^\n\n\n"

Override vertical/nested slide separator (default: \n----\n):

reveal-md slides.md --vertical-separator "^\n\n"

Custom Slide Attributes

Use the reveal.js slide attributes functionality to add HTML attributes, e.g. custom backgrounds. Alternatively, add an HTML id attribute to a specific slide and style it with CSS.

Example: set the second slide to have a PNG image as background:

# slide1

This slide has no background image.

---

<!-- .slide: data-background="./image1.png" -->

# slide2

This one does!

reveal-md Options

Define options similar to command-line options in a reveal-md.json file that must be located at the root of the Markdown files. They'll be picked up automatically. Example:

{
  "separator": "^\n\n\n",
  "verticalSeparator": "^\n\n"
}

Reveal.js Options

Define Reveal.js options in a reveal.json file that must be located at the root directory of the Markdown files. They'll be picked up automatically. Example:

{
  "controls": true,
  "progress": true
}

Speaker Notes

Use the speaker notes feature by using a line starting with Note:.

YAML Front matter

Set Markdown (and reveal.js) options specific to a presentation with YAML front matter:

---
title: Foobar
separator: <!--s-->
verticalSeparator: <!--v-->
theme: solarized
revealOptions:
  transition: 'fade'
---

Foo

Note: test note

<!--s-->

# Bar

<!--v-->

Live Reload

Using -w option changes to markdown files will trigger the browser to reload and thus display the changed presentation without the user having to reload the browser.

reveal-md slides.md -w

Custom Scripts

Inject custom scripts into the page:

reveal-md slides.md --scripts script.js,another-script.js
  • Don't use absolute file paths, files should be in adjacent or descending folders.
  • Absolute URL's are allowed.

Custom CSS

Inject custom CSS into the page:

reveal-md slides.md --css style.css,another-style.css
  • Don't use absolute file paths, files should be in adjacent or descending folders.
  • Absolute URL's are allowed.

Custom Favicon

If the directory with the markdown files contains a favicon.ico file, it will automatically be used as a favicon instead of the default favicon.

Pre-process Markdown

reveal-md can be given a markdown preprocessor script via the --preprocessor (or -P) option. This can be useful to implement custom tweaks on the document format without having to dive into the guts of the Markdown parser.

For example, to have headers automatically create new slides, one could have the script preproc.js:

// headings trigger a new slide
// headings with a caret (e.g., '##^ foo`) trigger a new vertical slide
module.exports = (markdown, options) => {
  return new Promise((resolve, reject) => {
    return resolve(
      markdown
        .split('\n')
        .map((line, index) => {
          if (!/^#/.test(line) || index === 0) return line;
          const is_vertical = /#\^/.test(line);
          return (is_vertical ? '\n----\n\n' : '\n---\n\n') + line.replace('#^', '#');
        })
        .join('\n')
    );
  });
};

and use it like this

reveal-md --preprocessor preproc.js slides.md

Print to PDF

There are (at least) two options to export a deck to a PDF file.

1. Using Puppeteer

Create a (printable) PDF from the provided Markdown file:

reveal-md slides.md --print slides.pdf

The PDF is generated using Puppeteer. Alternatively, append ?print-pdf to the url from the command-line or in the browser (make sure to remove the #/ or #/1 hash). Then print the slides using the browser's (not the native) print dialog. This seems to work in Chrome.

By default, paper size is set to match options in your reveal.json file, falling back to a default value 960x700 pixels. To override this behaviour, you can pass custom dimensions or format in a command line option --print-size:

reveal-md slides.md --print slides.pdf --print-size 1024x768   # in pixels when no unit is given
reveal-md slides.md --print slides.pdf --print-size 210x297mm  # valid units are: px, in, cm, mm
reveal-md slides.md --print slides.pdf --print-size A4         # valid formats are: A0-6, Letter, Legal, Tabloid, Ledger

In case of an error, please try the following:

  • Analyze debug output, e.g. DEBUG=reveal-md reveal-md slides.md --print
  • See reveal-md help for Puppeteer arguments (puppeteer-launch-args and puppeteer-chromium-executable)
  • Use Docker & DeckTape:

2. Using Docker & DeckTape

The first method of printing does not currently work when running reveal-md in a Docker container, so it is recommended that you print with DeckTape instead. Using DeckTape may also resolve issues with the built-in printing method’s output.

To create a PDF of a presentation using reveal-md running on your localhost using the DeckTape Docker image, use the following command:

docker run --rm -t --net=host -v $OUTPUT_DIR:/slides astefanutti/decktape $URL $OUTPUT_FILENAME

Replace these variables:

  • $OUTPUT_DIR is the folder you want the PDF to be saved to.
  • $OUTPUT_FILENAME is the name of the PDF.
  • $URL is where the presentation can be accessed in your browser (without the ?print-pdf suffix). If you are not running reveal-md in Docker, you will need to replace localhost with the IP address of your computer.

For a full list of export options, please see the the DeckTape github, or run the Docker container with the -h flag.

Static Website

This will export the provided Markdown file into a stand-alone HTML website including scripts and stylesheets. The files are saved to the directory passed to the --static parameter (default: ./_static):

reveal-md slides.md --static _site

This should copy images along with the slides. Use --static-dirs to copy directories with other static assets to the target directory. Use a comma-separated list to copy multiple directories.

reveal-md slides.md --static --static-dirs=assets

Providing a directory will result in a stand-alone overview page with links to the presentations (similar to a directory listing):

reveal-md dir/ --static

By default, all *.md files in all subdirectories are included in the generated website. Provide a custom glob pattern using --glob to generate slides only from matching files:

reveal-md dir/ --static --glob '**/slides.md'

Additional --absolute-url and --featured-slide parameters could be used to generate OpenGraph metadata enabling more attractive rendering for slide deck links when shared in some social sites.

reveal-md slides.md --static _site --absolute-url https://example.com --featured-slide 5

Disable Auto-open Browser

To disable auto-opening the browser:

reveal-md slides.md --disable-auto-open

Directory Listing

Show (recursive) directory listing of Markdown files:

reveal-md dir/

Show directory listing of Markdown files in current directory:

reveal-md

Custom Port

Override port (default: 1948):

reveal-md slides.md --port 8888

Custom Template

Override reveal.js HTML template (default template):

reveal-md slides.md --template my-reveal-template.html

Override listing HTML template (default template):

reveal-md slides.md --listing-template my-listing-template.html

Scripts, Preprocessors and Plugins

Related Projects & Alternatives

  • Slides is a place for creating, presenting and sharing slide decks.
  • Sandstorm Hacker Slides is a simple app that combines Ace Editor and RevealJS.
  • Tools in the Plugins, Tools and Hardware section of Reveal.js.
  • Org-Reveal exports Org-mode contents to Reveal.js HTML presentation.
  • DeckTape is a high-quality PDF exporter for HTML5 presentation frameworks.
  • GitPitch generates slideshows from PITCHME.md found in hosted Git repos.

Articles About reveal-md

Thank You

Many thanks to all contributors!

License

MIT

More Repositories

1

awesome-dotfiles

A curated list of dotfiles resources.
8,206
star
2

programming-principles

Categorized overview of programming principles & design patterns
2,424
star
3

knip

✂️ Find unused files, dependencies and exports in your JavaScript and TypeScript projects. Knip it before you ship it!
TypeScript
1,842
star
4

dotfiles

Dotfiles for macOS
Shell
983
star
5

dyson

Node server for dynamic, fake JSON.
JavaScript
832
star
6

DOMtastic

Small, fast, and modular DOM and event library for modern browsers.
JavaScript
763
star
7

awesome-newsletters

The best (weekly) newsletters
379
star
8

component-styleguide

Simple styleguide framework
JavaScript
122
star
9

Automated-SPA-Testing

Automated unit & functional testing for web applications
105
star
10

responsive-web-apps

Building Responsive Web Applications
JavaScript
63
star
11

grunt-release-it

Interactive release task for Git repositories. Optionally release a build to distribution/component repository.
JavaScript
48
star
12

versionify

Browserify transform to replace placeholder with package version
JavaScript
33
star
13

react-redux-demo

Fun Fair
JavaScript
30
star
14

baseplate

The baseplate project provides excellent workflow & tooling to develop, build, and test non-trivial SPAs.
JavaScript
24
star
15

bron

🏃‍♂️ Fast & tiny test runner for Node.js
JavaScript
18
star
16

frameground

Compare JavaScript Frameworks. Please share your knowledge!
JavaScript
17
star
17

dyson-generators

Fake data generators, used by dyson and dyson-image
JavaScript
17
star
18

dyson-demo

Demo package for dyson
JavaScript
14
star
19

requirejs-handlebars

Simple Handlebars plugin for RequireJS
JavaScript
13
star
20

precompiled-templates

Performance, footprint and configuration of template engines and precompiled templates
JavaScript
12
star
21

ts-morph-helpers

Helpers for ts-morph
TypeScript
12
star
22

component-styleguide-example

Example for component-styleguide
CSS
9
star
23

DuckJS

Tiny and powerful module loader to lazy load HTML+CSS+JS
JavaScript
8
star
24

benchrunner

Benchmark Suite Runner for benchmark.js
JavaScript
8
star
25

sandbox

Source files for sandbox.webpro.nl (offline)
JavaScript
6
star
26

dyson-image

JavaScript
6
star
27

webpro.nl

Source code of webpro.nl
Astro
6
star
28

doxstrap

Yet another documentation generator
HTML
5
star
29

vars

Common patterns in Vue, Angular, React and Svelte
JavaScript
5
star
30

parse-openapi

OpenAPI v3 parser
TypeScript
5
star
31

nx-tsc

Nx executor to type-check project source files using `tsc --noEmit`
JavaScript
5
star
32

hyte

HYbrid TEmplating for the browser and Node
JavaScript
4
star
33

Websites-vs-Web-Applications

Responsive Adaptive Rainwebs FTW!
4
star
34

release-it-monorepo

4
star
35

github-pages-example

GitHub Pages Example
3
star
36

bookstore

Simple application to learn GraphQL and Next.js.
JavaScript
3
star
37

markdown-rambler

Yet another opinionated & powerful static site generator.
TypeScript
3
star
38

bump-file

Bump JSON files (e.g. package.json and friends)
JavaScript
3
star
39

openapi-parser

OpenAPI v3 parser
TypeScript
2
star
40

fix-sourcemaps

Fix sources and file in sourcemaps
JavaScript
2
star
41

jaguarundi

Ant build script to optimize and version Javascript, CSS, and HTML files
JavaScript
2
star
42

requirejs-hogan

Simple Hogan plugin for RequireJS
JavaScript
2
star
43

requirejs-dust

Simple Dust plugin for RequireJS
JavaScript
2
star
44

deprecated-obj

Compares deprecations against a configuration object, and returns a compliant object and violations
JavaScript
2
star
45

DOMtastic-release

JavaScript
1
star
46

is-subdir

Check if a directory is a subdirectory
JavaScript
1
star
47

SpringbokJS

Installs modules (traditional object or AMD-style) based on HTML attributes.
JavaScript
1
star
48

last-publish

Get the date of the last published version of a package in the npm registry
JavaScript
1
star