shining 1.1.4 → 1.1.5

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/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