puffer 0.0.11 → 0.0.12

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.
Files changed (55) hide show
  1. data/VERSION +1 -1
  2. data/app/helpers/puffer_helper.rb +8 -0
  3. data/app/views/layouts/puffer.html.erb +5 -11
  4. data/lib/generators/puffer/install/install_generator.rb +2 -2
  5. data/lib/generators/puffer/install/templates/puffer.rb +12 -0
  6. data/lib/generators/puffer/install/templates/puffer/javascripts/{application.js → puffer.js} +0 -0
  7. data/lib/generators/puffer/install/templates/puffer/javascripts/{rails-src.js → rails.js} +0 -0
  8. data/lib/puffer.rb +14 -0
  9. data/lib/puffer/controller/mutate.rb +8 -2
  10. data/lib/puffer/extensions/mapper.rb +2 -2
  11. data/lib/puffer/inputs.rb +1 -1
  12. data/lib/puffer/path_set.rb +14 -7
  13. data/lib/puffer/resource.rb +1 -1
  14. data/puffer.gemspec +8 -44
  15. data/spec/dummy/config/initializers/puffer.rb +12 -0
  16. data/spec/dummy/public/puffer/javascripts/{application.js → puffer.js} +0 -0
  17. data/spec/dummy/public/puffer/javascripts/{rails-src.js → rails.js} +0 -0
  18. metadata +10 -46
  19. data/lib/generators/puffer/install/templates/puffer/javascripts/right-autocompleter-src.js +0 -621
  20. data/lib/generators/puffer/install/templates/puffer/javascripts/right-autocompleter.js.gz +0 -0
  21. data/lib/generators/puffer/install/templates/puffer/javascripts/right-calendar-src.js +0 -1461
  22. data/lib/generators/puffer/install/templates/puffer/javascripts/right-calendar.js.gz +0 -0
  23. data/lib/generators/puffer/install/templates/puffer/javascripts/right-in-edit-src.js +0 -369
  24. data/lib/generators/puffer/install/templates/puffer/javascripts/right-in-edit.js +0 -13
  25. data/lib/generators/puffer/install/templates/puffer/javascripts/right-in-edit.js.gz +0 -0
  26. data/lib/generators/puffer/install/templates/puffer/javascripts/right-lightbox-src.js +0 -905
  27. data/lib/generators/puffer/install/templates/puffer/javascripts/right-lightbox.js +0 -24
  28. data/lib/generators/puffer/install/templates/puffer/javascripts/right-lightbox.js.gz +0 -0
  29. data/lib/generators/puffer/install/templates/puffer/javascripts/right-sortable-src.js +0 -428
  30. data/lib/generators/puffer/install/templates/puffer/javascripts/right-sortable.js +0 -17
  31. data/lib/generators/puffer/install/templates/puffer/javascripts/right-sortable.js.gz +0 -0
  32. data/lib/generators/puffer/install/templates/puffer/javascripts/right-src.js +0 -5892
  33. data/lib/generators/puffer/install/templates/puffer/javascripts/right-tabs-src.js +0 -1145
  34. data/lib/generators/puffer/install/templates/puffer/javascripts/right-tabs.js +0 -29
  35. data/lib/generators/puffer/install/templates/puffer/javascripts/right-tabs.js.gz +0 -0
  36. data/lib/generators/puffer/install/templates/puffer/javascripts/right.js.gz +0 -0
  37. data/spec/dummy/config/puffer.rb +0 -0
  38. data/spec/dummy/public/puffer/javascripts/right-autocompleter-src.js +0 -621
  39. data/spec/dummy/public/puffer/javascripts/right-autocompleter.js.gz +0 -0
  40. data/spec/dummy/public/puffer/javascripts/right-calendar-src.js +0 -1461
  41. data/spec/dummy/public/puffer/javascripts/right-calendar.js.gz +0 -0
  42. data/spec/dummy/public/puffer/javascripts/right-in-edit-src.js +0 -369
  43. data/spec/dummy/public/puffer/javascripts/right-in-edit.js +0 -13
  44. data/spec/dummy/public/puffer/javascripts/right-in-edit.js.gz +0 -0
  45. data/spec/dummy/public/puffer/javascripts/right-lightbox-src.js +0 -905
  46. data/spec/dummy/public/puffer/javascripts/right-lightbox.js +0 -24
  47. data/spec/dummy/public/puffer/javascripts/right-lightbox.js.gz +0 -0
  48. data/spec/dummy/public/puffer/javascripts/right-sortable-src.js +0 -428
  49. data/spec/dummy/public/puffer/javascripts/right-sortable.js +0 -17
  50. data/spec/dummy/public/puffer/javascripts/right-sortable.js.gz +0 -0
  51. data/spec/dummy/public/puffer/javascripts/right-src.js +0 -5892
  52. data/spec/dummy/public/puffer/javascripts/right-tabs-src.js +0 -1145
  53. data/spec/dummy/public/puffer/javascripts/right-tabs.js +0 -29
  54. data/spec/dummy/public/puffer/javascripts/right-tabs.js.gz +0 -0
  55. data/spec/dummy/public/puffer/javascripts/right.js.gz +0 -0
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.11
1
+ 0.0.12
@@ -1,5 +1,13 @@
1
1
  module PufferHelper
2
2
 
3
+ def puffer_stylesheets
4
+ stylesheet_link_tag *Puffer.stylesheets.map {|path| "/puffer/stylesheets/#{path}"}.uniq.compact
5
+ end
6
+
7
+ def puffer_javascripts
8
+ javascript_include_tag *Puffer.javascripts.map {|path| "/puffer/javascripts/#{path}"}.uniq.compact
9
+ end
10
+
3
11
  def render_head field
4
12
  field.label
5
13
  end
@@ -4,22 +4,16 @@
4
4
  <title><%= [@title, 'Puffer'].compact.join(' - ') %></title>
5
5
  <meta http-equiv="content-type" content="text/html;charset=utf-8" />
6
6
  <%= csrf_meta_tag %>
7
- <%= stylesheet_link_tag '/puffer/stylesheets/reset' %>
8
- <%= stylesheet_link_tag '/puffer/stylesheets/puffer' %>
9
- <%= yield :stylesheet %>
10
-
11
- <%= javascript_include_tag '/puffer/javascripts/right-src' %>
12
- <%= javascript_include_tag '/puffer/javascripts/right-calendar-src' %>
13
- <%= javascript_include_tag '/puffer/javascripts/right-autocompleter-src' %>
14
- <%= javascript_include_tag '/puffer/javascripts/rails-src' %>
15
- <%= javascript_include_tag '/puffer/javascripts/application' %>
16
- <%= yield :javascript %>
7
+ <%= puffer_stylesheets %>
8
+ <%= yield :stylesheets %>
9
+ <%= puffer_javascripts %>
10
+ <%= yield :javascripts %>
17
11
  </head>
18
12
  <body>
19
13
  <div class="body">
20
14
  <div class="header">
21
15
  <div class="logo">
22
- <%= link_to 'Puffer', admin_root_path %>
16
+ <%= link_to Puffer.logo, admin_root_path %>
23
17
  </div>
24
18
  <ul class="navigation">
25
19
  <% puffer_navigation do |title, path, current| %>
@@ -1,12 +1,12 @@
1
1
  class Puffer::InstallGenerator < Rails::Generators::Base
2
2
  source_root File.expand_path('../templates', __FILE__)
3
3
 
4
- def generate_files
4
+ def generate_assets
5
5
  directory 'puffer', 'public/puffer'
6
6
  end
7
7
 
8
8
  def generate_config
9
- copy_file 'puffer.rb', 'config/puffer.rb'
9
+ copy_file 'puffer.rb', 'config/initializers/puffer.rb'
10
10
  end
11
11
 
12
12
  end
@@ -0,0 +1,12 @@
1
+ # Use this to configure puffer
2
+ Puffer.setup do |config|
3
+
4
+ # Add additional javascript and stylesheets files to puffer.html.erb layouts
5
+ # All additional paths should be relative to rails_app/public/puffer/(javascripts|stylesheets)
6
+ # config.stylesheets += %w(path/to/my/stylesheet)
7
+ # config.javascripts += %w(path/to/my/javascript)
8
+
9
+ # Puffer logo text. At the top-left of the layout. Default - `Puffer`
10
+ # config.logo = 'My cool application'
11
+
12
+ end
data/lib/puffer.rb CHANGED
@@ -1,4 +1,18 @@
1
1
  module Puffer
2
+
3
+ mattr_accessor :stylesheets
4
+ self.stylesheets = %w(reset puffer)
5
+
6
+ mattr_accessor :javascripts
7
+ self.javascripts = %w(right right-calendar right-autocompleter rails puffer)
8
+
9
+ mattr_accessor :logo
10
+ self.logo = 'Puffer'
11
+
12
+ def self.setup
13
+ yield self
14
+ end
15
+
2
16
  end
3
17
 
4
18
  require 'puffer/engine'
@@ -7,10 +7,10 @@ module Puffer
7
7
  extend ClassMethods
8
8
 
9
9
  layout 'puffer'
10
- helper 'puffer'
10
+ helper :puffer
11
11
  helper_method :puffer?
12
12
 
13
- self.view_paths = Puffer::PathSet.new view_paths
13
+ view_paths_fallbacks :puffer
14
14
  end
15
15
  end
16
16
 
@@ -18,6 +18,12 @@ module Puffer
18
18
 
19
19
  module ClassMethods
20
20
 
21
+ def view_paths_fallbacks *args
22
+ temp = Puffer::PathSet.new view_paths
23
+ temp._fallbacks = args.flatten
24
+ self.view_paths = temp
25
+ end
26
+
21
27
  def puffer?; true; end
22
28
 
23
29
  end
@@ -36,7 +36,7 @@ module Puffer
36
36
  end
37
37
 
38
38
  resource = ActionDispatch::Routing::Mapper::Resources::SingletonResource.new(resources.pop, options)
39
- controller = "#{[@scope[:module], resource.controller].compact.join("/")}_controller".classify.constantize rescue nil
39
+ controller = "#{[@scope[:module], resource.controller].compact.join("/")}_controller".camelize.constantize rescue nil
40
40
 
41
41
  return if controller.nil? || (controller && !controller.puffer?)
42
42
 
@@ -95,7 +95,7 @@ module Puffer
95
95
  end
96
96
 
97
97
  resource = ActionDispatch::Routing::Mapper::Resources::Resource.new(resources.pop, options)
98
- controller = "#{[@scope[:module], resource.controller].compact.join("/")}_controller".classify.constantize rescue nil
98
+ controller = "#{[@scope[:module], resource.controller].compact.join("/")}_controller".camelize.constantize rescue nil
99
99
 
100
100
  return if controller.nil? || (controller && !controller.puffer?)
101
101
 
data/lib/puffer/inputs.rb CHANGED
@@ -14,7 +14,7 @@ module Puffer
14
14
  map_type :date, :time, :datetime, :timestamp, :to => Puffer::Inputs::DateTime
15
15
 
16
16
  def self.map_field field
17
- mappings[field.type] || ("Puffer::Inputs::#{field.type.to_s.classify}".constantize rescue Puffer::Inputs::Base)
17
+ mappings[field.type] || ("Puffer::Inputs::#{field.type.to_s.camelize}".constantize rescue Puffer::Inputs::Base)
18
18
  end
19
19
 
20
20
  end
@@ -1,16 +1,23 @@
1
1
  module Puffer
2
2
  class PathSet < ::ActionView::PathSet
3
3
 
4
+ class_attribute :_fallbacks
5
+ self._fallbacks = []
6
+
4
7
  def find(path, prefix = nil, partial = false, details = {}, key = nil)
8
+ prefixes = [prefix].concat _fallbacks
9
+ paths = prefixes.map {|prefix| "#{prefix}/#{path}"}.join(', ')
10
+
5
11
  begin
6
- super(path, prefix, partial, details, key)
7
- rescue ::ActionView::MissingTemplate => e
8
- begin
9
- super(path, 'puffer', partial, details, key)
10
- rescue ::ActionView::MissingTemplate => ee
11
- raise e
12
+ template = begin
13
+ super(path, prefixes.shift.to_s, partial, details, key)
14
+ rescue ::ActionView::MissingTemplate => e
15
+ nil
12
16
  end
13
- end
17
+ end until prefixes.empty? || template
18
+
19
+ raise ::ActionView::MissingTemplate.new(self, paths, details, partial) unless template
20
+ template
14
21
  end
15
22
 
16
23
  end
@@ -15,7 +15,7 @@ module Puffer
15
15
 
16
16
  def initialize params, request = nil
17
17
  @action = params.delete :action
18
- @controller = "#{params[:controller]}_controller".classify.constantize
18
+ @controller = "#{params[:controller]}_controller".camelize.constantize
19
19
  @controller_name = controller.controller_name
20
20
  controller_segments = params.delete(:controller).split('/')
21
21
  @prefix = controller_segments.first
data/puffer.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{puffer}
8
- s.version = "0.0.11"
8
+ s.version = "0.0.12"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["pyromaniac"]
12
- s.date = %q{2011-02-04}
12
+ s.date = %q{2011-02-05}
13
13
  s.description = %q{In Soviet Russia puffer admins you}
14
14
  s.email = %q{kinwizard@gmail.com}
15
15
  s.extra_rdoc_files = [
@@ -47,29 +47,11 @@ Gem::Specification.new do |s|
47
47
  "lib/generators/puffer/install/USAGE",
48
48
  "lib/generators/puffer/install/install_generator.rb",
49
49
  "lib/generators/puffer/install/templates/puffer.rb",
50
- "lib/generators/puffer/install/templates/puffer/javascripts/application.js",
51
- "lib/generators/puffer/install/templates/puffer/javascripts/rails-src.js",
52
- "lib/generators/puffer/install/templates/puffer/javascripts/right-autocompleter-src.js",
50
+ "lib/generators/puffer/install/templates/puffer/javascripts/puffer.js",
51
+ "lib/generators/puffer/install/templates/puffer/javascripts/rails.js",
53
52
  "lib/generators/puffer/install/templates/puffer/javascripts/right-autocompleter.js",
54
- "lib/generators/puffer/install/templates/puffer/javascripts/right-autocompleter.js.gz",
55
- "lib/generators/puffer/install/templates/puffer/javascripts/right-calendar-src.js",
56
53
  "lib/generators/puffer/install/templates/puffer/javascripts/right-calendar.js",
57
- "lib/generators/puffer/install/templates/puffer/javascripts/right-calendar.js.gz",
58
- "lib/generators/puffer/install/templates/puffer/javascripts/right-in-edit-src.js",
59
- "lib/generators/puffer/install/templates/puffer/javascripts/right-in-edit.js",
60
- "lib/generators/puffer/install/templates/puffer/javascripts/right-in-edit.js.gz",
61
- "lib/generators/puffer/install/templates/puffer/javascripts/right-lightbox-src.js",
62
- "lib/generators/puffer/install/templates/puffer/javascripts/right-lightbox.js",
63
- "lib/generators/puffer/install/templates/puffer/javascripts/right-lightbox.js.gz",
64
- "lib/generators/puffer/install/templates/puffer/javascripts/right-sortable-src.js",
65
- "lib/generators/puffer/install/templates/puffer/javascripts/right-sortable.js",
66
- "lib/generators/puffer/install/templates/puffer/javascripts/right-sortable.js.gz",
67
- "lib/generators/puffer/install/templates/puffer/javascripts/right-src.js",
68
- "lib/generators/puffer/install/templates/puffer/javascripts/right-tabs-src.js",
69
- "lib/generators/puffer/install/templates/puffer/javascripts/right-tabs.js",
70
- "lib/generators/puffer/install/templates/puffer/javascripts/right-tabs.js.gz",
71
54
  "lib/generators/puffer/install/templates/puffer/javascripts/right.js",
72
- "lib/generators/puffer/install/templates/puffer/javascripts/right.js.gz",
73
55
  "lib/generators/puffer/install/templates/puffer/stylesheets/puffer.css",
74
56
  "lib/generators/puffer/install/templates/puffer/stylesheets/reset.css",
75
57
  "lib/puffer.rb",
@@ -132,10 +114,10 @@ Gem::Specification.new do |s|
132
114
  "spec/dummy/config/initializers/backtrace_silencers.rb",
133
115
  "spec/dummy/config/initializers/inflections.rb",
134
116
  "spec/dummy/config/initializers/mime_types.rb",
117
+ "spec/dummy/config/initializers/puffer.rb",
135
118
  "spec/dummy/config/initializers/secret_token.rb",
136
119
  "spec/dummy/config/initializers/session_store.rb",
137
120
  "spec/dummy/config/locales/en.yml",
138
- "spec/dummy/config/puffer.rb",
139
121
  "spec/dummy/config/routes.rb",
140
122
  "spec/dummy/db/migrate/20100930132559_create_admin_users.rb",
141
123
  "spec/dummy/db/migrate/20100930132656_create_admin_posts.rb",
@@ -156,29 +138,11 @@ Gem::Specification.new do |s|
156
138
  "spec/dummy/public/javascripts/effects.js",
157
139
  "spec/dummy/public/javascripts/prototype.js",
158
140
  "spec/dummy/public/javascripts/rails.js",
159
- "spec/dummy/public/puffer/javascripts/application.js",
160
- "spec/dummy/public/puffer/javascripts/rails-src.js",
161
- "spec/dummy/public/puffer/javascripts/right-autocompleter-src.js",
141
+ "spec/dummy/public/puffer/javascripts/puffer.js",
142
+ "spec/dummy/public/puffer/javascripts/rails.js",
162
143
  "spec/dummy/public/puffer/javascripts/right-autocompleter.js",
163
- "spec/dummy/public/puffer/javascripts/right-autocompleter.js.gz",
164
- "spec/dummy/public/puffer/javascripts/right-calendar-src.js",
165
144
  "spec/dummy/public/puffer/javascripts/right-calendar.js",
166
- "spec/dummy/public/puffer/javascripts/right-calendar.js.gz",
167
- "spec/dummy/public/puffer/javascripts/right-in-edit-src.js",
168
- "spec/dummy/public/puffer/javascripts/right-in-edit.js",
169
- "spec/dummy/public/puffer/javascripts/right-in-edit.js.gz",
170
- "spec/dummy/public/puffer/javascripts/right-lightbox-src.js",
171
- "spec/dummy/public/puffer/javascripts/right-lightbox.js",
172
- "spec/dummy/public/puffer/javascripts/right-lightbox.js.gz",
173
- "spec/dummy/public/puffer/javascripts/right-sortable-src.js",
174
- "spec/dummy/public/puffer/javascripts/right-sortable.js",
175
- "spec/dummy/public/puffer/javascripts/right-sortable.js.gz",
176
- "spec/dummy/public/puffer/javascripts/right-src.js",
177
- "spec/dummy/public/puffer/javascripts/right-tabs-src.js",
178
- "spec/dummy/public/puffer/javascripts/right-tabs.js",
179
- "spec/dummy/public/puffer/javascripts/right-tabs.js.gz",
180
145
  "spec/dummy/public/puffer/javascripts/right.js",
181
- "spec/dummy/public/puffer/javascripts/right.js.gz",
182
146
  "spec/dummy/public/puffer/stylesheets/puffer.css",
183
147
  "spec/dummy/public/puffer/stylesheets/reset.css",
184
148
  "spec/dummy/public/stylesheets/.gitkeep",
@@ -227,9 +191,9 @@ Gem::Specification.new do |s|
227
191
  "spec/dummy/config/initializers/backtrace_silencers.rb",
228
192
  "spec/dummy/config/initializers/inflections.rb",
229
193
  "spec/dummy/config/initializers/mime_types.rb",
194
+ "spec/dummy/config/initializers/puffer.rb",
230
195
  "spec/dummy/config/initializers/secret_token.rb",
231
196
  "spec/dummy/config/initializers/session_store.rb",
232
- "spec/dummy/config/puffer.rb",
233
197
  "spec/dummy/config/routes.rb",
234
198
  "spec/dummy/db/migrate/20100930132559_create_admin_users.rb",
235
199
  "spec/dummy/db/migrate/20100930132656_create_admin_posts.rb",
@@ -0,0 +1,12 @@
1
+ # Use this to configure puffer
2
+ Puffer.setup do |config|
3
+
4
+ # Add additional javascript and stylesheets files to puffer.html.erb layouts
5
+ # All additional paths should be relative to rails_app/public/puffer/(javascripts|stylesheets)
6
+ # config.stylesheets += %w(path/to/my/stylesheet)
7
+ # config.javascripts += %w(path/to/my/javascript)
8
+
9
+ # Puffer logo text. At the top-left of the layout. Default - `Puffer`
10
+ # config.logo = 'My cool application'
11
+
12
+ end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: puffer
3
3
  version: !ruby/object:Gem::Version
4
- hash: 9
4
+ hash: 7
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 0
9
- - 11
10
- version: 0.0.11
9
+ - 12
10
+ version: 0.0.12
11
11
  platform: ruby
12
12
  authors:
13
13
  - pyromaniac
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-02-04 00:00:00 +03:00
18
+ date: 2011-02-05 00:00:00 +03:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -221,29 +221,11 @@ files:
221
221
  - lib/generators/puffer/install/USAGE
222
222
  - lib/generators/puffer/install/install_generator.rb
223
223
  - lib/generators/puffer/install/templates/puffer.rb
224
- - lib/generators/puffer/install/templates/puffer/javascripts/application.js
225
- - lib/generators/puffer/install/templates/puffer/javascripts/rails-src.js
226
- - lib/generators/puffer/install/templates/puffer/javascripts/right-autocompleter-src.js
224
+ - lib/generators/puffer/install/templates/puffer/javascripts/puffer.js
225
+ - lib/generators/puffer/install/templates/puffer/javascripts/rails.js
227
226
  - lib/generators/puffer/install/templates/puffer/javascripts/right-autocompleter.js
228
- - lib/generators/puffer/install/templates/puffer/javascripts/right-autocompleter.js.gz
229
- - lib/generators/puffer/install/templates/puffer/javascripts/right-calendar-src.js
230
227
  - lib/generators/puffer/install/templates/puffer/javascripts/right-calendar.js
231
- - lib/generators/puffer/install/templates/puffer/javascripts/right-calendar.js.gz
232
- - lib/generators/puffer/install/templates/puffer/javascripts/right-in-edit-src.js
233
- - lib/generators/puffer/install/templates/puffer/javascripts/right-in-edit.js
234
- - lib/generators/puffer/install/templates/puffer/javascripts/right-in-edit.js.gz
235
- - lib/generators/puffer/install/templates/puffer/javascripts/right-lightbox-src.js
236
- - lib/generators/puffer/install/templates/puffer/javascripts/right-lightbox.js
237
- - lib/generators/puffer/install/templates/puffer/javascripts/right-lightbox.js.gz
238
- - lib/generators/puffer/install/templates/puffer/javascripts/right-sortable-src.js
239
- - lib/generators/puffer/install/templates/puffer/javascripts/right-sortable.js
240
- - lib/generators/puffer/install/templates/puffer/javascripts/right-sortable.js.gz
241
- - lib/generators/puffer/install/templates/puffer/javascripts/right-src.js
242
- - lib/generators/puffer/install/templates/puffer/javascripts/right-tabs-src.js
243
- - lib/generators/puffer/install/templates/puffer/javascripts/right-tabs.js
244
- - lib/generators/puffer/install/templates/puffer/javascripts/right-tabs.js.gz
245
228
  - lib/generators/puffer/install/templates/puffer/javascripts/right.js
246
- - lib/generators/puffer/install/templates/puffer/javascripts/right.js.gz
247
229
  - lib/generators/puffer/install/templates/puffer/stylesheets/puffer.css
248
230
  - lib/generators/puffer/install/templates/puffer/stylesheets/reset.css
249
231
  - lib/puffer.rb
@@ -306,10 +288,10 @@ files:
306
288
  - spec/dummy/config/initializers/backtrace_silencers.rb
307
289
  - spec/dummy/config/initializers/inflections.rb
308
290
  - spec/dummy/config/initializers/mime_types.rb
291
+ - spec/dummy/config/initializers/puffer.rb
309
292
  - spec/dummy/config/initializers/secret_token.rb
310
293
  - spec/dummy/config/initializers/session_store.rb
311
294
  - spec/dummy/config/locales/en.yml
312
- - spec/dummy/config/puffer.rb
313
295
  - spec/dummy/config/routes.rb
314
296
  - spec/dummy/db/migrate/20100930132559_create_admin_users.rb
315
297
  - spec/dummy/db/migrate/20100930132656_create_admin_posts.rb
@@ -330,29 +312,11 @@ files:
330
312
  - spec/dummy/public/javascripts/effects.js
331
313
  - spec/dummy/public/javascripts/prototype.js
332
314
  - spec/dummy/public/javascripts/rails.js
333
- - spec/dummy/public/puffer/javascripts/application.js
334
- - spec/dummy/public/puffer/javascripts/rails-src.js
335
- - spec/dummy/public/puffer/javascripts/right-autocompleter-src.js
315
+ - spec/dummy/public/puffer/javascripts/puffer.js
316
+ - spec/dummy/public/puffer/javascripts/rails.js
336
317
  - spec/dummy/public/puffer/javascripts/right-autocompleter.js
337
- - spec/dummy/public/puffer/javascripts/right-autocompleter.js.gz
338
- - spec/dummy/public/puffer/javascripts/right-calendar-src.js
339
318
  - spec/dummy/public/puffer/javascripts/right-calendar.js
340
- - spec/dummy/public/puffer/javascripts/right-calendar.js.gz
341
- - spec/dummy/public/puffer/javascripts/right-in-edit-src.js
342
- - spec/dummy/public/puffer/javascripts/right-in-edit.js
343
- - spec/dummy/public/puffer/javascripts/right-in-edit.js.gz
344
- - spec/dummy/public/puffer/javascripts/right-lightbox-src.js
345
- - spec/dummy/public/puffer/javascripts/right-lightbox.js
346
- - spec/dummy/public/puffer/javascripts/right-lightbox.js.gz
347
- - spec/dummy/public/puffer/javascripts/right-sortable-src.js
348
- - spec/dummy/public/puffer/javascripts/right-sortable.js
349
- - spec/dummy/public/puffer/javascripts/right-sortable.js.gz
350
- - spec/dummy/public/puffer/javascripts/right-src.js
351
- - spec/dummy/public/puffer/javascripts/right-tabs-src.js
352
- - spec/dummy/public/puffer/javascripts/right-tabs.js
353
- - spec/dummy/public/puffer/javascripts/right-tabs.js.gz
354
319
  - spec/dummy/public/puffer/javascripts/right.js
355
- - spec/dummy/public/puffer/javascripts/right.js.gz
356
320
  - spec/dummy/public/puffer/stylesheets/puffer.css
357
321
  - spec/dummy/public/puffer/stylesheets/reset.css
358
322
  - spec/dummy/public/stylesheets/.gitkeep
@@ -430,9 +394,9 @@ test_files:
430
394
  - spec/dummy/config/initializers/backtrace_silencers.rb
431
395
  - spec/dummy/config/initializers/inflections.rb
432
396
  - spec/dummy/config/initializers/mime_types.rb
397
+ - spec/dummy/config/initializers/puffer.rb
433
398
  - spec/dummy/config/initializers/secret_token.rb
434
399
  - spec/dummy/config/initializers/session_store.rb
435
- - spec/dummy/config/puffer.rb
436
400
  - spec/dummy/config/routes.rb
437
401
  - spec/dummy/db/migrate/20100930132559_create_admin_users.rb
438
402
  - spec/dummy/db/migrate/20100930132656_create_admin_posts.rb
@@ -1,621 +0,0 @@
1
- /**
2
- * RightJS-UI: Autocompleter
3
- * http://rightjs.org/ui/autocompleter
4
- *
5
- * Copyright (C) 2010 Nikolay Nemshilov
6
- */
7
- var Autocompleter = RightJS.Autocompleter = (function(document, RightJS) {
8
- /**
9
- * This module defines the basic widgets constructor
10
- * it creates an abstract proxy with the common functionality
11
- * which then we reuse and override in the actual widgets
12
- *
13
- * Copyright (C) 2010-2011 Nikolay Nemshilov
14
- */
15
-
16
- /**
17
- * Autocompleter initializer
18
- *
19
- * Copyright (C) 2010 Nikolay Nemshilov
20
- */
21
- var R = RightJS,
22
- $ = RightJS.$,
23
- $w = RightJS.$w,
24
- $E = RightJS.$E,
25
- Xhr = RightJS.Xhr,
26
- RegExp = RightJS.RegExp,
27
- isArray = RightJS.isArray;
28
-
29
-
30
-
31
-
32
-
33
-
34
-
35
-
36
- /**
37
- * The widget units constructor
38
- *
39
- * @param String tag-name or Object methods
40
- * @param Object methods
41
- * @return Widget wrapper
42
- */
43
- function Widget(tag_name, methods) {
44
- if (!methods) {
45
- methods = tag_name;
46
- tag_name = 'DIV';
47
- }
48
-
49
- /**
50
- * An Abstract Widget Unit
51
- *
52
- * Copyright (C) 2010 Nikolay Nemshilov
53
- */
54
- var AbstractWidget = new RightJS.Class(RightJS.Element.Wrappers[tag_name] || RightJS.Element, {
55
- /**
56
- * The common constructor
57
- *
58
- * @param Object options
59
- * @param String optional tag name
60
- * @return void
61
- */
62
- initialize: function(key, options) {
63
- this.key = key;
64
- var args = [{'class': 'rui-' + key}];
65
-
66
- // those two have different constructors
67
- if (!(this instanceof RightJS.Input || this instanceof RightJS.Form)) {
68
- args.unshift(tag_name);
69
- }
70
- this.$super.apply(this, args);
71
-
72
- if (RightJS.isString(options)) {
73
- options = RightJS.$(options);
74
- }
75
-
76
- // if the options is another element then
77
- // try to dynamically rewrap it with our widget
78
- if (options instanceof RightJS.Element) {
79
- this._ = options._;
80
- if ('$listeners' in options) {
81
- options.$listeners = options.$listeners;
82
- }
83
- options = {};
84
- }
85
- this.setOptions(options, this);
86
-
87
- return (RightJS.Wrapper.Cache[RightJS.$uid(this._)] = this);
88
- },
89
-
90
- // protected
91
-
92
- /**
93
- * Catches the options
94
- *
95
- * @param Object user-options
96
- * @param Element element with contextual options
97
- * @return void
98
- */
99
- setOptions: function(options, element) {
100
- element = element || this;
101
- RightJS.Options.setOptions.call(this,
102
- RightJS.Object.merge(options, eval("("+(
103
- element.get('data-'+ this.key) || '{}'
104
- )+")"))
105
- );
106
- return this;
107
- }
108
- });
109
-
110
- /**
111
- * Creating the actual widget class
112
- *
113
- */
114
- var Klass = new RightJS.Class(AbstractWidget, methods);
115
-
116
- // creating the widget related shortcuts
117
- RightJS.Observer.createShortcuts(Klass.prototype, Klass.EVENTS || []);
118
-
119
- return Klass;
120
- }
121
-
122
-
123
- /**
124
- * A shared module to create textual spinners
125
- *
126
- * Copyright (C) 2010-2011 Nikolay Nemshilov
127
- */
128
- var Spinner = new RightJS.Class(RightJS.Element, {
129
- /**
130
- * Constructor
131
- *
132
- * @param Number optional spinner size (4 by default)
133
- * @return void
134
- */
135
- initialize: function(size) {
136
- this.$super('div', {'class': 'rui-spinner'});
137
- this.dots = [];
138
-
139
- for (var i=0; i < (size || 4); i++) {
140
- this.dots.push(new RightJS.Element('div'));
141
- }
142
-
143
- this.dots[0].addClass('glowing');
144
- this.insert(this.dots);
145
- RightJS(this.shift).bind(this).periodical(300);
146
- },
147
-
148
- /**
149
- * Shifts the spinner elements
150
- *
151
- * @return void
152
- */
153
- shift: function() {
154
- if (this.visible()) {
155
- var dot = this.dots.pop();
156
- this.dots.unshift(dot);
157
- this.insert(dot, 'top');
158
- }
159
- }
160
- });
161
-
162
-
163
- /**
164
- * A shared module that toggles a widget visibility status
165
- * in a uniformed way according to the options settings
166
- *
167
- * Copyright (C) 2010-2011 Nikolay Nemshilov
168
- */
169
- var Toggler = {
170
- /**
171
- * Shows the element
172
- *
173
- * @param String fx-name
174
- * @param Object fx-options
175
- * @return Element this
176
- */
177
- show: function(fx_name, fx_options) {
178
- this.constructor.current = this;
179
- return Toggler_toggle(this, 'show', fx_name, fx_options);
180
- },
181
-
182
- /**
183
- * Hides the element
184
- *
185
- * @param String fx-name
186
- * @param Object fx-options
187
- * @return Element this
188
- */
189
- hide: function(fx_name, fx_options) {
190
- this.constructor.current = null;
191
- return Toggler_toggle(this, 'show', fx_name, fx_options);
192
- },
193
-
194
- /**
195
- * Toggles the widget at the given element
196
- *
197
- * @param Element the related element
198
- * @param String position right/bottom (bottom is the default)
199
- * @param Boolean marker if the element should be resized to the element size
200
- * @return Widget this
201
- */
202
- showAt: function(element, where, resize) {
203
- this.hide(null).shownAt = element = RightJS.$(element);
204
-
205
- // moves this element at the given one
206
- Toggler_re_position.call(this, element, where, resize);
207
-
208
- return this.show();
209
- },
210
-
211
- /**
212
- * Toggles the widget at the given element
213
- *
214
- * @param Element the related element
215
- * @param String position top/left/right/bottom (bottom is the default)
216
- * @param Boolean marker if the element should be resized to the element size
217
- * @return Widget this
218
- */
219
- toggleAt: function(element, where, resize) {
220
- return this.hidden() ? this.showAt(element, where, resize) : this.hide();
221
- }
222
- };
223
-
224
-
225
- /**
226
- * toggles the element's state according to the current settings
227
- *
228
- * @param event String 'show' or 'hide' the event name
229
- * @param String an optional fx-name
230
- * @param Object an optional fx-options hash
231
- * @return void
232
- */
233
- function Toggler_toggle(element, event, fx_name, fx_options) {
234
- if (RightJS.Fx) {
235
- if (fx_name === undefined) {
236
- fx_name = element.options.fxName;
237
-
238
- if (fx_options === undefined) {
239
- fx_options = {
240
- duration: element.options.fxDuration,
241
- onFinish: RightJS(element.fire).bind(element, event)
242
- };
243
-
244
- // hide on double time
245
- if (event === 'hide') {
246
- fx_options.duration = (RightJS.Fx.Durations[fx_options.duration] ||
247
- fx_options.duration) / 2;
248
- }
249
- }
250
- }
251
- }
252
-
253
- // manually trigger the event if no fx were specified
254
- if (!RightJS.Fx || !fx_name) { element.fire(event); }
255
-
256
- return element.$super(fx_name, fx_options);
257
- }
258
-
259
- /**
260
- * Relatively positions the current element
261
- * against the specified one
262
- *
263
- * NOTE: this function is called in a context
264
- * of another element
265
- *
266
- * @param Element the target element
267
- * @param String position 'right' or 'bottom'
268
- * @param Boolean if `true` then the element size will be adjusted
269
- * @return void
270
- */
271
- function Toggler_re_position(element, where, resize) {
272
- var anchor = this.reAnchor || (this.reAnchor =
273
- new RightJS.Element('div', {'class': 'rui-re-anchor'}))
274
- .insert(this),
275
-
276
- pos = anchor.insertTo(element, 'after').position(),
277
- dims = element.dimensions(), target = this,
278
-
279
- border_top = parseInt(element.getStyle('borderTopWidth')),
280
- border_left = parseInt(element.getStyle('borderLeftWidth')),
281
- border_right = parseInt(element.getStyle('borderRightWidth')),
282
- border_bottom = parseInt(element.getStyle('borderBottomWidth')),
283
-
284
- top = dims.top - pos.y + border_top,
285
- left = dims.left - pos.x + border_left,
286
- width = dims.width - border_left - border_right,
287
- height = dims.height - border_top - border_bottom;
288
-
289
- // making the element to appear so we could read it's sizes
290
- target.setStyle('visibility:hidden').show(null);
291
-
292
- if (where === 'right') {
293
- left += width - target.size().x;
294
- } else { // bottom
295
- top += height;
296
- }
297
-
298
- target.moveTo(left, top);
299
-
300
- if (resize) {
301
- if (where === 'left' || where === 'right') {
302
- target.setHeight(height);
303
- } else {
304
- target.setWidth(width);
305
- }
306
- }
307
-
308
- // rolling the invisibility back
309
- target.setStyle('visibility:visible').hide(null);
310
- }
311
-
312
- /**
313
- * The RightJS UI Autocompleter unit base class
314
- *
315
- * Copyright (C) 2009-2011 Nikolay Nemshilov
316
- */
317
- var Autocompleter = new Widget('UL', {
318
- include: Toggler,
319
-
320
- extend: {
321
- version: '2.2.0',
322
-
323
- EVENTS: $w('show hide update load select done'),
324
-
325
- Options: {
326
- url: document.location.href,
327
- param: 'search',
328
- method: 'get',
329
-
330
- minLength: 1, // the minimal length when it starts work
331
- threshold: 200, // the typing pause threshold
332
-
333
- cache: true, // use the results cache
334
- local: null, // an optional local search results list
335
-
336
- fxName: 'slide', // list appearance fx name
337
- fxDuration: 'short', // list appearance fx duration
338
-
339
- spinner: 'native', // spinner element reference
340
-
341
- cssRule: 'input[data-autocompleter]' // the auto-initialization css-rule
342
- }
343
- },
344
-
345
- /**
346
- * basic constructor
347
- *
348
- * @param mixed the input element reference, a string id or the element instance
349
- * @param Object options
350
- */
351
- initialize: function(input, options) {
352
- this.input = $(input); // KEEP IT before the super call
353
-
354
- this
355
- .$super('autocompleter', options)
356
- .addClass('rui-dd-menu')
357
- .onMousedown(this.clicked);
358
-
359
- this.input.autocompleter = this;
360
- },
361
-
362
- /**
363
- * Destructor
364
- *
365
- * @return Autocompleter this
366
- */
367
- destroy: function() {
368
- delete(this.input.autocompleter);
369
- return this;
370
- },
371
-
372
- /**
373
- * picks the next item on the list
374
- *
375
- * @return Autocompleter this
376
- */
377
- prev: function() {
378
- return this.pick('prev');
379
- },
380
-
381
- /**
382
- * picks the next item on the list
383
- *
384
- * @return Autocompleter this
385
- */
386
- next: function() {
387
- return this.pick('next');
388
- },
389
-
390
- /**
391
- * triggers the done event, sets up the value and closes the list
392
- *
393
- * @return Autocompleter this
394
- */
395
- done: function(current) {
396
- current = current || this.first('li.current');
397
-
398
- if (current) {
399
- current.radioClass('current');
400
- this.input.setValue(R(current.html()).stripTags());
401
- this.fire('done');
402
- }
403
-
404
- return this.hide();
405
- },
406
-
407
- // protected
408
-
409
- // preprocessing the urls a bit
410
- setOptions: function(options) {
411
- this.$super(options, this.input);
412
-
413
- options = this.options;
414
-
415
- // building the correct url template with a placeholder
416
- if (!R(options.url).includes('%{search}')) {
417
- options.url += (R(options.url).includes('?') ? '&' : '?') + options.param + '=%{search}';
418
- }
419
- },
420
-
421
- // works with the 'prev' and 'next' methods
422
- pick: function(which_one) {
423
- var items = this.children(),
424
- current = items.first('hasClass', 'current'),
425
- index = items.indexOf(current);
426
-
427
- if (which_one == 'prev') {
428
- current = index < 1 ? items.last() : items[index < 0 ? 0 : (index-1)];
429
- } else if (which_one == 'next') {
430
- current = index < 0 || index == (items.length - 1) ?
431
- items.first() : items[index + 1];
432
- }
433
-
434
- return this.fire('select', {item: current.radioClass('current')});
435
- },
436
-
437
- // handles mouse clicks on the list element
438
- clicked: function(event) {
439
- this.done(event.stop().find('li'));
440
- },
441
-
442
- // handles the key-press events
443
- keypressed: function(event) {
444
- if (this.input.value().length >= this.options.minLength) {
445
- if (this.timeout) {
446
- this.timeout.cancel();
447
- }
448
- this.timeout = R(this.trigger).bind(this).delay(this.options.threshold);
449
- } else {
450
- return this.hide();
451
- }
452
- },
453
-
454
- // triggers the actual action
455
- trigger: function() {
456
- this.timeout = null;
457
-
458
- this.cache = this.cache || {};
459
- var search = this.input.value(), options = this.options;
460
-
461
- if (search.length < options.minLength) { return this.hide(); }
462
-
463
- if (this.cache[search]) {
464
- this.suggest(this.cache[search], search);
465
- } else if (isArray(options.local)) {
466
- this.suggest(this.findLocal(search), search);
467
- } else {
468
- this.request = Xhr.load(options.url.replace('%{search}', encodeURIComponent(search)), {
469
- method: options.method,
470
- spinner: this.getSpinner(),
471
- onComplete: R(function(response) {
472
- this.fire('load').suggest(response.text, search);
473
- }).bind(this)
474
- });
475
- }
476
- },
477
-
478
- // updates the suggestions list
479
- suggest: function(result_text, search) {
480
- // saving the result in cache
481
- if (this.options.cache) {
482
- this.cache[search] = result_text;
483
- }
484
-
485
- if (!R(result_text).blank()) {
486
- this.update(result_text.replace(/<ul[^>]*>|<\/ul>/im, ''));
487
- this.fire('update');
488
- if (!this._connected || this.hidden()) {
489
- this.showAt(this.input, 'bottom', 'resize');
490
- this._connected = true;
491
- }
492
- } else {
493
- this.hide();
494
- }
495
-
496
- return this;
497
- },
498
-
499
- // performs the locals search
500
- findLocal: function(search) {
501
- var regexp = new RegExp("("+RegExp.escape(search)+")", 'ig');
502
-
503
- return R(this.options.local).map(function(option) {
504
- if (option.match(regexp)) {
505
- return '<li>'+ option.replace(regexp, '<strong>$1</strong>') +'</li>';
506
- }
507
- }).compact().join('');
508
- },
509
-
510
- // builds a native textual spinner if necessary
511
- getSpinner: function() {
512
- var options = this.options, spinner = options.spinner;
513
-
514
- if (spinner == 'native') {
515
- spinner = options.spinner = new Spinner(3).insertTo(this);
516
- spinner.addClass('rui-autocompleter-spinner');
517
- }
518
-
519
- // positioning the native spinner
520
- if (spinner instanceof Spinner) {
521
- Toggler_re_position.call(spinner, this.input, 'right', 'resize');
522
- }
523
-
524
- return spinner;
525
- }
526
- });
527
-
528
-
529
- /**
530
- * The document events hooking
531
- *
532
- * Copyright (C) 2009-2010 Nikolay Nemshilov
533
- */
534
- $(document).on({
535
- /**
536
- * Initializes autocompleters on-focus
537
- *
538
- * @param Event focus
539
- * @return void
540
- */
541
- focus: function(event) {
542
- var target = event.target;
543
-
544
- if (target && (target instanceof RightJS.Element) && (target.autocompleter || target.match(Autocompleter.Options.cssRule))) {
545
- if (!target.autocompleter) {
546
- new Autocompleter(target);
547
- }
548
- }
549
- },
550
-
551
- /**
552
- * Hides autocompleters on-blur
553
- *
554
- * @param Event blur
555
- * @return void
556
- */
557
- blur: function(event) {
558
- var autocompleter = event.target ? event.target.autocompleter : null;
559
-
560
- if (autocompleter && autocompleter.visible()) {
561
- autocompleter.hide();
562
- }
563
- },
564
-
565
- /**
566
- * Catching the basic keyboard events
567
- * to navigate through the autocompletion list
568
- *
569
- * @param Event keydown
570
- * @return void
571
- */
572
- keydown: function(event) {
573
- var autocompleter = event.target ? event.target.autocompleter : null;
574
-
575
- if (autocompleter && autocompleter.visible()) {
576
- var method_name = ({
577
- 27: 'hide', // Esc
578
- 38: 'prev', // Up
579
- 40: 'next', // Down
580
- 13: 'done' // Enter
581
- })[event.keyCode];
582
-
583
- if (method_name) {
584
- event.stop();
585
- autocompleter[method_name]();
586
- }
587
- }
588
- },
589
-
590
- /**
591
- * Catches the input fields keyup events
592
- * and tries to make the autocompleter to show some suggestions
593
- *
594
- * @param Event keyup
595
- * @return void
596
- */
597
- keyup: function(event) {
598
- var autocompleter = event.target ? event.target.autocompleter : null;
599
-
600
- if (autocompleter && !R([9, 27, 37, 38, 39, 40, 13]).include(event.keyCode)) {
601
- autocompleter.keypressed(event);
602
- }
603
- }
604
- });
605
- (function() {
606
- var style = document.createElement('style'),
607
- rules = document.createTextNode(" *.rui-dd-menu, *.rui-dd-menu li{margin:0;padding:0;border:none;background:none;list-style:none;font-weight:normal;float:none} *.rui-dd-menu{display:none;position:absolute;z-index:9999;background:white;border:1px solid #BBB;border-radius:.2em;-moz-border-radius:.2em;-webkit-border-radius:.2em;box-shadow:#DDD .2em .2em .4em;-moz-box-shadow:#DDD .2em .2em .4em;-webkit-box-shadow:#DDD .2em .2em .4em} *.rui-dd-menu li{padding:.2em .4em;border-top:none;border-bottom:none;cursor:pointer} *.rui-dd-menu li.current{background:#DDD} *.rui-dd-menu li:hover{background:#EEE}dl.rui-dd-menu dt{padding:.3em .5em;cursor:default;font-weight:bold;font-style:italic;color:#444;background:#EEE}dl.rui-dd-menu dd li{padding-left:1.5em}div.rui-spinner,div.rui-spinner div{margin:0;padding:0;border:none;background:none;list-style:none;font-weight:normal;float:none;display:inline-block; *display:inline; *zoom:1;border-radius:.12em;-moz-border-radius:.12em;-webkit-border-radius:.12em}div.rui-spinner{text-align:center;white-space:nowrap;background:#EEE;border:1px solid #DDD;height:1.2em;padding:0 .2em}div.rui-spinner div{width:.4em;height:70%;background:#BBB;margin-left:1px}div.rui-spinner div:first-child{margin-left:0}div.rui-spinner div.glowing{background:#777}div.rui-re-anchor{margin:0;padding:0;background:none;border:none;float:none;display:inline;position:absolute;z-index:9999}.rui-autocompleter{border-top-color:#DDD !important;border-top-left-radius:0 !important;border-top-right-radius:0 !important;-moz-border-radius-topleft:0 !important;-moz-border-radius-topright:0 !important;-webkit-border-top-left-radius:0 !important;-webkit-border-top-right-radius:0 !important}.rui-autocompleter-spinner{border:none !important;background:none !important;position:absolute;z-index:9999}.rui-autocompleter-spinner div{margin-top:.2em !important; *margin-top:0.1em !important}");
608
-
609
- style.type = 'text/css';
610
-
611
- if(style.styleSheet) {
612
- style.styleSheet.cssText = rules.nodeValue;
613
- } else {
614
- style.appendChild(rules);
615
- }
616
-
617
- document.getElementsByTagName('head')[0].appendChild(style);
618
- })();
619
-
620
- return Autocompleter;
621
- })(document, RightJS);