slideoff 0.2 → 0.3

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.
@@ -7,12 +7,14 @@
7
7
  <meta name="viewport" content="width=680, user-scalable=no">
8
8
  <meta http-equiv="x-ua-compatible" content="ie=edge">
9
9
  <link rel="stylesheet" href="css/screen.css">
10
+ <link rel="stylesheet" href="css/print.css">
10
11
  <link rel="stylesheet" href="css/pygments/<%= meta.pygments_style %>.css">
11
12
  <% meta.css.each do |css| %>
12
13
  <link rel="stylesheet" href="<%= css %>">
13
14
  <% end %>
14
15
  <script src="js/jquery-2.1.0.min.js"></script>
15
16
  <script src="js/highcharts.js"></script>
17
+ <%= File.read("head.html") if File.exist?("head.html") %>
16
18
  </head>
17
19
  <body class="list">
18
20
  <header class="caption">
@@ -96,7 +96,6 @@ $.fn.extend
96
96
  if words.length > maxWords
97
97
  while words.length > 0
98
98
  newText = words.splice(0, maxWords).join(" ")
99
- console.log
100
99
  calcSize newText
101
100
  self.append "<br>"
102
101
  else
@@ -119,13 +118,15 @@ class Transform
119
118
  @body.style.transform = transform
120
119
 
121
120
  @scale: ->
122
- Transform.apply("scale(/#{@getScaleFactor()})")
121
+ Transform.apply("scale(#{@getScaleFactor()})")
123
122
 
124
123
  @reset: ->
125
124
  Transform.apply('none')
126
125
 
127
126
  class Mode
128
127
  @body = document.body
128
+ @slideModeIndicator = "full"
129
+ @listModeIndicator = "list"
129
130
 
130
131
  @dispatchSingleSlideMode: (e) ->
131
132
  slideId = Mode.findSlideId(e.target)
@@ -137,18 +138,18 @@ class Mode
137
138
  slide.replaceHistory()
138
139
 
139
140
  @enterSlideMode: ->
140
- @body.className = "full"
141
+ @body.className = @slideModeIndicator
141
142
  Transform.scale()
142
143
 
143
144
  @enterListMode: ->
144
- @body.className = "list"
145
+ @body.className = @listModeIndicator
145
146
  Transform.reset()
146
147
 
147
148
  @isListMode: ->
148
- !@body.classList.contains("full")
149
+ !Mode.isSlideMode()
149
150
 
150
151
  @isSlideMode: ->
151
- !Mode.isListMode()
152
+ @body.classList.contains(@slideModeIndicator)
152
153
 
153
154
  @switchToListMode: ->
154
155
  Mode.enterListMode()
@@ -162,15 +163,6 @@ class Mode
162
163
  slide.pushHistory()
163
164
  slide.updateProgress()
164
165
 
165
- @reload: ->
166
- Slide.current() || Slide.first().goto()
167
- if window.location.search.substr(1) is 'full'
168
- Mode.enterSlideMode()
169
- #Slide.current().updateProgress()
170
- else
171
- Mode.enterListMode()
172
- Slide.current()?.scrollTo()
173
-
174
166
  # private
175
167
 
176
168
  # go up to element with class "slide" and return its id
@@ -234,15 +226,6 @@ class SlideInitializer
234
226
  if $(slide).hasClass('typewriter')
235
227
  $(slide).find('pre[data-lang=sh] code').addClass('inactive')
236
228
 
237
- #TODO: Remove useless code
238
- @initBodyClasses: ->
239
- $.each @bodyClasses, (klass) ->
240
- $('body').addClass(klass.split('=')[0])
241
-
242
- #TODO: Remove useless code
243
- @bodyClasses: ->
244
- window.location.search.replace(/^\?/, '').split('&')
245
-
246
229
  class Slide
247
230
  constructor: (slideNumber) ->
248
231
  @$element = $(@slideList()[@slideNumber])
@@ -258,7 +241,10 @@ class Slide
258
241
 
259
242
  @current: ->
260
243
  id = window.location.hash.substr(1)
261
- Slide.fromSlideId(id)
244
+ if id? && id.length > 0
245
+ Slide.fromSlideId(id)
246
+ else
247
+ Slide.first()
262
248
 
263
249
  nextSection: ->
264
250
  next = @nextSectionId()
@@ -389,11 +375,10 @@ class UserInterface
389
375
  Transform.scale() if Mode.isSlideMode()
390
376
 
391
377
  @init: ->
392
- if Mode.isSlideMode()
393
- Mode.enterSlideMode()
394
- slide = Slide.current() || Slide.first()
395
- slide.replaceHistory()
396
- slide.updateProgress()
378
+ if window.location.search.substr(1) is 'full'
379
+ Mode.switchToSlideMode()
380
+ else
381
+ Mode.switchToListMode()
397
382
 
398
383
  @switchToListMode: (e) ->
399
384
  if Mode.isSlideMode()
@@ -424,10 +409,6 @@ $ ->
424
409
  UserInterface.init()
425
410
  , false
426
411
 
427
- window.addEventListener "popstate", (e) ->
428
- Mode.reload()
429
- , false
430
-
431
412
  window.addEventListener "resize", (e) ->
432
413
  UserInterface.resize()
433
414
  , false
@@ -436,7 +417,7 @@ $ ->
436
417
  # Shortcut for alt, ctrl and meta keys
437
418
  return if e.altKey or e.ctrlKey or e.metaKey
438
419
  switch e.which
439
- when 116, 13 # F5, Enter
420
+ when 13 # Enter
440
421
  UserInterface.switchToSlideMode(e) if Slide.current()?
441
422
  when 27 # Esc
442
423
  UserInterface.switchToListMode(e)
@@ -96,7 +96,6 @@ $.fn.extend({
96
96
  if (words.length > maxWords) {
97
97
  while (words.length > 0) {
98
98
  newText = words.splice(0, maxWords).join(" ");
99
- console.log;
100
99
  calcSize(newText);
101
100
  self.append("<br>");
102
101
  }
@@ -112,10 +111,10 @@ Transform = (function() {
112
111
 
113
112
  Transform.body = document.body;
114
113
 
115
- Transform.get = function() {
114
+ Transform.getScaleFactor = function() {
116
115
  var denominator;
117
116
  denominator = Math.max(this.body.clientWidth / window.innerWidth, this.body.clientHeight / window.innerHeight);
118
- return "scale(" + (1 / denominator) + ")";
117
+ return 1 / denominator;
119
118
  };
120
119
 
121
120
  Transform.apply = function(transform) {
@@ -127,7 +126,7 @@ Transform = (function() {
127
126
  };
128
127
 
129
128
  Transform.scale = function() {
130
- return Transform.apply(Transform.get());
129
+ return Transform.apply("scale(" + (this.getScaleFactor()) + ")");
131
130
  };
132
131
 
133
132
  Transform.reset = function() {
@@ -143,6 +142,10 @@ Mode = (function() {
143
142
 
144
143
  Mode.body = document.body;
145
144
 
145
+ Mode.slideModeIndicator = "full";
146
+
147
+ Mode.listModeIndicator = "list";
148
+
146
149
  Mode.dispatchSingleSlideMode = function(e) {
147
150
  var presentSlideId, slide, slideId;
148
151
  slideId = Mode.findSlideId(e.target);
@@ -156,21 +159,21 @@ Mode = (function() {
156
159
  };
157
160
 
158
161
  Mode.enterSlideMode = function() {
159
- this.body.className = "full";
162
+ this.body.className = this.slideModeIndicator;
160
163
  return Transform.scale();
161
164
  };
162
165
 
163
166
  Mode.enterListMode = function() {
164
- this.body.className = "list";
167
+ this.body.className = this.listModeIndicator;
165
168
  return Transform.reset();
166
169
  };
167
170
 
168
171
  Mode.isListMode = function() {
169
- return !this.body.classList.contains("full");
172
+ return !Mode.isSlideMode();
170
173
  };
171
174
 
172
175
  Mode.isSlideMode = function() {
173
- return !Mode.isListMode();
176
+ return this.body.classList.contains(this.slideModeIndicator);
174
177
  };
175
178
 
176
179
  Mode.switchToListMode = function() {
@@ -189,17 +192,6 @@ Mode = (function() {
189
192
  return slide.updateProgress();
190
193
  };
191
194
 
192
- Mode.reload = function() {
193
- var _ref;
194
- Slide.current() || Slide.first().goto();
195
- if (window.location.search.substr(1) === 'full') {
196
- return Mode.enterSlideMode();
197
- } else {
198
- Mode.enterListMode();
199
- return (_ref = Slide.current()) != null ? _ref.scrollTo() : void 0;
200
- }
201
- };
202
-
203
195
  Mode.findSlideId = function(node) {
204
196
  while ("BODY" !== node.nodeName && "HTML" !== node.nodeName) {
205
197
  if (node.classList.contains("slide")) {
@@ -293,16 +285,6 @@ SlideInitializer = (function() {
293
285
  }
294
286
  };
295
287
 
296
- SlideInitializer.initBodyClasses = function() {
297
- return $.each(this.bodyClasses, function(klass) {
298
- return $('body').addClass(klass.split('=')[0]);
299
- });
300
- };
301
-
302
- SlideInitializer.bodyClasses = function() {
303
- return window.location.search.replace(/^\?/, '').split('&');
304
- };
305
-
306
288
  return SlideInitializer;
307
289
 
308
290
  })();
@@ -331,7 +313,11 @@ Slide = (function() {
331
313
  Slide.current = function() {
332
314
  var id;
333
315
  id = window.location.hash.substr(1);
334
- return Slide.fromSlideId(id);
316
+ if ((id != null) && id.length > 0) {
317
+ return Slide.fromSlideId(id);
318
+ } else {
319
+ return Slide.first();
320
+ }
335
321
  };
336
322
 
337
323
  Slide.prototype.nextSection = function() {
@@ -549,12 +535,10 @@ UserInterface = (function() {
549
535
  };
550
536
 
551
537
  UserInterface.init = function() {
552
- var slide;
553
- if (Mode.isSlideMode()) {
554
- Mode.enterSlideMode();
555
- slide = Slide.current() || Slide.first();
556
- slide.replaceHistory();
557
- return slide.updateProgress();
538
+ if (window.location.search.substr(1) === 'full') {
539
+ return Mode.switchToSlideMode();
540
+ } else {
541
+ return Mode.switchToListMode();
558
542
  }
559
543
  };
560
544
 
@@ -603,9 +587,6 @@ $(function() {
603
587
  window.addEventListener("DOMContentLoaded", function() {
604
588
  return UserInterface.init();
605
589
  }, false);
606
- window.addEventListener("popstate", function(e) {
607
- return Mode.reload();
608
- }, false);
609
590
  window.addEventListener("resize", function(e) {
610
591
  return UserInterface.resize();
611
592
  }, false);
@@ -614,7 +595,6 @@ $(function() {
614
595
  return;
615
596
  }
616
597
  switch (e.which) {
617
- case 116:
618
598
  case 13:
619
599
  if (Slide.current() != null) {
620
600
  return UserInterface.switchToSlideMode(e);
@@ -17,7 +17,7 @@
17
17
  position:absolute;
18
18
  top:0;
19
19
  left:0;
20
- margin-left:150%;
20
+ display: none;
21
21
  // Next
22
22
  .next {
23
23
  visibility:hidden;
@@ -27,35 +27,30 @@
27
27
  }
28
28
  // Current
29
29
  &:target {
30
- margin:0;
30
+ display: block;
31
31
  }
32
32
  // Shout
33
33
  &.shout {
34
34
  &.right, &.up, &.left, &.down {
35
35
  h1, h2 {
36
36
  opacity:0;
37
- transition:all 0.7s ease-out;
37
+ transition:all 0.5s ease-out;
38
38
  }
39
39
  &:target h2 {
40
40
  opacity:1;
41
- -webkit-transform:translateX(0) translateY(-50%);
42
41
  transform:translateX(0) translateY(-50%);
43
42
  }
44
43
  }
45
44
  &.right h2 {
46
- -webkit-transform:translateX(-100%) translateY(-50%);
47
45
  transform:translateX(-100%) translateY(-50%);
48
46
  }
49
47
  &.left h2 {
50
- -webkit-transform:translateX(100%) translateY(-50%);
51
48
  transform:translateX(100%) translateY(-50%);
52
49
  }
53
50
  &.up h2 {
54
- -webkit-transform:translateX(0) translateY(100%);
55
51
  transform:translateX(0) translateY(100%);
56
52
  }
57
53
  &.down h2 {
58
- -webkit-transform:translateX(0) translateY(-100%);
59
54
  transform:translateX(0) translateY(-100%);
60
55
  }
61
56
  }
@@ -1,11 +1,13 @@
1
1
  .inactive, .current {
2
2
  -webkit-transition: opacity 0.5s ease-in-out 0.0s;
3
+ -moz-transition: opacity 0.5s ease-in-out 0.0s;
3
4
  }
4
5
  .inactive {
5
6
  opacity: 0;
6
7
  }
7
8
  .visited {
8
9
  -webkit-transition: opacity 0.5s ease-in-out 0.3s;
10
+ -moz-transition: opacity 0.5s ease-in-out 0.3s;
9
11
  .hide-visited {
10
12
  display: none;
11
13
  }
@@ -28,6 +30,7 @@ li.current {
28
30
  .border-separated {
29
31
  li {
30
32
  -webkit-transition: all 0.5s;
33
+ -moz-transition: all 0.5s;
31
34
  }
32
35
  li.inactive {
33
36
  margin-left: -400px;
@@ -24,12 +24,10 @@
24
24
  text-align:left;
25
25
  -webkit-transform-origin:0 0;
26
26
  transform-origin:0 0;
27
- -webkit-transform:scale(0.5);
28
27
  transform:scale(0.5);
29
28
  @media (max-width:$break) {
30
29
  top:$height/2 + $height/4 - $gap;
31
30
  margin:($gap - ($height/2 + $height/4)) ($gap - ($width/2 + $width/4)) 0 0;
32
- -webkit-transform:scale(0.25);
33
31
  transform:scale(0.25);
34
32
  }
35
33
  // Frame
@@ -44,12 +42,10 @@
44
42
  content:'';
45
43
  -webkit-transform-origin:0 0;
46
44
  transform-origin:0 0;
47
- -webkit-transform:scale(2);
48
45
  transform:scale(2);
49
46
  @media (max-width:$break) {
50
47
  width:$width/4;
51
48
  height:$height/4;
52
- -webkit-transform:scale(4);
53
49
  transform:scale(4);
54
50
  }
55
51
  }
@@ -62,7 +58,6 @@
62
58
  width:$width/2;
63
59
  -webkit-transform-origin:0 0;
64
60
  transform-origin:0 0;
65
- -webkit-transform:scale(2);
66
61
  transform:scale(2);
67
62
  }
68
63
  }
@@ -120,7 +115,6 @@
120
115
  color: #F5F5F5;
121
116
  background: rgba(#FFF, 0.4);
122
117
  z-index: 1;
123
- /* -webkit-transform: rotate(45deg); */
124
118
  text-shadow: 5px 5px 20px rgba(0, 0, 0, 0.5);
125
119
  text-transform: uppercase;
126
120
  }
@@ -12,7 +12,6 @@
12
12
  height:8px;
13
13
  padding-left: -10px;
14
14
  background:url(../images/progress-grayDark.svg) 100% 0 no-repeat;
15
- -webkit-background-clip: content-box;
16
15
  background-clip: content-box;
17
16
  transition:width 0.3s linear;
18
17
  }
@@ -0,0 +1,13 @@
1
+ @import 'defaults';
2
+
3
+ // Print
4
+ @page {
5
+ margin: 0;
6
+ size: $width $height;
7
+ }
8
+
9
+ @media print {
10
+ .slide {
11
+ page-break-after: always;
12
+ }
13
+ }
@@ -31,6 +31,12 @@
31
31
  50% {opacity: 0;}
32
32
  100% {opacity: 0;}
33
33
  }
34
+ @keyframes blink {
35
+ 0% {opacity: 1;}
36
+ 49% {opacity: 1;}
37
+ 50% {opacity: 0;}
38
+ 100% {opacity: 0;}
39
+ }
34
40
 
35
41
  body {
36
42
  font:30px/2 'Open Sans', sans-serif;
@@ -83,8 +89,8 @@ a {
83
89
  color:#FFF;
84
90
  text-align:center;
85
91
  -webkit-transform-origin:50% 100%;
92
+ -moz-transform-origin:50% 100%;
86
93
  transform-origin:50% 100%;
87
- -webkit-transform:rotate(45deg) translateY(-1em);
88
94
  transform:rotate(45deg) translateY(-1em);
89
95
  }
90
96
 
@@ -199,6 +205,7 @@ a {
199
205
  }
200
206
  blink {
201
207
  -webkit-animation: blink 1.0s infinite;
208
+ animation: blink 1.0s infinite;
202
209
  }
203
210
  mark {
204
211
  padding-left: 5px;
@@ -382,7 +389,7 @@ a {
382
389
  table {
383
390
  left: 50%;
384
391
  position: relative;
385
- -webkit-transform: translateX(-50%);
392
+ transform: translateX(-50%);
386
393
  margin:0 0 28px;
387
394
  width:100%;
388
395
  border-collapse:collapse;
@@ -405,14 +412,14 @@ a {
405
412
  img, iframe {
406
413
  position: absolute;
407
414
  left: 50%;
408
- -webkit-transform: translateX(-50%);
415
+ transform: translateX(-50%);
409
416
  // max-height: 440px;
410
417
  max-height: 580px;
411
418
  max-width: 850px;
412
419
 
413
420
  &.inline {
414
421
  position: initial;
415
- -webkit-transform: none;
422
+ transform: none;
416
423
  }
417
424
  }
418
425
  iframe {
@@ -469,7 +476,7 @@ a {
469
476
  width:$width;
470
477
  height:$height;
471
478
  }
472
- .left-33 {
479
+ .border-info {
473
480
  padding: 60px 0px;
474
481
  font:38px/1 'Open Sans', sans-serif;
475
482
  font-weight: lighter;
@@ -511,6 +518,24 @@ a {
511
518
  }
512
519
  }
513
520
  }
521
+ .left-33 {
522
+ @extend .border-info;
523
+ width: 36%;
524
+ }
525
+ .right-33 {
526
+ @extend .border-info;
527
+ width: 36%;
528
+ left: 64%;
529
+ }
530
+ .left-50 {
531
+ @extend .border-info;
532
+ width: 50%;
533
+ }
534
+ .right-50 {
535
+ @extend .border-info;
536
+ width: 50%;
537
+ left: 50%;
538
+ }
514
539
  @mixin cover {
515
540
  img, svg, video,
516
541
  object, canvas, iframe {
@@ -534,7 +559,6 @@ a {
534
559
  @include cover {
535
560
  top:50%;
536
561
  width:100%;
537
- -webkit-transform:translateY(-50%);
538
562
  transform:translateY(-50%);
539
563
  }
540
564
  }
@@ -542,7 +566,6 @@ a {
542
566
  @include cover {
543
567
  left:50%;
544
568
  height:100%;
545
- -webkit-transform:translateX(-50%);
546
569
  transform:translateX(-50%);
547
570
  }
548
571
  }
@@ -550,7 +573,6 @@ a {
550
573
  @include cover {
551
574
  top:0;
552
575
  left:0;
553
- -webkit-transform:none;
554
576
  transform:none;
555
577
  }
556
578
  }
@@ -579,7 +601,6 @@ a {
579
601
  left: 128px;
580
602
  color:#FFF;
581
603
  font-size:100px;
582
- -webkit-transform:translateY(-50%);
583
604
  transform:translateY(-50%);
584
605
  border-bottom: none;
585
606
  z-index: 1;
@@ -594,7 +615,6 @@ a {
594
615
  right: 0;
595
616
  top: 50%;
596
617
  color: #FFF;
597
- -webkit-transform:translateY(-50%);
598
618
  transform:translateY(-50%);
599
619
  font-size: 100px;
600
620
  line-height: 1em;
@@ -608,8 +628,6 @@ a {
608
628
  }
609
629
  &.chapter {
610
630
  @extend .shout;
611
- @extend .left;
612
- @extend .cover;
613
631
  @extend .w;
614
632
  h2 {
615
633
  padding: 20px;
@@ -693,51 +711,45 @@ a {
693
711
  margin-top: 50px;
694
712
  }
695
713
  }
696
- .col2 {
714
+ .col {
697
715
  position: relative;
698
- -webkit-columns: 2;
699
716
  li {
700
717
  margin-left: 2em;
701
718
  text-indent: -2em;
702
719
  }
720
+ img {
721
+ position: initial;
722
+ transform: none;
723
+ }
724
+ }
725
+ .col2 {
726
+ @extend .col;
727
+ -webkit-columns: 2;
728
+ -moz-columns: 2;
703
729
  }
704
730
  .col3 {
705
- position: relative;
731
+ @extend .col;
706
732
  -webkit-columns: 3;
707
- li {
708
- margin-left: 2em;
709
- text-indent: -2em;
710
- }
733
+ -moz-columns: 3;
711
734
  }
712
735
  .col4 {
713
- position: relative;
736
+ @extend .col;
714
737
  -webkit-columns: 4;
715
- li {
716
- margin-left: 2em;
717
- text-indent: -2em;
718
- }
719
- img {
720
- position: initial;
721
- -webkit-transform: none;
722
- }
738
+ -moz-columns: 4;
723
739
  }
724
740
  // Place
725
741
  .place {
726
742
  position:absolute;
727
743
  top:50%;
728
744
  left:50%;
729
- -webkit-transform:translate(-50%, -50%);
730
745
  transform:translate(-50%, -50%);
731
746
  &.t.l, &.t.r, &.b.r, &.b.l {
732
- -webkit-transform:none;
733
747
  transform:none;
734
748
  }
735
749
  &.t, &.b {
736
- -webkit-transform:translate(-50%, 0);
737
750
  transform:translate(-50%, 0);
738
751
  }
739
752
  &.l, &.r {
740
- -webkit-transform:translate(0, -50%);
741
753
  transform:translate(0, -50%);
742
754
  }
743
755
  &.t, &.t.l, &.t.r {
@@ -773,7 +785,7 @@ a {
773
785
  }
774
786
  }
775
787
 
776
- #slide-0-0 {
788
+ .slide.title {
777
789
  color: $grayDark;
778
790
  font-size: 70px;
779
791
  font-weight: 700;
@@ -834,8 +846,3 @@ a {
834
846
  @import 'list';
835
847
  @import 'full';
836
848
  }
837
- // Print
838
- @page {
839
- margin:0;
840
- size:$width $height;
841
- }