Gem Version Build Status Dependency Status Code Climate Coverage Status

Slippery

Marries the flexible Kramdown parser for Markdown with the flexibility of DOM manipulation with Hexp to generate HTML slides backed by either Reveal.js or Impress.js.

Because Slippery slides are the best slides.

How to use

Create a markdown file, say presentation.md, that will be the source of your presentation. use --- to separate slides.

In the same directory, create a Rakefile, the most basic form is :

require 'slippery'

Slippery::RakeTasks.new

Slippery will detect and markdown files in the current directory, and generate rake tasks for them.

rake slippery:build               # build all
rake slippery:build:presentation  # build presentation

You can use a block to configure Slippery:

require 'slippery'

Slippery::RakeTasks.new do |s|
  s.options = {
    type: :reveal_js,
    theme: 'beige',
    controls: false,
    backgroundTransition: 'slide',
    history: true,
    plugins: [:notes]
  }

  s.processor 'head' do |head|
    head <<= H[:title, 'Web Services, Past Present Future']
  end
end

After converting your presentation from Markdown, you can use Hexp to perform transformations on the result. This is what happens with the processor, you pass it a CSS selector, each matching element gets passed into the block, and replaced by whatever the block returns. See the Hexp DSL for details.

You can also add built-in or custom processors directly

Slippery::RakeTasks.new do |s|
  s.processors << Slippery::Processors::GraphvizDot.new('.dot')
  s.processors << Slippery::Processors::SelfContained
end

Processors

These are defined in the Slippery::Processors namespace.

GraphvizDot

The "Dot" language is a DSL (domain specific language) for describing graphs. Using the GraphvizDot processor, you can turn "dot" fragments into inline SVG graphics.

In your presentation :

````dot
graph dependencies {
  node[shape=circle color=blue]
  edge[color=black penwidth=3]

  slippery[fontcolor=red];

  slippery -> hexp -> equalizer;
  slippery -> kramdown;
  hexp -> ice_nine;
}
````

In the Rakefile

Slippery::RakeTasks.new do |s|
  s.processors << Slippery::Processors::GraphvizDot.new('.dot')
  s.processors << Slippery::Processors::SelfContained
end

And the result:

dependencies

slippery slippery

hexp hexp

slippery->hexp

kramdown kramdown

slippery->kramdown

equalizer equalizer

hexp->equalizer

ice_nine ice_nine

hexp->ice_nine