showoff 0.7.0 → 0.9.7

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 (48) hide show
  1. checksums.yaml +7 -0
  2. data/README.rdoc +53 -475
  3. data/Rakefile +17 -18
  4. data/bin/showoff +29 -7
  5. data/lib/commandline_parser.rb +1 -1
  6. data/lib/showoff/version.rb +3 -0
  7. data/lib/showoff.rb +600 -91
  8. data/lib/showoff_utils.rb +110 -4
  9. data/public/css/disconnected-large.png +0 -0
  10. data/public/css/disconnected.png +0 -0
  11. data/public/css/fast.png +0 -0
  12. data/public/css/grippy-close.png +0 -0
  13. data/public/css/grippy.png +0 -0
  14. data/public/css/onepage.css +6 -0
  15. data/public/css/pace.png +0 -0
  16. data/public/css/paceMarker.png +0 -0
  17. data/public/css/presenter.css +333 -43
  18. data/public/css/sh_style.css +15 -0
  19. data/public/css/showoff.css +373 -48
  20. data/public/css/slow.png +0 -0
  21. data/public/css/spinner.gif +0 -0
  22. data/public/css/tipsy.css +26 -0
  23. data/public/favicon.ico +0 -0
  24. data/public/js/jquery.parsequery.min.js +2 -0
  25. data/public/js/jquery.tipsy.js +260 -0
  26. data/public/js/onepage.js +2 -3
  27. data/public/js/presenter.js +384 -33
  28. data/public/js/sh_lang/sh_gherkin.js +112 -0
  29. data/public/js/sh_lang/sh_gherkin.min.js +1 -0
  30. data/public/js/sh_lang/sh_ini.js +87 -0
  31. data/public/js/sh_lang/sh_ini.min.js +87 -0
  32. data/public/js/sh_lang/sh_puppet.js +182 -0
  33. data/public/js/sh_lang/sh_puppet.min.js +182 -0
  34. data/public/js/sh_lang/sh_puppet_output.js +22 -0
  35. data/public/js/sh_lang/sh_puppet_output.min.js +22 -0
  36. data/public/js/sh_lang/sh_shell.min.js +1 -0
  37. data/public/js/showoff.js +423 -51
  38. data/views/404.erb +19 -0
  39. data/views/download.erb +36 -0
  40. data/views/header.erb +35 -25
  41. data/views/header_mini.erb +22 -0
  42. data/views/index.erb +46 -1
  43. data/views/onepage.erb +35 -14
  44. data/views/presenter.erb +63 -21
  45. data/views/stats.erb +73 -0
  46. metadata +170 -131
  47. data/public/css/960.css +0 -653
  48. data/public/css/pdf.css +0 -12
@@ -1,6 +1,6 @@
1
1
  @media screen {
2
2
  body {
3
- font-size: 100%;
3
+ font-size: 100%;
4
4
  font-family: "Gill Sans", Helvetica, Arial, sans-serif;
5
5
  background:#333;
6
6
  overflow:hidden;
@@ -39,50 +39,23 @@
39
39
  border-top-right-radius: 3px;
40
40
  z-index: 2147483647; /* max, see http://www.puidokas.com/max-z-index/ */
41
41
  }
42
- }
43
-
44
- /* iPhone */
45
- /* Portrait */
46
- @media screen and (max-width: 320px)
47
- {
48
- #preso {
49
- margin: 0;
50
- padding: 0;
51
- width: 320px;
52
- max-height: 356px;
53
- margin-left:auto;
54
- margin-right:auto;
55
- /* overflow:hidden;*/
56
- }
57
- #footer {
58
- background: #eee;
59
- margin: 0;
60
- padding: 2px;
61
- width: 320px;
62
- height: 20px;
63
- margin-left:auto;
64
- margin-right:auto;
65
- }
66
- }
67
- /* Landscape */
68
- @media screen and (max-width: 480px)
69
- {
70
- #preso {
71
- margin: 0;
72
- padding: 0;
73
- /* min-height: 320px;*/
74
- width: 480px;
75
- margin-left:auto;
76
- margin-right:auto;
42
+ #followMode {
43
+ display: none;
77
44
  }
78
- #footer {
79
- background: #eee;
80
- margin: 0;
81
- padding: 2px;
82
- width: 480px;
83
- height: 20px;
84
- margin-left:auto;
85
- margin-right:auto;
45
+ #pauseScreen {
46
+ background: rgba(0, 0, 0, 0.85);
47
+ width: 100%;
48
+ height: 100%;
49
+ position: absolute;
50
+ top: 0px;
51
+ left: 0px;
52
+ display: none;
53
+ margin: auto;
54
+ color: white;
55
+ font-size: 2em;
56
+ padding: 1em;
57
+ z-index: 2147483647; /* max, see http://www.puidokas.com/max-z-index/ */
58
+ text-align: center;
86
59
  }
87
60
  }
88
61
 
@@ -214,13 +187,33 @@ h3 { font-size: 2em; }
214
187
 
215
188
  pre { margin: 1em 40px; padding: .25em; }
216
189
 
217
- .notes { display: none }
190
+ .notes, .handouts, .instructor, .solguide { display: none }
218
191
  .hidden { position:absolute; top:0; left:-9999px; width:1px; height:1px; overflow:hidden; }
219
192
  .buttonNav { display: none }
220
193
  .offscreen { position:absolute; top:0; left:-9999px; overflow:hidden; }
221
194
  #debugInfo { margin-left: 30px; }
222
195
  #notesInfo { margin-left: 30px; display: none }
196
+ #slideFilename {
197
+ position: absolute;
198
+ right: 5px;
199
+ bottom: 0px;
200
+ height: 23px;
201
+ padding-left: 10px;
202
+ background: #ccc;
203
+ z-index: 2147483647;
204
+ }
205
+ img#disconnected {
206
+ float: right;
207
+ display: none;
208
+ }
209
+
223
210
  #preshow { display: none; }
211
+ /* define the screen blocking view */
212
+ /* we define it as invisible because we use jQuery to animate its presentation */
213
+ #screenblanker {
214
+ height: 100%;
215
+ display: none;
216
+ }
224
217
 
225
218
  #help {
226
219
  background: #9f9;
@@ -236,6 +229,77 @@ pre { margin: 1em 40px; padding: .25em; }
236
229
  font-weight: bold;
237
230
  }
238
231
 
232
+
233
+ #feedbackWrapper {
234
+ float: left;
235
+ height: 100%;
236
+ position: fixed;
237
+ background-color: #dfdfdf;
238
+ opacity: 0.98;
239
+ z-index: 2147483647; /* max, see http://www.puidokas.com/max-z-index/ */
240
+ }
241
+
242
+ #feedbackSidebar {
243
+ height: 100%;
244
+ width: 200px;
245
+ background: transparent url(grippy-close.png) no-repeat right center;
246
+ display: none;
247
+ }
248
+
249
+ #feedbackSidebar img#feedbackActivity {
250
+ position: absolute;
251
+ right: 3px;
252
+ top: 3px;
253
+ display: none;
254
+ }
255
+
256
+ #feedbackHandle {
257
+ height: 100%;
258
+ width: 9px;
259
+ background: transparent url(grippy.png) no-repeat center;
260
+ }
261
+
262
+ #feedbackSidebar div.row {
263
+ text-align: center;
264
+ margin: 5px 0;
265
+ padding: 5px 0;
266
+ }
267
+
268
+ #feedbackWrapper h4 {
269
+ text-align: left;
270
+ margin-left: 3px;
271
+ }
272
+ #feedbackSidebar span.buttonWrapper {
273
+ height: 60px;
274
+ width: 85px;
275
+ padding: 5px;
276
+ display: inline-block;
277
+ }
278
+ #feedbackSidebar span.buttonWrapper button {
279
+ margin: 44px auto 0 auto;
280
+ }
281
+
282
+ #feedbackSidebar span.buttonWrapper.slower {
283
+ background: transparent url(slow.png) no-repeat center top;
284
+ }
285
+
286
+ #feedbackSidebar span.buttonWrapper.faster {
287
+ background: transparent url(fast.png) no-repeat center top;
288
+ }
289
+
290
+ #feedbackSidebar textarea {
291
+ height: 85px;
292
+ width: 85%;
293
+ }
294
+
295
+ #feedbackSidebar #disclaimer {
296
+ position: absolute;
297
+ bottom: 25px;
298
+ width: 100%;
299
+ text-align: center;
300
+ }
301
+
302
+
239
303
  .fg-menu-container {
240
304
  z-index: 2147483647; /* max, see http://www.puidokas.com/max-z-index/ */
241
305
  }
@@ -248,7 +312,7 @@ a.fg-button { float:left; }
248
312
 
249
313
  .fg-button.ui-state-loading .ui-icon { background: url(spinner_bar.gif) no-repeat 0 0; }
250
314
 
251
- #navmenu {
315
+ #navmenu, #stylemenu {
252
316
  position: absolute;
253
317
  top: 10px;
254
318
  left: 10px;
@@ -335,6 +399,10 @@ a.fg-button { float:left; }
335
399
  background-color: yellow;
336
400
  }
337
401
 
402
+ .executing:hover {
403
+ cursor: pointer;
404
+ }
405
+
338
406
  #tips, #preshow_timer {
339
407
  display:inline;
340
408
  background-color:#000;
@@ -357,18 +425,266 @@ a.fg-button { float:left; }
357
425
  bottom: 0px;
358
426
  }
359
427
 
428
+ /**********************************
429
+ *** table of contents ***
430
+ **********************************/
431
+ #toc a {
432
+ text-decoration: none;
433
+ }
434
+ #toc a::after {
435
+ content: leader(".") target-counter(attr(href), page);
436
+ }
437
+
438
+ /**********************************
439
+ *** supplemental materials ***
440
+ **********************************/
441
+ #slides.supplemental .slide {
442
+ max-height: none !important;
443
+ height: auto;
444
+ padding: 0.5em;
445
+ width: 8.1in;
446
+ }
447
+
448
+ .supplemental h1 { font-family: 'Arvo'; text-align: left; }
449
+ .supplemental h2,
450
+ .supplemental h3,
451
+ .supplemental h4,
452
+ .supplemental h5,
453
+ .supplemental h6 { font-family: 'PT Sans'; text-align: left; }
454
+
455
+ .supplemental h1 { font-size: 2em; }
456
+ .supplemental h2 { font-size: 1.5em; }
457
+ .supplemental h3,
458
+ .supplemental h4,
459
+ .supplemental h5,
460
+ .supplemental h6 { font-size: 1.3em; text-align: left; }
461
+
462
+ .supplemental .content > p,
463
+ .supplemental .content > ol,
464
+ .supplemental .content > ul { font-size: 1em; }
465
+
466
+ .supplemental img { max-width: 7in; }
467
+ .supplemental .content > pre,
468
+ .supplemental .content > pre > code { font-size: 10pt; font-family: 'Courier New', Courier, monospace; }
469
+ .supplemental ul { list-style: disc; margin-left: 1.25em !important; padding-left: inherit !important; }
470
+ .supplemental .content table { font-size: 0.65em; } /* Ugly hack for tables, which never seem to scale properly. Ick */
471
+
472
+ /* downloads page */
473
+ /* we want scrolls! */
474
+ body#download {
475
+ overflow:auto;
476
+ height: auto;
477
+ }
478
+ #download h1 {
479
+ font-size: 3em;
480
+ }
481
+ ul#downloads {
482
+ margin-left: 20%;
483
+ font-size: large;
484
+ list-style-type: disc;
485
+ }
486
+ ul#downloads li {
487
+ margin: 0.5em;
488
+ }
489
+
490
+ span#issueUrl {
491
+ display: none;
492
+ }
493
+
494
+ /**********************
495
+ *** stats page ***
496
+ **********************/
497
+ /* we want scrolls! */
498
+ body#stats {
499
+ overflow:auto;
500
+ height: auto;
501
+ }
502
+
503
+ /* apply some nifty rounding styles to the row */
504
+ #stats div.row {
505
+ position: relative;
506
+ margin: 0.25em 1em;
507
+ padding: 0.1em;
508
+ background-color: #dfdfdf;
509
+ -moz-border-radius: 5px;
510
+ -webkit-border-radius: 5px;
511
+ -khtml-border-radius: 5px;
512
+ border-radius: 5px;
513
+ }
514
+ /* and to the bar inside the row */
515
+ #stats div.bar {
516
+ height: 1.25em;
517
+ -moz-border-radius: 5px;
518
+ -webkit-border-radius: 5px;
519
+ -khtml-border-radius: 5px;
520
+ border-radius: 5px;
521
+ }
522
+ /* position the label to the top left and time to the top right */
523
+ #stats div.row span.label {
524
+ position: absolute;
525
+ top: 0.15em;
526
+ left: 0.25em;
527
+ }
528
+ #stats div.time {
529
+ position: absolute;
530
+ top: 0.15em;
531
+ right: 0.25em;
532
+ }
533
+
534
+ /* style all three boxes */
535
+ #stats div#least,
536
+ #stats div#most,
537
+ #stats div#all {
538
+ width: 45%;
539
+ border: 1px solid black;
540
+ -moz-border-radius: 1em;
541
+ -webkit-border-radius: 1em;
542
+ -khtml-border-radius: 1em;
543
+ border-radius: 1em;
544
+ }
545
+
546
+ /* least box */
547
+ #stats div#least {
548
+ float: left;
549
+ margin-left: 3%;}
550
+ #stats div#least div.bar {
551
+ background: #f5f56f;
552
+ }
553
+
554
+ /* most box */
555
+ #stats div#most {
556
+ float: right;
557
+ margin-right: 3%;
558
+ }
559
+ #stats div#most div.bar {
560
+ background: #f45f5f;
561
+ }
562
+
563
+ /* listing of all stats */
564
+ #stats div#all {
565
+ clear: both;
566
+ position: relative;
567
+ top: 3em;
568
+ margin: 0 3% 5em 3%;
569
+ width: 94%;
570
+ }
571
+ #stats div#all div.bar {
572
+ background: #66b366;
573
+ }
574
+
575
+ /* detail view */
576
+ #stats div#all div.detail {
577
+ margin: 0 5em 0 1em;
578
+ }
579
+ #stats div#all div.detail div.bar {
580
+ background: #8484dd;
581
+ }
582
+ /**********************
583
+ *** end stats page ***
584
+ **********************/
585
+
586
+ /**********************
587
+ ** presenter popups **
588
+ **********************/
589
+ .tipsy-inner { text-align: left; max-width: 500px; }
590
+ .tipsy-inner h1 { font-size: 1.5em; }
591
+ .tipsy-inner h2 { font-size: 1.35em; }
592
+ .tipsy-inner h3 { font-size: 1.25em; }
593
+ .tipsy-inner a { color: #0d8dfd; }
594
+ .tipsy-inner a:hover { color: #04ffff; }
595
+
596
+ .tipsy-inner p.newpage { text-align: right; padding-bottom: 0.25em; }
597
+ .tipsy-inner p.newpage a {
598
+ color: white;
599
+ padding: 0.25em;
600
+ text-decoration: none;
601
+ -moz-border-radius: 5px;
602
+ -webkit-border-radius: 5px;
603
+ -khtml-border-radius: 5px;
604
+ border-radius: 5px;
605
+ border: 1px solid black;
606
+ }
607
+ .tipsy-inner p.newpage a:hover {
608
+ font-weight: bold;
609
+ background-color: #222;
610
+ border: 1px solid white;
611
+ }
612
+
613
+
614
+ .tipsy-inner #stats { min-width: 450px; }
615
+ .tipsy-inner #stats .row { color: black; }
616
+ .tipsy-inner #stats #all { max-height: 325px; overflow: auto; }
617
+
618
+ .tipsy-inner ul#downloads { font-size: 1em; margin-left: 0.25em; }
619
+ /************************
620
+ * end presenter popups *
621
+ ************************/
622
+
623
+ /* iPhone */
624
+ /* Portrait */
625
+ @media screen and (max-width: 320px)
626
+ {
627
+ html,body,#footer {
628
+ min-width: 320px !important;
629
+ max-width: 320px !important;
630
+ width: 320px !important;
631
+ margin: 0;
632
+ padding: 0;
633
+ }
634
+ body > #preso {
635
+ width: 976px;
636
+ zoom: 0.32;
637
+ }
638
+ #preso .slide {
639
+ width: 100%;
640
+ margin: 0;
641
+ padding: 0;
642
+ }
643
+
644
+ }
645
+
646
+ /* Landscape */
647
+ /*
648
+ @media screen and (max-width: 480px)
649
+ {
650
+ #preso {
651
+ margin: 0;
652
+ padding: 0;
653
+ width: 480px;
654
+ margin-left:auto;
655
+ margin-right:auto;
656
+ }
657
+ #footer {
658
+ background: #eee;
659
+ margin: 0;
660
+ padding: 2px;
661
+ width: 480px;
662
+ height: 20px;
663
+ margin-left:auto;
664
+ margin-right:auto;
665
+ }
666
+ }
667
+ */
668
+
360
669
  /** Print **/
361
670
  @media print {
362
671
  body {
363
672
  font-size: 70%;
364
673
  }
365
674
 
675
+ #sidebarWrapper,
676
+ #sidebar,
677
+ #sidebarHandle {
678
+ display:none,
679
+
680
+ }
681
+
366
682
  #preso, .slide {
367
683
  border: 1px solid #999;
368
684
  }
369
685
 
370
686
  .slide .center {
371
- width: 600px;
687
+ width: 800px;
372
688
  height: 600px;
373
689
  display: table-cell;
374
690
  text-align: center;
@@ -377,7 +693,7 @@ a.fg-button { float:left; }
377
693
 
378
694
  #preso, .slide {
379
695
  background: #fff;
380
- width: 600px;
696
+ width: 800px;
381
697
  height: 600px;
382
698
  margin-left:auto;
383
699
  margin-right:auto;
@@ -396,4 +712,13 @@ a.fg-button { float:left; }
396
712
  pre, code {
397
713
  font-family: Monaco, monospace;
398
714
  }
715
+
716
+ /* page break styling */
717
+ div.break {
718
+ page-break-after: always;
719
+ font-size: small;
720
+ font-style: italic;
721
+ padding-top: 0.25em;
722
+ padding-bottom: 0.25em;
723
+ }
399
724
  }
Binary file
Binary file
@@ -0,0 +1,26 @@
1
+ .tipsy { font-size: 10px; position: absolute; padding: 5px; z-index: 100000; }
2
+ .tipsy-inner { background-color: #000; color: #FFF; padding: 5px 8px 4px 8px; text-align: center; }
3
+
4
+ /* Rounded corners */
5
+ .tipsy-inner { border-radius: 3px; -moz-border-radius: 3px; -webkit-border-radius: 3px; }
6
+
7
+ /* Uncomment for shadow */
8
+ /*.tipsy-inner { box-shadow: 0 0 5px #000000; -webkit-box-shadow: 0 0 5px #000000; -moz-box-shadow: 0 0 5px #000000; }*/
9
+
10
+ .tipsy-arrow { position: absolute; width: 0; height: 0; line-height: 0; border: 5px dashed #000; }
11
+
12
+ /* Rules to colour arrows */
13
+ .tipsy-arrow-n { border-bottom-color: #000; }
14
+ .tipsy-arrow-s { border-top-color: #000; }
15
+ .tipsy-arrow-e { border-left-color: #000; }
16
+ .tipsy-arrow-w { border-right-color: #000; }
17
+
18
+ .tipsy-n .tipsy-arrow { top: 0px; left: 50%; margin-left: -5px; border-bottom-style: solid; border-top: none; border-left-color: transparent; border-right-color: transparent; }
19
+ .tipsy-nw .tipsy-arrow { top: 0; left: 10px; border-bottom-style: solid; border-top: none; border-left-color: transparent; border-right-color: transparent;}
20
+ .tipsy-ne .tipsy-arrow { top: 0; right: 10px; border-bottom-style: solid; border-top: none; border-left-color: transparent; border-right-color: transparent;}
21
+ .tipsy-s .tipsy-arrow { bottom: 0; left: 50%; margin-left: -5px; border-top-style: solid; border-bottom: none; border-left-color: transparent; border-right-color: transparent; }
22
+ .tipsy-sw .tipsy-arrow { bottom: 0; left: 10px; border-top-style: solid; border-bottom: none; border-left-color: transparent; border-right-color: transparent; }
23
+ .tipsy-se .tipsy-arrow { bottom: 0; right: 10px; border-top-style: solid; border-bottom: none; border-left-color: transparent; border-right-color: transparent; }
24
+ .tipsy-e .tipsy-arrow { right: 0; top: 50%; margin-top: -5px; border-left-style: solid; border-right: none; border-top-color: transparent; border-bottom-color: transparent; }
25
+ .tipsy-w .tipsy-arrow { left: 0; top: 50%; margin-top: -5px; border-right-style: solid; border-left: none; border-top-color: transparent; border-bottom-color: transparent; }
26
+
data/public/favicon.ico CHANGED
Binary file
@@ -0,0 +1,2 @@
1
+ (function($){$.parseQuery=function(options){var config={query:window.location.search||""},params={};if(typeof options==='string'){options={query:options};}
2
+ $.extend(config,$.parseQuery,options);config.query=config.query.replace(/^\?/,'');$.each(config.query.split(config.separator),function(i,param){var pair=param.split('='),key=config.decode(pair.shift(),null).toString(),value=config.decode(pair.length?pair.join('='):null,key);if(config.array_keys(key)){params[key]=params[key]||[];params[key].push(value);}else{params[key]=value;}});return params;};$.parseQuery.decode=$.parseQuery.default_decode=function(string){return decodeURIComponent((string||"").replace('+',' '));};$.parseQuery.array_keys=function(){return false;};$.parseQuery.separator="&";}(jQuery));