shining 1.1.4 → 1.1.5

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.1.4
1
+ 1.1.5
data/css/base.css CHANGED
@@ -4,17 +4,17 @@ html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockq
4
4
  margin : 0; padding : 0; border : 0; outline : 0; font-size : 100%; vertical-align : baseline; background : transparent; }
5
5
  body { line-height : 1; }
6
6
  ol, ul { list-style-type : none; }
7
- :focus { outline : 0 }
7
+ :focus { outline : 0 }
8
8
  ins { text-decoration : none; }
9
9
  del { text-decoration : line-through }
10
10
 
11
- body {
11
+ body {
12
12
  font: 12px/1.5 "Lucida Grande", Tahoma, serif;
13
13
  overflow: hidden;
14
14
  text-align: center;
15
15
  }
16
16
 
17
- #stage {
17
+ #stage {
18
18
  position: relative;
19
19
  display: inline-block;
20
20
  padding: 40px 20px;
@@ -41,6 +41,19 @@ a { cursor: pointer }
41
41
 
42
42
  div.slice { position: absolute; display: block; width: 0; top: -10px; bottom: -10px }
43
43
 
44
+ #help {
45
+ display: inline-block;
46
+ font-size: 200%;
47
+ opacity: 0;
48
+ position: fixed;
49
+ right: 10px;
50
+ top: 10px;
51
+ background-color: #000;
52
+ background-color: rgba(0, 0, 0, 0.2);
53
+ color: #fff;
54
+ padding: 10px;
55
+ }
56
+
44
57
  @media all and (min-width: 480px) { #stage { font-size: 80% } }
45
58
  @media all and (min-width: 640px) { #stage { font-size: 100% } }
46
59
  @media all and (min-width: 800px) { #stage { font-size: 130% } }
data/lib/config.ru ADDED
@@ -0,0 +1,4 @@
1
+ use Rack::Static, :root => File.dirname(__FILE__), :urls => %w(/vendor/css /vendor/lib /slides /config.json /vendor/themes)
2
+ run lambda { |env|
3
+ [200, { 'Content-Type' => 'text/html', 'Cache-Control' => 'public, max-age=86400' }, [File.read('index.html')]]
4
+ }
@@ -18,7 +18,8 @@
18
18
  var previous = this._slides[ this._slides.indexOf(this.current()) - 1 ];
19
19
  return previous ? previous : this.first();
20
20
  },
21
- add: function(slides) { return Array.prototype.push.apply(this._slides, slides) },
21
+ add: function(slides) { return Array.prototype.push.apply(this._slides, slides) },
22
+ loaded: function(name) { return !!$.shining.slides._loaded[name] },
22
23
  _slides: [],
23
24
  _loaded: {},
24
25
  _current: 0
@@ -94,6 +95,8 @@
94
95
  String.prototype.markup = function() { return this + '.html' };
95
96
  String.prototype.script = function() { return this + '.js' };
96
97
  String.prototype.style = function() { return this + '.css' };
98
+
99
+ var KEY = { SPACE: 32, RIGHT: 39, LEFT: 37 };
97
100
 
98
101
  $.fn.effect = function(name) { return this.each(function() { applyEffect(this, name) }); }
99
102
  $.fn.hasClasses = function(classes) {
@@ -105,8 +108,14 @@
105
108
  $.extend($.shining, {
106
109
  firstSlide: function() { getSlide($.shining.slides.first()) },
107
110
  lastSlide: function() { getSlide($.shining.slides.last() ) },
108
- nextSlide: function() { getSlide($.shining.slides.next()) },
109
- previousSlide: function() { getSlide($.shining.slides.previous()) },
111
+ nextSlide: function() {
112
+ getSlide($.shining.slides.next());
113
+ trigger('next');
114
+ },
115
+ previousSlide: function() {
116
+ getSlide($.shining.slides.previous());
117
+ trigger('previous');
118
+ },
110
119
  getSlide: function(slide) { getSlide(slide) }
111
120
  });
112
121
 
@@ -125,17 +134,31 @@
125
134
  $('#stage').centralize();
126
135
  });
127
136
  $(window).resize(function() { $('#stage').centralize() });
137
+ bindKeys();
128
138
  loadConfig(function() {
129
139
  var startAt = document.location.hash.replace('#', ''),
130
140
  firstSlide = startAt ? startAt : $.shining.slides.current();
131
141
  loadSlide(firstSlide, function() { playSlide(firstSlide) });
142
+ if (!local() && !$.shining.config.preventPreload) preloadSlides();
132
143
  setTitle($.shining.config.title);
133
- setTheme($.shining.config.theme);
144
+ setTheme($.shining.config.theme);
134
145
  parseEffects();
135
146
  updateControlAnchors();
147
+ trigger('init.shining');
148
+ help('← (previous slide), → or SPACE BAR (next slide)', 3000);
136
149
  });
137
150
  }
138
-
151
+
152
+ function trigger(event, data) {
153
+ $(document).trigger(event + '.shining', data);
154
+ }
155
+
156
+ function bind(event, method) {
157
+ $(document).bind(event + '.shining', method);
158
+ }
159
+
160
+ $.shining.help = help;
161
+
139
162
  function applyEffect(element, name) {
140
163
  if (name in FILTERS) {
141
164
  if ($(element).hasClasses(FILTERS[name].when)) $(element).removeClass(FILTERS[name].remove)
@@ -170,17 +193,28 @@
170
193
  }
171
194
 
172
195
  function loadSlide(name, afterLoad) {
173
- $.get(
174
- slide(name).markup(),
175
- function(data) {
176
- $.shining.slides._loaded[name] = {};
177
- $.shining.slides._loaded[name].markup = data;
178
- if (data) {
179
- loadSlideScript(name, afterLoad);
180
- loadSlideStyle(name);
196
+ if (!$.shining.slides.loaded(name)) {
197
+ $.get(
198
+ slide(name).markup(),
199
+ function(data) {
200
+ $.shining.slides._loaded[name] = {};
201
+ $.shining.slides._loaded[name].markup = data;
202
+ if (data) {
203
+ loadSlideScript(name, afterLoad);
204
+ loadSlideStyle(name);
205
+ }
181
206
  }
182
- }
183
- );
207
+ );
208
+ } else {
209
+ afterLoad.call()
210
+ loadSlideStyle(name);
211
+ }
212
+ }
213
+
214
+ function preloadSlides() {
215
+ $($.shining.config.slides).each(function() {
216
+ loadSlide(this);
217
+ })
184
218
  }
185
219
 
186
220
  function playSlide(name) {
@@ -204,6 +238,7 @@
204
238
  }
205
239
 
206
240
  function loadSlideStyle(name) {
241
+ $('link.slide').remove();
207
242
  $('head').append('<link rel="stylesheet" type="text/css" href="' + slide(name).style() + '" media="all" class="slide"/>')
208
243
  }
209
244
 
@@ -215,6 +250,33 @@
215
250
  });
216
251
  }
217
252
 
253
+ function bindKeys() {
254
+ $(window).keydown(function(event) {
255
+ switch(event.keyCode) {
256
+ case KEY.RIGHT:
257
+ case KEY.SPACE:
258
+ $.shining.nextSlide();
259
+ break;
260
+ case KEY.LEFT:
261
+ $.shining.previousSlide();
262
+ break;
263
+ }
264
+ })
265
+ }
266
+
267
+ function help(message, duration) {
268
+ if ($.shining.config.help == false) return false;
269
+ var duration = duration || 500;
270
+ $('#help').remove();
271
+ $('<div id="help"></div>')
272
+ .html(message)
273
+ .css({display: 'inline-block'})
274
+ .appendTo('body')
275
+ .animate({opacity: 1})
276
+ .delay(duration)
277
+ .fadeOut(200, function() { $('#help').remove() })
278
+ }
279
+
218
280
  function local() {
219
281
  document.location.protocol == 'file:'
220
282
  }
@@ -271,12 +333,14 @@
271
333
  return $.shining.scripts.processes = [];
272
334
  }
273
335
  }
336
+
337
+ bind('previous', function() { help('←') });
338
+ bind('next', function() { help('→') });
274
339
 
275
340
  init();
276
341
  }
277
342
  // boots!
278
343
  $.shining();
279
-
280
344
  })(jQuery);
281
345
 
282
346
  // Dependencies!!
data/shining.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{shining}
8
- s.version = "1.1.4"
8
+ s.version = "1.1.5"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Julio Cesar Ody"]
12
- s.date = %q{2010-04-16}
12
+ s.date = %q{2010-04-20}
13
13
  s.description = %q{Webkit + CSS + Javascript = awesome presos}
14
14
  s.email = %q{julio.ody@gmail.com}
15
15
  s.executables = ["console", "shine"]
@@ -31,6 +31,7 @@ Gem::Specification.new do |s|
31
31
  "images/page_white_code.png",
32
32
  "images/page_white_copy.png",
33
33
  "images/printer.png",
34
+ "lib/config.ru",
34
35
  "lib/ext/filemethods.rb",
35
36
  "lib/ext/string.rb",
36
37
  "lib/jquery-1.4.1.min.js",
data/templates/index.html CHANGED
@@ -7,7 +7,7 @@
7
7
  <link rel="stylesheet" type="text/css" href="<%= vendorized? ? 'vendor' : Shining.root %>/css/effects.css" media="all"/>
8
8
  <link rel="stylesheet" type="text/css" href="<%= vendorized? ? 'vendor' : Shining.root %>/css/shCore.css" media="all"/>
9
9
  <link rel="stylesheet" type="text/css" href="<%= vendorized? ? 'vendor' : Shining.root %>/css/shThemeFadeToGrey.css" media="all"/>
10
- <link rel="stylesheet" type="text/css" href="<%= vendorized? ? 'vendor' : Shining.root %>/themes/default.css" media="all"/>
10
+ <link rel="stylesheet" type="text/css" href="<%= vendorized? ? 'vendor' : Shining.root %>/themes/default.css" media="all" class="theme"/>
11
11
  <script type="text/javascript" charset="utf-8" src="<%= vendorized? ? 'vendor' : Shining.root %>/lib/jquery-1.4.1.min.js"></script>
12
12
  <script type="text/javascript" charset="utf-8" src="<%= vendorized? ? 'vendor' : Shining.root %>/lib/shCore.js"></script>
13
13
  <script type="text/javascript" charset="utf-8" src="<%= vendorized? ? 'vendor' : Shining.root %>/lib/shBrushAll.js"></script>
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: shining
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.4
4
+ version: 1.1.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Julio Cesar Ody
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2010-04-16 00:00:00 +10:00
12
+ date: 2010-04-20 00:00:00 +10:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -116,6 +116,7 @@ files:
116
116
  - images/page_white_code.png
117
117
  - images/page_white_copy.png
118
118
  - images/printer.png
119
+ - lib/config.ru
119
120
  - lib/ext/filemethods.rb
120
121
  - lib/ext/string.rb
121
122
  - lib/jquery-1.4.1.min.js