Class: Deck::SlideDeck

Inherits:
Erector::Widgets::Page
  • Object
show all
Defined in:
lib/deck/slide_deck.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#extensionsObject (readonly)

Returns the value of attribute extensions.



24
25
26
# File 'lib/deck/slide_deck.rb', line 24

def extensions
  @extensions
end

Instance Method Details

#body_attributesObject



101
102
103
# File 'lib/deck/slide_deck.rb', line 101

def body_attributes
  {:class => "deck-container"}
end

#body_contentObject



105
106
107
108
109
110
111
112
113
# File 'lib/deck/slide_deck.rb', line 105

def body_content
  slides
  slide_navigation
  toc
  deck_status
  goto_slide
  permalink
  scripts
end

#deck_statusObject



172
173
174
175
176
177
178
179
180
# File 'lib/deck/slide_deck.rb', line 172

def deck_status
  p :class => 'deck-status' do
    span :class => 'deck-status-current' do
    end
    text '/'
    span :class => 'deck-status-total' do
    end
  end
end

#default_slideObject



133
134
135
136
137
138
139
140
141
142
143
# File 'lib/deck/slide_deck.rb', line 133

def default_slide
  slide 'readme' do
    h2 "deck.rb"
    ul {
      li "based on deck.js"
      li "create a subclass of Deck (see introduction.rb)"
      li "run erector to build it"
    }
    pre "erector --to-html ./deck.rb  # generates deck.html"
  end
end

#entity(entity_id) ⇒ Object

todo: promote into Text todo: support numbers a la ‘Ӓ’



32
33
34
# File 'lib/deck/slide_deck.rb', line 32

def entity entity_id
  raw("&#{entity_id};")
end

#goto_slideObject



182
183
184
185
186
187
188
189
190
191
192
# File 'lib/deck/slide_deck.rb', line 182

def goto_slide
  form :action => '.', :method => 'get', :class => 'goto-form' do
    label :for => 'goto-slide' do
      text 'Go to slide:'
    end
    input :type => 'text', :name => 'slidenum', :id => 'goto-slide', :list => 'goto-datalist'
    datalist :id => 'goto-datalist' do
    end
    input :type => 'submit', :value => 'Go'
  end
end

#head_contentObject



53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
# File 'lib/deck/slide_deck.rb', line 53

def head_content
  super
  meta 'charset' => 'utf-8'
  meta 'http-equiv' => "X-UA-Compatible", 'content' => "IE=edge,chrome=1"
  meta :name => "viewport", :content => "width=1024, user-scalable=no"
  meta :name => "description", :content => @description if @description
  meta :name => "author", :content => @author if @author

  #  <!-- Core and extension CSS files -->
  stylesheet public_asset("deck.js/core/deck.core.css")
  extensions.each do |extension|
    stylesheet public_asset("deck.js/extensions/#{extension}/deck.#{extension}.css")
  end

  # <!-- Theme CSS files -->
  stylesheet public_asset("deck.js/themes/style/#{@style}.css"), :id => "style-theme-link"
  stylesheet public_asset("deck.js/themes/transition/#{@transition}.css"), :id => "transition-theme-link"

  stylesheet public_asset("coderay.css")
  stylesheet public_asset("tables.css")
  stylesheet public_asset("toc.css")
end

#page_titleObject



26
27
28
# File 'lib/deck/slide_deck.rb', line 26

def page_title
  @title
end


194
195
196
# File 'lib/deck/slide_deck.rb', line 194

def permalink
  a "#", :href => '.', :title => 'Permalink to this slide', :class => 'deck-permalink'
end

#public_asset(path) ⇒ Object



49
50
51
# File 'lib/deck/slide_deck.rb', line 49

def public_asset path
  "/#{path}"
end

#scriptsObject



76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
# File 'lib/deck/slide_deck.rb', line 76

def scripts
  script :src => public_asset("deck.js/modernizr.custom.js")

  # comment 'Grab CDN jQuery, with a protocol relative URL; fall back to local if offline'
  # script :src => '//ajax.aspnetcdn.com/ajax/jQuery/jquery-1.7.2.min.js'
  script :src => public_asset('deck.js/jquery-1.7.2.min.js')

  jquery "$('.slide_toc .toggle').click(function(){\n  $('.slide_toc .table').toggle();\n});\n  JAVASCRIPT\n\n  comment 'Deck Core and extensions'\n  script :type => \"text/javascript\", :src => public_asset('deck.js/core/deck.core.js')\n\n  extensions.each do |extension|\n    script :type => \"text/javascript\", :src => public_asset(\"deck.js/extensions/\#{extension}/deck.\#{extension}.js\")\n  end\n\n  # fire up deck.js\n  script \"$(function(){$.deck('.slide');});\"\n\nend\n"

#slide(slide_id) ⇒ Object



115
116
117
118
119
120
121
# File 'lib/deck/slide_deck.rb', line 115

def slide slide_id
  # todo: use Slide object, but without markdown
  # slide = Slide.new(:slide_id => slide_id)
  section.slide :id => slide_id do
    yield
  end
end

#slide_navigationObject



145
146
147
148
149
150
151
152
# File 'lib/deck/slide_deck.rb', line 145

def slide_navigation
  a :href => '#', :class => 'deck-prev-link', :title => 'Previous' do
    character 8592
  end
  a :href => '#', :class => 'deck-next-link', :title => 'Next' do
    character 8594
  end
end

#slidesObject



123
124
125
126
127
128
129
130
131
# File 'lib/deck/slide_deck.rb', line 123

def slides
  if @slides
    @slides.each do |slide|
      widget slide
    end
  else
    default_slide
  end
end

#stylesheet(src, attributes = {}) ⇒ Object

todo: promote into Page



45
46
47
# File 'lib/deck/slide_deck.rb', line 45

def stylesheet src, attributes = {}
  link({:rel => "stylesheet", :href => src}.merge(attributes))
end

#tocObject



154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
# File 'lib/deck/slide_deck.rb', line 154

def toc
  div.slide_toc do
    div.toggle "[contents]"
    div.table do
      h2 @title
      ul do
        if @slides
          @slides.each do |slide|
            li do
              a slide.title, :href => "##{slide.slide_id}"
            end
          end
        end
      end
    end
  end
end