activeadmin 0.4.4 → 0.5.0.pre

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of activeadmin might be problematic. Click here for more details.

Files changed (310) hide show
  1. data/.gitignore +3 -0
  2. data/.travis.yml +5 -0
  3. data/CHANGELOG.md +50 -0
  4. data/CONTRIBUTING.md +2 -4
  5. data/Gemfile +10 -4
  6. data/Guardfile +0 -1
  7. data/LICENSE +1 -1
  8. data/README.rdoc +19 -8
  9. data/Rakefile +10 -1
  10. data/activeadmin.gemspec +2 -1
  11. data/app/assets/javascripts/active_admin/application.js +3 -9
  12. data/app/assets/javascripts/active_admin/base.js +1 -0
  13. data/app/assets/javascripts/active_admin/components/jquery.aa.checkbox-toggler.js.coffee +64 -0
  14. data/app/assets/javascripts/active_admin/components/jquery.aa.dropdown-menu.js.coffee +107 -0
  15. data/app/assets/javascripts/active_admin/components/jquery.aa.popover.js.coffee +100 -0
  16. data/app/assets/javascripts/active_admin/components/jquery.aa.table-checkbox-toggler.js.coffee +27 -0
  17. data/app/assets/javascripts/active_admin/lib/namespace.js.coffee +3 -0
  18. data/app/assets/javascripts/active_admin/pages/application.js.coffee +13 -0
  19. data/app/assets/javascripts/active_admin/pages/batch_actions.js.coffee +26 -0
  20. data/app/assets/stylesheets/active_admin/_base.css.scss +32 -26
  21. data/app/assets/stylesheets/active_admin/_forms.css.scss +12 -5
  22. data/app/assets/stylesheets/active_admin/_header.css.scss +1 -2
  23. data/app/assets/stylesheets/active_admin/_typography.css.scss +1 -1
  24. data/app/assets/stylesheets/active_admin/components/_batch_actions.css.scss +11 -0
  25. data/app/assets/stylesheets/active_admin/components/_buttons.scss +1 -2
  26. data/app/assets/stylesheets/active_admin/components/_dropdown_menu.scss +151 -0
  27. data/app/assets/stylesheets/active_admin/components/_flash_messages.css.scss +3 -3
  28. data/app/assets/stylesheets/active_admin/components/_popovers.css.scss +123 -0
  29. data/app/assets/stylesheets/active_admin/components/_status_tags.scss +1 -1
  30. data/app/assets/stylesheets/active_admin/components/_table_tools.css.scss +20 -27
  31. data/app/assets/stylesheets/active_admin/components/_tables.css.scss +1 -0
  32. data/app/assets/stylesheets/active_admin/mixins/_buttons.css.scss +38 -36
  33. data/app/assets/stylesheets/active_admin/mixins/_gradients.css.scss +5 -5
  34. data/app/assets/stylesheets/active_admin/mixins/_icons.css.scss +7 -3
  35. data/app/assets/stylesheets/active_admin/mixins/_variables.css.scss +19 -17
  36. data/app/assets/stylesheets/active_admin/pages/_logged_out.scss +2 -2
  37. data/app/assets/stylesheets/active_admin/print.css.scss +290 -0
  38. data/app/views/active_admin/dashboard/index.html.arb +1 -1
  39. data/app/views/active_admin/devise/passwords/edit.html.erb +17 -14
  40. data/app/views/active_admin/devise/passwords/new.html.erb +4 -4
  41. data/app/views/active_admin/devise/sessions/new.html.erb +6 -6
  42. data/app/views/active_admin/devise/shared/_links.erb +6 -6
  43. data/app/views/active_admin/page/index.html.arb +1 -1
  44. data/app/views/active_admin/resource/edit.html.arb +1 -1
  45. data/app/views/active_admin/resource/index.csv.erb +1 -1
  46. data/app/views/active_admin/resource/index.html.arb +1 -1
  47. data/app/views/active_admin/resource/new.html.arb +1 -1
  48. data/app/views/active_admin/resource/show.html.arb +1 -1
  49. data/app/views/layouts/active_admin.html.arb +1 -1
  50. data/app/views/layouts/active_admin_logged_out.html.erb +2 -2
  51. data/cucumber.yml +1 -1
  52. data/docs/0-installation.md +10 -1
  53. data/docs/{9-custom-pages.md → 10-custom-pages.md} +0 -0
  54. data/docs/2-resource-customization.md +19 -1
  55. data/docs/3-index-pages.md +31 -0
  56. data/docs/4-csv-format.md +9 -0
  57. data/docs/6-show-screens.md +1 -1
  58. data/docs/9-batch-actions.md +161 -0
  59. data/features/dashboard.feature +31 -8
  60. data/features/development_reloading.feature +1 -1
  61. data/features/edit_page.feature +3 -3
  62. data/features/i18n.feature +35 -0
  63. data/features/index/batch_actions.feature +98 -0
  64. data/features/index/filters.feature +26 -0
  65. data/features/index/format_as_csv.feature +35 -0
  66. data/features/index/index_as_table.feature +30 -2
  67. data/features/index/index_blank_slate.feature +8 -3
  68. data/features/index/index_scopes.feature +130 -24
  69. data/features/index/page_title.feature +12 -0
  70. data/features/new_page.feature +3 -3
  71. data/features/registering_pages.feature +61 -0
  72. data/features/root_to.feature +17 -0
  73. data/features/show/default_content.feature +1 -1
  74. data/features/show/page_title.feature +14 -0
  75. data/features/sidebar_sections.feature +26 -0
  76. data/features/site_title.feature +1 -1
  77. data/features/specifying_actions.feature +7 -6
  78. data/features/step_definitions/action_link_steps.rb +1 -1
  79. data/features/step_definitions/additional_web_steps.rb +7 -1
  80. data/features/step_definitions/batch_action_steps.rb +94 -0
  81. data/features/step_definitions/configuration_steps.rb +30 -8
  82. data/features/step_definitions/factory_steps.rb +12 -0
  83. data/features/step_definitions/format_steps.rb +6 -2
  84. data/features/step_definitions/i18n_steps.rb +3 -0
  85. data/features/step_definitions/table_steps.rb +114 -0
  86. data/features/step_definitions/user_steps.rb +30 -4
  87. data/features/support/env.rb +54 -15
  88. data/features/support/paths.rb +2 -0
  89. data/features/users/logging_in.feature +1 -1
  90. data/features/users/logging_out.feature +2 -1
  91. data/features/users/resetting_password.feature +34 -0
  92. data/lib/active_admin.rb +46 -7
  93. data/lib/active_admin/application.rb +30 -15
  94. data/lib/active_admin/base_controller/menu.rb +3 -3
  95. data/lib/active_admin/batch_actions.rb +17 -0
  96. data/lib/active_admin/batch_actions/controller.rb +25 -0
  97. data/lib/active_admin/batch_actions/resource_extension.rb +126 -0
  98. data/lib/active_admin/batch_actions/views/batch_action_form.rb +35 -0
  99. data/lib/active_admin/batch_actions/views/batch_action_popover.rb +28 -0
  100. data/lib/active_admin/batch_actions/views/batch_action_selector.rb +63 -0
  101. data/lib/active_admin/batch_actions/views/selection_cells.rb +37 -0
  102. data/lib/active_admin/comments.rb +5 -2
  103. data/lib/active_admin/comments/comment.rb +4 -3
  104. data/lib/active_admin/comments/views/active_admin_comments.rb +5 -5
  105. data/lib/active_admin/component.rb +1 -18
  106. data/lib/active_admin/csv_builder.rb +8 -3
  107. data/lib/active_admin/dashboards.rb +21 -4
  108. data/lib/active_admin/dashboards/dashboard_controller.rb +1 -5
  109. data/lib/active_admin/dependency_checker.rb +1 -1
  110. data/lib/active_admin/dsl.rb +61 -4
  111. data/lib/active_admin/engine.rb +1 -1
  112. data/lib/active_admin/filters.rb +8 -0
  113. data/lib/active_admin/filters/dsl.rb +12 -0
  114. data/lib/active_admin/filters/forms.rb +93 -0
  115. data/lib/active_admin/filters/resource_extension.rb +92 -0
  116. data/lib/active_admin/form_builder.rb +88 -33
  117. data/lib/active_admin/helpers/collection.rb +23 -0
  118. data/lib/active_admin/helpers/optional_display.rb +1 -1
  119. data/lib/active_admin/inputs/filter_select_input.rb +1 -1
  120. data/lib/active_admin/locales/bg.yml +37 -1
  121. data/lib/active_admin/locales/ca.yml +36 -0
  122. data/lib/active_admin/locales/cs.yml +36 -0
  123. data/lib/active_admin/locales/da.yml +36 -0
  124. data/lib/active_admin/locales/de.yml +42 -0
  125. data/lib/active_admin/locales/en.yml +27 -2
  126. data/lib/active_admin/locales/es.yml +45 -4
  127. data/lib/active_admin/locales/fr.yml +22 -0
  128. data/lib/active_admin/locales/{he_il.yml → he.yml} +37 -2
  129. data/lib/active_admin/locales/hr.yml +49 -5
  130. data/lib/active_admin/locales/hu.yml +21 -0
  131. data/lib/active_admin/locales/it.yml +36 -1
  132. data/lib/active_admin/locales/ja.yml +36 -0
  133. data/lib/active_admin/locales/ko.yml +36 -1
  134. data/lib/active_admin/locales/lv.yml +28 -2
  135. data/lib/active_admin/locales/nl.yml +42 -1
  136. data/lib/active_admin/locales/no-NB.yml +15 -0
  137. data/lib/active_admin/locales/pl.yml +45 -1
  138. data/lib/active_admin/locales/pt-BR.yml +36 -1
  139. data/lib/active_admin/locales/ro.yml +67 -0
  140. data/lib/active_admin/locales/ru.yml +43 -3
  141. data/lib/active_admin/locales/sv-SE.yml +41 -1
  142. data/lib/active_admin/locales/tr.yml +80 -0
  143. data/lib/active_admin/locales/vi.yml +80 -0
  144. data/lib/active_admin/locales/{zh_cn.yml → zh-CN.yml} +42 -2
  145. data/lib/active_admin/locales/zh-TW.yml +36 -1
  146. data/lib/active_admin/menu.rb +55 -30
  147. data/lib/active_admin/menu_builder.rb +65 -0
  148. data/lib/active_admin/menu_item.rb +55 -14
  149. data/lib/active_admin/namespace.rb +25 -55
  150. data/lib/active_admin/page.rb +15 -10
  151. data/lib/active_admin/resource.rb +9 -0
  152. data/lib/active_admin/resource/action_items.rb +4 -4
  153. data/lib/active_admin/resource/controllers.rb +1 -1
  154. data/lib/active_admin/resource/menu.rb +19 -21
  155. data/lib/active_admin/resource/naming.rb +55 -45
  156. data/lib/active_admin/resource/sidebars.rb +0 -13
  157. data/lib/active_admin/resource_collection.rb +10 -10
  158. data/lib/active_admin/resource_controller.rb +5 -5
  159. data/lib/active_admin/resource_controller/actions.rb +2 -0
  160. data/lib/active_admin/resource_controller/collection.rb +13 -4
  161. data/lib/active_admin/resource_dsl.rb +12 -6
  162. data/lib/active_admin/router.rb +27 -8
  163. data/lib/active_admin/scope.rb +1 -0
  164. data/lib/active_admin/sidebar_section.rb +2 -6
  165. data/lib/active_admin/version.rb +1 -1
  166. data/lib/active_admin/view_factory.rb +18 -13
  167. data/lib/active_admin/view_helpers.rb +0 -2
  168. data/lib/active_admin/view_helpers/auto_link_helper.rb +2 -1
  169. data/lib/active_admin/view_helpers/breadcrumb_helper.rb +24 -25
  170. data/lib/active_admin/view_helpers/display_helper.rb +1 -1
  171. data/lib/active_admin/view_helpers/fields_for.rb +44 -0
  172. data/lib/active_admin/view_helpers/form_helper.rb +6 -0
  173. data/lib/active_admin/view_helpers/view_factory_helper.rb +1 -1
  174. data/lib/active_admin/views/components/action_list_popover.rb +29 -0
  175. data/lib/active_admin/views/components/attributes_table.rb +6 -2
  176. data/lib/active_admin/views/components/dropdown_menu.rb +73 -0
  177. data/lib/active_admin/views/components/paginated_collection.rb +13 -14
  178. data/lib/active_admin/views/components/popover.rb +27 -0
  179. data/lib/active_admin/views/components/scopes.rb +8 -13
  180. data/lib/active_admin/views/components/sidebar_section.rb +1 -1
  181. data/lib/active_admin/views/components/site_title.rb +55 -0
  182. data/lib/active_admin/views/components/status_tag.rb +4 -4
  183. data/lib/active_admin/views/components/table_for.rb +18 -18
  184. data/lib/active_admin/views/dashboard_section_renderer.rb +1 -1
  185. data/lib/active_admin/views/footer.rb +18 -0
  186. data/lib/active_admin/views/header.rb +31 -0
  187. data/lib/active_admin/views/index_as_block.rb +3 -0
  188. data/lib/active_admin/views/index_as_blog.rb +4 -0
  189. data/lib/active_admin/views/index_as_grid.rb +2 -0
  190. data/lib/active_admin/views/index_as_table.rb +19 -6
  191. data/lib/active_admin/views/pages/base.rb +14 -48
  192. data/lib/active_admin/views/pages/form.rb +3 -3
  193. data/lib/active_admin/views/pages/index.rb +56 -24
  194. data/lib/active_admin/views/pages/layout.rb +2 -2
  195. data/lib/active_admin/views/pages/page.rb +10 -4
  196. data/lib/active_admin/views/pages/show.rb +11 -8
  197. data/lib/active_admin/views/tabbed_navigation.rb +3 -3
  198. data/lib/active_admin/views/title_bar.rb +50 -0
  199. data/lib/active_admin/views/utility_nav.rb +41 -0
  200. data/lib/generators/active_admin/assets/assets_generator.rb +1 -1
  201. data/lib/generators/active_admin/assets/templates/3.0/active_admin.js +1 -0
  202. data/lib/generators/active_admin/assets/templates/3.1/active_admin.css.scss +26 -3
  203. data/lib/generators/active_admin/devise/devise_generator.rb +2 -2
  204. data/lib/generators/active_admin/install/install_generator.rb +10 -10
  205. data/lib/generators/active_admin/install/templates/active_admin.rb.erb +21 -1
  206. data/lib/generators/active_admin/install/templates/admin_user.rb.erb +20 -0
  207. data/lib/generators/active_admin/install/templates/dashboard.rb +33 -0
  208. data/lib/generators/active_admin/resource/templates/admin.rb +1 -1
  209. data/spec/integration/memory_spec.rb +1 -11
  210. data/spec/javascripts/coffeescripts/jquery.aa.checkbox-toggler-spec.js.coffee +50 -0
  211. data/spec/javascripts/coffeescripts/jquery.aa.popover-spec.js.coffee +82 -0
  212. data/spec/javascripts/coffeescripts/jquery.aa.table-checkbox-toggler-spec.js.coffee +34 -0
  213. data/spec/javascripts/compiled/jquery.aa.checkbox-toggler-spec.js +60 -0
  214. data/spec/javascripts/compiled/jquery.aa.popover-spec.js +106 -0
  215. data/spec/javascripts/compiled/jquery.aa.table-checkbox-toggler-spec.js +37 -0
  216. data/spec/javascripts/fixtures/checkboxes.html +9 -0
  217. data/spec/javascripts/fixtures/table_checkboxes.html +17 -0
  218. data/spec/javascripts/helpers/SpecHelper.js +3 -0
  219. data/spec/javascripts/helpers/vendor/jasmine-fixture-0.0.5.js +108 -0
  220. data/spec/javascripts/helpers/vendor/jasmine-jquery.js +288 -0
  221. data/spec/javascripts/helpers/vendor/sinon-1.2.0.js +2915 -0
  222. data/spec/javascripts/support/jasmine.yml +74 -0
  223. data/spec/javascripts/support/jasmine_config.rb +23 -0
  224. data/spec/javascripts/support/jasmine_runner.rb +32 -0
  225. data/spec/javascripts/support/jquery-ui-1.8.16.custom.min.js +34 -0
  226. data/spec/javascripts/support/jquery.min.js +4 -0
  227. data/spec/spec_helper.rb +13 -13
  228. data/spec/spec_helper_without_rails.rb +2 -3
  229. data/spec/support/detect_rails_version.rb +16 -10
  230. data/spec/support/rails_template.rb +13 -1
  231. data/spec/support/templates/admin/stores.rb +1 -0
  232. data/spec/support/templates/en.yml +6 -0
  233. data/spec/unit/action_builder_spec.rb +38 -0
  234. data/spec/unit/application_spec.rb +12 -16
  235. data/spec/unit/base_controller_shared_examples.rb +3 -6
  236. data/spec/unit/batch_actions/resource_spec.rb +91 -0
  237. data/spec/unit/batch_actions/settings_spec.rb +61 -0
  238. data/spec/unit/breadcrumbs_spec.rb +33 -0
  239. data/spec/unit/comments_spec.rb +6 -0
  240. data/spec/unit/config_shared_examples.rb +17 -64
  241. data/spec/unit/csv_builder_spec.rb +12 -2
  242. data/spec/unit/dashboard_controller_spec.rb +11 -5
  243. data/spec/unit/dsl_include_spec.rb +20 -0
  244. data/spec/unit/{filter_form_builder_spec.rb → filters/filter_form_builder_spec.rb} +10 -7
  245. data/spec/unit/filters/resource_spec.rb +60 -0
  246. data/spec/unit/form_builder_spec.rb +180 -28
  247. data/spec/unit/helpers/collection_spec.rb +65 -0
  248. data/spec/unit/menu_item_spec.rb +48 -53
  249. data/spec/unit/menu_spec.rb +46 -32
  250. data/spec/unit/namespace/register_page_spec.rb +0 -6
  251. data/spec/unit/namespace/register_resource_spec.rb +1 -8
  252. data/spec/unit/namespace_spec.rb +8 -2
  253. data/spec/unit/page_spec.rb +20 -8
  254. data/spec/unit/resource/naming_spec.rb +27 -26
  255. data/spec/unit/resource/sidebars_spec.rb +0 -7
  256. data/spec/unit/resource_collection_spec.rb +11 -11
  257. data/spec/unit/resource_controller/collection_spec.rb +23 -1
  258. data/spec/unit/resource_controller/sidebars_spec.rb +46 -0
  259. data/spec/unit/resource_controller_spec.rb +43 -0
  260. data/spec/unit/resource_registration_spec.rb +2 -13
  261. data/spec/unit/resource_spec.rb +0 -42
  262. data/spec/unit/routing_spec.rb +60 -14
  263. data/spec/unit/scope_spec.rb +7 -0
  264. data/spec/unit/view_factory_spec.rb +9 -6
  265. data/spec/unit/view_helpers/fields_for_spec.rb +41 -0
  266. data/spec/unit/view_helpers/form_helper_spec.rb +18 -0
  267. data/spec/unit/views/components/action_list_popover_spec.rb +30 -0
  268. data/spec/unit/views/components/attributes_table_spec.rb +32 -20
  269. data/spec/unit/views/components/batch_action_popover_spec.rb +33 -0
  270. data/spec/unit/views/components/blank_slate_spec.rb +5 -3
  271. data/spec/unit/views/components/columns_spec.rb +32 -22
  272. data/spec/unit/views/components/paginated_collection_spec.rb +54 -12
  273. data/spec/unit/views/components/panel_spec.rb +11 -6
  274. data/spec/unit/views/components/popover_spec.rb +33 -0
  275. data/spec/unit/views/components/sidebar_section_spec.rb +6 -6
  276. data/spec/unit/views/components/site_title_spec.rb +78 -0
  277. data/spec/unit/views/components/status_tag_spec.rb +17 -10
  278. data/spec/unit/views/components/table_for_spec.rb +37 -17
  279. data/spec/unit/views/pages/layout_spec.rb +51 -10
  280. data/spec/unit/views/tabbed_navigation_spec.rb +44 -23
  281. data/tasks/js.rake +32 -0
  282. data/tasks/test.rake +1 -1
  283. metadata +233 -200
  284. data/lib/active_admin/arbre.rb +0 -22
  285. data/lib/active_admin/arbre/builder.rb +0 -125
  286. data/lib/active_admin/arbre/context.rb +0 -45
  287. data/lib/active_admin/arbre/html/attributes.rb +0 -20
  288. data/lib/active_admin/arbre/html/class_list.rb +0 -24
  289. data/lib/active_admin/arbre/html/collection.rb +0 -27
  290. data/lib/active_admin/arbre/html/document.rb +0 -42
  291. data/lib/active_admin/arbre/html/element.rb +0 -161
  292. data/lib/active_admin/arbre/html/html5_elements.rb +0 -47
  293. data/lib/active_admin/arbre/html/tag.rb +0 -145
  294. data/lib/active_admin/arbre/html/text_node.rb +0 -35
  295. data/lib/active_admin/filter_form_builder.rb +0 -53
  296. data/lib/active_admin/renderer.rb +0 -87
  297. data/lib/active_admin/resource_controller/filters.rb +0 -58
  298. data/lib/active_admin/stylesheets/active_admin/mixins/_utilities.scss +0 -0
  299. data/lib/active_admin/view_helpers/filter_form_helper.rb +0 -36
  300. data/lib/active_admin/view_helpers/renderer_helper.rb +0 -29
  301. data/lib/active_admin/views/header_renderer.rb +0 -82
  302. data/lib/generators/active_admin/assets/templates/dashboards.rb +0 -36
  303. data/lib/generators/active_admin/install/templates/dashboards.rb +0 -44
  304. data/spec/unit/arbre/context_spec.rb +0 -35
  305. data/spec/unit/arbre/html/element_finder_methods_spec.rb +0 -110
  306. data/spec/unit/arbre/html/element_spec.rb +0 -236
  307. data/spec/unit/arbre/html/tag_attributes_spec.rb +0 -61
  308. data/spec/unit/arbre/html/tag_spec.rb +0 -63
  309. data/spec/unit/arbre/html_spec.rb +0 -228
  310. data/spec/unit/renderer_spec.rb +0 -126
@@ -1,22 +0,0 @@
1
- require "active_admin/arbre/builder"
2
- require "active_admin/arbre/context"
3
- require "active_admin/arbre/html/element"
4
- require "active_admin/arbre/html/attributes"
5
- require "active_admin/arbre/html/collection"
6
- require "active_admin/arbre/html/class_list"
7
- require "active_admin/arbre/html/tag"
8
- require "active_admin/arbre/html/document"
9
- require "active_admin/arbre/html/html5_elements"
10
- require "active_admin/arbre/html/text_node"
11
-
12
- # Arbre - The DOM Tree in Ruby
13
- #
14
- # Arbre is a ruby library for building HTML in pure Object Oriented Ruby
15
- module Arbre
16
- end
17
-
18
- require 'action_view'
19
-
20
- ActionView::Template.register_template_handler :arb, lambda { |template|
21
- "self.class.send :include, Arbre::Builder; @_helpers = self; @__current_dom_element__ = Arbre::Context.new(assigns, self); begin; #{template.source}; end; current_dom_context"
22
- }
@@ -1,125 +0,0 @@
1
- module Arbre
2
-
3
- # Include this module in any context to start building html.
4
- #
5
- # assigns = {}
6
- # include Arbre::Builder
7
- # span("foo").to_s #=> "<span>foo</span>
8
- #
9
- # When you include the module, you are required to setup 2 variables:
10
- #
11
- # * assigns: This is a hash that includes local variables
12
- # * helpers: This is an object that provides helper methods to all
13
- # objects within the context.
14
- module Builder
15
-
16
- # Retrieve the current DOM context.
17
- #
18
- # If no `@__current_dom_element__` has been set, this method will
19
- # setup the initial context.
20
- #
21
- # @return [Arbre::Element] the current element that is in context
22
- def current_dom_context
23
- @__current_dom_element__ ||= Arbre::Context.new(assigns, helpers)
24
- @__current_dom_element__.current_dom_context
25
- end
26
-
27
- def helpers
28
- @_helpers
29
- end
30
-
31
- # Implements the method lookup chain. When you call a method that
32
- # doesn't exist, we:
33
- #
34
- # 1. Try to call the method on the current DOM context
35
- # 2. Return an assigned variable of the same name
36
- # 3. Call the method on the helper object
37
- # 4. Call super
38
- #
39
- def method_missing(name, *args, &block)
40
- if current_dom_context.respond_to?(name)
41
- current_dom_context.send name, *args, &block
42
- elsif assigns && assigns.has_key?(name)
43
- assigns[name]
44
- elsif helpers.respond_to?(name)
45
- helpers.send(name, *args, &block)
46
- else
47
- super
48
- end
49
- end
50
-
51
- module BuilderMethods
52
- def build_tag(klass, *args, &block)
53
- tag = klass.new(assigns, helpers)
54
-
55
- # If you passed in a block and want the object
56
- if block_given? && block.arity > 0
57
- # Set out context to the tag, and pass responsibility to the tag
58
- with_current_dom_context tag do
59
- tag.build(*args, &block)
60
- end
61
- else
62
- # Build the tag
63
- tag.build(*args)
64
-
65
- # Render the blocks contents
66
- if block_given?
67
- with_current_dom_context tag do
68
- append_return_block(yield)
69
- end
70
- end
71
- end
72
-
73
- tag
74
- end
75
-
76
- def insert_tag(klass, *args, &block)
77
- tag = build_tag(klass, *args, &block)
78
- current_dom_context.add_child(tag)
79
- tag
80
- end
81
-
82
- def current_dom_context
83
- @__current_dom_element_buffer__ ||= [self]
84
- current_element = @__current_dom_element_buffer__.last
85
- if current_element == self
86
- self
87
- else
88
- current_element.current_dom_context
89
- end
90
- end
91
-
92
- def with_current_dom_context(tag)
93
- raise ArgumentError, "Can't be in the context of nil. #{@__current_dom_element_buffer__.inspect}" unless tag
94
- current_dom_context # Ensure a context is setup
95
- @__current_dom_element_buffer__.push tag
96
- yield
97
- @__current_dom_element_buffer__.pop
98
- end
99
- alias_method :within, :with_current_dom_context
100
-
101
- # Appends the value to the current DOM element if there are no
102
- # existing DOM Children and it responds to #to_s
103
- def append_return_block(tag)
104
- return nil if current_dom_context.children?
105
-
106
- if appendable_return_block?(tag)
107
- current_dom_context << Arbre::HTML::TextNode.from_string(tag.to_s)
108
- end
109
- end
110
-
111
- def appendable_return_block?(tag)
112
- appendable = !tag.is_a?(Arbre::HTML::Element) && tag.respond_to?(:to_s)
113
-
114
- # Ruby 1.9 returns empty array as "[]"
115
- if tag.respond_to?(:empty?) && tag.empty?
116
- appendable = false
117
- end
118
-
119
- appendable
120
- end
121
- end
122
-
123
- end
124
- end
125
-
@@ -1,45 +0,0 @@
1
- require 'active_admin/arbre/html/element'
2
-
3
- module Arbre
4
- class Context < Arbre::HTML::Element
5
- def indent_level
6
- # A context does not increment the indent_level
7
- super - 1
8
- end
9
-
10
- def bytesize
11
- cached_html.bytesize
12
- end
13
- alias :length :bytesize
14
-
15
- def respond_to?(method)
16
- super || cached_html.respond_to?(method)
17
- end
18
-
19
- # Webservers treat Arbre::Context as a string. We override
20
- # method_missing to delegate to the string representation
21
- # of the html.
22
- def method_missing(method, *args, &block)
23
- if cached_html.respond_to? method
24
- cached_html.send method, *args, &block
25
- else
26
- super
27
- end
28
- end
29
-
30
- private
31
-
32
- # Caches the rendered HTML so that we don't re-render just to
33
- # get the content lenght or to delegate a method to the HTML
34
- def cached_html
35
- if defined?(@cached_html)
36
- @cached_html
37
- else
38
- html = to_s
39
- @cached_html = html if html.length > 0
40
- html
41
- end
42
- end
43
-
44
- end
45
- end
@@ -1,20 +0,0 @@
1
- module Arbre
2
- module HTML
3
-
4
- class Attributes < Hash
5
-
6
- def to_s
7
- self.collect do |name, value|
8
- "#{html_escape(name)}=\"#{html_escape(value)}\""
9
- end.join(" ")
10
- end
11
-
12
- protected
13
-
14
- def html_escape(s)
15
- ERB::Util.html_escape(s)
16
- end
17
- end
18
-
19
- end
20
- end
@@ -1,24 +0,0 @@
1
- require 'set'
2
-
3
- module Arbre
4
- module HTML
5
-
6
- # Holds a set of classes
7
- class ClassList < Set
8
-
9
- def add(class_names)
10
- class_names.to_s.split(" ").each do |class_name|
11
- super(class_name)
12
- end
13
- self
14
- end
15
- alias :<< :add
16
-
17
- def to_s
18
- to_a.join(" ")
19
- end
20
-
21
- end
22
-
23
- end
24
- end
@@ -1,27 +0,0 @@
1
- module Arbre
2
- module HTML
3
-
4
- # Stores a collection of Element objects
5
- class Collection < Array
6
-
7
- def +(other)
8
- self.class.new(super)
9
- end
10
-
11
- def -(other)
12
- self.class.new(super)
13
- end
14
-
15
- def &(other)
16
- self.class.new(super)
17
- end
18
-
19
- def to_s
20
- self.collect do |element|
21
- element.to_s
22
- end.join.html_safe
23
- end
24
- end
25
-
26
- end
27
- end
@@ -1,42 +0,0 @@
1
- module Arbre
2
- module HTML
3
-
4
- class Document < Tag
5
-
6
- def build(*args)
7
- super
8
- build_head
9
- build_body
10
- end
11
-
12
- def document
13
- self
14
- end
15
-
16
- def tag_name
17
- 'html'
18
- end
19
-
20
- def doctype
21
- '<!DOCTYPE html>'.html_safe
22
- end
23
-
24
- def to_s
25
- doctype + super
26
- end
27
-
28
- protected
29
-
30
- def build_head
31
- @head = head do
32
- meta :"http-equiv" => "Content-type", :content => "text/html; charset=utf-8"
33
- end
34
- end
35
-
36
- def build_body
37
- @body = body
38
- end
39
- end
40
-
41
- end
42
- end
@@ -1,161 +0,0 @@
1
- module Arbre
2
- module HTML
3
-
4
- class Element
5
- include ::Arbre::Builder
6
- include ::Arbre::Builder::BuilderMethods
7
-
8
- attr_accessor :parent
9
- attr_reader :children
10
-
11
- def self.builder_method(method_name)
12
- ::Arbre::Builder::BuilderMethods.class_eval <<-EOF, __FILE__, __LINE__
13
- def #{method_name}(*args, &block)
14
- insert_tag ::#{self.name}, *args, &block
15
- end
16
- EOF
17
- end
18
-
19
- def initialize(assigns = {}, helpers = nil)
20
- @_assigns, @_helpers = assigns, helpers
21
- @children = Collection.new
22
- end
23
-
24
- def assigns
25
- @_assigns
26
- end
27
-
28
- def helpers
29
- @_helpers
30
- end
31
-
32
- def tag_name
33
- @tag_name ||= self.class.name.demodulize.downcase
34
- end
35
-
36
- def build(*args, &block)
37
- # Render the block passing ourselves in
38
- append_return_block(block.call(self)) if block
39
- end
40
-
41
- def add_child(child)
42
- return unless child
43
-
44
- if child.is_a?(Array)
45
- child.each{|item| add_child(item) }
46
- return @children
47
- end
48
-
49
- # If its not an element, wrap it in a TextNode
50
- unless child.is_a?(Element)
51
- child = Arbre::HTML::TextNode.from_string(child)
52
- end
53
-
54
- if child.respond_to?(:parent)
55
- # Remove the child
56
- child.parent.remove_child(child) if child.parent
57
- # Set ourselves as the parent
58
- child.parent = self
59
- end
60
-
61
- @children << child
62
- end
63
-
64
- def remove_child(child)
65
- child.parent = nil if child.respond_to?(:parent=)
66
- @children.delete(child)
67
- end
68
-
69
- def <<(child)
70
- add_child(child)
71
- end
72
-
73
- def children?
74
- @children.any?
75
- end
76
-
77
- def parent=(parent)
78
- @parent = parent
79
- end
80
-
81
- def parent?
82
- !@parent.nil?
83
- end
84
-
85
- def document
86
- parent.document if parent?
87
- end
88
-
89
- def content=(contents)
90
- clear_children!
91
- add_child(contents)
92
- end
93
-
94
- def get_elements_by_tag_name(tag_name)
95
- elements = Collection.new
96
- children.each do |child|
97
- elements << child if child.tag_name == tag_name
98
- elements.concat(child.get_elements_by_tag_name(tag_name))
99
- end
100
- elements
101
- end
102
- alias_method :find_by_tag, :get_elements_by_tag_name
103
-
104
- def get_elements_by_class_name(class_name)
105
- elements = Collection.new
106
- children.each do |child|
107
- elements << child if child.class_list =~ /#{class_name}/
108
- elements.concat(child.get_elements_by_tag_name(tag_name))
109
- end
110
- elements
111
- end
112
- alias_method :find_by_class, :get_elements_by_class_name
113
-
114
- def content
115
- children.to_s
116
- end
117
-
118
- def html_safe
119
- to_s
120
- end
121
-
122
- def indent_level
123
- parent? ? parent.indent_level + 1 : 0
124
- end
125
-
126
- def each(&block)
127
- [to_s].each(&block)
128
- end
129
-
130
- def to_str
131
- to_s
132
- end
133
-
134
- def to_s
135
- content
136
- end
137
-
138
- def +(element)
139
- case element
140
- when Element, Collection
141
- else
142
- element = Arbre::HTML::TextNode.from_string(element)
143
- end
144
- Collection.new([self]) + element
145
- end
146
-
147
- def to_ary
148
- Collection.new [self]
149
- end
150
- alias_method :to_a, :to_ary
151
-
152
- private
153
-
154
- # Resets the Elements children
155
- def clear_children!
156
- @children.clear
157
- end
158
- end
159
-
160
- end
161
- end