showoff-alexch 0.7.0.1
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.
- data/LICENSE +20 -0
- data/README.rdoc +558 -0
- data/Rakefile +27 -0
- data/bin/showoff +197 -0
- data/lib/commandline_parser.rb +67 -0
- data/lib/showoff.rb +510 -0
- data/lib/showoff_utils.rb +344 -0
- data/public/css/960.css +653 -0
- data/public/css/fg.menu.css +114 -0
- data/public/css/onepage.css +60 -0
- data/public/css/pdf.css +12 -0
- data/public/css/presenter.css +76 -0
- data/public/css/reset.css +53 -0
- data/public/css/sh_style.css +66 -0
- data/public/css/showoff.css +399 -0
- data/public/css/spinner_bar.gif +0 -0
- data/public/css/theme/images/ui-bg_diagonals-small_100_f0efea_40x40.png +0 -0
- data/public/css/theme/images/ui-bg_flat_35_f0f0f0_40x100.png +0 -0
- data/public/css/theme/images/ui-bg_glass_55_fcf0ba_1x400.png +0 -0
- data/public/css/theme/images/ui-bg_glow-ball_25_2e2e28_600x600.png +0 -0
- data/public/css/theme/images/ui-bg_highlight-soft_100_f0efea_1x100.png +0 -0
- data/public/css/theme/images/ui-bg_highlight-soft_25_327E04_1x100.png +0 -0
- data/public/css/theme/images/ui-bg_highlight-soft_25_5A9D1A_1x100.png +0 -0
- data/public/css/theme/images/ui-bg_highlight-soft_95_ffedad_1x100.png +0 -0
- data/public/css/theme/images/ui-bg_inset-soft_22_3b3b35_1x100.png +0 -0
- data/public/css/theme/images/ui-icons_808080_256x240.png +0 -0
- data/public/css/theme/images/ui-icons_8DC262_256x240.png +0 -0
- data/public/css/theme/images/ui-icons_cd0a0a_256x240.png +0 -0
- data/public/css/theme/images/ui-icons_e7e6e4_256x240.png +0 -0
- data/public/css/theme/images/ui-icons_eeeeee_256x240.png +0 -0
- data/public/css/theme/images/ui-icons_ffffff_256x240.png +0 -0
- data/public/css/theme/ui.accordion.css +9 -0
- data/public/css/theme/ui.all.css +2 -0
- data/public/css/theme/ui.base.css +9 -0
- data/public/css/theme/ui.core.css +37 -0
- data/public/css/theme/ui.datepicker.css +62 -0
- data/public/css/theme/ui.dialog.css +13 -0
- data/public/css/theme/ui.progressbar.css +4 -0
- data/public/css/theme/ui.resizable.css +13 -0
- data/public/css/theme/ui.slider.css +17 -0
- data/public/css/theme/ui.tabs.css +9 -0
- data/public/css/theme/ui.theme.css +245 -0
- data/public/favicon.ico +0 -0
- data/public/js/coffee-script.js +8 -0
- data/public/js/core.js +79 -0
- data/public/js/fg.menu.js +645 -0
- data/public/js/jTypeWriter.js +26 -0
- data/public/js/jquery-1.4.2.min.js +154 -0
- data/public/js/jquery-print.js +109 -0
- data/public/js/jquery.batchImageLoad.js +56 -0
- data/public/js/jquery.cookie.js +96 -0
- data/public/js/jquery.cycle.all.js +1284 -0
- data/public/js/jquery.doubletap-0.1.js +105 -0
- data/public/js/jquery.uuid.js +24 -0
- data/public/js/jquery.ws-0.3pre.js +201 -0
- data/public/js/onepage.js +5 -0
- data/public/js/presenter.js +193 -0
- data/public/js/sh_lang/sh_bison.min.js +1 -0
- data/public/js/sh_lang/sh_c.min.js +1 -0
- data/public/js/sh_lang/sh_caml.min.js +1 -0
- data/public/js/sh_lang/sh_changelog.min.js +1 -0
- data/public/js/sh_lang/sh_coffeescript.min.js +1 -0
- data/public/js/sh_lang/sh_cpp.min.js +1 -0
- data/public/js/sh_lang/sh_csharp.min.js +1 -0
- data/public/js/sh_lang/sh_css.min.js +1 -0
- data/public/js/sh_lang/sh_cucumber.min.js +2 -0
- data/public/js/sh_lang/sh_desktop.min.js +1 -0
- data/public/js/sh_lang/sh_diff.min.js +1 -0
- data/public/js/sh_lang/sh_erlang.min.js +1 -0
- data/public/js/sh_lang/sh_flex.min.js +1 -0
- data/public/js/sh_lang/sh_glsl.min.js +1 -0
- data/public/js/sh_lang/sh_haxe.min.js +1 -0
- data/public/js/sh_lang/sh_html.min.js +1 -0
- data/public/js/sh_lang/sh_java.min.js +1 -0
- data/public/js/sh_lang/sh_javascript.min.js +1 -0
- data/public/js/sh_lang/sh_javascript_dom.min.js +1 -0
- data/public/js/sh_lang/sh_latex.min.js +1 -0
- data/public/js/sh_lang/sh_ldap.min.js +1 -0
- data/public/js/sh_lang/sh_log.min.js +1 -0
- data/public/js/sh_lang/sh_lsm.min.js +1 -0
- data/public/js/sh_lang/sh_m4.min.js +1 -0
- data/public/js/sh_lang/sh_makefile.min.js +1 -0
- data/public/js/sh_lang/sh_oracle.min.js +1 -0
- data/public/js/sh_lang/sh_pascal.min.js +1 -0
- data/public/js/sh_lang/sh_perl.min.js +1 -0
- data/public/js/sh_lang/sh_php.min.js +1 -0
- data/public/js/sh_lang/sh_prolog.min.js +1 -0
- data/public/js/sh_lang/sh_properties.min.js +1 -0
- data/public/js/sh_lang/sh_python.min.js +1 -0
- data/public/js/sh_lang/sh_ruby.min.js +1 -0
- data/public/js/sh_lang/sh_scala.min.js +1 -0
- data/public/js/sh_lang/sh_sh.min.js +1 -0
- data/public/js/sh_lang/sh_slang.min.js +1 -0
- data/public/js/sh_lang/sh_sml.min.js +1 -0
- data/public/js/sh_lang/sh_spec.min.js +1 -0
- data/public/js/sh_lang/sh_sql.min.js +1 -0
- data/public/js/sh_lang/sh_tcl.min.js +1 -0
- data/public/js/sh_lang/sh_xml.min.js +1 -0
- data/public/js/sh_lang/sh_xorg.min.js +1 -0
- data/public/js/sh_main.min.js +4 -0
- data/public/js/showoff.js +643 -0
- data/public/js/showoffcore.js +13 -0
- data/views/header.erb +40 -0
- data/views/index.erb +46 -0
- data/views/onepage.erb +34 -0
- data/views/presenter.erb +70 -0
- metadata +245 -0
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
(function($) {
|
|
2
|
+
var touchStatus = function(target, touch) {
|
|
3
|
+
this.target = $(target);
|
|
4
|
+
this.touch = touch;
|
|
5
|
+
this.startX = this.currentX = touch.screenX;
|
|
6
|
+
this.startY = this.currentY = touch.screenY;
|
|
7
|
+
this.eventType = null;
|
|
8
|
+
}
|
|
9
|
+
touchStatus.latestTap = null;
|
|
10
|
+
|
|
11
|
+
touchStatus.prototype.move = function(touch) {
|
|
12
|
+
this.currentX = touch.screenX;
|
|
13
|
+
this.currentY = touch.screenY;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
touchStatus.prototype.process = function() {
|
|
17
|
+
var offsetX = this.currentX - this.startX;
|
|
18
|
+
var offsetY = this.currentY - this.startY;
|
|
19
|
+
if(offsetX == 0 && offsetY == 0) {
|
|
20
|
+
this.checkForDoubleTap()
|
|
21
|
+
} else if(Math.abs(offsetY) > Math.abs(offsetX)) {
|
|
22
|
+
this.eventType = offsetY > 0 ? 'swipedown' : 'swipeup';
|
|
23
|
+
this.target.trigger('swipe', [this])
|
|
24
|
+
} else {
|
|
25
|
+
this.eventType = offsetX > 0 ? 'swiperight' : 'swipeleft';
|
|
26
|
+
this.target.trigger('swipe', [this])
|
|
27
|
+
}
|
|
28
|
+
this.target.trigger(this.eventType, [this])
|
|
29
|
+
this.target.trigger('touch', [this])
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
touchStatus.prototype.checkForDoubleTap = function() {
|
|
33
|
+
if(touchStatus.latestTap) {
|
|
34
|
+
if((new Date() - touchStatus.latestTap) < 400)
|
|
35
|
+
this.eventType = 'doubletap'
|
|
36
|
+
}
|
|
37
|
+
if(!this.eventType) this.eventType = 'tap'
|
|
38
|
+
touchStatus.latestTap = new Date()
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
var swipeEvents = function(elements) {
|
|
42
|
+
elements.bind('touchstart', this.touchStart);
|
|
43
|
+
elements.bind('touchmove', this.touchMove);
|
|
44
|
+
elements.bind('touchcancel', this.touchCancel);
|
|
45
|
+
elements.bind('touchend', this.touchEnd);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
swipeEvents.prototype.touchStart = function(evt) {
|
|
49
|
+
var target = this;
|
|
50
|
+
swipeEvents.eachTouch(evt, function(touch) {
|
|
51
|
+
swipeEvents.touches[touch.identifier] = new touchStatus(target, touch);
|
|
52
|
+
})
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
swipeEvents.prototype.touchMove = function(evt) {
|
|
56
|
+
swipeEvents.eachTouch(evt, function(touch) {
|
|
57
|
+
var loc = swipeEvents.touches[touch.identifier]
|
|
58
|
+
if(loc) loc.move(touch)
|
|
59
|
+
})
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
swipeEvents.prototype.touchCancel = function(evt) {
|
|
63
|
+
swipeEvents.eachTouch(evt, function(touch) {
|
|
64
|
+
swipeEvents.purge(touch, true)
|
|
65
|
+
})
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
swipeEvents.prototype.touchEnd = function(evt) {
|
|
69
|
+
swipeEvents.eachTouch(evt, function(touch) {
|
|
70
|
+
swipeEvents.purge(touch)
|
|
71
|
+
})
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
swipeEvents.touches = {}
|
|
75
|
+
swipeEvents.purge = function(touch, cancelled) {
|
|
76
|
+
if(!cancelled) {
|
|
77
|
+
var loc = swipeEvents.touches[touch.identifier]
|
|
78
|
+
if(loc) loc.process()
|
|
79
|
+
}
|
|
80
|
+
delete swipeEvents.touches[touch.identifier]
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
swipeEvents.eachTouch = function(evt, callback) {
|
|
84
|
+
var evt = evt.originalEvent;
|
|
85
|
+
var num = evt.changedTouches.length;
|
|
86
|
+
for(var i = 0; i < num; i++) {
|
|
87
|
+
callback(evt.changedTouches[i])
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
// adds custom events:
|
|
92
|
+
// touch // all events
|
|
93
|
+
// swipe // only swipe* events
|
|
94
|
+
// swipeleft
|
|
95
|
+
// swiperight
|
|
96
|
+
// swipeup
|
|
97
|
+
// swipedown
|
|
98
|
+
// tap
|
|
99
|
+
// doubletap
|
|
100
|
+
$.fn.addSwipeEvents = function(callback) {
|
|
101
|
+
new swipeEvents(this);
|
|
102
|
+
if(callback) this.bind('touch', callback)
|
|
103
|
+
return this;
|
|
104
|
+
}
|
|
105
|
+
})(jQuery);
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/*
|
|
2
|
+
Usage 1: define the default prefix by using an object with the property prefix as a parameter which contains a string value; {prefix: 'id'}
|
|
3
|
+
Usage 2: call the function jQuery.uuid() with a string parameter p to be used as a prefix to generate a random uuid;
|
|
4
|
+
Usage 3: call the function jQuery.uuid() with no parameters to generate a uuid with the default prefix; defaul prefix: '' (empty string)
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
/*
|
|
8
|
+
Generate fragment of random numbers
|
|
9
|
+
*/
|
|
10
|
+
jQuery._uuid_default_prefix = '';
|
|
11
|
+
jQuery._uuidlet = function () {
|
|
12
|
+
return(((1+Math.random())*0x10000)|0).toString(16).substring(1);
|
|
13
|
+
};
|
|
14
|
+
/*
|
|
15
|
+
Generates random uuid
|
|
16
|
+
*/
|
|
17
|
+
jQuery.uuid = function (p) {
|
|
18
|
+
if (typeof(p) == 'object' && typeof(p.prefix) == 'string') {
|
|
19
|
+
jQuery._uuid_default_prefix = p.prefix;
|
|
20
|
+
} else {
|
|
21
|
+
p = p || jQuery._uuid_default_prefix || '';
|
|
22
|
+
return(p+jQuery._uuidlet()+jQuery._uuidlet()+"-"+jQuery._uuidlet()+"-"+jQuery._uuidlet()+"-"+jQuery._uuidlet()+"-"+jQuery._uuidlet()+jQuery._uuidlet()+jQuery._uuidlet());
|
|
23
|
+
};
|
|
24
|
+
};
|
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
|
|
2
|
+
(function($){
|
|
3
|
+
|
|
4
|
+
$.ws = {
|
|
5
|
+
|
|
6
|
+
//==========================================================
|
|
7
|
+
// jQuery plugin jquery.ws.js
|
|
8
|
+
// for Web Sockets
|
|
9
|
+
// need Browser Chrome4.0.249.0+
|
|
10
|
+
// Demo http://bloga.jp/ws/jq/
|
|
11
|
+
// serverside sample @see http://blog.livedoor.jp/kotesaki/archives/1355651.html
|
|
12
|
+
|
|
13
|
+
name : "ws",
|
|
14
|
+
version : "0.3-noenc-pre",
|
|
15
|
+
demo : "http://bloga.jp/ws/jq/conn/b1.htm",
|
|
16
|
+
author : "Toshiro Takahashi",
|
|
17
|
+
lisence : "same as jQuery @see http://docs.jquery.com/Licensing",
|
|
18
|
+
update : 'http://jsgt.org/lib/jquery/plugin/ws/update.txt',
|
|
19
|
+
ver : '<span class="wsVersion" style="color:#aaa"></span><script>'
|
|
20
|
+
+ 'jQuery(function($){ $(".wsVersion").html("version:ws-"+$.ws.version) })'
|
|
21
|
+
+ '</script>',
|
|
22
|
+
|
|
23
|
+
//Default settings
|
|
24
|
+
wsSettings: {
|
|
25
|
+
url : "ws://"+location.host,
|
|
26
|
+
data : null,//The data which transmit a message
|
|
27
|
+
onopen : function(e){},//callback on opened.
|
|
28
|
+
onmessage : function(msg,wsObject){},//callback on received
|
|
29
|
+
onclose : function(){},//callback on cloased
|
|
30
|
+
hbStr : "Heartbeat",//if null then no Heartbeat
|
|
31
|
+
hbinterval : 60000,//dafault 60sec, min=5000
|
|
32
|
+
onheartbeat: function(){}//callback on heartbeatsended
|
|
33
|
+
},
|
|
34
|
+
wsSetup: function( settings ) {
|
|
35
|
+
jQuery.extend( jQuery.ws.wsSettings, settings );
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
//Note: if you want to stop no-support alert dialog,
|
|
39
|
+
//$.ws.wsSetup({nonosupportmsg:true});
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
/*
|
|
43
|
+
//==========================================================
|
|
44
|
+
// Method
|
|
45
|
+
// Basic Method of this pulgin for Web Sockets
|
|
46
|
+
|
|
47
|
+
$.conn( settings )
|
|
48
|
+
|
|
49
|
+
*/
|
|
50
|
+
$.extend($.ws ,{
|
|
51
|
+
|
|
52
|
+
conn : function( s ){
|
|
53
|
+
|
|
54
|
+
s = $.extend(true, s, $.extend(true, {}, $.ws.wsSettings, s));
|
|
55
|
+
|
|
56
|
+
if ("WebSocket" in window) {
|
|
57
|
+
|
|
58
|
+
var url=s.url ,
|
|
59
|
+
//WS Object
|
|
60
|
+
wsoj = new WebSocket( url ) ,
|
|
61
|
+
data = s.data ,
|
|
62
|
+
//Heartbeat
|
|
63
|
+
_MIN_HBINTERVAL=5000,
|
|
64
|
+
_INI_HBINTERVAL=60000,
|
|
65
|
+
hbtimer=null,
|
|
66
|
+
hbStr = (s.hbStr===null)?null:(typeof s.hbStr==='string')?s.hbStr:'Heartbeat',
|
|
67
|
+
hbinterval = (typeof s.hbinterval==='number')?
|
|
68
|
+
(s.hbinterval>=_MIN_HBINTERVAL)?s.hbinterval:_INI_HBINTERVAL
|
|
69
|
+
:_INI_HBINTERVAL;
|
|
70
|
+
|
|
71
|
+
//WS Events bind
|
|
72
|
+
$(wsoj)
|
|
73
|
+
.bind("open",function(e){
|
|
74
|
+
if(s.onopen){ s.onopen(e); } ;
|
|
75
|
+
if(s.hbStr!==null){
|
|
76
|
+
hbtimer = setInterval(function(){
|
|
77
|
+
$(wsoj).wssend(hbStr);
|
|
78
|
+
if(wsoj.onheartbeat){wsoj.onheartbeat(wsoj)}
|
|
79
|
+
}, hbinterval);
|
|
80
|
+
}
|
|
81
|
+
})
|
|
82
|
+
.bind("message",function(e){
|
|
83
|
+
if(s.onmessage){
|
|
84
|
+
s.onmessage(
|
|
85
|
+
e.originalEvent.data
|
|
86
|
+
.replace(/<script(.|\s)*?\/script>/g, ""),
|
|
87
|
+
wsoj
|
|
88
|
+
);
|
|
89
|
+
}
|
|
90
|
+
})
|
|
91
|
+
.bind("close",function(){
|
|
92
|
+
if(s.onclose){
|
|
93
|
+
s.onclose();
|
|
94
|
+
}
|
|
95
|
+
if(hbtimer) {
|
|
96
|
+
clearInterval(hbtimer);
|
|
97
|
+
hbtimer = null;
|
|
98
|
+
}
|
|
99
|
+
wsoj=null;
|
|
100
|
+
});
|
|
101
|
+
|
|
102
|
+
//Add Event to only Instance for on after Hertbeat
|
|
103
|
+
if(s.hbStr!==null){
|
|
104
|
+
wsoj.onheartbeat=function(woj){
|
|
105
|
+
s.onheartbeat(woj);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
//WS send
|
|
110
|
+
$(wsoj).wssend(data);
|
|
111
|
+
|
|
112
|
+
//WS auto cloase
|
|
113
|
+
$(window)
|
|
114
|
+
.bind("unload",function(e){
|
|
115
|
+
wsoj.close();wsoj=null;
|
|
116
|
+
});
|
|
117
|
+
|
|
118
|
+
return wsoj;
|
|
119
|
+
|
|
120
|
+
} else {
|
|
121
|
+
//no support, message once.
|
|
122
|
+
if(!$.ws.nosupport){
|
|
123
|
+
if(!s.nonosupportmsg)
|
|
124
|
+
alert("no support, please use Chrome4 (v 4.0.238.0 +) or \n Safari nightly");
|
|
125
|
+
$.ws.nosupport=true;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
});
|
|
131
|
+
|
|
132
|
+
/*
|
|
133
|
+
//==========================================================
|
|
134
|
+
// Method
|
|
135
|
+
// Sub Methods for Web Sockets
|
|
136
|
+
|
|
137
|
+
$(Selectors).wsload( url, data, fn )
|
|
138
|
+
$(Selectors).wssend(data)
|
|
139
|
+
$(Selectors).wsclose()
|
|
140
|
+
|
|
141
|
+
*/
|
|
142
|
+
$.fn.extend({
|
|
143
|
+
|
|
144
|
+
//like $(Selectors).load() Some codes from jQuery1.3.2
|
|
145
|
+
wsload : function( url, data, fn ){
|
|
146
|
+
|
|
147
|
+
var off = url.indexOf(" ");
|
|
148
|
+
if ( off >= 0 ) {
|
|
149
|
+
var selector = url.slice(off, url.length);
|
|
150
|
+
url = url.slice(0, off);
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
if ( data )
|
|
154
|
+
if ( $.isFunction( data ) ) {
|
|
155
|
+
fn = data;
|
|
156
|
+
data = null;
|
|
157
|
+
} else if( typeof data === "object" ) {
|
|
158
|
+
data = $.param( data );
|
|
159
|
+
}
|
|
160
|
+
var self = this;
|
|
161
|
+
|
|
162
|
+
$.ws.conn({
|
|
163
|
+
url : url,
|
|
164
|
+
data : data,
|
|
165
|
+
onmessage : function(msg, wsoj){
|
|
166
|
+
if ( wsoj.readyState == wsoj.OPEN )
|
|
167
|
+
self.html( selector ?
|
|
168
|
+
$("<div/>")
|
|
169
|
+
.append(msg)
|
|
170
|
+
.find(selector) :
|
|
171
|
+
msg );
|
|
172
|
+
|
|
173
|
+
if( fn )
|
|
174
|
+
self.each( fn, [msg, wsoj.readyState, wsoj] );
|
|
175
|
+
}
|
|
176
|
+
});
|
|
177
|
+
|
|
178
|
+
return this;
|
|
179
|
+
},
|
|
180
|
+
|
|
181
|
+
//Send to WS Server $(webSocketOj).wssend(data)
|
|
182
|
+
wssend : function(data){
|
|
183
|
+
var oj=this[0];
|
|
184
|
+
if(typeof oj!=="object" && oj.toString()!=="[object WebSocket]"){return this;}
|
|
185
|
+
if(data){
|
|
186
|
+
oj.send(data);
|
|
187
|
+
}
|
|
188
|
+
return this;
|
|
189
|
+
},
|
|
190
|
+
|
|
191
|
+
//Close Web Sockets
|
|
192
|
+
wsclose : function(){
|
|
193
|
+
var oj=this[0];
|
|
194
|
+
if(typeof oj!=="object" && oj.toString()!=="[object WebSocket]"){return this;}
|
|
195
|
+
oj.close();
|
|
196
|
+
oj=null;
|
|
197
|
+
return this;
|
|
198
|
+
}
|
|
199
|
+
});
|
|
200
|
+
|
|
201
|
+
})(jQuery)
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
// presenter js
|
|
2
|
+
var w = null;
|
|
3
|
+
|
|
4
|
+
$(function(){
|
|
5
|
+
w = window.open('/');
|
|
6
|
+
// side menu accordian crap
|
|
7
|
+
$("#preso").bind("showoff:loaded", function (event) {
|
|
8
|
+
$(".menu > ul ul").hide()
|
|
9
|
+
$(".menu > ul a").click(function() {
|
|
10
|
+
if ($(this).next().is('ul')) {
|
|
11
|
+
$(this).next().toggle()
|
|
12
|
+
} else {
|
|
13
|
+
gotoSlide($(this).attr('rel'))
|
|
14
|
+
w.gotoSlide($(this).attr('rel'))
|
|
15
|
+
postSlide()
|
|
16
|
+
}
|
|
17
|
+
return false
|
|
18
|
+
}).next().hide()
|
|
19
|
+
})
|
|
20
|
+
$("#minStop").hide()
|
|
21
|
+
$("#startTimer").click(function() { toggleTimer() })
|
|
22
|
+
$("#stopTimer").click(function() { toggleTimer() })
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
function presPrevStep()
|
|
26
|
+
{
|
|
27
|
+
prevStep()
|
|
28
|
+
w.prevStep()
|
|
29
|
+
postSlide()
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
function presNextStep()
|
|
33
|
+
{
|
|
34
|
+
nextStep()
|
|
35
|
+
w.nextStep()
|
|
36
|
+
postSlide()
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
function postSlide()
|
|
40
|
+
{
|
|
41
|
+
if(currentSlide) {
|
|
42
|
+
var notes = w.getCurrentNotes()
|
|
43
|
+
var fileName = currentSlide.children().first().attr('ref')
|
|
44
|
+
$('#notes').text(notes)
|
|
45
|
+
$('#slideFile').text(fileName)
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
// See e.g. http://www.quirksmode.org/js/keys.html for keycodes
|
|
50
|
+
function keyDown(event)
|
|
51
|
+
{
|
|
52
|
+
var key = event.keyCode;
|
|
53
|
+
|
|
54
|
+
if (event.ctrlKey || event.altKey || event.metaKey)
|
|
55
|
+
return true;
|
|
56
|
+
|
|
57
|
+
debug('keyDown: ' + key)
|
|
58
|
+
|
|
59
|
+
if (key >= 48 && key <= 57) // 0 - 9
|
|
60
|
+
{
|
|
61
|
+
gotoSlidenum = gotoSlidenum * 10 + (key - 48);
|
|
62
|
+
return true;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
if (key == 13) {
|
|
66
|
+
if (gotoSlidenum > 0) {
|
|
67
|
+
debug('go to ' + gotoSlidenum);
|
|
68
|
+
slidenum = gotoSlidenum - 1;
|
|
69
|
+
showSlide(true);
|
|
70
|
+
w.slidenum = gotoSlidenum - 1;
|
|
71
|
+
w.showSlide(true);
|
|
72
|
+
gotoSlidenum = 0;
|
|
73
|
+
} else {
|
|
74
|
+
debug('executeCode');
|
|
75
|
+
executeAnyCode();
|
|
76
|
+
w.executeAnyCode();
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
if (key == 16) // shift key
|
|
81
|
+
{
|
|
82
|
+
shiftKeyActive = true;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
if (key == 32) // space bar
|
|
86
|
+
{
|
|
87
|
+
if (shiftKeyActive) {
|
|
88
|
+
presPrevStep()
|
|
89
|
+
} else {
|
|
90
|
+
presNextStep()
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
else if (key == 68) // 'd' for debug
|
|
94
|
+
{
|
|
95
|
+
debugMode = !debugMode
|
|
96
|
+
doDebugStuff()
|
|
97
|
+
}
|
|
98
|
+
else if (key == 37 || key == 33 || key == 38) // Left arrow, page up, or up arrow
|
|
99
|
+
{
|
|
100
|
+
presPrevStep()
|
|
101
|
+
}
|
|
102
|
+
else if (key == 39 || key == 34 || key == 40) // Right arrow, page down, or down arrow
|
|
103
|
+
{
|
|
104
|
+
presNextStep()
|
|
105
|
+
}
|
|
106
|
+
else if (key == 84 || key == 67) // T or C for table of contents
|
|
107
|
+
{
|
|
108
|
+
$('#navmenu').toggle().trigger('click')
|
|
109
|
+
}
|
|
110
|
+
else if (key == 90 || key == 191) // z or ? for help
|
|
111
|
+
{
|
|
112
|
+
$('#help').toggle()
|
|
113
|
+
}
|
|
114
|
+
else if (key == 66 || key == 70) // f for footer (also "b" which is what kensington remote "stop" button sends
|
|
115
|
+
{
|
|
116
|
+
toggleFooter()
|
|
117
|
+
}
|
|
118
|
+
else if (key == 78) // 'n' for notes
|
|
119
|
+
{
|
|
120
|
+
toggleNotes()
|
|
121
|
+
}
|
|
122
|
+
else if (key == 27) // esc
|
|
123
|
+
{
|
|
124
|
+
removeResults();
|
|
125
|
+
w.removeResults();
|
|
126
|
+
}
|
|
127
|
+
else if (key == 80) // 'p' for preshow
|
|
128
|
+
{
|
|
129
|
+
w.togglePreShow();
|
|
130
|
+
}
|
|
131
|
+
return true
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
//* TIMER *//
|
|
135
|
+
|
|
136
|
+
var timerSetUp = false;
|
|
137
|
+
var timerRunning = false;
|
|
138
|
+
var intervalRunning = false;
|
|
139
|
+
var seconds = 0;
|
|
140
|
+
var totalMinutes = 35;
|
|
141
|
+
|
|
142
|
+
function toggleTimer()
|
|
143
|
+
{
|
|
144
|
+
if (!timerRunning) {
|
|
145
|
+
timerRunning = true
|
|
146
|
+
totalMinutes = parseInt($("#timerMinutes").attr('value'))
|
|
147
|
+
$("#minStart").hide()
|
|
148
|
+
$("#minStop").show()
|
|
149
|
+
$("#timerInfo").text(timerStatus(0));
|
|
150
|
+
seconds = 0
|
|
151
|
+
if (!intervalRunning) {
|
|
152
|
+
intervalRunning = true
|
|
153
|
+
setInterval(function() {
|
|
154
|
+
if (!timerRunning) { return; }
|
|
155
|
+
seconds++;
|
|
156
|
+
$("#timerInfo").text(timerStatus(seconds));
|
|
157
|
+
}, 1000); // fire every minute
|
|
158
|
+
}
|
|
159
|
+
} else {
|
|
160
|
+
seconds = 0
|
|
161
|
+
timerRunning = false
|
|
162
|
+
totalMinutes = 0
|
|
163
|
+
$("#timerInfo").text('')
|
|
164
|
+
$("#minStart").show()
|
|
165
|
+
$("#minStop").hide()
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
function timerStatus(seconds) {
|
|
170
|
+
var minutes = Math.round(seconds / 60);
|
|
171
|
+
var left = (totalMinutes - minutes);
|
|
172
|
+
var percent = Math.round((minutes / totalMinutes) * 100);
|
|
173
|
+
var progress = getSlidePercent() - percent;
|
|
174
|
+
setProgressColor(progress);
|
|
175
|
+
return minutes + '/' + left + ' - ' + percent + '%';
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
function setProgressColor(progress) {
|
|
179
|
+
ts = $('#timerSection')
|
|
180
|
+
ts.removeClass('tBlue')
|
|
181
|
+
ts.removeClass('tGreen')
|
|
182
|
+
ts.removeClass('tYellow')
|
|
183
|
+
ts.removeClass('tRed')
|
|
184
|
+
if(progress > 10) {
|
|
185
|
+
ts.addClass('tBlue')
|
|
186
|
+
} else if (progress > 0) {
|
|
187
|
+
ts.addClass('tGreen')
|
|
188
|
+
} else if (progress > -10) {
|
|
189
|
+
ts.addClass('tYellow')
|
|
190
|
+
} else {
|
|
191
|
+
ts.addClass('tRed')
|
|
192
|
+
}
|
|
193
|
+
}
|