deckrb 0.4.2 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.md +38 -10
- data/bin/deck +11 -4
- data/lib/deck/rack_app.rb +42 -22
- data/lib/deck/slide.rb +5 -4
- data/lib/deck/slide_deck.rb +142 -135
- data/lib/deck/version.rb +1 -1
- data/public/deck.js/GPL-license.txt +0 -0
- data/public/deck.js/MIT-license.txt +0 -0
- data/public/deck.js/README.md +10 -4
- data/public/deck.js/boilerplate.html +96 -0
- data/public/deck.js/core/deck.core.css +10 -7
- data/public/deck.js/core/deck.core.js +5 -5
- data/public/deck.js/core/deck.core.scss +10 -7
- data/public/deck.js/extensions/goto/deck.goto.css +0 -0
- data/public/deck.js/extensions/goto/deck.goto.html +0 -0
- data/public/deck.js/extensions/goto/deck.goto.js +0 -0
- data/public/deck.js/extensions/hash/deck.hash.css +0 -0
- data/public/deck.js/extensions/hash/deck.hash.html +0 -0
- data/public/deck.js/extensions/hash/deck.hash.js +16 -3
- data/public/deck.js/extensions/hash/deck.hash.scss +0 -0
- data/public/deck.js/extensions/menu/deck.menu.css +0 -0
- data/public/deck.js/extensions/menu/deck.menu.js +0 -0
- data/public/deck.js/extensions/navigation/deck.navigation.css +0 -0
- data/public/deck.js/extensions/navigation/deck.navigation.html +0 -0
- data/public/deck.js/extensions/navigation/deck.navigation.js +4 -3
- data/public/deck.js/extensions/scale/deck.scale.css +4 -1
- data/public/deck.js/extensions/scale/deck.scale.js +0 -0
- data/public/deck.js/extensions/scale/deck.scale.scss +5 -1
- data/public/deck.js/extensions/status/deck.status.css +0 -0
- data/public/deck.js/extensions/status/deck.status.html +0 -0
- data/public/deck.js/extensions/status/deck.status.js +0 -0
- data/public/deck.js/introduction/index.html +8 -2
- data/public/deck.js/jquery-1.7.2.min.js +4 -0
- data/public/deck.js/modernizr.custom.js +0 -0
- data/public/deck.js/test/fixtures/complex.html +0 -0
- data/public/deck.js/test/fixtures/empty.html +0 -0
- data/public/deck.js/test/fixtures/iframe_simple.html +0 -0
- data/public/deck.js/test/fixtures/iframes.html +0 -0
- data/public/deck.js/test/fixtures/nesteds.html +0 -0
- data/public/deck.js/test/fixtures/standard.html +0 -0
- data/public/deck.js/test/index.html +1 -1
- data/public/deck.js/test/spec.core.js +3 -1
- data/public/deck.js/test/spec.goto.js +0 -0
- data/public/deck.js/test/spec.hash.js +2 -2
- data/public/deck.js/test/spec.menu.js +0 -0
- data/public/deck.js/test/spec.navigation.js +4 -4
- data/public/deck.js/test/spec.scale.js +0 -0
- data/public/deck.js/test/spec.status.js +0 -0
- data/public/deck.js/themes/style/neon.css +7 -1
- data/public/deck.js/themes/style/neon.scss +11 -1
- data/public/deck.js/themes/style/swiss.css +7 -1
- data/public/deck.js/themes/style/swiss.scss +11 -1
- data/public/deck.js/themes/style/web-2.0.css +7 -1
- data/public/deck.js/themes/style/web-2.0.scss +11 -1
- data/public/deck.js/themes/transition/fade.css +0 -0
- data/public/deck.js/themes/transition/fade.scss +0 -0
- data/public/deck.js/themes/transition/horizontal-slide.css +0 -0
- data/public/deck.js/themes/transition/horizontal-slide.scss +0 -0
- data/public/deck.js/themes/transition/vertical-slide.css +0 -0
- data/public/deck.js/themes/transition/vertical-slide.scss +0 -0
- data/public/toc.css +60 -27
- data/spec/rack_app_spec.rb +45 -1
- data/spec/slide_deck_spec.rb +77 -43
- data/spec/slide_spec.rb +19 -0
- metadata +22 -8
- data/public/deck.js/core/deck.core.html +0 -39
- data/public/deck.js/extensions/theme-picker/deck.theme-picker.css +0 -55
- data/public/deck.js/extensions/theme-picker/deck.theme-picker.js +0 -13
- data/public/deck.js/jquery-1.7.min.js +0 -4
    
        data/README.md
    CHANGED
    
    | @@ -54,7 +54,8 @@ and you'll get a web server running on `http://localhost:4333` serving up a slid | |
| 54 54 | 
             
              * links to image files are resolved relative to the source file -- no more broken images in markdown previews, and no need to put all your images in a separate directory!
         | 
| 55 55 | 
             
              * add CSS classes to slides inside the slide directive - - e.g. `<!SLIDE center>` gives `<section class="slide center">`
         | 
| 56 56 | 
             
              * generated HTML is pretty-printed for easier "view source"
         | 
| 57 | 
            -
            * uses deck.js' "swiss"  | 
| 57 | 
            +
            * uses deck.js' "swiss" and "horizontal-slide" themes (configurable)
         | 
| 58 | 
            +
            * uses several deck.js extensions, including `goto`, `menu`, `navigation`, `status`, `hash`,  and `scale`
         | 
| 58 59 | 
             
            * uses RedCarpet markdown extensions, including
         | 
| 59 60 | 
             
              * tables <http://michelf.com/projects/php-markdown/extra/#table>
         | 
| 60 61 | 
             
              * fenced code blocks <http://michelf.com/projects/php-markdown/extra/#fenced-code-blocks>
         | 
| @@ -63,8 +64,9 @@ and you'll get a web server running on `http://localhost:4333` serving up a slid | |
| 63 64 | 
             
            * code syntax highlighting using Coderay
         | 
| 64 65 | 
             
              * specify language at the top of the block using either ::: or @@@
         | 
| 65 66 | 
             
              * e.g. `@@@ ruby`
         | 
| 66 | 
            -
            * there's a simple table of contents (click the [ | 
| 67 | 
            +
            * there's a simple table of contents (click the [contents] link on lower left to toggle)
         | 
| 67 68 | 
             
              * this is currently very primitive and should be redone and/or integrated into deck.js
         | 
| 69 | 
            +
            * lines beginning with `.notes ` are skipped
         | 
| 68 70 |  | 
| 69 71 | 
             
            ## Command-Line API
         | 
| 70 72 |  | 
| @@ -77,10 +79,30 @@ and you'll get a web server running on `http://localhost:4333` serving up a slid | |
| 77 79 |  | 
| 78 80 | 
             
            ### Options
         | 
| 79 81 |  | 
| 80 | 
            -
             | 
| 81 | 
            -
             | 
| 82 | 
            -
             | 
| 83 | 
            -
             | 
| 82 | 
            +
                        --port, -p <i>:   Specify alternate port (default: 4333)
         | 
| 83 | 
            +
                           --build, -b:   Build an HTML file instead of launching a server (WARNING: not very useful yet)
         | 
| 84 | 
            +
                       --style, -s <s>:   Specify the style theme from deck.js/themes/style/ (default: swiss)
         | 
| 85 | 
            +
                  --transition, -t <s>:   Specify the transition theme from deck.js/themes/transition/ (default: horizontal-slide)
         | 
| 86 | 
            +
                         --version, -v:   Print version and exit
         | 
| 87 | 
            +
                            --help, -h:   Show this message
         | 
| 88 | 
            +
             | 
| 89 | 
            +
            ## Themes
         | 
| 90 | 
            +
             | 
| 91 | 
            +
            `deck.js` has several themes for styling and animating your presentation.
         | 
| 92 | 
            +
            You can select these from the command line or from a `showoff.json` file with the `style` and `transition` options.
         | 
| 93 | 
            +
            Currently the following themes are available:
         | 
| 94 | 
            +
             | 
| 95 | 
            +
            ### Style Themes
         | 
| 96 | 
            +
             | 
| 97 | 
            +
            * neon
         | 
| 98 | 
            +
            * swiss
         | 
| 99 | 
            +
            * web-2.0
         | 
| 100 | 
            +
             | 
| 101 | 
            +
            ### Transition Themes
         | 
| 102 | 
            +
             | 
| 103 | 
            +
            * fade
         | 
| 104 | 
            +
            * horizontal-slide
         | 
| 105 | 
            +
            * vertical-slide
         | 
| 84 106 |  | 
| 85 107 | 
             
            ## Deploying to Heroku
         | 
| 86 108 |  | 
| @@ -101,20 +123,24 @@ and a `Gemfile` like this: | |
| 101 123 |  | 
| 102 124 | 
             
            Then deploy to Heroku as usual (e.g. `heroku apps:create`).
         | 
| 103 125 |  | 
| 104 | 
            -
             | 
| 126 | 
            +
            Note that `Deck::RackApp.build` can accept either a filename or an array of filenames.
         | 
| 127 | 
            +
            It also accepts options, e.g.
         | 
| 128 | 
            +
             | 
| 129 | 
            +
                run Deck::RackApp.build('slides.md', transition: 'fade')
         | 
| 130 | 
            +
             | 
| 105 131 |  | 
| 106 132 | 
             
            ## Known Issues (Bugs and Limitations)
         | 
| 107 133 |  | 
| 108 134 | 
             
            * If you're running Webrick, you may not be able to kill the server with Ctrl-C. This is apparently due to a bug in recent versions of Webrick.
         | 
| 109 135 | 
             
              * Workaround: `gem install thin` -- if thin is installed, deck will use it instead of webrick
         | 
| 110 | 
            -
            *  | 
| 136 | 
            +
            * Auxiliary files (e.g. images) are interleaved in URL path space, so overlapping file names might not resolve to the right file.
         | 
| 111 137 | 
             
              * todo: rewrite internal links to files and serve them relative to current dir, not slide dir
         | 
| 112 138 | 
             
            * H1s (which split slides) are converted to H2s for compatibility with deck.js's CSS themes
         | 
| 113 139 | 
             
              * unless they're the only item on the slide, in which case they remain H1s
         | 
| 114 | 
            -
            *  | 
| 140 | 
            +
            * We use RedCarpet to process markdown, which doesn't work exactly the same as RDiscount... for example:
         | 
| 115 141 | 
             
              * indented code blocks under a bullet point may need to be indented more
         | 
| 116 142 | 
             
              * code blocks must be separated from the previous text by a newline
         | 
| 117 | 
            -
            *  | 
| 143 | 
            +
            * Slide scaling isn't perfect; sometimes either resizing or reloading will improve the layout.
         | 
| 118 144 |  | 
| 119 145 | 
             
            Report bugs on <http://github.com/alexch/deck.rb/issues>
         | 
| 120 146 |  | 
| @@ -123,6 +149,8 @@ Report bugs on <http://github.com/alexch/deck.rb/issues> | |
| 123 149 | 
             
            * deck.js by Caleb at <http://imakewebthings.com>
         | 
| 124 150 | 
             
            * deck.rb by Alex Chaffee <http://alexchaffee.com>, with help from
         | 
| 125 151 | 
             
              * Steven! Ragnarök <http://nuclearsandwich.com>
         | 
| 152 | 
            +
              * David Doolin <http://dool.in>
         | 
| 153 | 
            +
              * and other awesome patchers
         | 
| 126 154 |  | 
| 127 155 | 
             
            ### See Also
         | 
| 128 156 |  | 
    
        data/bin/deck
    CHANGED
    
    | @@ -8,6 +8,7 @@ require "rack" | |
| 8 8 | 
             
            require "deck"
         | 
| 9 9 | 
             
            require "deck/rack_app"
         | 
| 10 10 | 
             
            require "deck/version"
         | 
| 11 | 
            +
            require "thin" # i hate webrick
         | 
| 11 12 |  | 
| 12 13 | 
             
            options = Trollop.options do
         | 
| 13 14 | 
             
              version "deck v#{Deck::VERSION}"
         | 
| @@ -16,9 +17,11 @@ options = Trollop.options do | |
| 16 17 | 
             
              banner "(see http://github.com/alexch/deck.rb README for more help)"
         | 
| 17 18 | 
             
              opt :port, "Specify alternate port", :default => 4333
         | 
| 18 19 | 
             
              opt :build, "Build an HTML file instead of launching a server (WARNING: not very useful yet)"
         | 
| 20 | 
            +
              opt :style, "Specify the style theme from deck.js/themes/style/", default: "swiss"
         | 
| 21 | 
            +
              opt :transition, "Specify the transition theme from deck.js/themes/transition/", default: "horizontal-slide"
         | 
| 19 22 | 
             
            end
         | 
| 20 23 |  | 
| 21 | 
            -
            if options | 
| 24 | 
            +
            if options.delete(:build)
         | 
| 22 25 | 
             
              slides = []
         | 
| 23 26 | 
             
              output_path = nil
         | 
| 24 27 | 
             
              output_dir = "."  # for now, since deck.js is relative to the project root
         | 
| @@ -31,14 +34,18 @@ if options[:build] | |
| 31 34 | 
             
              end
         | 
| 32 35 |  | 
| 33 36 | 
             
              File.open(output_path, "w") do |file|
         | 
| 34 | 
            -
                deck = Deck::SlideDeck.new :slides => slides
         | 
| 37 | 
            +
                deck = Deck::SlideDeck.new :slides => slides  #todo: pass theme options
         | 
| 35 38 | 
             
                # deck.to_pretty(:output => file)  # todo: figure out why this doesn't work
         | 
| 36 39 | 
             
                file.write deck.to_pretty
         | 
| 37 40 | 
             
              end
         | 
| 38 41 |  | 
| 39 42 | 
             
            else
         | 
| 40 43 |  | 
| 41 | 
            -
              port = options | 
| 44 | 
            +
              port = options.delete(:port)
         | 
| 42 45 | 
             
              slide_files = ARGV
         | 
| 43 | 
            -
               | 
| 46 | 
            +
              options = {
         | 
| 47 | 
            +
                  style: options[:style],
         | 
| 48 | 
            +
                  transition: options[:transition],
         | 
| 49 | 
            +
              }
         | 
| 50 | 
            +
              Rack::Handler.default.run Deck::RackApp.build(slide_files, options), :Port => port
         | 
| 44 51 | 
             
            end
         | 
    
        data/lib/deck/rack_app.rb
    CHANGED
    
    | @@ -1,5 +1,3 @@ | |
| 1 | 
            -
            here = File.expand_path File.dirname(__FILE__)
         | 
| 2 | 
            -
             | 
| 3 1 | 
             
            require 'json'
         | 
| 4 2 | 
             
            require 'coderay'
         | 
| 5 3 | 
             
            require 'rack/codehighlighter'
         | 
| @@ -16,12 +14,8 @@ module Deck | |
| 16 14 | 
             
                  Rack::File.new("#{app_root}/public")
         | 
| 17 15 | 
             
                end
         | 
| 18 16 |  | 
| 19 | 
            -
                def self.build slide_files
         | 
| 20 | 
            -
                   | 
| 21 | 
            -
                    if require "thin/logging"
         | 
| 22 | 
            -
                      Thin::Logging.debug = true
         | 
| 23 | 
            -
                    end
         | 
| 24 | 
            -
                  end
         | 
| 17 | 
            +
                def self.build slide_files, options = {}
         | 
| 18 | 
            +
                  enable_thin_logging()
         | 
| 25 19 |  | 
| 26 20 | 
             
                  Rack::Builder.app do
         | 
| 27 21 | 
             
                    use Rack::ShowExceptions
         | 
| @@ -30,25 +24,24 @@ module Deck | |
| 30 24 | 
             
                      :element => "pre>code",
         | 
| 31 25 | 
             
                      :markdown => true,
         | 
| 32 26 | 
             
                      :pattern => /\A[:@]{3}\s?(\w+)\s*(\n|
)/i
         | 
| 33 | 
            -
                    run ::Deck::RackApp.new(slide_files)
         | 
| 27 | 
            +
                    run ::Deck::RackApp.new(slide_files, options)
         | 
| 28 | 
            +
                  end
         | 
| 29 | 
            +
                end
         | 
| 30 | 
            +
             | 
| 31 | 
            +
                def self.enable_thin_logging
         | 
| 32 | 
            +
                  if const_defined?(:Thin)
         | 
| 33 | 
            +
                    if require "thin/logging"
         | 
| 34 | 
            +
                      Thin::Logging.debug = true
         | 
| 35 | 
            +
                    end
         | 
| 34 36 | 
             
                  end
         | 
| 35 37 | 
             
                end
         | 
| 36 38 |  | 
| 37 | 
            -
                def initialize slide_files
         | 
| 39 | 
            +
                def initialize slide_files, options = {}
         | 
| 40 | 
            +
                  @options = options
         | 
| 38 41 | 
             
                  @slide_files = [slide_files].flatten.map do |slide_file|
         | 
| 39 42 | 
             
                    case slide_file
         | 
| 40 43 | 
             
                    when /\/?showoff(.*)\.json$/
         | 
| 41 | 
            -
                       | 
| 42 | 
            -
                      json_file = slide_file
         | 
| 43 | 
            -
                      config = JSON.parse(File.read(json_file))
         | 
| 44 | 
            -
                      config['sections'].map do |markdown_file|
         | 
| 45 | 
            -
                        if markdown_file =~ /^# /   # you can use literal markdown instead of a file name
         | 
| 46 | 
            -
                          s = Slide.split(markdown_file)
         | 
| 47 | 
            -
                          s
         | 
| 48 | 
            -
                        else
         | 
| 49 | 
            -
                          File.new(json_file_dir + '/' + markdown_file)
         | 
| 50 | 
            -
                        end
         | 
| 51 | 
            -
                      end
         | 
| 44 | 
            +
                      parse_showoff_json(slide_file)
         | 
| 52 45 | 
             
                    else
         | 
| 53 46 | 
             
                      File.new(slide_file)
         | 
| 54 47 | 
             
                    end
         | 
| @@ -63,6 +56,33 @@ module Deck | |
| 63 56 | 
             
                    end
         | 
| 64 57 | 
             
                end
         | 
| 65 58 |  | 
| 59 | 
            +
                def parse_showoff_json(slide_file)
         | 
| 60 | 
            +
                  json_file_dir = File.expand_path(File.dirname(slide_file))
         | 
| 61 | 
            +
                  json_file = slide_file
         | 
| 62 | 
            +
                  config = JSON.parse(File.read(json_file))
         | 
| 63 | 
            +
                  extract_options(config)
         | 
| 64 | 
            +
                  extract_slides(config, json_file_dir)
         | 
| 65 | 
            +
                end
         | 
| 66 | 
            +
             | 
| 67 | 
            +
                def extract_slides(config, json_file_dir)
         | 
| 68 | 
            +
                  config['sections'].map do |markdown_file|
         | 
| 69 | 
            +
                    if markdown_file =~ /^# / # you can use literal markdown instead of a file name
         | 
| 70 | 
            +
                      s = Slide.split(markdown_file)
         | 
| 71 | 
            +
                      s
         | 
| 72 | 
            +
                    else
         | 
| 73 | 
            +
                      File.new(json_file_dir + '/' + markdown_file)
         | 
| 74 | 
            +
                    end
         | 
| 75 | 
            +
                  end
         | 
| 76 | 
            +
                end
         | 
| 77 | 
            +
             | 
| 78 | 
            +
                def extract_options(config)
         | 
| 79 | 
            +
                  ["style", "transition"].each do |key|
         | 
| 80 | 
            +
                    if config[key] and !@options[key.to_sym]
         | 
| 81 | 
            +
                      @options[key.to_sym] = config[key]
         | 
| 82 | 
            +
                    end
         | 
| 83 | 
            +
                  end
         | 
| 84 | 
            +
                end
         | 
| 85 | 
            +
             | 
| 66 86 | 
             
                def call env
         | 
| 67 87 | 
             
                  request = Rack::Request.new(env)
         | 
| 68 88 | 
             
                  if request.path == "/"
         | 
| @@ -78,7 +98,7 @@ module Deck | |
| 78 98 | 
             
                end
         | 
| 79 99 |  | 
| 80 100 | 
             
                def deck
         | 
| 81 | 
            -
                  SlideDeck.new | 
| 101 | 
            +
                  SlideDeck.new({:slides => slides}.merge(@options))
         | 
| 82 102 | 
             
                end
         | 
| 83 103 |  | 
| 84 104 | 
             
                def slides
         | 
    
        data/lib/deck/slide.rb
    CHANGED
    
    | @@ -35,6 +35,9 @@ module Deck | |
| 35 35 | 
             
                    slides << (slide = Slide.new)
         | 
| 36 36 | 
             
                    slide << line
         | 
| 37 37 |  | 
| 38 | 
            +
                  elsif line =~ /^\.notes/
         | 
| 39 | 
            +
                    # don't include notes
         | 
| 40 | 
            +
             | 
| 38 41 | 
             
                  else
         | 
| 39 42 | 
             
                    slide << line
         | 
| 40 43 | 
             
                  end
         | 
| @@ -107,16 +110,14 @@ module Deck | |
| 107 110 | 
             
              end
         | 
| 108 111 |  | 
| 109 112 | 
             
              def title
         | 
| 110 | 
            -
                lines = @markdown_text.split("\n")
         | 
| 113 | 
            +
                lines = @markdown_text.strip.split("\n")
         | 
| 111 114 | 
             
                raise "an empty slide has no id" if lines.empty?
         | 
| 112 115 | 
             
                lines.first.gsub(/^[#=]*/, '').strip
         | 
| 113 116 | 
             
              end
         | 
| 114 117 |  | 
| 115 118 | 
             
              def slide_id
         | 
| 116 119 | 
             
                @slide_id ||= begin
         | 
| 117 | 
            -
                   | 
| 118 | 
            -
                  raise "an empty slide has no id" if lines.empty?
         | 
| 119 | 
            -
                  lines.first.downcase.gsub(/[^\w\s]/, '').strip.gsub(/\s/, '_')
         | 
| 120 | 
            +
                  title.downcase.gsub(/[^\w\s]/, '').strip.gsub(/\s/, '_')
         | 
| 120 121 | 
             
                end
         | 
| 121 122 | 
             
              end
         | 
| 122 123 |  | 
    
        data/lib/deck/slide_deck.rb
    CHANGED
    
    | @@ -4,31 +4,34 @@ require 'redcarpet' | |
| 4 4 | 
             
            require "deck/slide"
         | 
| 5 5 |  | 
| 6 6 | 
             
            module Deck
         | 
| 7 | 
            -
             | 
| 8 | 
            -
             | 
| 9 | 
            -
             | 
| 10 | 
            -
             | 
| 11 | 
            -
             | 
| 12 | 
            -
             | 
| 13 | 
            -
             | 
| 14 | 
            -
             | 
| 15 | 
            -
             | 
| 16 | 
            -
             | 
| 17 | 
            -
             | 
| 18 | 
            -
                  # 'theme-picker',
         | 
| 7 | 
            +
              class SlideDeck < Erector::Widgets::Page
         | 
| 8 | 
            +
                needs :title => "deck.rb presentation",
         | 
| 9 | 
            +
                      :description => nil,
         | 
| 10 | 
            +
                      :author => nil
         | 
| 11 | 
            +
                needs :extensions => [
         | 
| 12 | 
            +
                    'goto',
         | 
| 13 | 
            +
                    'menu',
         | 
| 14 | 
            +
                    'navigation',
         | 
| 15 | 
            +
                    'status',
         | 
| 16 | 
            +
                    'hash',
         | 
| 17 | 
            +
                    'scale',
         | 
| 19 18 | 
             
                ]
         | 
| 20 | 
            -
             | 
| 21 | 
            -
              attr_reader :extensions
         | 
| 19 | 
            +
                needs :slides => nil
         | 
| 22 20 |  | 
| 23 | 
            -
             | 
| 24 | 
            -
                 | 
| 25 | 
            -
              end
         | 
| 21 | 
            +
                needs :style => "swiss"
         | 
| 22 | 
            +
                needs :transition => "horizontal-slide"
         | 
| 26 23 |  | 
| 27 | 
            -
             | 
| 28 | 
            -
             | 
| 29 | 
            -
             | 
| 30 | 
            -
             | 
| 31 | 
            -
             | 
| 24 | 
            +
                attr_reader :extensions
         | 
| 25 | 
            +
             | 
| 26 | 
            +
                def page_title
         | 
| 27 | 
            +
                  @title
         | 
| 28 | 
            +
                end
         | 
| 29 | 
            +
             | 
| 30 | 
            +
                # todo: promote into Text
         | 
| 31 | 
            +
                # todo: support numbers a la 'Ӓ'
         | 
| 32 | 
            +
                def entity entity_id
         | 
| 33 | 
            +
                  raw("&#{entity_id};")
         | 
| 34 | 
            +
                end
         | 
| 32 35 |  | 
| 33 36 | 
             
            # left over from deck.js' introduction/index.html
         | 
| 34 37 |  | 
| @@ -38,155 +41,159 @@ module Deck | |
| 38 41 | 
             
            # <!--[if IE 8]>    <html class="no-js ie8" lang="en"> <![endif]-->
         | 
| 39 42 | 
             
            # <!--[if gt IE 8]><!-->  <html class="no-js" lang="en"> <!--<![endif]-->
         | 
| 40 43 |  | 
| 41 | 
            -
             | 
| 42 | 
            -
             | 
| 43 | 
            -
             | 
| 44 | 
            -
             | 
| 45 | 
            -
             | 
| 46 | 
            -
              def public_asset path
         | 
| 47 | 
            -
                "/#{path}"
         | 
| 48 | 
            -
              end
         | 
| 49 | 
            -
             | 
| 50 | 
            -
              def head_content
         | 
| 51 | 
            -
                super
         | 
| 52 | 
            -
                meta 'charset' => 'utf-8'
         | 
| 53 | 
            -
                meta 'http-equiv'=>"X-UA-Compatible", 'content'=>"IE=edge,chrome=1"
         | 
| 54 | 
            -
                meta :name => "viewport", :content=> "width=1024, user-scalable=no"
         | 
| 55 | 
            -
                meta :name => "description", :content=> @description if @description
         | 
| 56 | 
            -
                meta :name => "author", :content=> @author if @author
         | 
| 44 | 
            +
            # todo: promote into Page
         | 
| 45 | 
            +
                def stylesheet src, attributes = {}
         | 
| 46 | 
            +
                  link({:rel => "stylesheet", :href => src}.merge(attributes))
         | 
| 47 | 
            +
                end
         | 
| 57 48 |  | 
| 58 | 
            -
                 | 
| 59 | 
            -
             | 
| 60 | 
            -
                extensions.each do |extension|
         | 
| 61 | 
            -
                  stylesheet public_asset("deck.js/extensions/#{extension}/deck.#{extension}.css")
         | 
| 49 | 
            +
                def public_asset path
         | 
| 50 | 
            +
                  "/#{path}"
         | 
| 62 51 | 
             
                end
         | 
| 63 52 |  | 
| 64 | 
            -
                 | 
| 65 | 
            -
             | 
| 53 | 
            +
                def head_content
         | 
| 54 | 
            +
                  super
         | 
| 55 | 
            +
                  meta 'charset' => 'utf-8'
         | 
| 56 | 
            +
                  meta 'http-equiv' => "X-UA-Compatible", 'content' => "IE=edge,chrome=1"
         | 
| 57 | 
            +
                  meta :name => "viewport", :content => "width=1024, user-scalable=no"
         | 
| 58 | 
            +
                  meta :name => "description", :content => @description if @description
         | 
| 59 | 
            +
                  meta :name => "author", :content => @author if @author
         | 
| 60 | 
            +
             | 
| 61 | 
            +
                  #  <!-- Core and extension CSS files -->
         | 
| 62 | 
            +
                  stylesheet public_asset("deck.js/core/deck.core.css")
         | 
| 63 | 
            +
                  extensions.each do |extension|
         | 
| 64 | 
            +
                    stylesheet public_asset("deck.js/extensions/#{extension}/deck.#{extension}.css")
         | 
| 65 | 
            +
                  end
         | 
| 66 66 |  | 
| 67 | 
            -
             | 
| 68 | 
            -
             | 
| 69 | 
            -
             | 
| 70 | 
            -
             | 
| 67 | 
            +
                  # <!-- Theme CSS files -->
         | 
| 68 | 
            +
                  stylesheet public_asset("deck.js/themes/style/#{@style}.css"), :id => "style-theme-link"
         | 
| 69 | 
            +
                  stylesheet public_asset("deck.js/themes/transition/#{@transition}.css"), :id => "transition-theme-link"
         | 
| 70 | 
            +
             | 
| 71 | 
            +
                  stylesheet public_asset("coderay.css")
         | 
| 72 | 
            +
                  stylesheet public_asset("tables.css")
         | 
| 73 | 
            +
                  stylesheet public_asset("toc.css")
         | 
| 74 | 
            +
                end
         | 
| 71 75 |  | 
| 72 | 
            -
             | 
| 73 | 
            -
             | 
| 76 | 
            +
                def scripts
         | 
| 77 | 
            +
                  script :src => public_asset("deck.js/modernizr.custom.js")
         | 
| 74 78 |  | 
| 75 | 
            -
             | 
| 76 | 
            -
             | 
| 77 | 
            -
             | 
| 79 | 
            +
                  # comment 'Grab CDN jQuery, with a protocol relative URL; fall back to local if offline'
         | 
| 80 | 
            +
                  # script :src => '//ajax.aspnetcdn.com/ajax/jQuery/jquery-1.7.2.min.js'
         | 
| 81 | 
            +
                  script :src => public_asset('deck.js/jquery-1.7.2.min.js')
         | 
| 78 82 |  | 
| 79 | 
            -
             | 
| 83 | 
            +
                  jquery <<-JAVASCRIPT
         | 
| 80 84 | 
             
                $('.slide_toc .toggle').click(function(){
         | 
| 81 | 
            -
                  $('.slide_toc  | 
| 85 | 
            +
                  $('.slide_toc .table').toggle();
         | 
| 82 86 | 
             
                });
         | 
| 83 | 
            -
             | 
| 87 | 
            +
                  JAVASCRIPT
         | 
| 84 88 |  | 
| 85 | 
            -
             | 
| 86 | 
            -
             | 
| 89 | 
            +
                  comment 'Deck Core and extensions'
         | 
| 90 | 
            +
                  script :type => "text/javascript", :src => public_asset('deck.js/core/deck.core.js')
         | 
| 87 91 |  | 
| 88 | 
            -
             | 
| 89 | 
            -
             | 
| 90 | 
            -
             | 
| 92 | 
            +
                  extensions.each do |extension|
         | 
| 93 | 
            +
                    script :type => "text/javascript", :src => public_asset("deck.js/extensions/#{extension}/deck.#{extension}.js")
         | 
| 94 | 
            +
                  end
         | 
| 91 95 |  | 
| 92 | 
            -
             | 
| 93 | 
            -
             | 
| 96 | 
            +
                  # fire up deck.js
         | 
| 97 | 
            +
                  script "$(function(){$.deck('.slide');});"
         | 
| 94 98 |  | 
| 95 | 
            -
             | 
| 96 | 
            -
             | 
| 97 | 
            -
              def body_attributes
         | 
| 98 | 
            -
                {:class=>"deck-container"}
         | 
| 99 | 
            -
              end
         | 
| 99 | 
            +
                end
         | 
| 100 100 |  | 
| 101 | 
            -
             | 
| 102 | 
            -
             | 
| 103 | 
            -
                 | 
| 104 | 
            -
                toc
         | 
| 105 | 
            -
                deck_status
         | 
| 106 | 
            -
                goto_slide
         | 
| 107 | 
            -
                permalink
         | 
| 108 | 
            -
                scripts
         | 
| 109 | 
            -
              end
         | 
| 101 | 
            +
                def body_attributes
         | 
| 102 | 
            +
                  {:class => "deck-container"}
         | 
| 103 | 
            +
                end
         | 
| 110 104 |  | 
| 111 | 
            -
             | 
| 112 | 
            -
             | 
| 113 | 
            -
             | 
| 114 | 
            -
             | 
| 115 | 
            -
                   | 
| 105 | 
            +
                def body_content
         | 
| 106 | 
            +
                  slides
         | 
| 107 | 
            +
                  slide_navigation
         | 
| 108 | 
            +
                  toc
         | 
| 109 | 
            +
                  deck_status
         | 
| 110 | 
            +
                  goto_slide
         | 
| 111 | 
            +
                  permalink
         | 
| 112 | 
            +
                  scripts
         | 
| 116 113 | 
             
                end
         | 
| 117 | 
            -
              end
         | 
| 118 114 |  | 
| 119 | 
            -
             | 
| 120 | 
            -
             | 
| 121 | 
            -
                   | 
| 122 | 
            -
             | 
| 115 | 
            +
                def slide slide_id
         | 
| 116 | 
            +
                  # todo: use Slide object, but without markdown
         | 
| 117 | 
            +
                  # slide = Slide.new(:slide_id => slide_id)
         | 
| 118 | 
            +
                  section.slide :id => slide_id do
         | 
| 119 | 
            +
                    yield
         | 
| 123 120 | 
             
                  end
         | 
| 124 | 
            -
                else
         | 
| 125 | 
            -
                  default_slide
         | 
| 126 121 | 
             
                end
         | 
| 127 | 
            -
              end
         | 
| 128 122 |  | 
| 129 | 
            -
             | 
| 130 | 
            -
             | 
| 131 | 
            -
             | 
| 132 | 
            -
             | 
| 133 | 
            -
                     | 
| 134 | 
            -
             | 
| 135 | 
            -
                     | 
| 136 | 
            -
                   | 
| 137 | 
            -
                  pre "erector --to-html ./deck.rb  # generates deck.html"
         | 
| 123 | 
            +
                def slides
         | 
| 124 | 
            +
                  if @slides
         | 
| 125 | 
            +
                    @slides.each do |slide|
         | 
| 126 | 
            +
                      widget slide
         | 
| 127 | 
            +
                    end
         | 
| 128 | 
            +
                  else
         | 
| 129 | 
            +
                    default_slide
         | 
| 130 | 
            +
                  end
         | 
| 138 131 | 
             
                end
         | 
| 139 | 
            -
              end
         | 
| 140 132 |  | 
| 141 | 
            -
             | 
| 142 | 
            -
             | 
| 143 | 
            -
             | 
| 133 | 
            +
                def default_slide
         | 
| 134 | 
            +
                  slide 'readme' do
         | 
| 135 | 
            +
                    h2 "deck.rb"
         | 
| 136 | 
            +
                    ul {
         | 
| 137 | 
            +
                      li "based on deck.js"
         | 
| 138 | 
            +
                      li "create a subclass of Deck (see introduction.rb)"
         | 
| 139 | 
            +
                      li "run erector to build it"
         | 
| 140 | 
            +
                    }
         | 
| 141 | 
            +
                    pre "erector --to-html ./deck.rb  # generates deck.html"
         | 
| 142 | 
            +
                  end
         | 
| 144 143 | 
             
                end
         | 
| 145 | 
            -
             | 
| 146 | 
            -
             | 
| 144 | 
            +
             | 
| 145 | 
            +
                def slide_navigation
         | 
| 146 | 
            +
                  a :href => '#', :class => 'deck-prev-link', :title => 'Previous' do
         | 
| 147 | 
            +
                    character 8592
         | 
| 148 | 
            +
                  end
         | 
| 149 | 
            +
                  a :href => '#', :class => 'deck-next-link', :title => 'Next' do
         | 
| 150 | 
            +
                    character 8594
         | 
| 151 | 
            +
                  end
         | 
| 147 152 | 
             
                end
         | 
| 148 | 
            -
              end
         | 
| 149 153 |  | 
| 150 | 
            -
             | 
| 151 | 
            -
             | 
| 152 | 
            -
             | 
| 153 | 
            -
             | 
| 154 | 
            -
             | 
| 155 | 
            -
                       | 
| 156 | 
            -
                         | 
| 157 | 
            -
                           | 
| 154 | 
            +
                def toc
         | 
| 155 | 
            +
                  div.slide_toc do
         | 
| 156 | 
            +
                    div.toggle "[contents]"
         | 
| 157 | 
            +
                    div.table do
         | 
| 158 | 
            +
                      h2 @title
         | 
| 159 | 
            +
                      ul do
         | 
| 160 | 
            +
                        if @slides
         | 
| 161 | 
            +
                          @slides.each do |slide|
         | 
| 162 | 
            +
                            li do
         | 
| 163 | 
            +
                              a slide.title, :href => "##{slide.slide_id}"
         | 
| 164 | 
            +
                            end
         | 
| 165 | 
            +
                          end
         | 
| 158 166 | 
             
                        end
         | 
| 159 167 | 
             
                      end
         | 
| 160 168 | 
             
                    end
         | 
| 161 169 | 
             
                  end
         | 
| 162 170 | 
             
                end
         | 
| 163 | 
            -
              end
         | 
| 164 171 |  | 
| 165 | 
            -
             | 
| 166 | 
            -
             | 
| 167 | 
            -
             | 
| 168 | 
            -
             | 
| 169 | 
            -
             | 
| 170 | 
            -
             | 
| 172 | 
            +
                def deck_status
         | 
| 173 | 
            +
                  p :class => 'deck-status' do
         | 
| 174 | 
            +
                    span :class => 'deck-status-current' do
         | 
| 175 | 
            +
                    end
         | 
| 176 | 
            +
                    text '/'
         | 
| 177 | 
            +
                    span :class => 'deck-status-total' do
         | 
| 178 | 
            +
                    end
         | 
| 171 179 | 
             
                  end
         | 
| 172 180 | 
             
                end
         | 
| 173 | 
            -
              end
         | 
| 174 181 |  | 
| 175 | 
            -
             | 
| 176 | 
            -
             | 
| 177 | 
            -
             | 
| 178 | 
            -
             | 
| 179 | 
            -
             | 
| 180 | 
            -
             | 
| 181 | 
            -
             | 
| 182 | 
            +
                def goto_slide
         | 
| 183 | 
            +
                  form :action => '.', :method => 'get', :class => 'goto-form' do
         | 
| 184 | 
            +
                    label :for => 'goto-slide' do
         | 
| 185 | 
            +
                      text 'Go to slide:'
         | 
| 186 | 
            +
                    end
         | 
| 187 | 
            +
                    input :type => 'text', :name => 'slidenum', :id => 'goto-slide', :list => 'goto-datalist'
         | 
| 188 | 
            +
                    datalist :id => 'goto-datalist' do
         | 
| 182 189 | 
             
                    end
         | 
| 183 | 
            -
             | 
| 190 | 
            +
                    input :type => 'submit', :value => 'Go'
         | 
| 191 | 
            +
                  end
         | 
| 184 192 | 
             
                end
         | 
| 185 | 
            -
              end
         | 
| 186 193 |  | 
| 187 | 
            -
             | 
| 188 | 
            -
             | 
| 189 | 
            -
             | 
| 194 | 
            +
                def permalink
         | 
| 195 | 
            +
                  a "#", :href => '.', :title => 'Permalink to this slide', :class => 'deck-permalink'
         | 
| 196 | 
            +
                end
         | 
| 190 197 |  | 
| 191 | 
            -
             | 
| 198 | 
            +
              end
         | 
| 192 199 | 
             
            end
         |