showoff 0.7.0 → 0.9.7

Sign up to get free protection for your applications and to get access to all the features.
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));