refinerycms-core 2.0.10 → 2.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (181) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/refinery/admin.js.erb +126 -234
  3. data/app/assets/javascripts/refinery/ajaxy_pagination.js.coffee +1 -1
  4. data/app/assets/javascripts/refinery/boot_wym.js.erb +4 -8
  5. data/app/assets/javascripts/refinery/core.js +1 -1
  6. data/app/assets/javascripts/refinery/interface.js.coffee.erb +3 -16
  7. data/app/assets/javascripts/refinery/modal_dialogs.js.erb +0 -3
  8. data/app/assets/javascripts/refinery/nestedsortables.js +312 -312
  9. data/app/assets/javascripts/refinery/refinery.js.erb +14 -15
  10. data/app/assets/javascripts/refinery/site_bar.js +3 -9
  11. data/app/assets/javascripts/refinery/sortable_list.js +145 -0
  12. data/app/assets/javascripts/refinery/sortable_menu.js.coffee +3 -4
  13. data/app/assets/javascripts/refinery/submit_continue.js.coffee.erb +1 -2
  14. data/app/assets/javascripts/refinery/tree.js +3 -3
  15. data/app/assets/javascripts/refinery/wymeditor.js +6 -6
  16. data/{public → app/assets/javascripts}/wymeditor/GPL-license.txt +0 -0
  17. data/{public → app/assets/javascripts}/wymeditor/MIT-license.txt +0 -0
  18. data/{public → app/assets/javascripts}/wymeditor/README +0 -0
  19. data/app/assets/javascripts/wymeditor/browsers/mozilla.js.erb +10 -11
  20. data/app/assets/javascripts/wymeditor/browsers/webkit.js.erb +17 -18
  21. data/app/assets/javascripts/wymeditor/classes.js.erb +3 -5
  22. data/app/assets/javascripts/wymeditor/functions.js.erb +5 -1
  23. data/app/assets/javascripts/wymeditor/prototypes.js.erb +0 -3
  24. data/app/assets/javascripts/wymeditor/setup.js.erb +5 -5
  25. data/app/assets/javascripts/wymeditor/skins/refinery/skin.js +1 -4
  26. data/app/assets/javascripts/wymeditor/validators.js.erb +3 -2
  27. data/app/assets/stylesheets/{formatting.css.scss → refinery/formatting.css.scss} +0 -0
  28. data/app/assets/stylesheets/refinery/layout.css.scss +41 -11
  29. data/app/assets/stylesheets/{theme.css.scss → refinery/theme.css.scss} +0 -0
  30. data/app/controllers/refinery/sitemap_controller.rb +1 -5
  31. data/app/helpers/refinery/admin_helper.rb +6 -0
  32. data/app/helpers/refinery/image_helper.rb +2 -1
  33. data/app/helpers/refinery/menu_helper.rb +0 -49
  34. data/app/helpers/refinery/meta_helper.rb +7 -3
  35. data/app/helpers/refinery/site_bar_helper.rb +3 -15
  36. data/app/models/refinery/core/base_model.rb +2 -0
  37. data/{lib → app/presenters}/refinery/base_presenter.rb +1 -2
  38. data/app/views/layouts/application.html.erb +8 -7
  39. data/app/views/refinery/_content_page.html.erb +1 -1
  40. data/app/views/refinery/_google_analytics.html.erb +12 -5
  41. data/app/views/refinery/_head.html.erb +11 -15
  42. data/app/views/refinery/_header.html.erb +1 -4
  43. data/app/views/refinery/_javascripts.html.erb +14 -8
  44. data/app/views/refinery/_site_bar.html.erb +4 -4
  45. data/app/views/refinery/admin/_form_advanced_options_menu.html.erb +12 -0
  46. data/app/views/refinery/admin/_javascripts.html.erb +13 -1
  47. data/app/views/refinery/admin/_locale_picker.html.erb +11 -0
  48. data/app/views/refinery/admin/_make_sortable.html.erb +8 -5
  49. data/app/views/refinery/admin/_search.html.erb +1 -7
  50. data/app/views/refinery/admin/_search_header.html.erb +1 -0
  51. data/app/views/refinery/admin/_wysiwyg.html.erb +16 -0
  52. data/config/initializers/will_paginate_monkeypatch.rb +1 -1
  53. data/config/locales/bg.yml +5 -1
  54. data/config/locales/cs.yml +5 -1
  55. data/config/locales/da.yml +5 -1
  56. data/config/locales/de.yml +7 -3
  57. data/config/locales/el.yml +5 -1
  58. data/config/locales/en.yml +7 -1
  59. data/config/locales/es.yml +5 -1
  60. data/config/locales/fi.yml +5 -1
  61. data/config/locales/fr.yml +5 -1
  62. data/config/locales/hu.yml +82 -0
  63. data/config/locales/it.yml +38 -34
  64. data/config/locales/ja.yml +5 -1
  65. data/config/locales/ko.yml +5 -1
  66. data/config/locales/lt.yml +5 -1
  67. data/config/locales/lv.yml +5 -1
  68. data/config/locales/nb.yml +5 -1
  69. data/config/locales/nl.yml +36 -29
  70. data/config/locales/pl.yml +8 -1
  71. data/config/locales/pt-BR.yml +7 -3
  72. data/config/locales/pt.yml +82 -0
  73. data/config/locales/rs.yml +5 -1
  74. data/config/locales/ru.yml +5 -1
  75. data/config/locales/sk.yml +10 -3
  76. data/config/locales/sl.yml +5 -1
  77. data/config/locales/sv.yml +5 -1
  78. data/config/locales/tr.yml +82 -0
  79. data/config/locales/uk.yml +77 -0
  80. data/config/locales/vi.yml +5 -1
  81. data/config/locales/zh-CN.yml +5 -1
  82. data/config/locales/zh-TW.yml +5 -1
  83. data/config/routes.rb +3 -3
  84. data/lib/generators/refinery/cms/cms_generator.rb +29 -0
  85. data/lib/generators/refinery/cms/templates/.gitignore +1 -0
  86. data/lib/generators/refinery/cms/templates/app/views/sitemap/index.xml.builder +13 -13
  87. data/lib/generators/refinery/core/templates/config/initializers/refinery/core.rb.erb +8 -12
  88. data/lib/generators/refinery/dummy/templates/rails/database.yml +3 -3
  89. data/lib/generators/refinery/engine/engine_generator.rb +8 -12
  90. data/lib/generators/refinery/engine/templates/Gemfile +5 -39
  91. data/lib/generators/refinery/engine/templates/app/controllers/refinery/namespace/admin/plural_name_controller.rb.erb +4 -4
  92. data/lib/generators/refinery/engine/templates/app/models/refinery/namespace/singular_name.rb.erb +2 -3
  93. data/lib/generators/refinery/engine/templates/app/views/refinery/namespace/admin/plural_name/_actions.html.erb +1 -1
  94. data/lib/generators/refinery/engine/templates/app/views/refinery/namespace/admin/plural_name/_form.html.erb +31 -33
  95. data/lib/generators/refinery/engine/templates/app/views/refinery/namespace/admin/plural_name/_records.html.erb +1 -3
  96. data/lib/generators/refinery/engine/templates/app/views/refinery/namespace/admin/plural_name/_singular_name.html.erb +2 -2
  97. data/lib/generators/refinery/engine/templates/app/views/refinery/namespace/admin/plural_name/index.html.erb +1 -1
  98. data/lib/generators/refinery/engine/templates/config/locales/cs.yml +28 -0
  99. data/lib/generators/refinery/engine/templates/config/locales/it.yml +28 -0
  100. data/lib/generators/refinery/engine/templates/config/locales/nl.yml +6 -6
  101. data/lib/generators/refinery/engine/templates/config/locales/tr.yml +28 -0
  102. data/lib/generators/refinery/engine/templates/config/routes.rb.erb +2 -2
  103. data/lib/generators/refinery/engine/templates/db/seeds.rb.erb +1 -1
  104. data/lib/generators/refinery/engine/templates/lib/generators/refinery/extension_plural_name_generator.rb.erb +1 -1
  105. data/lib/generators/refinery/engine/templates/lib/refinery/plural_name/engine.rb.erb +1 -1
  106. data/lib/generators/refinery/engine/templates/spec/{requests → features}/refinery/namespace/admin/plural_name_spec.rb.erb +1 -1
  107. data/lib/generators/refinery/engine/templates/spec/spec_helper.rb +25 -49
  108. data/lib/generators/refinery/form/form_generator.rb +1 -13
  109. data/lib/generators/refinery/form/templates/app/models/refinery/namespace/singular_name.rb.erb +0 -4
  110. data/lib/generators/refinery/form/templates/app/views/refinery/namespace/admin/plural_name/_records.html.erb +2 -2
  111. data/lib/generators/refinery/form/templates/app/views/refinery/namespace/admin/plural_name/spam.html.erb +7 -6
  112. data/lib/generators/refinery/form/templates/config/locales/nl.yml +29 -29
  113. data/lib/generators/refinery/form/templates/config/locales/tr.yml +78 -0
  114. data/lib/generators/refinery/form/templates/config/routes.rb.erb +1 -1
  115. data/lib/generators/refinery/form/templates/db/migrate/1_create_plural_name.rb.erb +2 -6
  116. data/lib/generators/refinery/form/templates/db/seeds.rb.erb +1 -1
  117. data/lib/generators/refinery/form/templates/lib/refinery/plural_name/engine.rb.erb +1 -1
  118. data/lib/generators/refinery/form/templates/refinerycms-plural_name.gemspec +2 -5
  119. data/lib/refinery.rb +191 -0
  120. data/lib/refinery/admin/base_controller.rb +27 -16
  121. data/lib/refinery/application_controller.rb +15 -47
  122. data/lib/refinery/cli.rb +48 -27
  123. data/lib/refinery/core.rb +7 -183
  124. data/lib/refinery/core/configuration.rb +17 -9
  125. data/lib/refinery/core/engine.rb +11 -47
  126. data/lib/refinery/crud.rb +81 -66
  127. data/lib/refinery/engine.rb +52 -55
  128. data/lib/refinery/ext/action_view/helpers/form_builder.rb +2 -0
  129. data/lib/refinery/extension_generation.rb +208 -110
  130. data/lib/refinery/menu.rb +16 -7
  131. data/lib/refinery/menu_item.rb +56 -54
  132. data/lib/refinery/plugin.rb +11 -3
  133. data/lib/refinery/plugins.rb +14 -1
  134. data/lib/refinery/version.rb +3 -3
  135. data/refinerycms-core.gemspec +11 -10
  136. data/spec/controllers/refinery/admin/dummy_controller_spec.rb +57 -0
  137. data/spec/controllers/refinery/admin/refinery_core_controller_spec.rb +3 -4
  138. data/spec/controllers/refinery/sitemap_controller_spec.rb +1 -14
  139. data/spec/{requests → features}/refinery/admin/custom_assets_spec.rb +1 -1
  140. data/spec/{requests → features}/refinery/admin/dialogs_spec.rb +1 -1
  141. data/spec/features/refinery/admin/xhr_paging_spec.rb +55 -0
  142. data/spec/features/refinery/application_layout_spec.rb +19 -0
  143. data/spec/features/refinery/core_spec.rb +14 -0
  144. data/spec/{requests → features}/refinery/site_bar_spec.rb +1 -1
  145. data/spec/helpers/refinery/meta_helper_spec.rb +25 -0
  146. data/spec/lib/generators/refinery/cms/cms_generator_spec.rb +61 -0
  147. data/spec/lib/generators/refinery/engine/engine_generator_multiple_resources_spec.rb +28 -1
  148. data/spec/lib/generators/refinery/engine/engine_generator_sanity_check_spec.rb +7 -7
  149. data/spec/lib/generators/refinery/engine/engine_generator_spec.rb +69 -8
  150. data/spec/lib/generators/refinery/engine/engine_generator_with_i18n_spec.rb +0 -2
  151. data/spec/lib/generators/refinery/form/form_generator_spec.rb +9 -1
  152. data/spec/lib/refinery/application_controller_spec.rb +48 -63
  153. data/spec/lib/refinery/cli_spec.rb +136 -0
  154. data/spec/lib/refinery/core/configuration_spec.rb +17 -0
  155. data/spec/lib/refinery/core_spec.rb +19 -13
  156. data/spec/lib/refinery/crud_spec.rb +0 -4
  157. data/spec/lib/refinery/menu_spec.rb +16 -26
  158. data/spec/support/refinery.rb +6 -1
  159. data/{app → vendor}/assets/javascripts/jquery/GPL-LICENSE.txt +0 -0
  160. data/{app → vendor}/assets/javascripts/jquery/MIT-LICENSE.txt +0 -0
  161. data/vendor/assets/javascripts/jquery/jquery.browser.js +49 -0
  162. data/{app → vendor}/assets/javascripts/jquery/jquery.html5-placeholder-shim.js +0 -0
  163. data/{app → vendor}/assets/javascripts/jquery/jquery.jcarousel.js +0 -0
  164. data/{app → vendor}/assets/javascripts/jquery/jquery.textTruncate.js +0 -0
  165. data/{app → vendor}/assets/javascripts/jquery/jquery.timers.js +0 -0
  166. data/{app → vendor}/assets/javascripts/modernizr-min.js +0 -0
  167. metadata +231 -78
  168. data/app/assets/images/refinery/resolve_digital_footer_logo.png +0 -0
  169. data/app/assets/javascripts/dd_belatedpng.js +0 -13
  170. data/app/assets/javascripts/jquery/jquery.corner.js +0 -345
  171. data/app/assets/stylesheets/application.css.scss +0 -55
  172. data/app/assets/stylesheets/home.css.scss +0 -3
  173. data/app/views/refinery/_ie6check.html.erb +0 -63
  174. data/app/views/refinery/_menu.html.erb +0 -20
  175. data/app/views/refinery/_menu_branch.html.erb +0 -19
  176. data/lib/generators/refinery/engine/templates/Guardfile +0 -27
  177. data/lib/generators/refinery/engine/templates/app/views/refinery/namespace/admin/plural_name/_locale_picker.html.erb +0 -11
  178. data/lib/refinery/catch_all_routes.rb +0 -3
  179. data/lib/tasks/yard.rake +0 -30
  180. data/spec/requests/refinery/admin/controller_restriction_spec.rb +0 -27
  181. data/spec/requests/refinery/search_spec.rb +0 -71
@@ -4,22 +4,19 @@ module Refinery
4
4
 
5
5
  config_accessor :rescue_not_found, :s3_backend, :base_cache_key, :site_name,
6
6
  :google_analytics_page_code, :authenticity_token_on_frontend,
7
- :menu_hide_children, :menu_css, :dragonfly_secret, :ie6_upgrade_message_enabled,
8
- :show_internet_explorer_upgrade_message, :wymeditor_whitelist_tags,
9
- :javascripts, :stylesheets, :s3_bucket_name, :s3_region, :s3_access_key_id,
10
- :s3_secret_access_key, :force_ssl
7
+ :dragonfly_secret,
8
+ :wymeditor_whitelist_tags, :javascripts, :stylesheets,
9
+ :s3_bucket_name, :s3_region, :s3_access_key_id,
10
+ :s3_secret_access_key, :force_ssl, :backend_route,
11
+ :dragonfly_custom_backend_class, :dragonfly_custom_backend_opts
11
12
 
12
13
  self.rescue_not_found = false
13
14
  self.s3_backend = false
14
15
  self.base_cache_key = :refinery
15
16
  self.site_name = "Company Name"
16
17
  self.google_analytics_page_code = "UA-xxxxxx-x"
17
- self.authenticity_token_on_frontend = true
18
- self.menu_hide_children = false
19
- self.menu_css = { :selected => "selected", :first => "first", :last => "last" }
18
+ self.authenticity_token_on_frontend = false
20
19
  self.dragonfly_secret = Array.new(24) { rand(256) }.pack('C*').unpack('H*').first
21
- self.ie6_upgrade_message_enabled = true
22
- self.show_internet_explorer_upgrade_message = false
23
20
  self.wymeditor_whitelist_tags = {}
24
21
  self.javascripts = []
25
22
  self.stylesheets = []
@@ -28,6 +25,9 @@ module Refinery
28
25
  self.s3_access_key_id = ENV['S3_KEY']
29
26
  self.s3_secret_access_key = ENV['S3_SECRET']
30
27
  self.force_ssl = false
28
+ self.backend_route = "refinery"
29
+ self.dragonfly_custom_backend_class = ''
30
+ self.dragonfly_custom_backend_opts = {}
31
31
 
32
32
  def config.register_javascript(name)
33
33
  self.javascripts << name
@@ -46,6 +46,14 @@ module Refinery
46
46
  self.stylesheets = []
47
47
  end
48
48
 
49
+ def dragonfly_custom_backend?
50
+ config.dragonfly_custom_backend_class.present?
51
+ end
52
+
53
+ def dragonfly_custom_backend_class
54
+ config.dragonfly_custom_backend_class.constantize if dragonfly_custom_backend?
55
+ end
56
+
49
57
  def site_name
50
58
  ::I18n.t('site_name', :scope => 'refinery.core.config', :default => config.site_name)
51
59
  end
@@ -1,20 +1,15 @@
1
1
  module Refinery
2
2
  module Core
3
3
  class Engine < ::Rails::Engine
4
- include Refinery::Engine
4
+ extend Refinery::Engine
5
5
 
6
6
  isolate_namespace Refinery
7
7
  engine_name :refinery
8
8
 
9
9
  class << self
10
- # Require/load (based on Rails app.config) all decorators from app/decorators/
11
- # and from registered plugins' paths too.
12
- def load_decorators
13
- [Rails.root, Refinery::Plugins.registered.pathnames].flatten.map { |p|
14
- Dir[p.join('app', 'decorators', '**', '*_decorator.rb')]
15
- }.flatten.uniq.each do |decorator|
16
- Rails.application.config.cache_classes ? require(decorator) : load(decorator)
17
- end
10
+ # Register all decorators from app/decorators/ and registered plugins' paths.
11
+ def register_decorators!
12
+ Decorators.register! Rails.root, Refinery::Plugins.registered.pathnames
18
13
  end
19
14
 
20
15
  # Performs the Refinery inclusion process which extends the currently loaded Rails
@@ -24,7 +19,7 @@ module Refinery
24
19
  def refinery_inclusion!
25
20
  before_inclusion_procs.each(&:call)
26
21
 
27
- ::ApplicationController.send :include, Refinery::ApplicationController
22
+ Refinery.include_once(::ApplicationController, Refinery::ApplicationController)
28
23
  ::ApplicationController.send :helper, Refinery::Core::Engine.helpers
29
24
 
30
25
  after_inclusion_procs.each(&:call)
@@ -36,7 +31,7 @@ module Refinery
36
31
  # Include the refinery controllers and helpers dynamically
37
32
  config.to_prepare &method(:refinery_inclusion!).to_proc
38
33
 
39
- after_inclusion &method(:load_decorators).to_proc
34
+ after_inclusion &method(:register_decorators!).to_proc
40
35
 
41
36
  # Wrap errors in spans
42
37
  config.to_prepare do
@@ -54,7 +49,6 @@ module Refinery
54
49
  plugin.pathname = root
55
50
  plugin.name = 'refinery_core'
56
51
  plugin.class_name = 'RefineryEngine'
57
- plugin.version = Refinery.version
58
52
  plugin.hide_from_menu = true
59
53
  plugin.always_allow_access = true
60
54
  plugin.menu_match = /refinery\/(refinery_)?core$/
@@ -65,15 +59,16 @@ module Refinery
65
59
  Refinery::Plugin.register do |plugin|
66
60
  plugin.pathname = root
67
61
  plugin.name = 'refinery_dialogs'
68
- plugin.version = Refinery.version
69
62
  plugin.hide_from_menu = true
70
63
  plugin.always_allow_access = true
71
64
  plugin.menu_match = /refinery\/(refinery_)?dialogs/
72
65
  end
73
66
  end
74
67
 
75
- initializer "refinery.routes" do |app|
76
- app.routes_reloader.paths << File.expand_path('../../catch_all_routes.rb', __FILE__)
68
+ initializer "refinery.routes", :after => :set_routes_reloader_hook do |app|
69
+ Refinery::Core::Engine.routes.append do
70
+ get "#{Refinery::Core.backend_route}/*path" => 'admin#error_404'
71
+ end
77
72
  end
78
73
 
79
74
  initializer "refinery.autoload_paths" do |app|
@@ -84,40 +79,19 @@ module Refinery
84
79
  ].flatten
85
80
  end
86
81
 
87
- initializer "refinery.acts_as_indexed" do
88
- ActiveSupport.on_load(:active_record) do
89
- require 'acts_as_indexed'
90
- ActsAsIndexed.configure do |config|
91
- config.index_file = Rails.root.join('tmp', 'index')
92
- config.index_file_depth = 3
93
- config.min_word_size = 3
94
- end
95
- end
96
- end
97
-
98
82
  # set the manifests and assets to be precompiled
99
- initializer "refinery.assets.precompile", :group => :all do |app|
83
+ initializer "refinery.assets.precompile" do |app|
100
84
  app.config.assets.precompile += [
101
- "home.css",
102
- "formatting.css",
103
- "theme.css",
104
- "admin.js",
105
85
  "refinery/*",
106
86
  "refinery/icons/*",
107
87
  "wymeditor/lang/*",
108
88
  "wymeditor/skins/refinery/*",
109
89
  "wymeditor/skins/refinery/**/*",
110
90
  "modernizr-min.js",
111
- "dd_belatedpng.js",
112
91
  "admin.js"
113
92
  ]
114
93
  end
115
94
 
116
- # Disable asset debugging - it's a performance killer in dev mode
117
- initializer "refinery.assets.pipeline" do |app|
118
- app.config.assets.debug = false
119
- end
120
-
121
95
  # active model fields which may contain sensitive data to filter
122
96
  initializer "refinery.params.filter" do |app|
123
97
  app.config.filter_parameters += [:password, :password_confirmation]
@@ -134,16 +108,6 @@ module Refinery
134
108
  config.after_initialize do
135
109
  Refinery.register_extension(Refinery::Core)
136
110
  end
137
-
138
- # We need to reload the routes here due to how Refinery sets them up
139
- # The different facets of Refinery (dashboard, pages, etc.) append/prepend routes to Core
140
- # *after* Core has been loaded.
141
- #
142
- # So we wait until after initialization is complete to do one final reload
143
- # This then makes the appended/prepended routes available to the application.
144
- config.after_initialize do
145
- Rails.application.routes_reloader.reload!
146
- end
147
111
  end
148
112
  end
149
113
  end
data/lib/refinery/crud.rb CHANGED
@@ -61,49 +61,22 @@ module Refinery
61
61
 
62
62
  prepend_before_filter :find_#{singular_name},
63
63
  :only => [:update, :destroy, :edit, :show]
64
+ prepend_before_filter :merge_position_into_params!, :only => :create
64
65
 
65
66
  def new
66
67
  @#{singular_name} = #{class_name}.new
67
68
  end
68
69
 
69
70
  def create
70
- # if the position field exists, set this object as last object, given the conditions of this class.
71
- if #{class_name}.column_names.include?("position") && params[:#{singular_name}][:position].nil?
72
- params[:#{singular_name}].merge!({
73
- :position => ((#{class_name}.maximum(:position, :conditions => #{options[:conditions].inspect})||-1) + 1)
74
- })
75
- end
76
-
77
71
  if (@#{singular_name} = #{class_name}.create(params[:#{singular_name}])).valid?
78
72
  flash.notice = t(
79
73
  'refinery.crudify.created',
80
74
  :what => "'\#{@#{singular_name}.#{options[:title_attribute]}}'"
81
75
  )
82
76
 
83
- unless from_dialog?
84
- unless params[:continue_editing] =~ /true|on|1/
85
- redirect_back_or_default(#{options[:redirect_to_url]})
86
- else
87
- unless request.xhr?
88
- redirect_to :back
89
- else
90
- render :partial => '/refinery/message'
91
- end
92
- end
93
- else
94
- self.index
95
- @dialog_successful = true
96
- render :index
97
- end
77
+ create_or_update_successful
98
78
  else
99
- unless request.xhr?
100
- render :action => 'new'
101
- else
102
- render :partial => '/refinery/admin/error_messages', :locals => {
103
- :object => @#{singular_name},
104
- :include_object_name => true
105
- }
106
- end
79
+ create_or_update_unsuccessful 'new'
107
80
  end
108
81
  end
109
82
 
@@ -118,30 +91,9 @@ module Refinery
118
91
  :what => "'\#{@#{singular_name}.#{options[:title_attribute]}}'"
119
92
  )
120
93
 
121
- unless from_dialog?
122
- unless params[:continue_editing] =~ /true|on|1/
123
- redirect_back_or_default(#{options[:redirect_to_url]})
124
- else
125
- unless request.xhr?
126
- redirect_to :back
127
- else
128
- render :partial => '/refinery/message'
129
- end
130
- end
131
- else
132
- self.index
133
- @dialog_successful = true
134
- render :index
135
- end
94
+ create_or_update_successful
136
95
  else
137
- unless request.xhr?
138
- render :action => 'edit'
139
- else
140
- render :partial => '/refinery/admin/error_messages', :locals => {
141
- :object => @#{singular_name},
142
- :include_object_name => true
143
- }
144
- end
96
+ create_or_update_unsuccessful 'edit'
145
97
  end
146
98
  end
147
99
 
@@ -152,7 +104,7 @@ module Refinery
152
104
  flash.notice = t('destroyed', :scope => 'refinery.crudify', :what => "'\#{title}'")
153
105
  end
154
106
 
155
- redirect_to #{options[:redirect_to_url]}
107
+ redirect_to redirect_url
156
108
  end
157
109
 
158
110
  # Finds one single result based on the id params.
@@ -170,18 +122,39 @@ module Refinery
170
122
  ).order("#{options[:order]}")
171
123
  end
172
124
 
125
+ def merge_position_into_params!
126
+ # if the position field exists, set this object as last object, given the conditions of this class.
127
+ if #{class_name}.column_names.include?("position") && params[:#{singular_name}][:position].nil?
128
+ params[:#{singular_name}].merge!({
129
+ :position => ((#{class_name}.maximum(:position, :conditions => #{options[:conditions].inspect})||-1) + 1)
130
+ })
131
+ end
132
+ end
133
+
173
134
  # Paginate a set of @#{plural_name} that may/may not already exist.
174
135
  def paginate_all_#{plural_name}
175
136
  # If we have already found a set then we don't need to again
176
137
  find_all_#{plural_name} if @#{plural_name}.nil?
177
138
 
178
- per_page = if #{options[:per_page].present?.inspect}
139
+ @#{plural_name} = @#{plural_name}.paginate(:page => params[:page], :per_page => paginate_per_page)
140
+ end
141
+
142
+ def paginate_per_page
143
+ if #{options[:per_page].present?.inspect}
179
144
  #{options[:per_page].inspect}
180
145
  elsif #{class_name}.methods.map(&:to_sym).include?(:per_page)
181
146
  #{class_name}.per_page
182
147
  end
148
+ end
183
149
 
184
- @#{plural_name} = @#{plural_name}.paginate(:page => params[:page], :per_page => per_page)
150
+ def redirect_url
151
+ if params[:page].present?
152
+ page = params[:page].to_i rescue 1
153
+ page -= 1 while #{class_name}.paginate(:page => page).empty? && page > 1
154
+ #{options[:redirect_to_url]}(:page => page)
155
+ else
156
+ #{options[:redirect_to_url]}
157
+ end
185
158
  end
186
159
 
187
160
  # If the controller is being accessed via an ajax request
@@ -193,6 +166,35 @@ module Refinery
193
166
  end
194
167
  end
195
168
 
169
+ def create_or_update_successful
170
+ if from_dialog?
171
+ self.index
172
+ @dialog_successful = true
173
+ render :index
174
+ else
175
+ if /true|on|1/ === params[:continue_editing]
176
+ if request.xhr?
177
+ render :partial => '/refinery/message'
178
+ else
179
+ redirect_to :back
180
+ end
181
+ else
182
+ redirect_back_or_default redirect_url
183
+ end
184
+ end
185
+ end
186
+
187
+ def create_or_update_unsuccessful(action)
188
+ if request.xhr?
189
+ render :partial => '/refinery/admin/error_messages', :locals => {
190
+ :object => @#{singular_name},
191
+ :include_object_name => true
192
+ }
193
+ else
194
+ render :action => action
195
+ end
196
+ end
197
+
196
198
  # Returns a weighted set of results based on the query specified by the user.
197
199
  def search_all_#{plural_name}
198
200
  # First find normal results.
@@ -207,13 +209,18 @@ module Refinery
207
209
  protected :find_#{singular_name},
208
210
  :find_all_#{plural_name},
209
211
  :paginate_all_#{plural_name},
212
+ :paginate_per_page,
210
213
  :render_partial_response?,
211
- :search_all_#{plural_name}
214
+ :search_all_#{plural_name},
215
+ :redirect_url,
216
+ :create_or_update_successful,
217
+ :create_or_update_unsuccessful,
218
+ :merge_position_into_params!
212
219
  )
213
220
 
214
221
  # Methods that are only included when this controller is searchable.
215
222
  if options[:searchable]
216
- if options[:paging]
223
+ if options[:paging] || options[:xhr_paging]
217
224
  module_eval %(
218
225
  def index
219
226
  search_all_#{plural_name} if searching?
@@ -237,7 +244,7 @@ module Refinery
237
244
  end
238
245
 
239
246
  else
240
- if options[:paging]
247
+ if options[:paging] || options[:xhr_paging]
241
248
  module_eval %(
242
249
  def index
243
250
  paginate_all_#{plural_name}
@@ -266,11 +273,8 @@ module Refinery
266
273
  def update_positions
267
274
  previous = nil
268
275
  params[:ul].each do |_, list|
269
- # After we drop Ruby 1.8.x support the following line can be changed back to
270
- # list.each do |index, hash|
271
- # because there won't be an ordering issue (see https://github.com/refinery/refinerycms/issues/1585)
272
- list.sort_by {|k, v| k.to_i}.map { |item| item[1] }.each_with_index do |hash, index|
273
- moved_item_id = hash['id'].split(/#{singular_name}\_?/).reject(&:empty?).first
276
+ list.each do |index, hash|
277
+ moved_item_id = hash['id'][/\\d+$/]
274
278
  @current_#{singular_name} = #{class_name}.find_by_id(moved_item_id)
275
279
 
276
280
  if @current_#{singular_name}.respond_to?(:move_to_root)
@@ -292,7 +296,8 @@ module Refinery
292
296
  end
293
297
 
294
298
  #{class_name}.rebuild! if #{class_name}.respond_to?(:rebuild!)
295
- render :nothing => true
299
+
300
+ after_update_positions
296
301
  end
297
302
 
298
303
  def update_child_positions(_node, #{singular_name})
@@ -307,16 +312,26 @@ module Refinery
307
312
  end
308
313
  end
309
314
  end
315
+
316
+ def after_update_positions
317
+ render :nothing => true
318
+ end
319
+
320
+ protected :after_update_positions
310
321
  )
311
322
  end
312
323
 
313
324
  module_eval %(
314
325
  class << self
315
326
  def pageable?
316
- #{options[:paging].to_s}
327
+ #{options[:paging].to_s} || #{options[:xhr_paging].to_s}
317
328
  end
318
329
  alias_method :paging?, :pageable?
319
330
 
331
+ def xhr_pageable?
332
+ #{options[:xhr_paging].to_s}
333
+ end
334
+
320
335
  def sortable?
321
336
  #{options[:sortable].to_s}
322
337
  end
@@ -1,65 +1,62 @@
1
- require 'active_support/concern'
2
-
3
1
  module Refinery
4
2
  module Engine
5
- extend ActiveSupport::Concern
6
-
7
- module ClassMethods
8
- def after_inclusion_procs #:nodoc:
9
- @@after_inclusion_procs ||= []
3
+ # Specify a block of code to be run after the refinery inclusion step. See
4
+ # Refinery::Core::Engine#refinery_inclusion for details regarding the Refinery
5
+ # inclusion process.
6
+ #
7
+ # Example:
8
+ # module Refinery
9
+ # module Images
10
+ # class Engine < Rails::Engine
11
+ # extend Refinery::Engine
12
+ # engine_name :images
13
+ #
14
+ # after_inclusion do
15
+ # # perform something here
16
+ # end
17
+ # end
18
+ # end
19
+ # end
20
+ def after_inclusion(&block)
21
+ if block && block.respond_to?(:call)
22
+ after_inclusion_procs << block
23
+ else
24
+ raise 'Anything added to be called after_inclusion must be callable (respond to #call).'
10
25
  end
26
+ end
11
27
 
12
- # Specify a block of code to be run after the refinery inclusion step. See
13
- # Refinery::Core::Engine#refinery_inclusion for details regarding the Refinery
14
- # inclusion process.
15
- #
16
- # Example:
17
- # module Refinery
18
- # module Images
19
- # class Engine < Rails::Engine
20
- # engine_name :images
21
- #
22
- # after_inclusion do
23
- # # perform something here
24
- # end
25
- # end
26
- # end
27
- # end
28
- def after_inclusion(&block)
29
- if block && block.respond_to?(:call)
30
- after_inclusion_procs << block
31
- else
32
- raise 'Anything added to be called after_inclusion must be callable (respond to #call).'
33
- end
28
+ # Specify a block of code to be run before the refinery inclusion step. See
29
+ # Refinery::Core::Engine#refinery_inclusion for details regarding the Refinery
30
+ # inclusion process.
31
+ #
32
+ # Example:
33
+ # module Refinery
34
+ # module Images
35
+ # class Engine < Rails::Engine
36
+ # extend Refinery::Engine
37
+ # engine_name :images
38
+ #
39
+ # before_inclusion do
40
+ # # perform something here
41
+ # end
42
+ # end
43
+ # end
44
+ # end
45
+ def before_inclusion(&block)
46
+ if block && block.respond_to?(:call)
47
+ before_inclusion_procs << block
48
+ else
49
+ raise 'Anything added to be called before_inclusion must be callable (respond to #call).'
34
50
  end
51
+ end
35
52
 
36
- def before_inclusion_procs #:nodoc:
37
- @@before_inclusion_procs ||= []
38
- end
53
+ private
54
+ def after_inclusion_procs
55
+ @@after_inclusion_procs ||= []
56
+ end
39
57
 
40
- # Specify a block of code to be run before the refinery inclusion step. See
41
- # Refinery::Core::Engine#refinery_inclusion for details regarding the Refinery
42
- # inclusion process.
43
- #
44
- # Example:
45
- # module Refinery
46
- # module Images
47
- # class Engine < Rails::Engine
48
- # engine_name :images
49
- #
50
- # before_inclusion do
51
- # # perform something here
52
- # end
53
- # end
54
- # end
55
- # end
56
- def before_inclusion(&block)
57
- if block && block.respond_to?(:call)
58
- before_inclusion_procs << block
59
- else
60
- raise 'Anything added to be called before_inclusion must be callable (respond to #call).'
61
- end
62
- end
58
+ def before_inclusion_procs
59
+ @@before_inclusion_procs ||= []
63
60
  end
64
61
  end
65
62
  end