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.
- data/.gitignore +3 -0
- data/.travis.yml +5 -0
- data/CHANGELOG.md +50 -0
- data/CONTRIBUTING.md +2 -4
- data/Gemfile +10 -4
- data/Guardfile +0 -1
- data/LICENSE +1 -1
- data/README.rdoc +19 -8
- data/Rakefile +10 -1
- data/activeadmin.gemspec +2 -1
- data/app/assets/javascripts/active_admin/application.js +3 -9
- data/app/assets/javascripts/active_admin/base.js +1 -0
- data/app/assets/javascripts/active_admin/components/jquery.aa.checkbox-toggler.js.coffee +64 -0
- data/app/assets/javascripts/active_admin/components/jquery.aa.dropdown-menu.js.coffee +107 -0
- data/app/assets/javascripts/active_admin/components/jquery.aa.popover.js.coffee +100 -0
- data/app/assets/javascripts/active_admin/components/jquery.aa.table-checkbox-toggler.js.coffee +27 -0
- data/app/assets/javascripts/active_admin/lib/namespace.js.coffee +3 -0
- data/app/assets/javascripts/active_admin/pages/application.js.coffee +13 -0
- data/app/assets/javascripts/active_admin/pages/batch_actions.js.coffee +26 -0
- data/app/assets/stylesheets/active_admin/_base.css.scss +32 -26
- data/app/assets/stylesheets/active_admin/_forms.css.scss +12 -5
- data/app/assets/stylesheets/active_admin/_header.css.scss +1 -2
- data/app/assets/stylesheets/active_admin/_typography.css.scss +1 -1
- data/app/assets/stylesheets/active_admin/components/_batch_actions.css.scss +11 -0
- data/app/assets/stylesheets/active_admin/components/_buttons.scss +1 -2
- data/app/assets/stylesheets/active_admin/components/_dropdown_menu.scss +151 -0
- data/app/assets/stylesheets/active_admin/components/_flash_messages.css.scss +3 -3
- data/app/assets/stylesheets/active_admin/components/_popovers.css.scss +123 -0
- data/app/assets/stylesheets/active_admin/components/_status_tags.scss +1 -1
- data/app/assets/stylesheets/active_admin/components/_table_tools.css.scss +20 -27
- data/app/assets/stylesheets/active_admin/components/_tables.css.scss +1 -0
- data/app/assets/stylesheets/active_admin/mixins/_buttons.css.scss +38 -36
- data/app/assets/stylesheets/active_admin/mixins/_gradients.css.scss +5 -5
- data/app/assets/stylesheets/active_admin/mixins/_icons.css.scss +7 -3
- data/app/assets/stylesheets/active_admin/mixins/_variables.css.scss +19 -17
- data/app/assets/stylesheets/active_admin/pages/_logged_out.scss +2 -2
- data/app/assets/stylesheets/active_admin/print.css.scss +290 -0
- data/app/views/active_admin/dashboard/index.html.arb +1 -1
- data/app/views/active_admin/devise/passwords/edit.html.erb +17 -14
- data/app/views/active_admin/devise/passwords/new.html.erb +4 -4
- data/app/views/active_admin/devise/sessions/new.html.erb +6 -6
- data/app/views/active_admin/devise/shared/_links.erb +6 -6
- data/app/views/active_admin/page/index.html.arb +1 -1
- data/app/views/active_admin/resource/edit.html.arb +1 -1
- data/app/views/active_admin/resource/index.csv.erb +1 -1
- data/app/views/active_admin/resource/index.html.arb +1 -1
- data/app/views/active_admin/resource/new.html.arb +1 -1
- data/app/views/active_admin/resource/show.html.arb +1 -1
- data/app/views/layouts/active_admin.html.arb +1 -1
- data/app/views/layouts/active_admin_logged_out.html.erb +2 -2
- data/cucumber.yml +1 -1
- data/docs/0-installation.md +10 -1
- data/docs/{9-custom-pages.md → 10-custom-pages.md} +0 -0
- data/docs/2-resource-customization.md +19 -1
- data/docs/3-index-pages.md +31 -0
- data/docs/4-csv-format.md +9 -0
- data/docs/6-show-screens.md +1 -1
- data/docs/9-batch-actions.md +161 -0
- data/features/dashboard.feature +31 -8
- data/features/development_reloading.feature +1 -1
- data/features/edit_page.feature +3 -3
- data/features/i18n.feature +35 -0
- data/features/index/batch_actions.feature +98 -0
- data/features/index/filters.feature +26 -0
- data/features/index/format_as_csv.feature +35 -0
- data/features/index/index_as_table.feature +30 -2
- data/features/index/index_blank_slate.feature +8 -3
- data/features/index/index_scopes.feature +130 -24
- data/features/index/page_title.feature +12 -0
- data/features/new_page.feature +3 -3
- data/features/registering_pages.feature +61 -0
- data/features/root_to.feature +17 -0
- data/features/show/default_content.feature +1 -1
- data/features/show/page_title.feature +14 -0
- data/features/sidebar_sections.feature +26 -0
- data/features/site_title.feature +1 -1
- data/features/specifying_actions.feature +7 -6
- data/features/step_definitions/action_link_steps.rb +1 -1
- data/features/step_definitions/additional_web_steps.rb +7 -1
- data/features/step_definitions/batch_action_steps.rb +94 -0
- data/features/step_definitions/configuration_steps.rb +30 -8
- data/features/step_definitions/factory_steps.rb +12 -0
- data/features/step_definitions/format_steps.rb +6 -2
- data/features/step_definitions/i18n_steps.rb +3 -0
- data/features/step_definitions/table_steps.rb +114 -0
- data/features/step_definitions/user_steps.rb +30 -4
- data/features/support/env.rb +54 -15
- data/features/support/paths.rb +2 -0
- data/features/users/logging_in.feature +1 -1
- data/features/users/logging_out.feature +2 -1
- data/features/users/resetting_password.feature +34 -0
- data/lib/active_admin.rb +46 -7
- data/lib/active_admin/application.rb +30 -15
- data/lib/active_admin/base_controller/menu.rb +3 -3
- data/lib/active_admin/batch_actions.rb +17 -0
- data/lib/active_admin/batch_actions/controller.rb +25 -0
- data/lib/active_admin/batch_actions/resource_extension.rb +126 -0
- data/lib/active_admin/batch_actions/views/batch_action_form.rb +35 -0
- data/lib/active_admin/batch_actions/views/batch_action_popover.rb +28 -0
- data/lib/active_admin/batch_actions/views/batch_action_selector.rb +63 -0
- data/lib/active_admin/batch_actions/views/selection_cells.rb +37 -0
- data/lib/active_admin/comments.rb +5 -2
- data/lib/active_admin/comments/comment.rb +4 -3
- data/lib/active_admin/comments/views/active_admin_comments.rb +5 -5
- data/lib/active_admin/component.rb +1 -18
- data/lib/active_admin/csv_builder.rb +8 -3
- data/lib/active_admin/dashboards.rb +21 -4
- data/lib/active_admin/dashboards/dashboard_controller.rb +1 -5
- data/lib/active_admin/dependency_checker.rb +1 -1
- data/lib/active_admin/dsl.rb +61 -4
- data/lib/active_admin/engine.rb +1 -1
- data/lib/active_admin/filters.rb +8 -0
- data/lib/active_admin/filters/dsl.rb +12 -0
- data/lib/active_admin/filters/forms.rb +93 -0
- data/lib/active_admin/filters/resource_extension.rb +92 -0
- data/lib/active_admin/form_builder.rb +88 -33
- data/lib/active_admin/helpers/collection.rb +23 -0
- data/lib/active_admin/helpers/optional_display.rb +1 -1
- data/lib/active_admin/inputs/filter_select_input.rb +1 -1
- data/lib/active_admin/locales/bg.yml +37 -1
- data/lib/active_admin/locales/ca.yml +36 -0
- data/lib/active_admin/locales/cs.yml +36 -0
- data/lib/active_admin/locales/da.yml +36 -0
- data/lib/active_admin/locales/de.yml +42 -0
- data/lib/active_admin/locales/en.yml +27 -2
- data/lib/active_admin/locales/es.yml +45 -4
- data/lib/active_admin/locales/fr.yml +22 -0
- data/lib/active_admin/locales/{he_il.yml → he.yml} +37 -2
- data/lib/active_admin/locales/hr.yml +49 -5
- data/lib/active_admin/locales/hu.yml +21 -0
- data/lib/active_admin/locales/it.yml +36 -1
- data/lib/active_admin/locales/ja.yml +36 -0
- data/lib/active_admin/locales/ko.yml +36 -1
- data/lib/active_admin/locales/lv.yml +28 -2
- data/lib/active_admin/locales/nl.yml +42 -1
- data/lib/active_admin/locales/no-NB.yml +15 -0
- data/lib/active_admin/locales/pl.yml +45 -1
- data/lib/active_admin/locales/pt-BR.yml +36 -1
- data/lib/active_admin/locales/ro.yml +67 -0
- data/lib/active_admin/locales/ru.yml +43 -3
- data/lib/active_admin/locales/sv-SE.yml +41 -1
- data/lib/active_admin/locales/tr.yml +80 -0
- data/lib/active_admin/locales/vi.yml +80 -0
- data/lib/active_admin/locales/{zh_cn.yml → zh-CN.yml} +42 -2
- data/lib/active_admin/locales/zh-TW.yml +36 -1
- data/lib/active_admin/menu.rb +55 -30
- data/lib/active_admin/menu_builder.rb +65 -0
- data/lib/active_admin/menu_item.rb +55 -14
- data/lib/active_admin/namespace.rb +25 -55
- data/lib/active_admin/page.rb +15 -10
- data/lib/active_admin/resource.rb +9 -0
- data/lib/active_admin/resource/action_items.rb +4 -4
- data/lib/active_admin/resource/controllers.rb +1 -1
- data/lib/active_admin/resource/menu.rb +19 -21
- data/lib/active_admin/resource/naming.rb +55 -45
- data/lib/active_admin/resource/sidebars.rb +0 -13
- data/lib/active_admin/resource_collection.rb +10 -10
- data/lib/active_admin/resource_controller.rb +5 -5
- data/lib/active_admin/resource_controller/actions.rb +2 -0
- data/lib/active_admin/resource_controller/collection.rb +13 -4
- data/lib/active_admin/resource_dsl.rb +12 -6
- data/lib/active_admin/router.rb +27 -8
- data/lib/active_admin/scope.rb +1 -0
- data/lib/active_admin/sidebar_section.rb +2 -6
- data/lib/active_admin/version.rb +1 -1
- data/lib/active_admin/view_factory.rb +18 -13
- data/lib/active_admin/view_helpers.rb +0 -2
- data/lib/active_admin/view_helpers/auto_link_helper.rb +2 -1
- data/lib/active_admin/view_helpers/breadcrumb_helper.rb +24 -25
- data/lib/active_admin/view_helpers/display_helper.rb +1 -1
- data/lib/active_admin/view_helpers/fields_for.rb +44 -0
- data/lib/active_admin/view_helpers/form_helper.rb +6 -0
- data/lib/active_admin/view_helpers/view_factory_helper.rb +1 -1
- data/lib/active_admin/views/components/action_list_popover.rb +29 -0
- data/lib/active_admin/views/components/attributes_table.rb +6 -2
- data/lib/active_admin/views/components/dropdown_menu.rb +73 -0
- data/lib/active_admin/views/components/paginated_collection.rb +13 -14
- data/lib/active_admin/views/components/popover.rb +27 -0
- data/lib/active_admin/views/components/scopes.rb +8 -13
- data/lib/active_admin/views/components/sidebar_section.rb +1 -1
- data/lib/active_admin/views/components/site_title.rb +55 -0
- data/lib/active_admin/views/components/status_tag.rb +4 -4
- data/lib/active_admin/views/components/table_for.rb +18 -18
- data/lib/active_admin/views/dashboard_section_renderer.rb +1 -1
- data/lib/active_admin/views/footer.rb +18 -0
- data/lib/active_admin/views/header.rb +31 -0
- data/lib/active_admin/views/index_as_block.rb +3 -0
- data/lib/active_admin/views/index_as_blog.rb +4 -0
- data/lib/active_admin/views/index_as_grid.rb +2 -0
- data/lib/active_admin/views/index_as_table.rb +19 -6
- data/lib/active_admin/views/pages/base.rb +14 -48
- data/lib/active_admin/views/pages/form.rb +3 -3
- data/lib/active_admin/views/pages/index.rb +56 -24
- data/lib/active_admin/views/pages/layout.rb +2 -2
- data/lib/active_admin/views/pages/page.rb +10 -4
- data/lib/active_admin/views/pages/show.rb +11 -8
- data/lib/active_admin/views/tabbed_navigation.rb +3 -3
- data/lib/active_admin/views/title_bar.rb +50 -0
- data/lib/active_admin/views/utility_nav.rb +41 -0
- data/lib/generators/active_admin/assets/assets_generator.rb +1 -1
- data/lib/generators/active_admin/assets/templates/3.0/active_admin.js +1 -0
- data/lib/generators/active_admin/assets/templates/3.1/active_admin.css.scss +26 -3
- data/lib/generators/active_admin/devise/devise_generator.rb +2 -2
- data/lib/generators/active_admin/install/install_generator.rb +10 -10
- data/lib/generators/active_admin/install/templates/active_admin.rb.erb +21 -1
- data/lib/generators/active_admin/install/templates/admin_user.rb.erb +20 -0
- data/lib/generators/active_admin/install/templates/dashboard.rb +33 -0
- data/lib/generators/active_admin/resource/templates/admin.rb +1 -1
- data/spec/integration/memory_spec.rb +1 -11
- data/spec/javascripts/coffeescripts/jquery.aa.checkbox-toggler-spec.js.coffee +50 -0
- data/spec/javascripts/coffeescripts/jquery.aa.popover-spec.js.coffee +82 -0
- data/spec/javascripts/coffeescripts/jquery.aa.table-checkbox-toggler-spec.js.coffee +34 -0
- data/spec/javascripts/compiled/jquery.aa.checkbox-toggler-spec.js +60 -0
- data/spec/javascripts/compiled/jquery.aa.popover-spec.js +106 -0
- data/spec/javascripts/compiled/jquery.aa.table-checkbox-toggler-spec.js +37 -0
- data/spec/javascripts/fixtures/checkboxes.html +9 -0
- data/spec/javascripts/fixtures/table_checkboxes.html +17 -0
- data/spec/javascripts/helpers/SpecHelper.js +3 -0
- data/spec/javascripts/helpers/vendor/jasmine-fixture-0.0.5.js +108 -0
- data/spec/javascripts/helpers/vendor/jasmine-jquery.js +288 -0
- data/spec/javascripts/helpers/vendor/sinon-1.2.0.js +2915 -0
- data/spec/javascripts/support/jasmine.yml +74 -0
- data/spec/javascripts/support/jasmine_config.rb +23 -0
- data/spec/javascripts/support/jasmine_runner.rb +32 -0
- data/spec/javascripts/support/jquery-ui-1.8.16.custom.min.js +34 -0
- data/spec/javascripts/support/jquery.min.js +4 -0
- data/spec/spec_helper.rb +13 -13
- data/spec/spec_helper_without_rails.rb +2 -3
- data/spec/support/detect_rails_version.rb +16 -10
- data/spec/support/rails_template.rb +13 -1
- data/spec/support/templates/admin/stores.rb +1 -0
- data/spec/support/templates/en.yml +6 -0
- data/spec/unit/action_builder_spec.rb +38 -0
- data/spec/unit/application_spec.rb +12 -16
- data/spec/unit/base_controller_shared_examples.rb +3 -6
- data/spec/unit/batch_actions/resource_spec.rb +91 -0
- data/spec/unit/batch_actions/settings_spec.rb +61 -0
- data/spec/unit/breadcrumbs_spec.rb +33 -0
- data/spec/unit/comments_spec.rb +6 -0
- data/spec/unit/config_shared_examples.rb +17 -64
- data/spec/unit/csv_builder_spec.rb +12 -2
- data/spec/unit/dashboard_controller_spec.rb +11 -5
- data/spec/unit/dsl_include_spec.rb +20 -0
- data/spec/unit/{filter_form_builder_spec.rb → filters/filter_form_builder_spec.rb} +10 -7
- data/spec/unit/filters/resource_spec.rb +60 -0
- data/spec/unit/form_builder_spec.rb +180 -28
- data/spec/unit/helpers/collection_spec.rb +65 -0
- data/spec/unit/menu_item_spec.rb +48 -53
- data/spec/unit/menu_spec.rb +46 -32
- data/spec/unit/namespace/register_page_spec.rb +0 -6
- data/spec/unit/namespace/register_resource_spec.rb +1 -8
- data/spec/unit/namespace_spec.rb +8 -2
- data/spec/unit/page_spec.rb +20 -8
- data/spec/unit/resource/naming_spec.rb +27 -26
- data/spec/unit/resource/sidebars_spec.rb +0 -7
- data/spec/unit/resource_collection_spec.rb +11 -11
- data/spec/unit/resource_controller/collection_spec.rb +23 -1
- data/spec/unit/resource_controller/sidebars_spec.rb +46 -0
- data/spec/unit/resource_controller_spec.rb +43 -0
- data/spec/unit/resource_registration_spec.rb +2 -13
- data/spec/unit/resource_spec.rb +0 -42
- data/spec/unit/routing_spec.rb +60 -14
- data/spec/unit/scope_spec.rb +7 -0
- data/spec/unit/view_factory_spec.rb +9 -6
- data/spec/unit/view_helpers/fields_for_spec.rb +41 -0
- data/spec/unit/view_helpers/form_helper_spec.rb +18 -0
- data/spec/unit/views/components/action_list_popover_spec.rb +30 -0
- data/spec/unit/views/components/attributes_table_spec.rb +32 -20
- data/spec/unit/views/components/batch_action_popover_spec.rb +33 -0
- data/spec/unit/views/components/blank_slate_spec.rb +5 -3
- data/spec/unit/views/components/columns_spec.rb +32 -22
- data/spec/unit/views/components/paginated_collection_spec.rb +54 -12
- data/spec/unit/views/components/panel_spec.rb +11 -6
- data/spec/unit/views/components/popover_spec.rb +33 -0
- data/spec/unit/views/components/sidebar_section_spec.rb +6 -6
- data/spec/unit/views/components/site_title_spec.rb +78 -0
- data/spec/unit/views/components/status_tag_spec.rb +17 -10
- data/spec/unit/views/components/table_for_spec.rb +37 -17
- data/spec/unit/views/pages/layout_spec.rb +51 -10
- data/spec/unit/views/tabbed_navigation_spec.rb +44 -23
- data/tasks/js.rake +32 -0
- data/tasks/test.rake +1 -1
- metadata +233 -200
- data/lib/active_admin/arbre.rb +0 -22
- data/lib/active_admin/arbre/builder.rb +0 -125
- data/lib/active_admin/arbre/context.rb +0 -45
- data/lib/active_admin/arbre/html/attributes.rb +0 -20
- data/lib/active_admin/arbre/html/class_list.rb +0 -24
- data/lib/active_admin/arbre/html/collection.rb +0 -27
- data/lib/active_admin/arbre/html/document.rb +0 -42
- data/lib/active_admin/arbre/html/element.rb +0 -161
- data/lib/active_admin/arbre/html/html5_elements.rb +0 -47
- data/lib/active_admin/arbre/html/tag.rb +0 -145
- data/lib/active_admin/arbre/html/text_node.rb +0 -35
- data/lib/active_admin/filter_form_builder.rb +0 -53
- data/lib/active_admin/renderer.rb +0 -87
- data/lib/active_admin/resource_controller/filters.rb +0 -58
- data/lib/active_admin/stylesheets/active_admin/mixins/_utilities.scss +0 -0
- data/lib/active_admin/view_helpers/filter_form_helper.rb +0 -36
- data/lib/active_admin/view_helpers/renderer_helper.rb +0 -29
- data/lib/active_admin/views/header_renderer.rb +0 -82
- data/lib/generators/active_admin/assets/templates/dashboards.rb +0 -36
- data/lib/generators/active_admin/install/templates/dashboards.rb +0 -44
- data/spec/unit/arbre/context_spec.rb +0 -35
- data/spec/unit/arbre/html/element_finder_methods_spec.rb +0 -110
- data/spec/unit/arbre/html/element_spec.rb +0 -236
- data/spec/unit/arbre/html/tag_attributes_spec.rb +0 -61
- data/spec/unit/arbre/html/tag_spec.rb +0 -63
- data/spec/unit/arbre/html_spec.rb +0 -228
- data/spec/unit/renderer_spec.rb +0 -126
data/lib/active_admin/arbre.rb
DELETED
@@ -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
|