parade 0.8.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.
Files changed (106) hide show
  1. data/LICENSE +21 -0
  2. data/README.md +542 -0
  3. data/Rakefile +15 -0
  4. data/bin/parade +138 -0
  5. data/lib/parade.rb +43 -0
  6. data/lib/parade/commands/commands.rb +84 -0
  7. data/lib/parade/commands/generate_outline.rb +34 -0
  8. data/lib/parade/commands/generate_presentation.rb +34 -0
  9. data/lib/parade/commands/generate_rackup.rb +32 -0
  10. data/lib/parade/commands/html_output.rb +47 -0
  11. data/lib/parade/commands/render_from_template.rb +50 -0
  12. data/lib/parade/commands/static_html.rb +38 -0
  13. data/lib/parade/commands/static_pdf.rb +39 -0
  14. data/lib/parade/commands/unknown.rb +23 -0
  15. data/lib/parade/features/live_ruby.rb +18 -0
  16. data/lib/parade/features/pdf_presentation.rb +24 -0
  17. data/lib/parade/features/preshow.rb +11 -0
  18. data/lib/parade/helpers/encode_image.rb +24 -0
  19. data/lib/parade/helpers/template_generator.rb +130 -0
  20. data/lib/parade/metadata.rb +73 -0
  21. data/lib/parade/metadata/assignment.rb +38 -0
  22. data/lib/parade/metadata/css_classes.rb +22 -0
  23. data/lib/parade/metadata/html_id.rb +35 -0
  24. data/lib/parade/metadata/template.rb +31 -0
  25. data/lib/parade/parsers/dsl.rb +138 -0
  26. data/lib/parade/parsers/dsl_file_parser.rb +17 -0
  27. data/lib/parade/parsers/json_file_parser.rb +67 -0
  28. data/lib/parade/parsers/markdown_image_paths.rb +44 -0
  29. data/lib/parade/parsers/markdown_slide_splitter.rb +63 -0
  30. data/lib/parade/parsers/presentation_directory_parser.rb +36 -0
  31. data/lib/parade/parsers/presentation_file_parser.rb +27 -0
  32. data/lib/parade/parsers/presentation_filepath_parser.rb +35 -0
  33. data/lib/parade/parsers/slides_file_content_parser.rb +27 -0
  34. data/lib/parade/renderers/columns_renderer.rb +68 -0
  35. data/lib/parade/renderers/command_line_renderer.rb +142 -0
  36. data/lib/parade/renderers/html_with_pygments.rb +42 -0
  37. data/lib/parade/renderers/inline_images.rb +31 -0
  38. data/lib/parade/renderers/special_paragraph_renderer.rb +23 -0
  39. data/lib/parade/renderers/update_image_paths.rb +75 -0
  40. data/lib/parade/section.rb +183 -0
  41. data/lib/parade/server.rb +139 -0
  42. data/lib/parade/slide.rb +128 -0
  43. data/lib/parade/version.rb +3 -0
  44. data/lib/public/css/960.css +653 -0
  45. data/lib/public/css/fg.menu.css +114 -0
  46. data/lib/public/css/ghf_marked.css +180 -0
  47. data/lib/public/css/jquery-terminal.css +73 -0
  48. data/lib/public/css/onepage.css +62 -0
  49. data/lib/public/css/parade.css +450 -0
  50. data/lib/public/css/pdf.css +13 -0
  51. data/lib/public/css/reset.css +53 -0
  52. data/lib/public/css/spinner_bar.gif +0 -0
  53. data/lib/public/css/theme/images/ui-bg_diagonals-small_100_f0efea_40x40.png +0 -0
  54. data/lib/public/css/theme/images/ui-bg_flat_35_f0f0f0_40x100.png +0 -0
  55. data/lib/public/css/theme/images/ui-bg_glass_55_fcf0ba_1x400.png +0 -0
  56. data/lib/public/css/theme/images/ui-bg_glow-ball_25_2e2e28_600x600.png +0 -0
  57. data/lib/public/css/theme/images/ui-bg_highlight-soft_100_f0efea_1x100.png +0 -0
  58. data/lib/public/css/theme/images/ui-bg_highlight-soft_25_327E04_1x100.png +0 -0
  59. data/lib/public/css/theme/images/ui-bg_highlight-soft_25_5A9D1A_1x100.png +0 -0
  60. data/lib/public/css/theme/images/ui-bg_highlight-soft_95_ffedad_1x100.png +0 -0
  61. data/lib/public/css/theme/images/ui-bg_inset-soft_22_3b3b35_1x100.png +0 -0
  62. data/lib/public/css/theme/images/ui-icons_808080_256x240.png +0 -0
  63. data/lib/public/css/theme/images/ui-icons_8DC262_256x240.png +0 -0
  64. data/lib/public/css/theme/images/ui-icons_cd0a0a_256x240.png +0 -0
  65. data/lib/public/css/theme/images/ui-icons_e7e6e4_256x240.png +0 -0
  66. data/lib/public/css/theme/images/ui-icons_eeeeee_256x240.png +0 -0
  67. data/lib/public/css/theme/images/ui-icons_ffffff_256x240.png +0 -0
  68. data/lib/public/css/theme/ui.accordion.css +9 -0
  69. data/lib/public/css/theme/ui.all.css +2 -0
  70. data/lib/public/css/theme/ui.base.css +9 -0
  71. data/lib/public/css/theme/ui.core.css +37 -0
  72. data/lib/public/css/theme/ui.datepicker.css +62 -0
  73. data/lib/public/css/theme/ui.dialog.css +13 -0
  74. data/lib/public/css/theme/ui.progressbar.css +4 -0
  75. data/lib/public/css/theme/ui.resizable.css +13 -0
  76. data/lib/public/css/theme/ui.slider.css +17 -0
  77. data/lib/public/css/theme/ui.tabs.css +9 -0
  78. data/lib/public/css/theme/ui.theme.css +245 -0
  79. data/lib/public/favicon.ico +0 -0
  80. data/lib/public/js/coffee-script.js +8 -0
  81. data/lib/public/js/fg.menu.js +645 -0
  82. data/lib/public/js/jTypeWriter.js +26 -0
  83. data/lib/public/js/jquery-1.4.2.js +6240 -0
  84. data/lib/public/js/jquery-print.js +109 -0
  85. data/lib/public/js/jquery-pubsub.js +27 -0
  86. data/lib/public/js/jquery-terminal.js +2712 -0
  87. data/lib/public/js/jquery.batchImageLoad.js +56 -0
  88. data/lib/public/js/jquery.cycle.all.js +1284 -0
  89. data/lib/public/js/keyboard.js +733 -0
  90. data/lib/public/js/parade-code-execution.js +122 -0
  91. data/lib/public/js/parade-command-input.js +16 -0
  92. data/lib/public/js/parade-command-visor.js +92 -0
  93. data/lib/public/js/parade-keyboard-input.js +54 -0
  94. data/lib/public/js/parade.js +675 -0
  95. data/lib/public/js/spine.js +904 -0
  96. data/lib/templates/config.ru.erb +4 -0
  97. data/lib/templates/showoff.erb +27 -0
  98. data/lib/templates/slides.md.erb +25 -0
  99. data/lib/views/header.erb +73 -0
  100. data/lib/views/index.erb +53 -0
  101. data/lib/views/inline_css.erb +3 -0
  102. data/lib/views/inline_js.erb +3 -0
  103. data/lib/views/onepage.erb +17 -0
  104. data/lib/views/pdf.erb +17 -0
  105. data/lib/views/slide.erb +5 -0
  106. metadata +317 -0
data/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ Copyright (c) 2009 Scott Chacon
2
+ Copyright (c) 2012 Franklin Webber
3
+
4
+ Permission is hereby granted, free of charge, to any person obtaining
5
+ a copy of this software and associated documentation files (the
6
+ "Software"), to deal in the Software without restriction, including
7
+ without limitation the rights to use, copy, modify, merge, publish,
8
+ distribute, sublicense, and/or sell copies of the Software, and to
9
+ permit persons to whom the Software is furnished to do so, subject to
10
+ the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be
13
+ included in all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
19
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
20
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
21
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,542 @@
1
+ # Parade Presentation Software
2
+
3
+ Parade is a Sinatra web app that reads serves up markdown files in a
4
+ presentation format. Parade can serve a directory or be configured to run with
5
+ a simple configuration file.
6
+
7
+ ## Comparison Vs PowerPoint / Keynote
8
+
9
+ Parade is easily out-done by professional presentation software packages as
10
+ far as out-of-the-box style and design. However, there are benefits that
11
+ Parade has over presentational software:
12
+
13
+ ### The Good
14
+
15
+ * Markdown backed data
16
+
17
+ > This ultimately makes it easier to manage diffs when making changes,
18
+ using the content in other documents, and quickly re-using portions of a
19
+ presentation.
20
+
21
+ * Syntax Highlighting
22
+
23
+ > Using GitHub flavored markdown, code fences will automatically be
24
+ syntax highlighted making it incredibly easy to integrate code samples
25
+
26
+ * Code Execution
27
+
28
+ > Slides are able to provide execution and show results for javascript,
29
+ Coffeescript, and Ruby live within the browser. Allowing for live
30
+ demonstrations of code.
31
+
32
+ * Web
33
+
34
+ > The system is simply a website which allows for a lot of possibilities
35
+
36
+ ### The Ugly
37
+
38
+ * Lack of style
39
+
40
+ > Most presentation packages are going to provide for you better templates
41
+
42
+ * Speed of Layout and Animation
43
+
44
+ > Unless you're skills are great with CSS/Animations, you are likely going
45
+ to have a harder time creating presentations with as much polish.
46
+
47
+ * Resizing
48
+
49
+ > Currently the presentation system can change gradual sizes, but is not
50
+ very capable of growing well to the full resolution of current presentation
51
+ resolution.
52
+
53
+ # Installation and Usage
54
+
55
+ ```bash
56
+ $ gem install parade
57
+ ```
58
+
59
+ ## Starting the Slide Show
60
+
61
+ ```bash
62
+ $ parade
63
+ ```
64
+
65
+ By default running parade with start a presentation from the current working
66
+ directory. It will find all markdown files, `**/*.md`, within the directory
67
+ and create a presentation out of them.
68
+
69
+ > By default parade will split slides along lines that start with a single `#`
70
+
71
+
72
+ ## Slide Show Commands
73
+
74
+ You can manage the presentation with the following keys:
75
+
76
+ > ### *space* or *cursor right*
77
+ >
78
+ > Advance to the next slide or advance the next incremental bullet point
79
+ or show the end result of the code execution.
80
+ >
81
+ > ### *shift-space* or *cursor left*
82
+ >
83
+ > Move to the previous slide
84
+ >
85
+ > ### *z* or *?*
86
+ >
87
+ > Toggle help
88
+ >
89
+ > ### *f*
90
+ >
91
+ > Toggle footer (which shows slide count of total slides, percentage)
92
+ >
93
+ > ### *d*
94
+ >
95
+ > Toggle DEBUG information
96
+ >
97
+ > ### *c* or *t*
98
+ >
99
+ > Toggle the display of the Table of Contents
100
+ >
101
+ > ### *p*
102
+ >
103
+ > Toggle pre-show
104
+
105
+
106
+ ### Serving a specific directory
107
+
108
+ ```bash
109
+ $ parade [directory]
110
+ ```
111
+
112
+ This will start a presentation from the specified directory. Again, finding all
113
+ markdown files contained within the directories or sub-directories.
114
+
115
+ ### Serving specific files
116
+
117
+ To include certain files, specify an order, duplicate slides, you will need to
118
+ define a `parade` file. Within that file, you may define specific files,
119
+ specific folders, and the order of the presentation.
120
+
121
+ ```ruby
122
+ title "My Presentation"
123
+ slides "intro.md"
124
+ section "directory_name"
125
+ ```
126
+
127
+ > **slides** and **section** are exactly the same, however you may choose to
128
+ use one over the other depending of you are mentioning a specific file of
129
+ slides or a directory which could contain another `parade` or be considered
130
+ a section.
131
+
132
+ You can so define sub sections with a title and slides or additional sections.
133
+
134
+ ```ruby
135
+
136
+ title "My Presentation"
137
+
138
+ section "Introduction" do
139
+ slides "intro.md"
140
+ end
141
+
142
+ section "Code Samples" do
143
+ slides "ruby"
144
+ slides "javascript"
145
+ section "coffeescript"
146
+ end
147
+ ```
148
+
149
+ # Slide Format
150
+
151
+ ## Slide Separators
152
+
153
+ ### Separator: **#**
154
+
155
+ Slides are simply markdown format. As stated previously, slides will be
156
+ separated along the `#`elements within your document.
157
+
158
+ ### Separator: !SLIDE
159
+
160
+ Relying on the `#` as a separator is not always ideal. So you may alternatively
161
+ use the `!SLIDE` separator. This also provides you with the ability to define
162
+ additional metadata with your slides and presentation.
163
+
164
+ ```markdown
165
+ !SLIDE
166
+
167
+ # My Presentation
168
+
169
+ !SLIDE bullets incremental transition=fade
170
+
171
+ # Bullet Points
172
+
173
+ * first point
174
+ * second point
175
+ * third point
176
+ ```
177
+
178
+ > Using this separator will immediately override `#`, so you will have to
179
+ insert `!SLIDE` separators in all places you would like cut your slides.
180
+
181
+ ## Notes
182
+
183
+ You can define special notes that are shown in presenter mode.
184
+
185
+ > Presenter mode has been removed until it can be rebuilt
186
+
187
+ Add a line that starts with .notes:
188
+
189
+ ```markdown
190
+ ## Important Slide
191
+
192
+ * First Thing
193
+ * Second Things
194
+
195
+ .notes The reason that the second thing came about is because things changed.
196
+ ```
197
+
198
+ > In this example, the HTML output will contain a `<p class='notes'>`
199
+ Toggle presenter notes with the `n` key while in the presentation.
200
+
201
+ > Presenter mode has been removed until it can be rebuilt
202
+
203
+ ### Metadata
204
+
205
+ #### HTML IDs
206
+
207
+ ```markdown
208
+ !SLIDE #slide-id-1
209
+ ```
210
+
211
+ > In this example the id of the slide div would be set to `#slide-id-1`
212
+
213
+ You can define an ID that will be added to the slide's `div`. This id will be
214
+ set to any value prefaced with the `#` character.
215
+
216
+ #### Transitions
217
+
218
+ ```markdown
219
+ !SLIDE transition=fade
220
+ ```
221
+
222
+ > In this example, the slide will __fade__ when it is viewed. This will set
223
+ `data-transition='fade'` on the slides's `div`.
224
+
225
+ You can define transitions from the available body of transitions.
226
+
227
+ The transitions are provided by jQuery Cycle plugin. See http://www.malsup.com/jquery/cycle/browser.html to view the effects and http://www.malsup.com/jquery/cycle/adv2.html for how to add custom effects.
228
+
229
+ ##### Available Transitions
230
+
231
+ * none (this is the default)
232
+ * blindX, blindY, blindZ
233
+ * cover
234
+ * curtainX, curtainY
235
+ * fade
236
+ * fadeZoom
237
+ * growX, growY
238
+ * scrollUp, scrollDown, scrollLeft, scrollRight
239
+ * scrollHorz, scrollVert
240
+ * shuffle
241
+ * slideX, slideY
242
+ * toss
243
+ * turnUp, turnDown, turnLeft, turnRight
244
+ * uncover
245
+ * wipe
246
+ * zoom
247
+
248
+ #### CSS Classes
249
+
250
+ ```markdown
251
+ !SLIDE bullets incremental my-custom-css-class
252
+ ```
253
+ > In this example, this will add custom css classes to the slide's `div` will
254
+ display the following classes:
255
+ `class='content bullets incremental my-custom-css-class'`. _Note:_ the content
256
+ class is added by the default slide template.
257
+
258
+ All remaining single terms are added as css classes to the slide's `div`.
259
+
260
+ ##### Defined Classes
261
+
262
+ Parade defines a number of special CSS classes:
263
+
264
+ > ### center
265
+ > centers images on a slide
266
+ >
267
+ > ### full-page
268
+ > allows an image to take up the whole slide
269
+ >
270
+ > ### bullets
271
+ > sizes and separates bullets properly (fits up to 5, generally)
272
+ >
273
+ > ### columns
274
+ >
275
+ > creates columns for every `##` markdown element in your slides (up to 4)
276
+ >
277
+ > ### smbullets
278
+ > sizes and separates more bullets (smaller, closer together)
279
+ >
280
+ > ### subsection
281
+ > creates a different background for titles
282
+ >
283
+ > ### command
284
+ > monospaces h1 title slides
285
+ >
286
+ > ### commandline
287
+ > for pasted commandline sections (needs leading '$' for commands, then
288
+ > output on subsequent lines)
289
+ >
290
+ > ### code
291
+ > monospaces everything on the slide
292
+ >
293
+ > ### incremental
294
+ > can be used with 'bullets' and 'commandline' styles, will incrementally
295
+ > update elements on arrow key rather than switch slides
296
+ >
297
+ > ### small
298
+ > make all slide text 80%
299
+ >
300
+ > ### smaller
301
+ > make all slide text 70%
302
+ >
303
+ > ### execute
304
+ > on Javascript, Coffeescript and Ruby highlighted code slides, you can
305
+ > click on the code to execute it and display the results on the slide
306
+
307
+
308
+ # Presentation Customization
309
+
310
+ ## Custom JavaScript
311
+
312
+ To insert custom JavaScript into your presentation you can either place it into
313
+ a file (with extension .js) into the root directory of your presentation or you
314
+ can embed a *script* element directly into your slides. This JavaScript will
315
+ be executed—as usually—as soon as it is loaded.
316
+
317
+ If you want to trigger some JavaScript as soon as a certain page is shown or
318
+ when you switch to the next or previous slide, you can bind a callback to a
319
+ custom event:
320
+
321
+ > ### parade:show
322
+ > will be triggered as soon as you enter a page
323
+ > ### parade:next
324
+ > will be triggered when you switch to the next page
325
+ > ### parade:incr
326
+ > will be triggered when you advance to the next increment on the page
327
+ > ### parade:prev
328
+ > will be triggered when you switch to the previous page
329
+
330
+ These events are triggered on the "div.content" child of the slide, so you must
331
+ add a custom and unique class to your SLIDE to identify it:
332
+
333
+ ```markdown
334
+ !SLIDE custom_and_unique_class
335
+ # 1st Example h1
336
+ <script>
337
+ // bind to custom event
338
+ $(".custom_and_unique_class").bind("parade:show", function (event) {
339
+ // animate the h1
340
+ var h1 = $(event.target).find("h1");
341
+ h1.delay(500)
342
+ .slideUp(300, function () { $(this).css({textDecoration: "line-through"}); })
343
+ .slideDown(300);
344
+ });
345
+ </script>
346
+ ```
347
+
348
+ This will bind an event handler for *parade:show* to your slide. The
349
+ h1-element will be animated, as soon as this event is triggered on that slide.
350
+
351
+ If you bind an event handler to the custom events *parade:next* or
352
+ *parade:prev*, you can prevent the default action (that is switching to the
353
+ appropriate slide) by calling *event.preventDefault()*:
354
+
355
+ ```markdown
356
+ !SLIDE prevent_default
357
+ # 2nd Example h1
358
+ <script>
359
+ $(".prevent_default").bind("parade:next", function (event) {
360
+ var h1 = $(event.target).find("h1");
361
+ if (h1.css("text-decoration") === "none") {
362
+ event.preventDefault();
363
+ h1.css({textDecoration: "line-through"})
364
+ }
365
+ });
366
+ </script>
367
+ ```
368
+
369
+ This will bind an event handler for *parade:next* to your slide. When you press
370
+ the right arrow key the first time, the h1-element will be decorated. When you
371
+ press the right array key another time, you will switch to the next slide.
372
+
373
+ The same applies to the *parade:prev* event, of course.
374
+
375
+ ## Custom Stylesheets
376
+
377
+ To insert custom Stylesheets into your presentation you can either place it into
378
+ a file (with extension .css) into the root directory of your presentation or
379
+ you can embed a *link* element directly into your slides. This stylesheet will
380
+ be applied as soon as it is loaded.
381
+
382
+ The content generated by the slide is wrapped with a *div* with the class .+content+ like this.
383
+
384
+ ```html
385
+ <div ref="intro/01_slide/1" class="content" style="margin-top: 210px;">
386
+ <h1>jQuery &amp; Sinatra</h1>
387
+ <h2>A Classy Combination</h2>
388
+ </div>
389
+ ```
390
+
391
+ This makes the .*content* tag a perfect place to add additional styling if that
392
+ is your preference. An example of adding some styling is here.
393
+
394
+ ```css
395
+ .content {
396
+ color: black;
397
+ font-family: helvetica, arial;
398
+ }
399
+ h1, h2 {
400
+ color: rgb(79, 180, 226);
401
+ font-family: Georgia;
402
+ }
403
+ .content::after {
404
+ position: absolute;
405
+ right: 120px;
406
+ bottom: 120px;
407
+ content: url(jay_small.png);
408
+ }
409
+ ```
410
+
411
+ Note that the example above uses CSS3 styling with ::*after* and the *content*
412
+ -attribute to add an image to the slides.
413
+
414
+
415
+ # Command Line Interface
416
+
417
+ ```bash
418
+ parade command_name [command-specific options] [--] arguments...
419
+ ```
420
+
421
+ * Use the command __help__ to get a summary of commands
422
+ * Use the command `help command_name` to get a help for _command_name_
423
+ * Use `--` to stop command line argument processing; useful if your arguments have dashes in them
424
+
425
+ ## parade help [command]
426
+
427
+ Shows list of commands or help for one command
428
+
429
+ ## parade generate presentation
430
+
431
+ Create new parade presentation
432
+
433
+ This command helps start a new parade presentation by setting up the proper directory structure for you. It takes the directory name you would like parade to create for you.
434
+
435
+ > ### Options
436
+ >
437
+ > dir:"directory_name" - the name of the directory you want to generate the
438
+ > presentation (defaults to *presentation*)
439
+ >
440
+ > title:"Presentation Title" - the title of the presentation
441
+ >
442
+ > description:"Presentation Description" - a description of the presentation
443
+
444
+ ## parade generate outline
445
+
446
+ Create new parade outline file
447
+
448
+ Within the existing directory create a **parade** file that contains some
449
+ sample sections and slide references to get you started with creating
450
+ your customized presentation.
451
+
452
+ > ### Options
453
+ >
454
+ > title:"Presentation Title" - the title of the presentation
455
+ >
456
+ > description:"Presentation Description" - a description of the presentation
457
+ >
458
+ > outline:"custom outline filename" - if you want to specify a custom outline
459
+ > filename (i.e. override the default **parade** filename).
460
+
461
+ ## parade generate rackup
462
+
463
+ Create new rackup file
464
+
465
+ Within the existing directory create a **config.ru** file that contains the
466
+ default code necessary to serve this code on Heroku and other destinations.
467
+
468
+ ## parade server
469
+
470
+ Serves the parade presentation in the current directory
471
+
472
+ > ### Options
473
+ >
474
+ > These options are specified *after* the command.
475
+ >
476
+ > *-f, --file=arg* Presentation file (default: *parade*)
477
+ >
478
+ > *-h, --host=arg* Host or IP to serve on (default *localhost*)
479
+ >
480
+ > *-p, --port=arg* The port to serve one (default: *9090*)
481
+ >
482
+ > ### Aliases
483
+ >
484
+ > parade s
485
+ >
486
+ > parade serve
487
+
488
+ # Future Plans
489
+
490
+ I really want this to evolve into a dynamic presentation software server,
491
+ that gives the audience a lot of interaction into the presentation -
492
+ helping them decide dynamically what the content of the presentation is,
493
+ ask questions without interrupting the presenter, etc. I want the audience
494
+ to be able to download a dynamically generated PDF of either the actual
495
+ talk that was given, or all the available slides, plus supplementary
496
+ material. And I want the presenter (me) to be able to push each
497
+ presentation to Heroku or GitHub pages for archiving super easily.
498
+
499
+
500
+ ## Presenter Tools
501
+
502
+ * simple highlighting (highlight region of slide / click to highlight)
503
+ * timer (time left, percent done, percent time done)
504
+ * editing slides
505
+ * preview
506
+ * let you write on the slide with your mouse, madden-style via canvas
507
+
508
+ ## Presentation Layout
509
+
510
+ * theme support
511
+ * squeeze-to-fit style
512
+ * simple animations (image from A to B)
513
+ * show a timer - elapsed / remaining
514
+ * perform simple animations of images moving between keyframes
515
+ * automatically resize text to fit screen [see Alex's shrink.js]
516
+
517
+ ## Output Formats
518
+
519
+ * pdf with notes
520
+ * webpage
521
+ * let audience members download slides, code samples or other supplementary
522
+ material
523
+
524
+ ## Clean up
525
+
526
+ * More modularity with presentation filters and renderers to allow presenters
527
+ to create custom ones for the particular slide show
528
+ * Modular approach to features
529
+ * Clean up Javascript
530
+
531
+ ## Interaction
532
+
533
+ * questions / comments system
534
+ * audience vote-based presentation builder, results live view
535
+ * show audience questions / comments (twitter or direct)
536
+ * let audience members go back / catch up as you talk
537
+ * let audience members vote on sections (?)
538
+
539
+ ## Platforms
540
+
541
+ * show synchronized, hidden notes on another browser (like an iphone)
542
+ * broadcast itself on Bonjour