admin_interface 1.0.0 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (186) hide show
  1. data/.gitignore +1 -0
  2. data/README.rdoc +12 -3
  3. data/admin_interface.gemspec +16 -11
  4. data/lib/admin_interface.rb +7 -0
  5. data/lib/generators/admin_interface/admin_interface_generator.rb +23 -18
  6. data/lib/generators/admin_interface/templates/INSTALL +1 -10
  7. data/lib/generators/admin_interface/templates/controllers/resource_controller.rb +13 -78
  8. data/lib/generators/admin_interface/templates/helpers/admin/base_helper.rb +77 -0
  9. data/lib/generators/admin_interface/templates/views/layout.html.erb +4 -5
  10. data/lib/generators/admin_scaffold/admin_scaffold_generator.rb +9 -0
  11. data/lib/generators/admin_scaffold/templates/INSTALL +1 -8
  12. data/lib/generators/admin_scaffold/templates/view_index.html.erb +15 -13
  13. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/1downarrow.png +0 -0
  14. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/1uparrow.png +0 -0
  15. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/22x22/.svn/all-wcprops +0 -0
  16. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/22x22/.svn/entries +0 -0
  17. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/22x22/.svn/format +0 -0
  18. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/22x22/.svn/prop-base/authent.png.svn-base +0 -0
  19. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/22x22/.svn/prop-base/comment.png.svn-base +0 -0
  20. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/22x22/.svn/prop-base/file.png.svn-base +0 -0
  21. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/22x22/.svn/prop-base/info.png.svn-base +0 -0
  22. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/22x22/.svn/prop-base/notifications.png.svn-base +0 -0
  23. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/22x22/.svn/prop-base/options.png.svn-base +0 -0
  24. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/22x22/.svn/prop-base/package.png.svn-base +0 -0
  25. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/22x22/.svn/prop-base/plugin.png.svn-base +0 -0
  26. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/22x22/.svn/prop-base/projects.png.svn-base +0 -0
  27. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/22x22/.svn/prop-base/role.png.svn-base +0 -0
  28. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/22x22/.svn/prop-base/settings.png.svn-base +0 -0
  29. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/22x22/.svn/prop-base/tracker.png.svn-base +0 -0
  30. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/22x22/.svn/prop-base/users.png.svn-base +0 -0
  31. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/22x22/.svn/prop-base/workflow.png.svn-base +0 -0
  32. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/22x22/.svn/text-base/authent.png.svn-base +0 -0
  33. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/22x22/.svn/text-base/comment.png.svn-base +0 -0
  34. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/22x22/.svn/text-base/file.png.svn-base +0 -0
  35. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/22x22/.svn/text-base/info.png.svn-base +0 -0
  36. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/22x22/.svn/text-base/notifications.png.svn-base +0 -0
  37. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/22x22/.svn/text-base/options.png.svn-base +0 -0
  38. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/22x22/.svn/text-base/package.png.svn-base +0 -0
  39. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/22x22/.svn/text-base/plugin.png.svn-base +0 -0
  40. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/22x22/.svn/text-base/projects.png.svn-base +0 -0
  41. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/22x22/.svn/text-base/role.png.svn-base +0 -0
  42. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/22x22/.svn/text-base/settings.png.svn-base +0 -0
  43. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/22x22/.svn/text-base/tracker.png.svn-base +0 -0
  44. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/22x22/.svn/text-base/users.png.svn-base +0 -0
  45. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/22x22/.svn/text-base/workflow.png.svn-base +0 -0
  46. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/22x22/authent.png +0 -0
  47. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/22x22/comment.png +0 -0
  48. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/22x22/file.png +0 -0
  49. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/22x22/info.png +0 -0
  50. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/22x22/notifications.png +0 -0
  51. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/22x22/options.png +0 -0
  52. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/22x22/package.png +0 -0
  53. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/22x22/plugin.png +0 -0
  54. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/22x22/projects.png +0 -0
  55. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/22x22/role.png +0 -0
  56. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/22x22/settings.png +0 -0
  57. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/22x22/tracker.png +0 -0
  58. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/22x22/users.png +0 -0
  59. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/22x22/workflow.png +0 -0
  60. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/2downarrow.png +0 -0
  61. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/2uparrow.png +0 -0
  62. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/add.png +0 -0
  63. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/arrow_collapsed.png +0 -0
  64. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/arrow_down.png +0 -0
  65. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/arrow_expanded.png +0 -0
  66. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/attachment.png +0 -0
  67. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/bullet_add.png +0 -0
  68. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/bullet_arrow_left.png +0 -0
  69. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/bullet_arrow_right.png +0 -0
  70. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/bullet_black.png +0 -0
  71. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/bullet_blue.png +0 -0
  72. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/bullet_delete.png +0 -0
  73. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/bullet_diamond.png +0 -0
  74. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/bullet_end.png +0 -0
  75. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/bullet_go.png +0 -0
  76. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/bullet_orange.png +0 -0
  77. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/bullet_purple.png +0 -0
  78. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/bullet_toggle_minus.png +0 -0
  79. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/bullet_toggle_plus.png +0 -0
  80. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/calendar.png +0 -0
  81. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/cancel.png +0 -0
  82. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/changeset.png +0 -0
  83. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/close.png +0 -0
  84. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/close_hl.png +0 -0
  85. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/comment.png +0 -0
  86. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/comments.png +0 -0
  87. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/copy.png +0 -0
  88. data/vendor/assets/images/admin/crop.png +0 -0
  89. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/database_key.png +0 -0
  90. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/delete.png +0 -0
  91. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/destroy.png +0 -0
  92. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/document.png +0 -0
  93. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/download.png +0 -0
  94. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/draft.png +0 -0
  95. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/duplicate.png +0 -0
  96. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/edit.png +0 -0
  97. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/email.png +0 -0
  98. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/exclamation.png +0 -0
  99. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/external.png +0 -0
  100. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/false.png +0 -0
  101. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/fav.png +0 -0
  102. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/fav_off.png +0 -0
  103. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/feed.png +0 -0
  104. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/files/c.png +0 -0
  105. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/files/csharp.png +0 -0
  106. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/files/default.png +0 -0
  107. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/files/image.png +0 -0
  108. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/files/pdf.png +0 -0
  109. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/files/php.png +0 -0
  110. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/files/ruby.png +0 -0
  111. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/files/text.png +0 -0
  112. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/files/xml.png +0 -0
  113. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/files/zip.png +0 -0
  114. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/folder.png +0 -0
  115. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/folder_open.png +0 -0
  116. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/folder_open_add.png +0 -0
  117. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/folder_open_orange.png +0 -0
  118. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/group.png +0 -0
  119. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/help.png +0 -0
  120. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/history.png +0 -0
  121. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/jstoolbar/bt_bq.png +0 -0
  122. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/jstoolbar/bt_bq_remove.png +0 -0
  123. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/jstoolbar/bt_code.png +0 -0
  124. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/jstoolbar/bt_del.png +0 -0
  125. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/jstoolbar/bt_em.png +0 -0
  126. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/jstoolbar/bt_h1.png +0 -0
  127. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/jstoolbar/bt_h2.png +0 -0
  128. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/jstoolbar/bt_h3.png +0 -0
  129. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/jstoolbar/bt_img.png +0 -0
  130. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/jstoolbar/bt_ins.png +0 -0
  131. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/jstoolbar/bt_link.png +0 -0
  132. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/jstoolbar/bt_ol.png +0 -0
  133. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/jstoolbar/bt_pre.png +0 -0
  134. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/jstoolbar/bt_strong.png +0 -0
  135. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/jstoolbar/bt_ul.png +0 -0
  136. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/lightning.png +0 -0
  137. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/link.png +0 -0
  138. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/loading.gif +0 -0
  139. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/locked.png +0 -0
  140. data/vendor/assets/images/admin/mail.png +0 -0
  141. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/message.png +0 -0
  142. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/milestone.png +0 -0
  143. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/move.png +0 -0
  144. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/news.png +0 -0
  145. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/openid-bg.gif +0 -0
  146. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/package.png +0 -0
  147. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/page_go.png +0 -0
  148. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/plugin.png +0 -0
  149. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/projects.png +0 -0
  150. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/reload.png +0 -0
  151. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/report.png +0 -0
  152. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/save.png +0 -0
  153. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/search.png +0 -0
  154. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/server_key.png +0 -0
  155. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/sort_asc.png +0 -0
  156. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/sort_desc.png +0 -0
  157. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/stats.png +0 -0
  158. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/table_multiple.png +0 -0
  159. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/task_done.png +0 -0
  160. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/task_late.png +0 -0
  161. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/task_parent_end.png +0 -0
  162. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/task_todo.png +0 -0
  163. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/text_list_bullets.png +0 -0
  164. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/textfield.png +0 -0
  165. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/ticket.png +0 -0
  166. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/ticket_checked.png +0 -0
  167. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/ticket_edit.png +0 -0
  168. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/ticket_go.png +0 -0
  169. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/ticket_note.png +0 -0
  170. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/time.png +0 -0
  171. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/time_add.png +0 -0
  172. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/toggle_check.png +0 -0
  173. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/true.png +0 -0
  174. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/unlock.png +0 -0
  175. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/user.png +0 -0
  176. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/user_go.png +0 -0
  177. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/warning.png +0 -0
  178. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/wiki_edit.png +0 -0
  179. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/zoom_in.png +0 -0
  180. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/zoom_in_g.png +0 -0
  181. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/zoom_out.png +0 -0
  182. data/{lib/generators/admin_interface/templates/images → vendor/assets/images/admin}/zoom_out_g.png +0 -0
  183. data/{lib/generators/admin_interface/templates → vendor/assets}/javascripts/jquery.admin.js +0 -0
  184. data/{lib/generators/admin_interface/templates/views → vendor/assets/stylesheets}/admin.css +375 -230
  185. metadata +213 -179
  186. data/lib/generators/admin_interface/templates/helpers/admin_helper.rb +0 -24
data/.gitignore ADDED
@@ -0,0 +1 @@
1
+ *.gem
data/README.rdoc CHANGED
@@ -16,6 +16,12 @@ Add following to your Gemfile
16
16
  gem 'admin_interface'
17
17
  end
18
18
 
19
+ AdminInterface uses several gems. So put these in your Gemfile
20
+
21
+ gem 'inherited_resources'
22
+ gem 'meta_search'
23
+ gem 'kaminari'
24
+
19
25
  Or install as plugin from Github.
20
26
 
21
27
  rails plugin install git://github.com/joost/admin_interface.git
@@ -38,7 +44,7 @@ Next, add following routes to config/routes.rb.
38
44
  root :to => 'base#index'
39
45
  # Add the following after you've used the admin_scaffold generator
40
46
  resources :model do
41
- delete 'delete_all', :on => :collection
47
+ delete 'destroy_all', :on => :collection
42
48
  end
43
49
  end
44
50
 
@@ -71,14 +77,17 @@ Go to /admin and you can see everything in action.
71
77
 
72
78
  == Error messages
73
79
 
74
- Add this to your environment.rb (see: http://railscasts.com/episodes/39-customize-field-error)
80
+ Add this to a initializer or in your environment.rb (see: http://railscasts.com/episodes/39-customize-field-error)
75
81
  This will make sure the admin errors will show in correct styling.
76
82
 
77
83
  # Change the error from div to span
78
84
  ActionView::Base.field_error_proc = Proc.new do |html_tag, instance_tag|
79
- "<span class='fieldWithErrors'>#{html_tag}</span>"
85
+ "<span class='field_with_errors'>#{html_tag}</span>".html_safe
80
86
  end
81
87
 
88
+ Note that this might affect the rest of your application. A different solution is
89
+ welcome!
90
+
82
91
  == Kudos
83
92
 
84
93
  Kudos, credits or whatever you like more go to:
@@ -2,16 +2,21 @@
2
2
  $:.push File.expand_path("../lib", __FILE__)
3
3
  require "devise/version"
4
4
 
5
- Gem::Specification.new do |s|
6
- s.name = "admin_interface"
7
- s.version = '1.0.0'
8
- s.platform = Gem::Platform::RUBY
9
- s.summary = "A Rails admin interface generator. Theme stolen from Redmine."
10
- s.email = "joost@joopp.com"
11
- s.homepage = "http://github.com/joost/admin_interface"
12
- s.description = "A Rails admin interface generator. Theme stolen from Redmine. Similar to web-app-theme."
13
- s.authors = ['Joost Hietbrink']
5
+ Gem::Specification.new do |spec|
6
+ spec.name = "admin_interface"
7
+ spec.version = '1.2.0'
8
+ spec.platform = Gem::Platform::RUBY
9
+ spec.summary = "A Rails admin interface generator. Theme stolen from Redmine."
10
+ spec.email = "joost@joopp.com"
11
+ spec.homepage = "http://github.com/joost/admin_interface"
12
+ spec.description = "A Rails admin interface generator. Theme stolen from Redmine. Similar to web-app-theme but better ;)."
13
+ spec.authors = ['Joost Hietbrink']
14
14
 
15
- s.files = `git ls-files`.split("\n")
16
- s.require_paths = ["lib"]
15
+ # kaminari (pagination), meta_search (search), inherited_resources (coolness)
16
+ spec.add_dependency('kaminari', '>= 0.12.4')
17
+ spec.add_dependency('meta_search', '>= 1.1.0.pre2')
18
+ spec.add_dependency('inherited_resources', '>= 1.2.2')
19
+
20
+ spec.files = `git ls-files`.split("\n")
21
+ spec.require_paths = ["lib"]
17
22
  end
@@ -0,0 +1,7 @@
1
+ # Configure Rails 3.1 to include assets.
2
+ module AdminInterface
3
+
4
+ class Engine < ::Rails::Engine
5
+ end
6
+
7
+ end
@@ -2,12 +2,12 @@ class AdminInterfaceGenerator < Rails::Generators::Base
2
2
 
3
3
  source_root File.expand_path("../templates", __FILE__)
4
4
 
5
- def copy_image_files
6
- # Images
7
- # Copy all images to public/images/admin
8
- admin_image_dir = File.join('public', 'images', 'admin')
9
- directory('images', admin_image_dir)
10
- end
5
+ # def copy_image_files
6
+ # # Images
7
+ # # Copy all images to public/images/admin
8
+ # admin_image_dir = File.join('public', 'images', 'admin')
9
+ # directory('images', admin_image_dir)
10
+ # end
11
11
 
12
12
  def copy_controller_files
13
13
  copy_file("controllers/base_controller.rb", "app/controllers/admin/base_controller.rb")
@@ -16,24 +16,29 @@ class AdminInterfaceGenerator < Rails::Generators::Base
16
16
 
17
17
  def copy_view_files
18
18
  copy_file("views/layout.html.erb", "app/views/layouts/admin.html.erb")
19
- copy_file("views/index.html.erb", "app/views/admin/index.html.erb")
19
+ copy_file("views/index.html.erb", "app/views/admin/base/index.html.erb")
20
20
  end
21
21
 
22
- def copy_javascript_files
23
- copy_file("javascripts/jquery.admin.js", "public/javascripts/jquery.admin.js")
24
- end
25
-
26
- def copy_stylesheet_files
27
- copy_file("views/admin.css", "public/stylesheets/admin.css")
28
- end
22
+ # def copy_javascript_files
23
+ # copy_file("javascripts/jquery.admin.js", "public/javascripts/jquery.admin.js")
24
+ # end
25
+ #
26
+ # def copy_stylesheet_files
27
+ # copy_file("views/admin.css", "public/stylesheets/admin.css")
28
+ # end
29
29
 
30
30
  def copy_helper_files
31
- copy_file("helpers/admin_helper.rb", "app/helpers/admin_helper.rb")
31
+ copy_file("helpers/admin/base_helper.rb", "app/helpers/admin/base_helper.rb")
32
32
  end
33
33
 
34
- # def add_admin_route
35
- # route("namespace :admin do\n root :to => 'base#index'\n # resources :some_model do\n # delete 'delete_all', :on => :collection\n # end\n end")
36
- # end
34
+ def add_admin_route
35
+ route "namespace :admin do"
36
+ route " root :to => 'base#index"
37
+ route " # resources :some_model do"
38
+ route " # delete 'delete_all', :on => :collection"
39
+ route " # end"
40
+ route "end"
41
+ end
37
42
 
38
43
  def show_readme
39
44
  readme("INSTALL")
@@ -1,10 +1 @@
1
- Add following routes to config/routes.rb
2
-
3
- map.admin 'admin', :controller => 'admin'
4
- map.namespace :admin do |admin|
5
- # Add the following after you've used the admin_scaffold generator
6
- # admin.resources :model, :collection => {:destroy_all => :delete}
7
- end
8
-
9
- Change the app/controllers/admin_controller.rb to have a before filter
10
- only allowing admins to access it.
1
+ See the README file on what to add to your routes.rb file!
@@ -1,92 +1,27 @@
1
1
  class Admin::ResourceController < Admin::BaseController
2
2
 
3
- before_filter :filter_load_resources, :only => [:index]
4
- before_filter :filter_load_resource, :only => [:show, :edit, :update, :destroy]
3
+ inherit_resources # gem
4
+ defaults :route_prefix => 'admin'
5
5
 
6
- def index
7
- @resources = resource_class.paginate(:page => params[:page], :per_page => params[:per_page])
8
- end
9
-
10
- def show
11
- end
12
-
13
- def new
14
- @resource = resource_class.new
15
- instance_variable_set("@#{resource_instance_variable_name}", @resource)
16
- end
17
-
18
- def edit
19
- end
20
-
21
- def create
22
- @resource = resource_class.new(params_hash_for_resource)
23
- instance_variable_set("@#{resource_instance_variable_name}", @resource)
24
-
25
- if @resource.save
26
- redirect_to([:admin, @resource], :notice => 'Object was successfully created.')
27
- else
28
- render :action => "new"
29
- end
30
- end
31
-
32
- def update
33
- if @resource.update_attributes(params_hash_for_resource)
34
- redirect_to([:admin, @resource], :notice => 'Object was successfully updated.')
35
- else
36
- render :action => "edit"
37
- end
38
- end
39
-
40
- def destroy
41
- @resource.destroy
42
-
43
- redirect_to :action => :index
44
- end
6
+ # inherited_resources options
7
+ # nested_belongs_to :user, :optional => true
45
8
 
46
9
  def destroy_all
47
10
  destroyed_resources = resource_class.destroy_all(:id => params[:ids])
48
11
  flash[:notice] = "#{destroyed_resources.size} objects destroyed."
49
- redirect_to :action => :index
12
+ redirect_to :back
50
13
  end
51
14
 
52
15
  protected
53
16
 
54
- def current_resources
55
- @resources ||= resource_class.paginate(:page => params[:page], :per_page => params[:per_page])
56
- end
57
-
58
- def current_resource
59
- @resource ||= resource_class.find(params[:id])
60
- end
61
-
62
- def resource_class
63
- controller_name.singularize.camelize.constantize
64
- end
65
-
66
- def filter_load_resources
67
- instance_variable_set("@#{resources_instance_variable_name}", current_resources)
68
- end
69
-
70
- def filter_load_resource
71
- instance_variable_set("@#{resource_instance_variable_name}", current_resource)
72
- end
73
-
74
- def resources_instance_variable_name
75
- instance_variable_name
76
- end
77
-
78
- def resource_instance_variable_name
79
- instance_variable_name.singularize
80
- end
81
-
82
- # The name of the instance variable that load_object should assign to.
83
- # By default this is the controller_name.
84
- def instance_variable_name
85
- controller_name
86
- end
87
-
88
- def params_hash_for_resource
89
- params[resource_instance_variable_name]
17
+ # Overwrites inherited_resources gem version.
18
+ # Use meta_search and kaminari gem to load collection
19
+ def collection
20
+ @search ||= end_of_association_chain.search(params[:search])
21
+ get_collection_ivar || begin
22
+ c = @search.page(params[:page]).per(params[:per])
23
+ set_collection_ivar(c.respond_to?(:scoped) ? c.scoped : c)
24
+ end
90
25
  end
91
26
 
92
27
  end
@@ -0,0 +1,77 @@
1
+ module Admin::BaseHelper
2
+
3
+ # Following methods are ripped from RedMine but very nice!
4
+
5
+ # Overwrites content_for helper to set has_content?.
6
+ def content_for(name, content = nil, &block)
7
+ @has_content ||= {}
8
+ @has_content[name] = true
9
+ super(name, content, &block)
10
+ end
11
+
12
+ # Returns if we have content for a specific yield.
13
+ def has_content?(name)
14
+ (@has_content && @has_content[name]) || false
15
+ end
16
+
17
+ # Renders flash messages.
18
+ def render_flash_messages
19
+ flash_string = ''
20
+ flash.each do |k,v|
21
+ flash_string << content_tag('div', v, :class => "flash #{k}")
22
+ end
23
+ flash_string.html_safe
24
+ end
25
+
26
+ # Following are other helper methods.
27
+
28
+ def true_false_image(boolean)
29
+ raise ArgumentError, "Expected a Boolean as argument!" unless boolean.is_a?(FalseClass) || boolean.is_a?(TrueClass)
30
+ image_tag("admin/#{boolean}.png")
31
+ end
32
+
33
+ # Overwrites l helper.
34
+ # Make the I18n localize method work with nil dates!
35
+ # Attribute must be Date, DateTime or Time object or nil :)
36
+ # Returns '' if attribute is nil.
37
+ def l(time)
38
+ time.nil? ? '' : I18n.l(time)
39
+ end
40
+
41
+ # Following are extra helper for kaminari gem (pagination).
42
+ # It shows similar to Redmine.
43
+
44
+ # Shows paginate, paginate_info and perinate.
45
+ # Like: '1 2 3 4 5 ... Next › Last » (1-25/4028) | Per page: 25, 50, 100'
46
+ def navigate(collection)
47
+ return if collection.blank?
48
+ html = paginate(collection) + paginate_info(collection) + ' | ' + perinate(collection)
49
+ content_tag(:div, html.html_safe, :class => 'navigation').html_safe
50
+ end
51
+
52
+ # Shows pagination info like '(51-75/815)'.
53
+ # Uses I18n 'en.views.pagination_info' translation key.
54
+ def paginate_info(collection)
55
+ return if collection.blank?
56
+ first = collection.offset_value + 1
57
+ last = [collection.offset_value + collection.limit_value, collection.total_count].min
58
+ total = collection.total_count
59
+ html = I18n.t('views.pagination_info', :default => "(%{first}-%{last}/%{total})", :first => first, :last => last, :total => total)
60
+ content_tag(:nav, html.html_safe, :class => 'pagination info').html_safe
61
+ end
62
+
63
+ # Shows a 'Per page: 25 50 100'.
64
+ # Uses I18n 'en.views.perinate' translation key.
65
+ def perinate(collection, options = {})
66
+ return if collection.blank?
67
+ options.reverse_merge!(:values => [25, 50, 100])
68
+ page = (collection.offset_value / collection.limit_value).to_i + 1
69
+ html = I18n.t('views.perinate', :default => "Per page: ")
70
+ html += options[:values].collect do |value|
71
+ page = (collection.offset_value / value).to_i + 1 # This makes sure we always show the same first entry
72
+ link_to_if(value != collection.limit_value, value, params.merge(:per => value, :page => page))
73
+ end.join(', ')
74
+ content_tag(:nav, html.html_safe, :class => 'perination').html_safe
75
+ end
76
+
77
+ end
@@ -4,9 +4,8 @@
4
4
  <head>
5
5
  <meta http-equiv="Content-type" content="text/html;charset=UTF-8" />
6
6
  <title>Admin</title>
7
- <%= stylesheet_link_tag('admin') %>
8
- <%= javascript_include_tag :defaults %>
9
- <%= javascript_include_tag 'jquery.admin.js' %>
7
+ <%= stylesheet_link_tag 'admin' %>
8
+ <%= javascript_include_tag :application, 'jquery.admin.js' %>
10
9
  <%= csrf_meta_tag %>
11
10
  </head>
12
11
  <body>
@@ -24,9 +23,9 @@
24
23
  <div id="main-menu">
25
24
  <div class="tabs" id="admin_tabnav">
26
25
  <ul>
27
- <%= content_tag(:li, link_to('Overview', '/admin', :class => ((controller_name == 'admin') ? 'selected' : ''))) %>
26
+ <%= content_tag(:li, link_to('Overview', '/admin', :class => ((controller_name == 'base') ? 'selected' : ''))) %>
28
27
  <% Admin::BaseController.tabs.each do |tab| %>
29
- <%= content_tag(:li, link_to(tab.humanize, {:controller => "admin/#{tab}"}, :class => ((controller_name == tab) ? 'active' : ''))) %>
28
+ <%= content_tag(:li, link_to(tab.humanize, [:admin, tab], :class => ((controller_name == tab) ? 'selected' : ''))) %>
30
29
  <% end %>
31
30
  </ul>
32
31
  </div>
@@ -20,6 +20,15 @@ class AdminScaffoldGenerator < Rails::Generators::NamedBase
20
20
  alias_method :controller_file_name, :controller_file_name
21
21
  alias_method :controller_table_name, :controller_plural_name
22
22
 
23
+ def check_class_collisions # TODO
24
+ # Check for class naming collisions.
25
+ # class_collisions class_path, "Admin::#{class_name}Controller"
26
+ end
27
+
28
+ def copy_controller_files
29
+ template 'controller.rb', File.join(CONTROLLER_PATH, class_path, "#{controller_file_name}_controller.rb")
30
+ end
31
+
23
32
  def create_admin_scaffold
24
33
  @name = file_name
25
34
 
@@ -1,8 +1 @@
1
- Add following routes to config/routes.rb
2
-
3
- map.admin 'admin', :controller => 'admin'
4
- map.namespace :admin do |admin|
5
- # Add the following after you've used the admin_scaffold generator
6
- # admin.resources :model, :collection => {:destroy_all => :delete}
7
- end
8
-
1
+ See the README file on what to add to your routes.rb file!
@@ -1,8 +1,20 @@
1
1
  <div class="contextual">
2
2
  <%%= link_to 'New <%= singular_name %>', new_admin_<%= singular_name %>_path, :class => 'icon icon-add' %>
3
+ | <%%= form_for @search, :url => collection_url do |f| %>
4
+ <%%
5
+ # Check https://github.com/ernie/meta_search for options.
6
+ # Simply change :id_equals into :name_contains, etc.
7
+ %>
8
+ <%%= f.text_field :id_equals, :placeholder => 'Search by ID' %>
9
+ <%% end %>
3
10
  </div>
4
11
 
5
- <h2><%= plural_name.humanize %></h2>
12
+ <h2>
13
+ <%= # FIXME: parent? doesn't always work :S
14
+ link_to(parent.to_s, [:admin, parent]) + " &gt;".html_safe if defined?(parent) && parent?
15
+ %>
16
+ <%= plural_name.humanize %>
17
+ </h2>
6
18
 
7
19
  <%% if @<%= plural_name %>.blank? %>
8
20
  <p class="nodata">No data to display</p>
@@ -12,11 +24,7 @@
12
24
  <tr>
13
25
  <th class="checkbox"><%%= image_tag "admin/true.png" %></th>
14
26
  <% for attribute in attributes -%>
15
- <% if defined?(Searchlogic) -%>
16
- <th><%%= order(@search, {:by => :<%= attribute.name %>}) %></th>
17
- <% else -%>
18
- <th><%= attribute.human_name %></th>
19
- <% end -%>
27
+ <th><%%= sort_link(@search, :<%= attribute.name %>) %></th>
20
28
  <% end -%>
21
29
  <th></th>
22
30
  </tr>
@@ -50,10 +58,4 @@
50
58
  <%% end %>
51
59
  </table>
52
60
  <%% end %>
53
- <%
54
- # Remove unneeded stuff here
55
- if defined?(Searchlogic) || defined?(WillPaginate)
56
- # If you have WillPaginate installed (you should!)
57
- %>
58
- <%%= will_paginate(@<%= plural_name %>) %>
59
- <% end %>
61
+ <%%= navigate(@<%= plural_name %>) %>