trickster 1.0.0 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 5308d593c057d2a323226877617ae50e6aac31ec
4
+ data.tar.gz: 9b5050525dfc9eeef89352a7d73807c2b89b86a9
5
+ SHA512:
6
+ metadata.gz: ad51ce913a437a04c8ca3fb0bf4258601bb28dc8873b931a31321a064f520ed3dfd127ba5b01af62cc59b9698c86bd4c6c877ac1e809b09a2ce5d785afc26e3d
7
+ data.tar.gz: 574787f3ae4030971b1ccebbdfae5ad0c504504427440c3ded1aac5706c5a06116394a89ce1c3f9158b16edf10dee3ea1080874b2f7341f05c17a3e496f2f5e8
@@ -0,0 +1 @@
1
+ trickster
@@ -0,0 +1 @@
1
+ ruby-2.0.0
@@ -103,6 +103,16 @@ Prompts can be <tt>></tt>, <tt>%</tt>, and <tt>#</tt>.
103
103
 
104
104
  These slides take the first three lines of content and display them in an +H1+, +H2+, and +H3+, respectively. All other lines are ignored.
105
105
 
106
+ == Timer
107
+
108
+ Currently, there will be a small timer on the bottom left of your presentation. By default, it will show the number of minutes elapsed since you clicked the play button. It can be customized:
109
+
110
+ * If you don't want to use the timer, simply add <code>display: none</code> to the <code>#timer</code> stanza in the stylesheet.
111
+ * If your presentation might go over an hour, remove <code>display: none</code> from the <code>#timer .hours</code> stanza in the stylesheet.
112
+ * If you want to see seconds elapsing, remove <code>display: none</code> from the <code>#timer .seconds</code> stanza in the stylesheet.
113
+ * If you want to hide the controls (e.g. because you know the keyboard shortcuts or have a presentation remote), add <code>display: none</code> to the <code>#controls</code> stanza in the stylesheet.
114
+ * You can adjust the style in any other way you see fit in the stylsheet
115
+
106
116
  == Customizations/Styling
107
117
 
108
118
  You have two points of customization: +custom.js+, which is loaded *after* all the other JS, but before the +load+ event. This is where you can override Trickster's configuration if you like (e.g. for default transition time).
@@ -123,6 +133,8 @@ Every time you reload, the presentation will be dynamically sized to the size of
123
133
 
124
134
  Occasionally, Trickster will size the slides too larger or too small. In that case, you can use "-" and "+" to resize the slides on the fly. Note that if you you reload, the sizes will be reset.
125
135
 
136
+ Finally, if you want to see your elapsed time, click the play button before you start (see keyboard shortcuts below).
137
+
126
138
  === Keyboard Commands
127
139
 
128
140
  advance:: "j", space-bar, right-arrow, or the advance button on the Kensington Wireless Presenter.
@@ -130,6 +142,8 @@ back:: "k", backspace, left-arrow, or the back button the Kensington Wireless Pr
130
142
  restart:: down/stop button on the Kensington Wireless Presenter.
131
143
  increase font-size:: "+" or "=" (font-size will be reset if you reload the page)
132
144
  decrease font-size:: "-" (font-size will be reset if you reload the page)
145
+ start timer:: down on your Kensington remote, or "p"
146
+ pause timer:: "a"
133
147
 
134
148
  == Tips
135
149
 
@@ -80,7 +80,7 @@ EOF
80
80
  theme_copier = Trickster::ThemeCopier.new(BASE_DIR,dir)
81
81
  theme_copier.copy_theme(options[:theme])
82
82
 
83
- puts "Your slideshow is ready, run trickster build to build it"
83
+ puts "Your slideshow is ready, cd to #{BASE_DIR} and run `trickster build`, then open index.html"
84
84
  end
85
85
  end
86
86
  end
@@ -66,3 +66,37 @@ li {
66
66
  margin-right: 1em;
67
67
  line-height: 2em;
68
68
  }
69
+
70
+ #timer {
71
+ position: fixed;
72
+ left: 1em;
73
+ bottom: 1em;
74
+ /* uncomment this to remove the timer
75
+ display: none;
76
+ */
77
+ }
78
+
79
+ #timer .seconds {
80
+ display: none; /* remove this to show seconds elapsing */
81
+ }
82
+
83
+ #timer .hours {
84
+ display: none; /* remove this to show the hours field */
85
+ }
86
+
87
+ #timer a {
88
+ text-decoration: none;
89
+ }
90
+ #timer #clock, #timer #controls {
91
+ display: inline;
92
+ }
93
+
94
+ #timer #pause {
95
+ letter-spacing: -0.2em;
96
+ }
97
+
98
+ #timer #controls {
99
+ /* Uncomment this if you want to hide the timer controls
100
+ display: none;
101
+ */
102
+ }
@@ -3,26 +3,53 @@
3
3
  <head>
4
4
  <title><%= title %></title>
5
5
  <meta charset="utf-8">
6
+ <meta name="description" content="<%= title %>">
7
+ <meta name="viewport" content="width=device-width, initial-scale=1">
6
8
  <script src="js/lib/jquery-1.8.0.min.js"></script>
7
9
  <script src="js/lib/highlight-7.1.min.js"></script>
8
10
  <script src="js/lib/jquerytypewriter.js"></script>
9
11
  <script src="js/lib/underscore-1.3.3.min.js"></script>
12
+ <script src="js/lib/jquery.touchSwipe.min.js"></script>
10
13
  <script src="js/utils.js"></script>
11
14
  <script src="js/sizer.js"></script>
12
15
  <script src="js/bullets.js"></script>
13
16
  <script src="js/trickster.js"></script>
17
+ <script src="js/timer.js"></script>
14
18
  <script src="js/custom.js"></script>
15
19
  <link rel="stylesheet" href="css/normalize.css">
16
20
  <link rel="stylesheet" href="css/theme.css">
17
21
  <link rel="stylesheet" href="css/styles.css">
18
22
  <script>
19
23
  $(window).load(function() {
24
+ TricksterTimer = TricksterTimer(TricksterDefaultConfig,{});
25
+ TricksterTimer.setup();
26
+
20
27
  Trickster = TricksterLoader(TricksterDefaultConfig,{});
21
- Trickster.load();
28
+ Trickster.load(TricksterTimer);
29
+
22
30
  });
23
31
  </script>
24
32
  </head>
25
33
  <body><div id="contents">
26
34
  <%= body %>
27
- </div></body>
35
+ </div>
36
+ <aside id="timer">
37
+ <div id="clock">
38
+ <span class="hours">
39
+ <span id="hour">0</span> :
40
+ </span>
41
+ <span class="minutes">
42
+ <span id="minute">00</span>
43
+ </span>
44
+ <span class="seconds"> :
45
+ <span id="second">00</span>
46
+ </span>
47
+ </div>
48
+ <div id="controls">
49
+ <a id="stop" href="#" onclick="return TricksterTimer.stop();">◼</a>
50
+ <a id="play" href="#" onclick="return TricksterTimer.play();">▶</a>
51
+ <a id="pause" href="#" onclick="return TricksterTimer.pause();">▮▮</a>
52
+ </div>
53
+ </aside>
54
+ </body>
28
55
  </html>
@@ -38,7 +38,7 @@ Feature: I can create a new slideshow
38
38
  And the directory "slideshow/js" should contain all the trickster JavaScript files and support libs
39
39
  And a directory named "slideshow/css" should exist
40
40
  And the directory "slideshow/css" should contain all the trickster CSS files and support stylesheets
41
- And the output should contain "Your slideshow is ready, run trickster build to build it"
41
+ And the output should match /Your slideshow is ready/
42
42
  And "css/theme.css" in "slideshow" should be identical to "default.css"
43
43
 
44
44
  Scenario: Can init a new slideshow with a different theme
@@ -0,0 +1 @@
1
+ (function(a){if(typeof define==="function"&&define.amd&&define.amd.jQuery){define(["jquery"],a)}else{a(jQuery)}}(function(e){var o="left",n="right",d="up",v="down",c="in",w="out",l="none",r="auto",k="swipe",s="pinch",x="tap",i="doubletap",b="longtap",A="horizontal",t="vertical",h="all",q=10,f="start",j="move",g="end",p="cancel",a="ontouchstart" in window,y="TouchSwipe";var m={fingers:1,threshold:75,cancelThreshold:null,pinchThreshold:20,maxTimeThreshold:null,fingerReleaseThreshold:250,longTapThreshold:500,doubleTapThreshold:200,swipe:null,swipeLeft:null,swipeRight:null,swipeUp:null,swipeDown:null,swipeStatus:null,pinchIn:null,pinchOut:null,pinchStatus:null,click:null,tap:null,doubleTap:null,longTap:null,triggerOnTouchEnd:true,triggerOnTouchLeave:false,allowPageScroll:"auto",fallbackToMouseEvents:true,excludedElements:"label, button, input, select, textarea, a, .noSwipe"};e.fn.swipe=function(D){var C=e(this),B=C.data(y);if(B&&typeof D==="string"){if(B[D]){return B[D].apply(this,Array.prototype.slice.call(arguments,1))}else{e.error("Method "+D+" does not exist on jQuery.swipe")}}else{if(!B&&(typeof D==="object"||!D)){return u.apply(this,arguments)}}return C};e.fn.swipe.defaults=m;e.fn.swipe.phases={PHASE_START:f,PHASE_MOVE:j,PHASE_END:g,PHASE_CANCEL:p};e.fn.swipe.directions={LEFT:o,RIGHT:n,UP:d,DOWN:v,IN:c,OUT:w};e.fn.swipe.pageScroll={NONE:l,HORIZONTAL:A,VERTICAL:t,AUTO:r};e.fn.swipe.fingers={ONE:1,TWO:2,THREE:3,ALL:h};function u(B){if(B&&(B.allowPageScroll===undefined&&(B.swipe!==undefined||B.swipeStatus!==undefined))){B.allowPageScroll=l}if(B.click!==undefined&&B.tap===undefined){B.tap=B.click}if(!B){B={}}B=e.extend({},e.fn.swipe.defaults,B);return this.each(function(){var D=e(this);var C=D.data(y);if(!C){C=new z(this,B);D.data(y,C)}})}function z(a0,aq){var av=(a||!aq.fallbackToMouseEvents),G=av?"touchstart":"mousedown",au=av?"touchmove":"mousemove",R=av?"touchend":"mouseup",P=av?null:"mouseleave",az="touchcancel";var ac=0,aL=null,Y=0,aX=0,aV=0,D=1,am=0,aF=0,J=null;var aN=e(a0);var W="start";var T=0;var aM=null;var Q=0,aY=0,a1=0,aa=0,K=0;var aS=null;try{aN.bind(G,aJ);aN.bind(az,a5)}catch(ag){e.error("events not supported "+G+","+az+" on jQuery.swipe")}this.enable=function(){aN.bind(G,aJ);aN.bind(az,a5);return aN};this.disable=function(){aG();return aN};this.destroy=function(){aG();aN.data(y,null);return aN};this.option=function(a8,a7){if(aq[a8]!==undefined){if(a7===undefined){return aq[a8]}else{aq[a8]=a7}}else{e.error("Option "+a8+" does not exist on jQuery.swipe.options")}return null};function aJ(a9){if(ax()){return}if(e(a9.target).closest(aq.excludedElements,aN).length>0){return}var ba=a9.originalEvent?a9.originalEvent:a9;var a8,a7=a?ba.touches[0]:ba;W=f;if(a){T=ba.touches.length}else{a9.preventDefault()}ac=0;aL=null;aF=null;Y=0;aX=0;aV=0;D=1;am=0;aM=af();J=X();O();if(!a||(T===aq.fingers||aq.fingers===h)||aT()){ae(0,a7);Q=ao();if(T==2){ae(1,ba.touches[1]);aX=aV=ap(aM[0].start,aM[1].start)}if(aq.swipeStatus||aq.pinchStatus){a8=L(ba,W)}}else{a8=false}if(a8===false){W=p;L(ba,W);return a8}else{ak(true)}return null}function aZ(ba){var bd=ba.originalEvent?ba.originalEvent:ba;if(W===g||W===p||ai()){return}var a9,a8=a?bd.touches[0]:bd;var bb=aD(a8);aY=ao();if(a){T=bd.touches.length}W=j;if(T==2){if(aX==0){ae(1,bd.touches[1]);aX=aV=ap(aM[0].start,aM[1].start)}else{aD(bd.touches[1]);aV=ap(aM[0].end,aM[1].end);aF=an(aM[0].end,aM[1].end)}D=a3(aX,aV);am=Math.abs(aX-aV)}if((T===aq.fingers||aq.fingers===h)||!a||aT()){aL=aH(bb.start,bb.end);ah(ba,aL);ac=aO(bb.start,bb.end);Y=aI();aE(aL,ac);if(aq.swipeStatus||aq.pinchStatus){a9=L(bd,W)}if(!aq.triggerOnTouchEnd||aq.triggerOnTouchLeave){var a7=true;if(aq.triggerOnTouchLeave){var bc=aU(this);a7=B(bb.end,bc)}if(!aq.triggerOnTouchEnd&&a7){W=ay(j)}else{if(aq.triggerOnTouchLeave&&!a7){W=ay(g)}}if(W==p||W==g){L(bd,W)}}}else{W=p;L(bd,W)}if(a9===false){W=p;L(bd,W)}}function I(a7){var a8=a7.originalEvent;if(a){if(a8.touches.length>0){C();return true}}if(ai()){T=aa}a7.preventDefault();aY=ao();Y=aI();if(a6()){W=p;L(a8,W)}else{if(aq.triggerOnTouchEnd||(aq.triggerOnTouchEnd==false&&W===j)){W=g;L(a8,W)}else{if(!aq.triggerOnTouchEnd&&a2()){W=g;aB(a8,W,x)}else{if(W===j){W=p;L(a8,W)}}}}ak(false);return null}function a5(){T=0;aY=0;Q=0;aX=0;aV=0;D=1;O();ak(false)}function H(a7){var a8=a7.originalEvent;if(aq.triggerOnTouchLeave){W=ay(g);L(a8,W)}}function aG(){aN.unbind(G,aJ);aN.unbind(az,a5);aN.unbind(au,aZ);aN.unbind(R,I);if(P){aN.unbind(P,H)}ak(false)}function ay(bb){var ba=bb;var a9=aw();var a8=aj();var a7=a6();if(!a9||a7){ba=p}else{if(a8&&bb==j&&(!aq.triggerOnTouchEnd||aq.triggerOnTouchLeave)){ba=g}else{if(!a8&&bb==g&&aq.triggerOnTouchLeave){ba=p}}}return ba}function L(a9,a7){var a8=undefined;if(F()||S()){a8=aB(a9,a7,k)}else{if((M()||aT())&&a8!==false){a8=aB(a9,a7,s)}}if(aC()&&a8!==false){a8=aB(a9,a7,i)}else{if(al()&&a8!==false){a8=aB(a9,a7,b)}else{if(ad()&&a8!==false){a8=aB(a9,a7,x)}}}if(a7===p){a5(a9)}if(a7===g){if(a){if(a9.touches.length==0){a5(a9)}}else{a5(a9)}}return a8}function aB(ba,a7,a9){var a8=undefined;if(a9==k){aN.trigger("swipeStatus",[a7,aL||null,ac||0,Y||0,T]);if(aq.swipeStatus){a8=aq.swipeStatus.call(aN,ba,a7,aL||null,ac||0,Y||0,T);if(a8===false){return false}}if(a7==g&&aR()){aN.trigger("swipe",[aL,ac,Y,T]);if(aq.swipe){a8=aq.swipe.call(aN,ba,aL,ac,Y,T);if(a8===false){return false}}switch(aL){case o:aN.trigger("swipeLeft",[aL,ac,Y,T]);if(aq.swipeLeft){a8=aq.swipeLeft.call(aN,ba,aL,ac,Y,T)}break;case n:aN.trigger("swipeRight",[aL,ac,Y,T]);if(aq.swipeRight){a8=aq.swipeRight.call(aN,ba,aL,ac,Y,T)}break;case d:aN.trigger("swipeUp",[aL,ac,Y,T]);if(aq.swipeUp){a8=aq.swipeUp.call(aN,ba,aL,ac,Y,T)}break;case v:aN.trigger("swipeDown",[aL,ac,Y,T]);if(aq.swipeDown){a8=aq.swipeDown.call(aN,ba,aL,ac,Y,T)}break}}}if(a9==s){aN.trigger("pinchStatus",[a7,aF||null,am||0,Y||0,T,D]);if(aq.pinchStatus){a8=aq.pinchStatus.call(aN,ba,a7,aF||null,am||0,Y||0,T,D);if(a8===false){return false}}if(a7==g&&a4()){switch(aF){case c:aN.trigger("pinchIn",[aF||null,am||0,Y||0,T,D]);if(aq.pinchIn){a8=aq.pinchIn.call(aN,ba,aF||null,am||0,Y||0,T,D)}break;case w:aN.trigger("pinchOut",[aF||null,am||0,Y||0,T,D]);if(aq.pinchOut){a8=aq.pinchOut.call(aN,ba,aF||null,am||0,Y||0,T,D)}break}}}if(a9==x){if(a7===p||a7===g){clearTimeout(aS);if(V()&&!E()){K=ao();aS=setTimeout(e.proxy(function(){K=null;aN.trigger("tap",[ba.target]);if(aq.tap){a8=aq.tap.call(aN,ba,ba.target)}},this),aq.doubleTapThreshold)}else{K=null;aN.trigger("tap",[ba.target]);if(aq.tap){a8=aq.tap.call(aN,ba,ba.target)}}}}else{if(a9==i){if(a7===p||a7===g){clearTimeout(aS);K=null;aN.trigger("doubletap",[ba.target]);if(aq.doubleTap){a8=aq.doubleTap.call(aN,ba,ba.target)}}}else{if(a9==b){if(a7===p||a7===g){clearTimeout(aS);K=null;aN.trigger("longtap",[ba.target]);if(aq.longTap){a8=aq.longTap.call(aN,ba,ba.target)}}}}}return a8}function aj(){var a7=true;if(aq.threshold!==null){a7=ac>=aq.threshold}return a7}function a6(){var a7=false;if(aq.cancelThreshold!==null&&aL!==null){a7=(aP(aL)-ac)>=aq.cancelThreshold}return a7}function ab(){if(aq.pinchThreshold!==null){return am>=aq.pinchThreshold}return true}function aw(){var a7;if(aq.maxTimeThreshold){if(Y>=aq.maxTimeThreshold){a7=false}else{a7=true}}else{a7=true}return a7}function ah(a7,a8){if(aq.allowPageScroll===l||aT()){a7.preventDefault()}else{var a9=aq.allowPageScroll===r;switch(a8){case o:if((aq.swipeLeft&&a9)||(!a9&&aq.allowPageScroll!=A)){a7.preventDefault()}break;case n:if((aq.swipeRight&&a9)||(!a9&&aq.allowPageScroll!=A)){a7.preventDefault()}break;case d:if((aq.swipeUp&&a9)||(!a9&&aq.allowPageScroll!=t)){a7.preventDefault()}break;case v:if((aq.swipeDown&&a9)||(!a9&&aq.allowPageScroll!=t)){a7.preventDefault()}break}}}function a4(){var a8=aK();var a7=U();var a9=ab();return a8&&a7&&a9}function aT(){return !!(aq.pinchStatus||aq.pinchIn||aq.pinchOut)}function M(){return !!(a4()&&aT())}function aR(){var ba=aw();var bc=aj();var a9=aK();var a7=U();var a8=a6();var bb=!a8&&a7&&a9&&bc&&ba;return bb}function S(){return !!(aq.swipe||aq.swipeStatus||aq.swipeLeft||aq.swipeRight||aq.swipeUp||aq.swipeDown)}function F(){return !!(aR()&&S())}function aK(){return((T===aq.fingers||aq.fingers===h)||!a)}function U(){return aM[0].end.x!==0}function a2(){return !!(aq.tap)}function V(){return !!(aq.doubleTap)}function aQ(){return !!(aq.longTap)}function N(){if(K==null){return false}var a7=ao();return(V()&&((a7-K)<=aq.doubleTapThreshold))}function E(){return N()}function at(){return((T===1||!a)&&(isNaN(ac)||ac===0))}function aW(){return((Y>aq.longTapThreshold)&&(ac<q))}function ad(){return !!(at()&&a2())}function aC(){return !!(N()&&V())}function al(){return !!(aW()&&aQ())}function C(){a1=ao();aa=event.touches.length+1}function O(){a1=0;aa=0}function ai(){var a7=false;if(a1){var a8=ao()-a1;if(a8<=aq.fingerReleaseThreshold){a7=true}}return a7}function ax(){return !!(aN.data(y+"_intouch")===true)}function ak(a7){if(a7===true){aN.bind(au,aZ);aN.bind(R,I);if(P){aN.bind(P,H)}}else{aN.unbind(au,aZ,false);aN.unbind(R,I,false);if(P){aN.unbind(P,H,false)}}aN.data(y+"_intouch",a7===true)}function ae(a8,a7){var a9=a7.identifier!==undefined?a7.identifier:0;aM[a8].identifier=a9;aM[a8].start.x=aM[a8].end.x=a7.pageX||a7.clientX;aM[a8].start.y=aM[a8].end.y=a7.pageY||a7.clientY;return aM[a8]}function aD(a7){var a9=a7.identifier!==undefined?a7.identifier:0;var a8=Z(a9);a8.end.x=a7.pageX||a7.clientX;a8.end.y=a7.pageY||a7.clientY;return a8}function Z(a8){for(var a7=0;a7<aM.length;a7++){if(aM[a7].identifier==a8){return aM[a7]}}}function af(){var a7=[];for(var a8=0;a8<=5;a8++){a7.push({start:{x:0,y:0},end:{x:0,y:0},identifier:0})}return a7}function aE(a7,a8){a8=Math.max(a8,aP(a7));J[a7].distance=a8}function aP(a7){if(J[a7]){return J[a7].distance}return undefined}function X(){var a7={};a7[o]=ar(o);a7[n]=ar(n);a7[d]=ar(d);a7[v]=ar(v);return a7}function ar(a7){return{direction:a7,distance:0}}function aI(){return aY-Q}function ap(ba,a9){var a8=Math.abs(ba.x-a9.x);var a7=Math.abs(ba.y-a9.y);return Math.round(Math.sqrt(a8*a8+a7*a7))}function a3(a7,a8){var a9=(a8/a7)*1;return a9.toFixed(2)}function an(){if(D<1){return w}else{return c}}function aO(a8,a7){return Math.round(Math.sqrt(Math.pow(a7.x-a8.x,2)+Math.pow(a7.y-a8.y,2)))}function aA(ba,a8){var a7=ba.x-a8.x;var bc=a8.y-ba.y;var a9=Math.atan2(bc,a7);var bb=Math.round(a9*180/Math.PI);if(bb<0){bb=360-Math.abs(bb)}return bb}function aH(a8,a7){var a9=aA(a8,a7);if((a9<=45)&&(a9>=0)){return o}else{if((a9<=360)&&(a9>=315)){return o}else{if((a9>=135)&&(a9<=225)){return n}else{if((a9>45)&&(a9<135)){return v}else{return d}}}}}function ao(){var a7=new Date();return a7.getTime()}function aU(a7){a7=e(a7);var a9=a7.offset();var a8={left:a9.left,right:a9.left+a7.outerWidth(),top:a9.top,bottom:a9.top+a7.outerHeight()};return a8}function B(a7,a8){return(a7.x>a8.left&&a7.x<a8.right&&a7.y>a8.top&&a7.y<a8.bottom)}}}));
@@ -0,0 +1,81 @@
1
+ /** Trickster Timer.
2
+ * config: configuration, or TricksterDefaultConfig to get the defaults
3
+ * functions: override helper functions
4
+ */
5
+ var TricksterTimer = function(config,functions) {
6
+ var start = (new Date()).getTime();
7
+ var pauseTime = null;
8
+ var running = false;
9
+ var paused = false;
10
+
11
+ function pad(num) {
12
+ if (num < 10) {
13
+ return "0" + num;
14
+ }
15
+ else {
16
+ return num;
17
+ }
18
+ }
19
+
20
+ function tick() {
21
+ if (!paused) {
22
+ var now = (new Date()).getTime();
23
+ var diff = (now - start) / 1000;
24
+ var hour = Math.floor(diff / (60 * 60));
25
+ var minute = pad((Math.floor(diff / 60) % 60));
26
+ var second = pad(Math.floor(diff % 60));
27
+
28
+ $("#hour").text(hour);
29
+ $("#minute").text(minute);
30
+ $("#second").text(second);
31
+ }
32
+
33
+ if (running) {
34
+ window.setTimeout(tick,1000);
35
+ }
36
+ else {
37
+ $("#hour").text("0");
38
+ $("#minute").text("00");
39
+ $("#second").text("00");
40
+ }
41
+ }
42
+
43
+ function stop() {
44
+ running = false;
45
+ paused = false;
46
+ $("#pause").hide();
47
+ $("#play").show();
48
+ }
49
+
50
+ function pause() {
51
+ paused = true;
52
+ pauseTime = (new Date()).getTime();
53
+ $("#play").show();
54
+ $("#pause").hide();
55
+ }
56
+
57
+ function play() {
58
+ if (paused) {
59
+ var timePaused = (new Date()).getTime() - pauseTime;
60
+ start += timePaused;
61
+ }
62
+ paused = false
63
+ $("#play").hide();
64
+ $("#pause").show();
65
+ if (!running) {
66
+ running = true;
67
+ tick();
68
+ }
69
+ }
70
+
71
+ return {
72
+ setup: function() {
73
+ $("#stop").show();
74
+ $("#play").show();
75
+ $("#pause").hide();
76
+ },
77
+ play: play,
78
+ pause: pause,
79
+ stop: stop
80
+ };
81
+ };
@@ -10,12 +10,19 @@ var TricksterDefaultConfig = {
10
10
  39, // right arrow
11
11
  34, // Kensington presenter right arrow
12
12
  32], // space bar
13
+ advanceSwipe: "left",
13
14
  /** Keycodes that go back to the previous slide */
14
15
  backKeycodes: [75, // k
15
16
  37, // left arrow
16
17
  33, // Kensington presenter left arrow
17
18
  8], // delete
18
- startOverKeycodes: [66], // Kensington presenter down/stop
19
+ backSwipe: "right",
20
+ startOverKeycodes: [], // not really needed since you can just refresh the browser window
21
+ startTimerKeycodes: [66, // Kensington presenter down/stop aka "b"
22
+ 80 // p
23
+ ],
24
+ pauseTimerKeycodes: [65 // a
25
+ ],
19
26
  /** These keycodes, if encountered, will not be sent along
20
27
  to the browser. Useful if there might be some vertical
21
28
  scrolling and 32/33/34 would otherwise scroll */
@@ -128,13 +135,33 @@ var TricksterLoader = function(config,functions) {
128
135
  });
129
136
  }
130
137
 
131
- function setupKeyBindings() {
138
+ function setupKeyBindings(timer) {
132
139
  bindKeys(config.advanceKeycodes,Trickster.advance);
133
140
  bindKeys(config.backKeycodes,Trickster.back);
134
141
  bindKeys(config.startOverKeycodes,Trickster.startOver);
135
142
  preventDefaultKeyCodeAction(config.keyCodesPreventingDefault);
136
143
  bindKeys([189],Trickster.shrink); // -
137
144
  bindKeys([187],Trickster.embiggen); // +
145
+ if (timer) {
146
+ bindKeys(config.startTimerKeycodes,timer.play);
147
+ bindKeys(config.pauseTimerKeycodes,timer.pause);
148
+ }
149
+ }
150
+
151
+ function setupSwiping() {
152
+ $("body").swipe({
153
+ swipe: function(event,direction,distance,duration,fingerCount) {
154
+ if (direction == config.advanceSwipe) {
155
+ Trickster.advance();
156
+ }
157
+ else if (direction == config.backSwipe) {
158
+ Trickster.back();
159
+ }
160
+ else {
161
+ alert("Swiped " + direction);
162
+ }
163
+ },
164
+ });
138
165
  }
139
166
 
140
167
  function hideAllSlides() {
@@ -151,11 +178,12 @@ var TricksterLoader = function(config,functions) {
151
178
  previousSlide: 0,
152
179
 
153
180
  /** Set everything up for the slideshow */
154
- load: function() {
181
+ load: function(timer) {
155
182
  // Order matters here
156
183
  Trickster.totalSlides = slides().length;
157
184
  initCurrentSlide();
158
- setupKeyBindings();
185
+ setupKeyBindings(timer);
186
+ setupSwiping();
159
187
  syntaxHighlighter().highlight();
160
188
  sizeAllToFit();
161
189
  hideAllSlides();
@@ -2,9 +2,9 @@ module Trickster
2
2
  module Renderer
3
3
  class CodeRenderer
4
4
  def render(io,content,options)
5
- content = read_file_if_content_is_filename(content)
5
+ content,extension = read_file_if_content_is_filename(content)
6
6
  content = wrap_lines_with_callouts(content,options)
7
- io.puts "<pre><code #{language(options)}data-strikeouts='#{strikes(options)}' data-callout-lines='#{callouts(options)}'>#{content}</code></pre>"
7
+ io.puts "<pre><code #{language(options,extension)}data-strikeouts='#{strikes(options)}' data-callout-lines='#{callouts(options)}'>#{content}</code></pre>"
8
8
  end
9
9
 
10
10
  private
@@ -49,16 +49,24 @@ module Trickster
49
49
 
50
50
  def read_file_if_content_is_filename(content)
51
51
  if content[0] =~ /file:\/\/(.*$)/
52
- File.open($1).readlines.map(&:chomp)
52
+ [File.open($1).readlines.map(&:chomp),content[0].split(/\./)[-1]]
53
53
  else
54
- content
54
+ [content,nil]
55
55
  end
56
56
  end
57
57
 
58
- def language(options)
58
+ EXTENSIONS = {
59
+ "rb" => "ruby",
60
+ }
61
+
62
+ def language(options,extension)
59
63
  language = ''
60
64
  if options =~/language=([^\s]+)/
61
65
  language = "class='#{$1}' "
66
+ else
67
+ if EXTENSIONS.key?(extension)
68
+ language = "class='#{EXTENSIONS[extension]}'"
69
+ end
62
70
  end
63
71
  language
64
72
  end
@@ -20,6 +20,7 @@ module Trickster
20
20
  content = []
21
21
  slide_type = nil
22
22
  @lines.each do |line|
23
+ next if line =~ /^-- /
23
24
  if line =~/^!(.*)$/
24
25
  block.call(slide_type,content) unless slide_type.nil?
25
26
  slide_type = $1
@@ -1,3 +1,3 @@
1
1
  module Trickster
2
- VERSION = '1.0.0'
2
+ VERSION = '1.1.0'
3
3
  end
@@ -47,4 +47,26 @@ class SlideParserTest < Clean::Test::TestCase
47
47
  assert_equal @slides,@renderer.rendered_slides
48
48
  }
49
49
  end
50
+
51
+ test_that "comments are ignored" do
52
+ Given {
53
+ @slides = [
54
+ ['TITLE',[any_string,any_string]],
55
+ ['BULLETS',[any_string,any_string]],
56
+ ];
57
+ lines = @slides.map { |(slide_type,content)|
58
+ ["!#{slide_type}",content]
59
+ }.flatten
60
+ lines.unshift(any_string)
61
+ @renderer = RememberingRenderer.new
62
+ @parser = Trickster::SlideParser.new(lines,@renderer)
63
+ }
64
+ When {
65
+ @resulting_content = @parser.body
66
+ }
67
+ Then {
68
+ assert_equal @slides[0..2].inspect,@resulting_content
69
+ assert_equal @slides[0..2],@renderer.rendered_slides
70
+ }
71
+ end
50
72
  end
@@ -0,0 +1,45 @@
1
+ Test Slideshow
2
+ !TITLE
3
+ Title of your slideshow
4
+ Subtitle
5
+ Subsubtitle
6
+
7
+ !SECTION
8
+ A section
9
+
10
+ !BULLETS
11
+ A bullet list
12
+ - can use
13
+ * any reasonable
14
+ + bullet
15
+
16
+ !CODE: language=ruby, callout=1,2,-4
17
+ class Foo
18
+ attr_reader :bar
19
+
20
+ attr_writer :bar
21
+ end
22
+
23
+ !IMAGE
24
+ test/slideshow/rudy.png
25
+
26
+ !COMMANDLINE
27
+ > ls
28
+ -rw-r--r-- 1 David staff 97 Aug 28 10:03 trickster.rdoc
29
+ -rw-r--r-- 1 David staff 1339 Aug 28 10:03 Rakefile
30
+ -rw-r--r-- 1 David staff 25 Aug 28 10:03 Gemfile
31
+ drwxr-xr-x 7 David staff 238 Sep 10 16:53 js
32
+ drwxr-xr-x 6 David staff 204 Sep 10 16:53 features
33
+ drwxr-xr-x 3 David staff 102 Sep 10 16:53 erb
34
+ drwxr-xr-x 5 David staff 170 Sep 10 16:53 css
35
+ -rw-r--r-- 1 David staff 1254 Sep 10 16:53 trickster.gemspec
36
+ drwxr-xr-x 3 David staff 102 Sep 10 16:53 bin
37
+ -rw-r--r-- 1 David staff 150 Sep 10 16:53 TODO
38
+ -rw-r--r-- 1 David staff 1563 Sep 10 16:53 Gemfile.lock
39
+ drwxr-xr-x 4 David staff 136 Sep 10 16:58 lib
40
+ -rw-r--r-- 1 David staff 3991 Sep 10 17:01 README.rdoc
41
+ drwxr-xr-x 3 David staff 102 Sep 10 17:07 tmp
42
+ -rw-r--r-- 1 David staff 87290 Sep 10 17:07 results.html
43
+ drwxr-xr-x 9 David staff 306 Sep 10 17:19 test
44
+ > rm *
45
+
@@ -22,6 +22,6 @@ spec = Gem::Specification.new do |s|
22
22
  s.add_development_dependency('aruba')
23
23
  s.add_development_dependency('jasmine-headless-webkit')
24
24
  s.add_development_dependency('clean_test')
25
- s.add_runtime_dependency('gli','2.0.0')
25
+ s.add_runtime_dependency('gli','~> 2')
26
26
  s.add_runtime_dependency('sass')
27
27
  end
metadata CHANGED
@@ -1,414 +1,263 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: trickster
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
5
- prerelease:
4
+ version: 1.1.0
6
5
  platform: ruby
7
6
  authors:
8
7
  - David Copeland
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-06-08 00:00:00.000000000 Z
11
+ date: 2013-11-04 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: rake
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
- - - ! '>='
17
+ - - '>='
20
18
  - !ruby/object:Gem::Version
21
19
  version: '0'
22
20
  type: :development
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
- - - ! '>='
24
+ - - '>='
28
25
  - !ruby/object:Gem::Version
29
26
  version: '0'
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: rdoc
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
- - - ! '>='
31
+ - - '>='
36
32
  - !ruby/object:Gem::Version
37
33
  version: '0'
38
34
  type: :development
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
- - - ! '>='
38
+ - - '>='
44
39
  - !ruby/object:Gem::Version
45
40
  version: '0'
46
41
  - !ruby/object:Gem::Dependency
47
42
  name: aruba
48
43
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
44
  requirements:
51
- - - ! '>='
45
+ - - '>='
52
46
  - !ruby/object:Gem::Version
53
47
  version: '0'
54
48
  type: :development
55
49
  prerelease: false
56
50
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
51
  requirements:
59
- - - ! '>='
52
+ - - '>='
60
53
  - !ruby/object:Gem::Version
61
54
  version: '0'
62
55
  - !ruby/object:Gem::Dependency
63
56
  name: jasmine-headless-webkit
64
57
  requirement: !ruby/object:Gem::Requirement
65
- none: false
66
58
  requirements:
67
- - - ! '>='
59
+ - - '>='
68
60
  - !ruby/object:Gem::Version
69
61
  version: '0'
70
62
  type: :development
71
63
  prerelease: false
72
64
  version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
65
  requirements:
75
- - - ! '>='
66
+ - - '>='
76
67
  - !ruby/object:Gem::Version
77
68
  version: '0'
78
69
  - !ruby/object:Gem::Dependency
79
70
  name: clean_test
80
71
  requirement: !ruby/object:Gem::Requirement
81
- none: false
82
72
  requirements:
83
- - - ! '>='
73
+ - - '>='
84
74
  - !ruby/object:Gem::Version
85
75
  version: '0'
86
76
  type: :development
87
77
  prerelease: false
88
78
  version_requirements: !ruby/object:Gem::Requirement
89
- none: false
90
79
  requirements:
91
- - - ! '>='
80
+ - - '>='
92
81
  - !ruby/object:Gem::Version
93
82
  version: '0'
94
83
  - !ruby/object:Gem::Dependency
95
84
  name: gli
96
85
  requirement: !ruby/object:Gem::Requirement
97
- none: false
98
86
  requirements:
99
- - - '='
87
+ - - ~>
100
88
  - !ruby/object:Gem::Version
101
- version: 2.0.0
89
+ version: '2'
102
90
  type: :runtime
103
91
  prerelease: false
104
92
  version_requirements: !ruby/object:Gem::Requirement
105
- none: false
106
93
  requirements:
107
- - - '='
94
+ - - ~>
108
95
  - !ruby/object:Gem::Version
109
- version: 2.0.0
96
+ version: '2'
110
97
  - !ruby/object:Gem::Dependency
111
98
  name: sass
112
99
  requirement: !ruby/object:Gem::Requirement
113
- none: false
114
100
  requirements:
115
- - - ! '>='
101
+ - - '>='
116
102
  - !ruby/object:Gem::Version
117
103
  version: '0'
118
104
  type: :runtime
119
105
  prerelease: false
120
106
  version_requirements: !ruby/object:Gem::Requirement
121
- none: false
122
107
  requirements:
123
- - - ! '>='
108
+ - - '>='
124
109
  - !ruby/object:Gem::Version
125
110
  version: '0'
126
111
  description: Make aweomse technical presentation with big fonts that size to fit,
127
112
  and awesome syntax highlighting
128
113
  email: davetron5000@gmail.com
129
114
  executables:
130
- - !binary |-
131
- dHJpY2tzdGVy
115
+ - trickster
132
116
  extensions: []
133
117
  extra_rdoc_files:
134
118
  - README.rdoc
135
119
  - trickster.rdoc
136
120
  files:
137
- - !binary |-
138
- LmdpdGlnbm9yZQ==
139
- - !binary |-
140
- LnJ2bXJj
141
- - !binary |-
142
- R2VtZmlsZQ==
143
- - !binary |-
144
- UkVBRE1FLnJkb2M=
145
- - !binary |-
146
- UmFrZWZpbGU=
147
- - !binary |-
148
- VE9ETw==
149
- - !binary |-
150
- YmluL3RyaWNrc3Rlcg==
151
- - !binary |-
152
- Y3NzL25vcm1hbGl6ZS5jc3M=
153
- - !binary |-
154
- Y3NzL3N0eWxlcy5jc3M=
155
- - !binary |-
156
- Y3NzL3RoZW1lcy1vcmlnL2FydGEuY3Nz
157
- - !binary |-
158
- Y3NzL3RoZW1lcy1vcmlnL2FzY2V0aWMuY3Nz
159
- - !binary |-
160
- Y3NzL3RoZW1lcy1vcmlnL2Jyb3duX3BhcGVyLmNzcw==
161
- - !binary |-
162
- Y3NzL3RoZW1lcy1vcmlnL2Jyb3duX3BhcGVyc3EucG5n
163
- - !binary |-
164
- Y3NzL3RoZW1lcy1vcmlnL2RhcmsuY3Nz
165
- - !binary |-
166
- Y3NzL3RoZW1lcy1vcmlnL2RlZmF1bHQuY3Nz
167
- - !binary |-
168
- Y3NzL3RoZW1lcy1vcmlnL2Zhci5jc3M=
169
- - !binary |-
170
- Y3NzL3RoZW1lcy1vcmlnL2dpdGh1Yi5jc3M=
171
- - !binary |-
172
- Y3NzL3RoZW1lcy1vcmlnL2dvb2dsZWNvZGUuY3Nz
173
- - !binary |-
174
- Y3NzL3RoZW1lcy1vcmlnL2lkZWEuY3Nz
175
- - !binary |-
176
- Y3NzL3RoZW1lcy1vcmlnL2lyX2JsYWNrLmNzcw==
177
- - !binary |-
178
- Y3NzL3RoZW1lcy1vcmlnL21hZ3VsYS5jc3M=
179
- - !binary |-
180
- Y3NzL3RoZW1lcy1vcmlnL21vbm9rYWkuY3Nz
181
- - !binary |-
182
- Y3NzL3RoZW1lcy1vcmlnL3Bvam9hcXVlLmNzcw==
183
- - !binary |-
184
- Y3NzL3RoZW1lcy1vcmlnL3Bvam9hcXVlLmpwZw==
185
- - !binary |-
186
- Y3NzL3RoZW1lcy1vcmlnL3JhaW5ib3cuY3Nz
187
- - !binary |-
188
- Y3NzL3RoZW1lcy1vcmlnL3NjaG9vbF9ib29rLmNzcw==
189
- - !binary |-
190
- Y3NzL3RoZW1lcy1vcmlnL3NjaG9vbF9ib29rLnBuZw==
191
- - !binary |-
192
- Y3NzL3RoZW1lcy1vcmlnL3NvbGFyaXplZF9kYXJrLmNzcw==
193
- - !binary |-
194
- Y3NzL3RoZW1lcy1vcmlnL3NvbGFyaXplZF9saWdodC5jc3M=
195
- - !binary |-
196
- Y3NzL3RoZW1lcy1vcmlnL3N1bmJ1cnN0LmNzcw==
197
- - !binary |-
198
- Y3NzL3RoZW1lcy1vcmlnL3RvbW9ycm93LW5pZ2h0LWJsdWUuY3Nz
199
- - !binary |-
200
- Y3NzL3RoZW1lcy1vcmlnL3RvbW9ycm93LW5pZ2h0LWJyaWdodC5jc3M=
201
- - !binary |-
202
- Y3NzL3RoZW1lcy1vcmlnL3RvbW9ycm93LW5pZ2h0LWVpZ2h0aWVzLmNzcw==
203
- - !binary |-
204
- Y3NzL3RoZW1lcy1vcmlnL3RvbW9ycm93LW5pZ2h0LmNzcw==
205
- - !binary |-
206
- Y3NzL3RoZW1lcy1vcmlnL3RvbW9ycm93LmNzcw==
207
- - !binary |-
208
- Y3NzL3RoZW1lcy1vcmlnL3ZzLmNzcw==
209
- - !binary |-
210
- Y3NzL3RoZW1lcy1vcmlnL3hjb2RlLmNzcw==
211
- - !binary |-
212
- Y3NzL3RoZW1lcy1vcmlnL3plbmJ1cm4uY3Nz
213
- - !binary |-
214
- Y3NzL3RoZW1lcy9hcnRhLmNzcw==
215
- - !binary |-
216
- Y3NzL3RoZW1lcy9hc2NldGljLmNzcw==
217
- - !binary |-
218
- Y3NzL3RoZW1lcy9icm93bl9wYXBlci5jc3M=
219
- - !binary |-
220
- Y3NzL3RoZW1lcy9jdXN0b20uc2Nzcw==
221
- - !binary |-
222
- Y3NzL3RoZW1lcy9kYXJrLmNzcw==
223
- - !binary |-
224
- Y3NzL3RoZW1lcy9kZWZhdWx0LmNzcw==
225
- - !binary |-
226
- Y3NzL3RoZW1lcy9mYXIuY3Nz
227
- - !binary |-
228
- Y3NzL3RoZW1lcy9naXRodWIuY3Nz
229
- - !binary |-
230
- Y3NzL3RoZW1lcy9nb29nbGVjb2RlLmNzcw==
231
- - !binary |-
232
- Y3NzL3RoZW1lcy9pZGVhLmNzcw==
233
- - !binary |-
234
- Y3NzL3RoZW1lcy9pcl9ibGFjay5jc3M=
235
- - !binary |-
236
- Y3NzL3RoZW1lcy9tYWd1bGEuY3Nz
237
- - !binary |-
238
- Y3NzL3RoZW1lcy9tb25va2FpLmNzcw==
239
- - !binary |-
240
- Y3NzL3RoZW1lcy9wb2pvYXF1ZS5jc3M=
241
- - !binary |-
242
- Y3NzL3RoZW1lcy9yYWluYm93LmNzcw==
243
- - !binary |-
244
- Y3NzL3RoZW1lcy9zY2hvb2xfYm9vay5jc3M=
245
- - !binary |-
246
- Y3NzL3RoZW1lcy9zb2xhcml6ZWRfZGFyay5jc3M=
247
- - !binary |-
248
- Y3NzL3RoZW1lcy9zb2xhcml6ZWRfbGlnaHQuY3Nz
249
- - !binary |-
250
- Y3NzL3RoZW1lcy9zdW5idXJzdC5jc3M=
251
- - !binary |-
252
- Y3NzL3RoZW1lcy90b21vcnJvdy1uaWdodC1ibHVlLmNzcw==
253
- - !binary |-
254
- Y3NzL3RoZW1lcy90b21vcnJvdy1uaWdodC1icmlnaHQuY3Nz
255
- - !binary |-
256
- Y3NzL3RoZW1lcy90b21vcnJvdy1uaWdodC1laWdodGllcy5jc3M=
257
- - !binary |-
258
- Y3NzL3RoZW1lcy90b21vcnJvdy1uaWdodC5jc3M=
259
- - !binary |-
260
- Y3NzL3RoZW1lcy90b21vcnJvdy5jc3M=
261
- - !binary |-
262
- Y3NzL3RoZW1lcy92cy5jc3M=
263
- - !binary |-
264
- Y3NzL3RoZW1lcy94Y29kZS5jc3M=
265
- - !binary |-
266
- Y3NzL3RoZW1lcy96ZW5idXJuLmNzcw==
267
- - !binary |-
268
- ZXJiL2luZGV4Lmh0bWwuZXJi
269
- - !binary |-
270
- ZmVhdHVyZXMvYnVpbGQuZmVhdHVyZQ==
271
- - !binary |-
272
- ZmVhdHVyZXMvaW5pdC5mZWF0dXJl
273
- - !binary |-
274
- ZmVhdHVyZXMvc3RlcF9kZWZpbml0aW9ucy90cmlja3N0ZXJfc3RlcHMucmI=
275
- - !binary |-
276
- ZmVhdHVyZXMvc3VwcG9ydC9lbnYucmI=
277
- - !binary |-
278
- ZmVhdHVyZXMvdXBkYXRlLmZlYXR1cmU=
279
- - !binary |-
280
- anMvYnVsbGV0cy5qcw==
281
- - !binary |-
282
- anMvY3VzdG9tLmpz
283
- - !binary |-
284
- anMvbGliL2hpZ2hsaWdodC03LjEubWluLmpz
285
- - !binary |-
286
- anMvbGliL2pxdWVyeS0xLjguMC5taW4uanM=
287
- - !binary |-
288
- anMvbGliL2pxdWVyeXR5cGV3cml0ZXIuanM=
289
- - !binary |-
290
- anMvbGliL3VuZGVyc2NvcmUtMS4zLjMubWluLmpz
291
- - !binary |-
292
- anMvc2l6ZXIuanM=
293
- - !binary |-
294
- anMvdHJpY2tzdGVyLmpz
295
- - !binary |-
296
- anMvdXRpbHMuanM=
297
- - !binary |-
298
- bGliL3RyaWNrc3Rlci5yYg==
299
- - !binary |-
300
- bGliL3RyaWNrc3Rlci9jb3BpZXIucmI=
301
- - !binary |-
302
- bGliL3RyaWNrc3Rlci9maWxlX2NvcGllci5yYg==
303
- - !binary |-
304
- bGliL3RyaWNrc3Rlci9yZW5kZXJlci9idWxsZXRzX3JlbmRlcmVyLnJi
305
- - !binary |-
306
- bGliL3RyaWNrc3Rlci9yZW5kZXJlci9jb2RlX3JlbmRlcmVyLnJi
307
- - !binary |-
308
- bGliL3RyaWNrc3Rlci9yZW5kZXJlci9jb21tYW5kbGluZV9yZW5kZXJlci5y
309
- Yg==
310
- - !binary |-
311
- bGliL3RyaWNrc3Rlci9yZW5kZXJlci9pbWFnZV9yZW5kZXJlci5yYg==
312
- - !binary |-
313
- bGliL3RyaWNrc3Rlci9yZW5kZXJlci9ub3JtYWxfcmVuZGVyZXIucmI=
314
- - !binary |-
315
- bGliL3RyaWNrc3Rlci9zbGlkZV9wYXJzZXIucmI=
316
- - !binary |-
317
- bGliL3RyaWNrc3Rlci9zbGlkZV9yZW5kZXJlci5yYg==
318
- - !binary |-
319
- bGliL3RyaWNrc3Rlci90aGVtZV9jb3BpZXIucmI=
320
- - !binary |-
321
- bGliL3RyaWNrc3Rlci92ZXJzaW9uLnJi
322
- - !binary |-
323
- bm90ZXMudHh0Lm1k
324
- - !binary |-
325
- dGVzdC9qYXNtaW5lLnltbA==
326
- - !binary |-
327
- dGVzdC9qcy9idWxsZXRzX3NwZWMuanM=
328
- - !binary |-
329
- dGVzdC9qcy9zaXplcl9zcGVjLmpz
330
- - !binary |-
331
- dGVzdC9qcy90cmlja3N0ZXJfc3BlYy5qcw==
332
- - !binary |-
333
- dGVzdC9qcy91dGlsc19zcGVjLmpz
334
- - !binary |-
335
- dGVzdC9zbGlkZV9wYXJzZXJfdGVzdC5yYg==
336
- - !binary |-
337
- dGVzdC9zbGlkZV9yZW5kZXJlcl90ZXN0LnJi
338
- - !binary |-
339
- dGVzdC9zbGlkZXNob3ctd2l0aC1zYXNzL2Nzcy9oaWdobGlnaHQtc29sYXJp
340
- emVkX2xpZ2h0Lm1pbi5jc3M=
341
- - !binary |-
342
- dGVzdC9zbGlkZXNob3ctd2l0aC1zYXNzL2Nzcy9ub3JtYWxpemUuY3Nz
343
- - !binary |-
344
- dGVzdC9zbGlkZXNob3ctd2l0aC1zYXNzL2Nzcy9zdHlsZXMuc2Nzcw==
345
- - !binary |-
346
- dGVzdC9zbGlkZXNob3ctd2l0aC1zYXNzL2pzL2J1bGxldHMuanM=
347
- - !binary |-
348
- dGVzdC9zbGlkZXNob3ctd2l0aC1zYXNzL2pzL2N1c3RvbS5qcw==
349
- - !binary |-
350
- dGVzdC9zbGlkZXNob3ctd2l0aC1zYXNzL2pzL2xpYi9oaWdobGlnaHQtNy4x
351
- Lm1pbi5qcw==
352
- - !binary |-
353
- dGVzdC9zbGlkZXNob3ctd2l0aC1zYXNzL2pzL2xpYi9qcXVlcnktMS44LjAu
354
- bWluLmpz
355
- - !binary |-
356
- dGVzdC9zbGlkZXNob3ctd2l0aC1zYXNzL2pzL2xpYi9qcXVlcnl0eXBld3Jp
357
- dGVyLmpz
358
- - !binary |-
359
- dGVzdC9zbGlkZXNob3ctd2l0aC1zYXNzL2pzL2xpYi91bmRlcnNjb3JlLTEu
360
- My4zLm1pbi5qcw==
361
- - !binary |-
362
- dGVzdC9zbGlkZXNob3ctd2l0aC1zYXNzL2pzL3NpemVyLmpz
363
- - !binary |-
364
- dGVzdC9zbGlkZXNob3ctd2l0aC1zYXNzL2pzL3RyaWNrc3Rlci5qcw==
365
- - !binary |-
366
- dGVzdC9zbGlkZXNob3ctd2l0aC1zYXNzL2pzL3V0aWxzLmpz
367
- - !binary |-
368
- dGVzdC9zbGlkZXNob3ctd2l0aC1zYXNzL3J1ZHkucG5n
369
- - !binary |-
370
- dGVzdC9zbGlkZXNob3ctd2l0aC1zYXNzL3NsaWRlcw==
371
- - !binary |-
372
- dGVzdC9zbGlkZXNob3cvY3NzL2hpZ2hsaWdodC1zb2xhcml6ZWRfbGlnaHQu
373
- bWluLmNzcw==
374
- - !binary |-
375
- dGVzdC9zbGlkZXNob3cvY3NzL25vcm1hbGl6ZS5jc3M=
376
- - !binary |-
377
- dGVzdC9zbGlkZXNob3cvY3NzL3N0eWxlcy5jc3M=
378
- - !binary |-
379
- dGVzdC9zbGlkZXNob3cvY3NzL3RoZW1lLmNzcw==
380
- - !binary |-
381
- dGVzdC9zbGlkZXNob3cvaW5kZXguaHRtbA==
382
- - !binary |-
383
- dGVzdC9zbGlkZXNob3cvanMvYnVsbGV0cy5qcw==
384
- - !binary |-
385
- dGVzdC9zbGlkZXNob3cvanMvY3VzdG9tLmpz
386
- - !binary |-
387
- dGVzdC9zbGlkZXNob3cvanMvbGliL2hpZ2hsaWdodC03LjEubWluLmpz
388
- - !binary |-
389
- dGVzdC9zbGlkZXNob3cvanMvbGliL2pxdWVyeS0xLjguMC5taW4uanM=
390
- - !binary |-
391
- dGVzdC9zbGlkZXNob3cvanMvbGliL2pxdWVyeXR5cGV3cml0ZXIuanM=
392
- - !binary |-
393
- dGVzdC9zbGlkZXNob3cvanMvbGliL3VuZGVyc2NvcmUtMS4zLjMubWluLmpz
394
- - !binary |-
395
- dGVzdC9zbGlkZXNob3cvanMvc2l6ZXIuanM=
396
- - !binary |-
397
- dGVzdC9zbGlkZXNob3cvanMvdHJpY2tzdGVyLmpz
398
- - !binary |-
399
- dGVzdC9zbGlkZXNob3cvanMvdXRpbHMuanM=
400
- - !binary |-
401
- dGVzdC9zbGlkZXNob3cvcnVkeS5wbmc=
402
- - !binary |-
403
- dGVzdC9zbGlkZXNob3cvc2xpZGVz
404
- - !binary |-
405
- dGVzdC90ZXN0X2hlbHBlci5yYg==
406
- - !binary |-
407
- dHJpY2tzdGVyLmdlbXNwZWM=
408
- - !binary |-
409
- dHJpY2tzdGVyLnJkb2M=
121
+ - .gitignore
122
+ - .ruby-gemset
123
+ - .ruby-version
124
+ - Gemfile
125
+ - README.rdoc
126
+ - Rakefile
127
+ - TODO
128
+ - bin/trickster
129
+ - css/normalize.css
130
+ - css/styles.css
131
+ - css/themes-orig/arta.css
132
+ - css/themes-orig/ascetic.css
133
+ - css/themes-orig/brown_paper.css
134
+ - css/themes-orig/brown_papersq.png
135
+ - css/themes-orig/dark.css
136
+ - css/themes-orig/default.css
137
+ - css/themes-orig/far.css
138
+ - css/themes-orig/github.css
139
+ - css/themes-orig/googlecode.css
140
+ - css/themes-orig/idea.css
141
+ - css/themes-orig/ir_black.css
142
+ - css/themes-orig/magula.css
143
+ - css/themes-orig/monokai.css
144
+ - css/themes-orig/pojoaque.css
145
+ - css/themes-orig/pojoaque.jpg
146
+ - css/themes-orig/rainbow.css
147
+ - css/themes-orig/school_book.css
148
+ - css/themes-orig/school_book.png
149
+ - css/themes-orig/solarized_dark.css
150
+ - css/themes-orig/solarized_light.css
151
+ - css/themes-orig/sunburst.css
152
+ - css/themes-orig/tomorrow-night-blue.css
153
+ - css/themes-orig/tomorrow-night-bright.css
154
+ - css/themes-orig/tomorrow-night-eighties.css
155
+ - css/themes-orig/tomorrow-night.css
156
+ - css/themes-orig/tomorrow.css
157
+ - css/themes-orig/vs.css
158
+ - css/themes-orig/xcode.css
159
+ - css/themes-orig/zenburn.css
160
+ - css/themes/arta.css
161
+ - css/themes/ascetic.css
162
+ - css/themes/brown_paper.css
163
+ - css/themes/custom.scss
164
+ - css/themes/dark.css
165
+ - css/themes/default.css
166
+ - css/themes/far.css
167
+ - css/themes/github.css
168
+ - css/themes/googlecode.css
169
+ - css/themes/idea.css
170
+ - css/themes/ir_black.css
171
+ - css/themes/magula.css
172
+ - css/themes/monokai.css
173
+ - css/themes/pojoaque.css
174
+ - css/themes/rainbow.css
175
+ - css/themes/school_book.css
176
+ - css/themes/solarized_dark.css
177
+ - css/themes/solarized_light.css
178
+ - css/themes/sunburst.css
179
+ - css/themes/tomorrow-night-blue.css
180
+ - css/themes/tomorrow-night-bright.css
181
+ - css/themes/tomorrow-night-eighties.css
182
+ - css/themes/tomorrow-night.css
183
+ - css/themes/tomorrow.css
184
+ - css/themes/vs.css
185
+ - css/themes/xcode.css
186
+ - css/themes/zenburn.css
187
+ - erb/index.html.erb
188
+ - features/build.feature
189
+ - features/init.feature
190
+ - features/step_definitions/trickster_steps.rb
191
+ - features/support/env.rb
192
+ - features/update.feature
193
+ - js/bullets.js
194
+ - js/custom.js
195
+ - js/lib/highlight-7.1.min.js
196
+ - js/lib/jquery-1.8.0.min.js
197
+ - js/lib/jquery.touchSwipe.min.js
198
+ - js/lib/jquerytypewriter.js
199
+ - js/lib/underscore-1.3.3.min.js
200
+ - js/sizer.js
201
+ - js/timer.js
202
+ - js/trickster.js
203
+ - js/utils.js
204
+ - lib/trickster.rb
205
+ - lib/trickster/copier.rb
206
+ - lib/trickster/file_copier.rb
207
+ - lib/trickster/renderer/bullets_renderer.rb
208
+ - lib/trickster/renderer/code_renderer.rb
209
+ - lib/trickster/renderer/commandline_renderer.rb
210
+ - lib/trickster/renderer/image_renderer.rb
211
+ - lib/trickster/renderer/normal_renderer.rb
212
+ - lib/trickster/slide_parser.rb
213
+ - lib/trickster/slide_renderer.rb
214
+ - lib/trickster/theme_copier.rb
215
+ - lib/trickster/version.rb
216
+ - notes.txt.md
217
+ - test/jasmine.yml
218
+ - test/js/bullets_spec.js
219
+ - test/js/sizer_spec.js
220
+ - test/js/trickster_spec.js
221
+ - test/js/utils_spec.js
222
+ - test/slide_parser_test.rb
223
+ - test/slide_renderer_test.rb
224
+ - test/slideshow-with-sass/css/highlight-solarized_light.min.css
225
+ - test/slideshow-with-sass/css/normalize.css
226
+ - test/slideshow-with-sass/css/styles.scss
227
+ - test/slideshow-with-sass/js/bullets.js
228
+ - test/slideshow-with-sass/js/custom.js
229
+ - test/slideshow-with-sass/js/lib/highlight-7.1.min.js
230
+ - test/slideshow-with-sass/js/lib/jquery-1.8.0.min.js
231
+ - test/slideshow-with-sass/js/lib/jquerytypewriter.js
232
+ - test/slideshow-with-sass/js/lib/underscore-1.3.3.min.js
233
+ - test/slideshow-with-sass/js/sizer.js
234
+ - test/slideshow-with-sass/js/trickster.js
235
+ - test/slideshow-with-sass/js/utils.js
236
+ - test/slideshow-with-sass/rudy.png
237
+ - test/slideshow-with-sass/slides
238
+ - test/slideshow/css/highlight-solarized_light.min.css
239
+ - test/slideshow/css/normalize.css
240
+ - test/slideshow/css/styles.css
241
+ - test/slideshow/css/theme.css
242
+ - test/slideshow/index.html
243
+ - test/slideshow/js/bullets.js
244
+ - test/slideshow/js/custom.js
245
+ - test/slideshow/js/lib/highlight-7.1.min.js
246
+ - test/slideshow/js/lib/jquery-1.8.0.min.js
247
+ - test/slideshow/js/lib/jquerytypewriter.js
248
+ - test/slideshow/js/lib/underscore-1.3.3.min.js
249
+ - test/slideshow/js/sizer.js
250
+ - test/slideshow/js/trickster.js
251
+ - test/slideshow/js/utils.js
252
+ - test/slideshow/rudy.png
253
+ - test/slideshow/slides
254
+ - test/test_helper.rb
255
+ - test_slides
256
+ - trickster.gemspec
257
+ - trickster.rdoc
410
258
  homepage: http://your.website.com
411
259
  licenses: []
260
+ metadata: {}
412
261
  post_install_message:
413
262
  rdoc_options:
414
263
  - --title
@@ -419,119 +268,62 @@ rdoc_options:
419
268
  require_paths:
420
269
  - lib
421
270
  required_ruby_version: !ruby/object:Gem::Requirement
422
- none: false
423
271
  requirements:
424
- - - ! '>='
272
+ - - '>='
425
273
  - !ruby/object:Gem::Version
426
274
  version: '0'
427
- segments:
428
- - 0
429
- hash: 4110386478035712256
430
275
  required_rubygems_version: !ruby/object:Gem::Requirement
431
- none: false
432
276
  requirements:
433
- - - ! '>='
277
+ - - '>='
434
278
  - !ruby/object:Gem::Version
435
279
  version: '0'
436
- segments:
437
- - 0
438
- hash: 4110386478035712256
439
280
  requirements: []
440
281
  rubyforge_project:
441
- rubygems_version: 1.8.25
282
+ rubygems_version: 2.0.3
442
283
  signing_key:
443
- specification_version: 3
284
+ specification_version: 4
444
285
  summary: Generate and manage in-browser presentation-slides
445
286
  test_files:
446
- - !binary |-
447
- ZmVhdHVyZXMvYnVpbGQuZmVhdHVyZQ==
448
- - !binary |-
449
- ZmVhdHVyZXMvaW5pdC5mZWF0dXJl
450
- - !binary |-
451
- ZmVhdHVyZXMvc3RlcF9kZWZpbml0aW9ucy90cmlja3N0ZXJfc3RlcHMucmI=
452
- - !binary |-
453
- ZmVhdHVyZXMvc3VwcG9ydC9lbnYucmI=
454
- - !binary |-
455
- ZmVhdHVyZXMvdXBkYXRlLmZlYXR1cmU=
456
- - !binary |-
457
- dGVzdC9qYXNtaW5lLnltbA==
458
- - !binary |-
459
- dGVzdC9qcy9idWxsZXRzX3NwZWMuanM=
460
- - !binary |-
461
- dGVzdC9qcy9zaXplcl9zcGVjLmpz
462
- - !binary |-
463
- dGVzdC9qcy90cmlja3N0ZXJfc3BlYy5qcw==
464
- - !binary |-
465
- dGVzdC9qcy91dGlsc19zcGVjLmpz
466
- - !binary |-
467
- dGVzdC9zbGlkZV9wYXJzZXJfdGVzdC5yYg==
468
- - !binary |-
469
- dGVzdC9zbGlkZV9yZW5kZXJlcl90ZXN0LnJi
470
- - !binary |-
471
- dGVzdC9zbGlkZXNob3ctd2l0aC1zYXNzL2Nzcy9oaWdobGlnaHQtc29sYXJp
472
- emVkX2xpZ2h0Lm1pbi5jc3M=
473
- - !binary |-
474
- dGVzdC9zbGlkZXNob3ctd2l0aC1zYXNzL2Nzcy9ub3JtYWxpemUuY3Nz
475
- - !binary |-
476
- dGVzdC9zbGlkZXNob3ctd2l0aC1zYXNzL2Nzcy9zdHlsZXMuc2Nzcw==
477
- - !binary |-
478
- dGVzdC9zbGlkZXNob3ctd2l0aC1zYXNzL2pzL2J1bGxldHMuanM=
479
- - !binary |-
480
- dGVzdC9zbGlkZXNob3ctd2l0aC1zYXNzL2pzL2N1c3RvbS5qcw==
481
- - !binary |-
482
- dGVzdC9zbGlkZXNob3ctd2l0aC1zYXNzL2pzL2xpYi9oaWdobGlnaHQtNy4x
483
- Lm1pbi5qcw==
484
- - !binary |-
485
- dGVzdC9zbGlkZXNob3ctd2l0aC1zYXNzL2pzL2xpYi9qcXVlcnktMS44LjAu
486
- bWluLmpz
487
- - !binary |-
488
- dGVzdC9zbGlkZXNob3ctd2l0aC1zYXNzL2pzL2xpYi9qcXVlcnl0eXBld3Jp
489
- dGVyLmpz
490
- - !binary |-
491
- dGVzdC9zbGlkZXNob3ctd2l0aC1zYXNzL2pzL2xpYi91bmRlcnNjb3JlLTEu
492
- My4zLm1pbi5qcw==
493
- - !binary |-
494
- dGVzdC9zbGlkZXNob3ctd2l0aC1zYXNzL2pzL3NpemVyLmpz
495
- - !binary |-
496
- dGVzdC9zbGlkZXNob3ctd2l0aC1zYXNzL2pzL3RyaWNrc3Rlci5qcw==
497
- - !binary |-
498
- dGVzdC9zbGlkZXNob3ctd2l0aC1zYXNzL2pzL3V0aWxzLmpz
499
- - !binary |-
500
- dGVzdC9zbGlkZXNob3ctd2l0aC1zYXNzL3J1ZHkucG5n
501
- - !binary |-
502
- dGVzdC9zbGlkZXNob3ctd2l0aC1zYXNzL3NsaWRlcw==
503
- - !binary |-
504
- dGVzdC9zbGlkZXNob3cvY3NzL2hpZ2hsaWdodC1zb2xhcml6ZWRfbGlnaHQu
505
- bWluLmNzcw==
506
- - !binary |-
507
- dGVzdC9zbGlkZXNob3cvY3NzL25vcm1hbGl6ZS5jc3M=
508
- - !binary |-
509
- dGVzdC9zbGlkZXNob3cvY3NzL3N0eWxlcy5jc3M=
510
- - !binary |-
511
- dGVzdC9zbGlkZXNob3cvY3NzL3RoZW1lLmNzcw==
512
- - !binary |-
513
- dGVzdC9zbGlkZXNob3cvaW5kZXguaHRtbA==
514
- - !binary |-
515
- dGVzdC9zbGlkZXNob3cvanMvYnVsbGV0cy5qcw==
516
- - !binary |-
517
- dGVzdC9zbGlkZXNob3cvanMvY3VzdG9tLmpz
518
- - !binary |-
519
- dGVzdC9zbGlkZXNob3cvanMvbGliL2hpZ2hsaWdodC03LjEubWluLmpz
520
- - !binary |-
521
- dGVzdC9zbGlkZXNob3cvanMvbGliL2pxdWVyeS0xLjguMC5taW4uanM=
522
- - !binary |-
523
- dGVzdC9zbGlkZXNob3cvanMvbGliL2pxdWVyeXR5cGV3cml0ZXIuanM=
524
- - !binary |-
525
- dGVzdC9zbGlkZXNob3cvanMvbGliL3VuZGVyc2NvcmUtMS4zLjMubWluLmpz
526
- - !binary |-
527
- dGVzdC9zbGlkZXNob3cvanMvc2l6ZXIuanM=
528
- - !binary |-
529
- dGVzdC9zbGlkZXNob3cvanMvdHJpY2tzdGVyLmpz
530
- - !binary |-
531
- dGVzdC9zbGlkZXNob3cvanMvdXRpbHMuanM=
532
- - !binary |-
533
- dGVzdC9zbGlkZXNob3cvcnVkeS5wbmc=
534
- - !binary |-
535
- dGVzdC9zbGlkZXNob3cvc2xpZGVz
536
- - !binary |-
537
- dGVzdC90ZXN0X2hlbHBlci5yYg==
287
+ - features/build.feature
288
+ - features/init.feature
289
+ - features/step_definitions/trickster_steps.rb
290
+ - features/support/env.rb
291
+ - features/update.feature
292
+ - test/jasmine.yml
293
+ - test/js/bullets_spec.js
294
+ - test/js/sizer_spec.js
295
+ - test/js/trickster_spec.js
296
+ - test/js/utils_spec.js
297
+ - test/slide_parser_test.rb
298
+ - test/slide_renderer_test.rb
299
+ - test/slideshow-with-sass/css/highlight-solarized_light.min.css
300
+ - test/slideshow-with-sass/css/normalize.css
301
+ - test/slideshow-with-sass/css/styles.scss
302
+ - test/slideshow-with-sass/js/bullets.js
303
+ - test/slideshow-with-sass/js/custom.js
304
+ - test/slideshow-with-sass/js/lib/highlight-7.1.min.js
305
+ - test/slideshow-with-sass/js/lib/jquery-1.8.0.min.js
306
+ - test/slideshow-with-sass/js/lib/jquerytypewriter.js
307
+ - test/slideshow-with-sass/js/lib/underscore-1.3.3.min.js
308
+ - test/slideshow-with-sass/js/sizer.js
309
+ - test/slideshow-with-sass/js/trickster.js
310
+ - test/slideshow-with-sass/js/utils.js
311
+ - test/slideshow-with-sass/rudy.png
312
+ - test/slideshow-with-sass/slides
313
+ - test/slideshow/css/highlight-solarized_light.min.css
314
+ - test/slideshow/css/normalize.css
315
+ - test/slideshow/css/styles.css
316
+ - test/slideshow/css/theme.css
317
+ - test/slideshow/index.html
318
+ - test/slideshow/js/bullets.js
319
+ - test/slideshow/js/custom.js
320
+ - test/slideshow/js/lib/highlight-7.1.min.js
321
+ - test/slideshow/js/lib/jquery-1.8.0.min.js
322
+ - test/slideshow/js/lib/jquerytypewriter.js
323
+ - test/slideshow/js/lib/underscore-1.3.3.min.js
324
+ - test/slideshow/js/sizer.js
325
+ - test/slideshow/js/trickster.js
326
+ - test/slideshow/js/utils.js
327
+ - test/slideshow/rudy.png
328
+ - test/slideshow/slides
329
+ - test/test_helper.rb
data/.rvmrc DELETED
@@ -1 +0,0 @@
1
- rvm use 1.9.3@trickster --create