nsm-activeadmin 0.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.document +5 -0
- data/.gitignore +34 -0
- data/.travis.yml +4 -0
- data/.yardopts +8 -0
- data/CHANGELOG.rdoc +76 -0
- data/Gemfile +39 -0
- data/LICENSE +25 -0
- data/README.rdoc +487 -0
- data/Rakefile +27 -0
- data/activeadmin.gemspec +28 -0
- data/app/assets/images/active_admin/admin_notes_icon.png +0 -0
- data/app/assets/images/active_admin/datepicker/datepicker-header-bg.png +0 -0
- data/app/assets/images/active_admin/datepicker/datepicker-input-icon.png +0 -0
- data/app/assets/images/active_admin/datepicker/datepicker-next-link-icon.png +0 -0
- data/app/assets/images/active_admin/datepicker/datepicker-nipple.png +0 -0
- data/app/assets/images/active_admin/datepicker/datepicker-prev-link-icon.png +0 -0
- data/app/assets/images/active_admin/loading.gif +0 -0
- data/app/assets/images/active_admin/nested_menu_arrow.gif +0 -0
- data/app/assets/images/active_admin/nested_menu_arrow_dark.gif +0 -0
- data/app/assets/images/active_admin/orderable.png +0 -0
- data/app/assets/javascripts/active_admin/base.js +12 -0
- data/app/assets/javascripts/active_admin/vendor.js +382 -0
- data/app/assets/stylesheets/active_admin/_base.css.scss +400 -0
- data/app/assets/stylesheets/active_admin/_forms.css.scss +256 -0
- data/app/assets/stylesheets/active_admin/_header.css.scss +110 -0
- data/app/assets/stylesheets/active_admin/_mixins.css.scss +1 -0
- data/app/assets/stylesheets/active_admin/_typography.css.scss +100 -0
- data/app/assets/stylesheets/active_admin/components/_comments.css.scss +40 -0
- data/app/assets/stylesheets/active_admin/components/_date_picker.css.scss +123 -0
- data/app/assets/stylesheets/active_admin/components/_flash_messages.css.scss +38 -0
- data/app/assets/stylesheets/active_admin/mixins/_all.css.scss +8 -0
- data/app/assets/stylesheets/active_admin/mixins/_buttons.css.scss +27 -0
- data/app/assets/stylesheets/active_admin/mixins/_gradients.css.scss +29 -0
- data/app/assets/stylesheets/active_admin/mixins/_icons.css.scss +20 -0
- data/app/assets/stylesheets/active_admin/mixins/_reset.css.scss +165 -0
- data/app/assets/stylesheets/active_admin/mixins/_rounded.css.scss +43 -0
- data/app/assets/stylesheets/active_admin/mixins/_sections.css.scss +34 -0
- data/app/assets/stylesheets/active_admin/mixins/_shadows.css.scss +21 -0
- data/app/assets/stylesheets/active_admin/mixins/_variables.css.scss +21 -0
- data/app/views/active_admin/dashboard/index.html.arb +1 -0
- data/app/views/active_admin/devise/mailer/reset_password_instructions.html.erb +8 -0
- data/app/views/active_admin/devise/mailer/unlock_instructions.html.erb +7 -0
- data/app/views/active_admin/devise/passwords/edit.html.erb +16 -0
- data/app/views/active_admin/devise/passwords/new.html.erb +14 -0
- data/app/views/active_admin/devise/sessions/new.html.erb +18 -0
- data/app/views/active_admin/devise/shared/_links.erb +20 -0
- data/app/views/active_admin/devise/unlocks/new.html.erb +12 -0
- data/app/views/active_admin/resource/edit.html.arb +1 -0
- data/app/views/active_admin/resource/index.csv.erb +20 -0
- data/app/views/active_admin/resource/index.html.arb +1 -0
- data/app/views/active_admin/resource/new.html.arb +1 -0
- data/app/views/active_admin/resource/show.html.arb +1 -0
- data/app/views/layouts/active_admin.html.arb +1 -0
- data/app/views/layouts/active_admin_logged_out.html.erb +35 -0
- data/cucumber.yml +2 -0
- data/docs/1-general-configuration.md +52 -0
- data/docs/2-resource-customization.md +35 -0
- data/docs/3-index-pages.md +55 -0
- data/docs/3-index-pages/index-as-block.md +16 -0
- data/docs/3-index-pages/index-as-blog.md +61 -0
- data/docs/3-index-pages/index-as-grid.md +21 -0
- data/docs/3-index-pages/index-as-table.md +74 -0
- data/docs/4-csv-format.md +14 -0
- data/docs/5-forms.md +39 -0
- data/docs/6-show-screens.md +22 -0
- data/docs/7-sidebars.md +35 -0
- data/docs/8-custom-actions.md +123 -0
- data/features/comments/commenting.feature +112 -0
- data/features/comments/viewing_index.feature +19 -0
- data/features/dashboard.feature +26 -0
- data/features/edit_page.feature +106 -0
- data/features/first_boot.feature +16 -0
- data/features/global_navigation.feature +30 -0
- data/features/index/format_as_csv.feature +46 -0
- data/features/index/formats.feature +12 -0
- data/features/index/index_as_block.feature +15 -0
- data/features/index/index_as_blog.feature +50 -0
- data/features/index/index_as_grid.feature +45 -0
- data/features/index/index_as_table.feature +81 -0
- data/features/index/index_blank_slate.feature +55 -0
- data/features/index/index_scopes.feature +52 -0
- data/features/index/pagination.feature +17 -0
- data/features/menu.feature +26 -0
- data/features/new_page.feature +75 -0
- data/features/registering_assets.feature +35 -0
- data/features/registering_resources.feature +33 -0
- data/features/show/default_content.feature +43 -0
- data/features/show/page_title.feature +33 -0
- data/features/sidebar_sections.feature +127 -0
- data/features/specifying_actions.feature +87 -0
- data/features/step_definitions/action_item_steps.rb +7 -0
- data/features/step_definitions/additional_web_steps.rb +77 -0
- data/features/step_definitions/asset_steps.rb +7 -0
- data/features/step_definitions/attribute_steps.rb +13 -0
- data/features/step_definitions/comment_steps.rb +8 -0
- data/features/step_definitions/configuration_steps.rb +31 -0
- data/features/step_definitions/dashboard_steps.rb +11 -0
- data/features/step_definitions/factory_steps.rb +29 -0
- data/features/step_definitions/flash_steps.rb +3 -0
- data/features/step_definitions/format_steps.rb +35 -0
- data/features/step_definitions/index_scope_steps.rb +20 -0
- data/features/step_definitions/layout_steps.rb +3 -0
- data/features/step_definitions/menu_steps.rb +7 -0
- data/features/step_definitions/pagination_steps.rb +8 -0
- data/features/step_definitions/sidebar_steps.rb +7 -0
- data/features/step_definitions/tab_steps.rb +3 -0
- data/features/step_definitions/user_steps.rb +26 -0
- data/features/step_definitions/web_steps.rb +211 -0
- data/features/sti_resource.feature +61 -0
- data/features/support/env.rb +90 -0
- data/features/support/paths.rb +50 -0
- data/features/support/selectors.rb +45 -0
- data/features/users/logging_in.feature +34 -0
- data/features/users/logging_out.feature +13 -0
- data/lib/active_admin.rb +74 -0
- data/lib/active_admin/abstract_view_factory.rb +95 -0
- data/lib/active_admin/application.rb +228 -0
- data/lib/active_admin/arbre.rb +23 -0
- data/lib/active_admin/arbre/attributes.rb +20 -0
- data/lib/active_admin/arbre/class_list.rb +28 -0
- data/lib/active_admin/arbre/collection.rb +27 -0
- data/lib/active_admin/arbre/context.rb +14 -0
- data/lib/active_admin/arbre/core_extensions.rb +5 -0
- data/lib/active_admin/arbre/document.rb +42 -0
- data/lib/active_admin/arbre/element.rb +151 -0
- data/lib/active_admin/arbre/html.rb +84 -0
- data/lib/active_admin/arbre/html5_elements.rb +47 -0
- data/lib/active_admin/arbre/tag.rb +137 -0
- data/lib/active_admin/arbre/text_node.rb +35 -0
- data/lib/active_admin/asset_registration.rb +34 -0
- data/lib/active_admin/callbacks.rb +89 -0
- data/lib/active_admin/comments.rb +88 -0
- data/lib/active_admin/comments/comment.rb +21 -0
- data/lib/active_admin/comments/configuration.rb +18 -0
- data/lib/active_admin/comments/namespace_helper.rb +14 -0
- data/lib/active_admin/comments/resource_helper.rb +17 -0
- data/lib/active_admin/comments/show_page_helper.rb +23 -0
- data/lib/active_admin/comments/views.rb +3 -0
- data/lib/active_admin/comments/views/active_admin_comment.rb +0 -0
- data/lib/active_admin/comments/views/active_admin_comments.rb +82 -0
- data/lib/active_admin/component.rb +22 -0
- data/lib/active_admin/controller_action.rb +12 -0
- data/lib/active_admin/csv_builder.rb +45 -0
- data/lib/active_admin/dashboards.rb +48 -0
- data/lib/active_admin/dashboards/dashboard_controller.rb +38 -0
- data/lib/active_admin/dashboards/section.rb +34 -0
- data/lib/active_admin/deprecation.rb +36 -0
- data/lib/active_admin/devise.rb +43 -0
- data/lib/active_admin/dsl.rb +224 -0
- data/lib/active_admin/engine.rb +4 -0
- data/lib/active_admin/event.rb +31 -0
- data/lib/active_admin/form_builder.rb +109 -0
- data/lib/active_admin/helpers/optional_display.rb +34 -0
- data/lib/active_admin/helpers/settings.rb +63 -0
- data/lib/active_admin/iconic.rb +51 -0
- data/lib/active_admin/iconic/icons.rb +142 -0
- data/lib/active_admin/locales/da.yml +28 -0
- data/lib/active_admin/locales/en.yml +40 -0
- data/lib/active_admin/locales/es.yml +39 -0
- data/lib/active_admin/locales/it.yml +39 -0
- data/lib/active_admin/locales/pt-BR.yml +36 -0
- data/lib/active_admin/locales/ru.yml +40 -0
- data/lib/active_admin/locales/zh_cn.yml +40 -0
- data/lib/active_admin/menu.rb +42 -0
- data/lib/active_admin/menu_item.rb +73 -0
- data/lib/active_admin/namespace.rb +206 -0
- data/lib/active_admin/page_config.rb +15 -0
- data/lib/active_admin/reloader.rb +30 -0
- data/lib/active_admin/renderer.rb +87 -0
- data/lib/active_admin/resource.rb +151 -0
- data/lib/active_admin/resource/action_items.rb +88 -0
- data/lib/active_admin/resource/belongs_to.rb +31 -0
- data/lib/active_admin/resource/menu.rb +45 -0
- data/lib/active_admin/resource/naming.rb +36 -0
- data/lib/active_admin/resource/scopes.rb +33 -0
- data/lib/active_admin/resource/sidebars.rb +36 -0
- data/lib/active_admin/resource_controller.rb +103 -0
- data/lib/active_admin/resource_controller/action_builder.rb +21 -0
- data/lib/active_admin/resource_controller/actions.rb +79 -0
- data/lib/active_admin/resource_controller/callbacks.rb +47 -0
- data/lib/active_admin/resource_controller/collection.rb +144 -0
- data/lib/active_admin/resource_controller/filters.rb +58 -0
- data/lib/active_admin/resource_controller/form.rb +42 -0
- data/lib/active_admin/resource_controller/menu.rb +29 -0
- data/lib/active_admin/resource_controller/page_configurations.rb +53 -0
- data/lib/active_admin/resource_controller/scoping.rb +36 -0
- data/lib/active_admin/resource_controller/sidebars.rb +18 -0
- data/lib/active_admin/router.rb +85 -0
- data/lib/active_admin/sass/active_admin.scss +3 -0
- data/lib/active_admin/sass/css_loader.rb +16 -0
- data/lib/active_admin/sass/helpers.rb +40 -0
- data/lib/active_admin/scope.rb +17 -0
- data/lib/active_admin/sidebar_section.rb +41 -0
- data/lib/active_admin/stylesheets/active_admin/mixins/_utilities.scss +0 -0
- data/lib/active_admin/version.rb +3 -0
- data/lib/active_admin/view_factory.rb +23 -0
- data/lib/active_admin/view_helpers.rb +22 -0
- data/lib/active_admin/view_helpers/active_admin_application_helper.rb +12 -0
- data/lib/active_admin/view_helpers/assigns_with_indifferent_access_helper.rb +7 -0
- data/lib/active_admin/view_helpers/auto_link_helper.rb +42 -0
- data/lib/active_admin/view_helpers/breadcrumb_helper.rb +29 -0
- data/lib/active_admin/view_helpers/display_helper.rb +38 -0
- data/lib/active_admin/view_helpers/filter_form_helper.rb +186 -0
- data/lib/active_admin/view_helpers/form_helper.rb +13 -0
- data/lib/active_admin/view_helpers/icon_helper.rb +12 -0
- data/lib/active_admin/view_helpers/method_or_proc_helper.rb +26 -0
- data/lib/active_admin/view_helpers/renderer_helper.rb +29 -0
- data/lib/active_admin/view_helpers/sidebar_helper.rb +15 -0
- data/lib/active_admin/view_helpers/title_helper.rb +11 -0
- data/lib/active_admin/view_helpers/view_factory_helper.rb +11 -0
- data/lib/active_admin/views.rb +8 -0
- data/lib/active_admin/views/action_items.rb +17 -0
- data/lib/active_admin/views/components/attributes_table.rb +66 -0
- data/lib/active_admin/views/components/blank_slate.rb +33 -0
- data/lib/active_admin/views/components/columns.rb +47 -0
- data/lib/active_admin/views/components/paginated_collection.rb +92 -0
- data/lib/active_admin/views/components/panel.rb +26 -0
- data/lib/active_admin/views/components/scopes.rb +70 -0
- data/lib/active_admin/views/components/sidebar_section.rb +28 -0
- data/lib/active_admin/views/components/status_tag.rb +55 -0
- data/lib/active_admin/views/components/table_for.rb +193 -0
- data/lib/active_admin/views/dashboard_section_renderer.rb +19 -0
- data/lib/active_admin/views/header_renderer.rb +53 -0
- data/lib/active_admin/views/index_as_block.rb +29 -0
- data/lib/active_admin/views/index_as_blog.rb +129 -0
- data/lib/active_admin/views/index_as_grid.rb +70 -0
- data/lib/active_admin/views/index_as_table.rb +148 -0
- data/lib/active_admin/views/pages/base.rb +155 -0
- data/lib/active_admin/views/pages/dashboard.rb +62 -0
- data/lib/active_admin/views/pages/edit.rb +28 -0
- data/lib/active_admin/views/pages/index.rb +74 -0
- data/lib/active_admin/views/pages/layout.rb +26 -0
- data/lib/active_admin/views/pages/new.rb +28 -0
- data/lib/active_admin/views/pages/show.rb +56 -0
- data/lib/active_admin/views/tabs_renderer.rb +58 -0
- data/lib/activeadmin.rb +1 -0
- data/lib/generators/active_admin/assets/assets_generator.rb +21 -0
- data/lib/generators/active_admin/assets/templates/3.0/active_admin.js +427 -0
- data/lib/generators/active_admin/assets/templates/3.1/active_admin.css.scss +6 -0
- data/lib/generators/active_admin/assets/templates/3.1/active_admin.js +1 -0
- data/lib/generators/active_admin/assets/templates/dashboards.rb +36 -0
- data/lib/generators/active_admin/devise/devise_generator.rb +49 -0
- data/lib/generators/active_admin/install/install_generator.rb +44 -0
- data/lib/generators/active_admin/install/templates/active_admin.rb.erb +93 -0
- data/lib/generators/active_admin/install/templates/dashboards.rb +38 -0
- data/lib/generators/active_admin/install/templates/migrations/1_create_admin_notes.rb +16 -0
- data/lib/generators/active_admin/install/templates/migrations/2_move_admin_notes_to_comments.rb +25 -0
- data/lib/generators/active_admin/resource/resource_generator.rb +16 -0
- data/lib/generators/active_admin/resource/templates/admin.rb +3 -0
- data/script/local +44 -0
- data/script/use_rails +45 -0
- data/spec/integration/belongs_to_spec.rb +42 -0
- data/spec/integration/default_namespace.rb +77 -0
- data/spec/integration/javascript_spec.rb +20 -0
- data/spec/integration/stylesheets_spec.rb +41 -0
- data/spec/spec_helper.rb +157 -0
- data/spec/support/detect_rails_version.rb +11 -0
- data/spec/support/integration_example_group.rb +33 -0
- data/spec/support/jslint.yml +80 -0
- data/spec/support/rails_template.rb +32 -0
- data/spec/support/rails_template_with_data.rb +33 -0
- data/spec/support/templates/cucumber.rb +24 -0
- data/spec/unit/abstract_view_factory_spec.rb +79 -0
- data/spec/unit/action_builder_spec.rb +88 -0
- data/spec/unit/application_spec.rb +78 -0
- data/spec/unit/arbre/html/context_spec.rb +22 -0
- data/spec/unit/arbre/html/element_finder_methods_spec.rb +54 -0
- data/spec/unit/arbre/html/element_spec.rb +224 -0
- data/spec/unit/arbre/html/tag_attributes_spec.rb +61 -0
- data/spec/unit/arbre/html/tag_spec.rb +63 -0
- data/spec/unit/arbre/html_spec.rb +210 -0
- data/spec/unit/asset_registration_spec.rb +37 -0
- data/spec/unit/auto_link_spec.rb +39 -0
- data/spec/unit/belongs_to_spec.rb +45 -0
- data/spec/unit/breadcrumbs_spec.rb +110 -0
- data/spec/unit/comments_spec.rb +57 -0
- data/spec/unit/component_spec.rb +18 -0
- data/spec/unit/controller_filters_spec.rb +34 -0
- data/spec/unit/csv_builder_spec.rb +83 -0
- data/spec/unit/dashboard_controller_spec.rb +26 -0
- data/spec/unit/dashboard_section_spec.rb +56 -0
- data/spec/unit/dashboards_spec.rb +59 -0
- data/spec/unit/display_name_spec.rb +29 -0
- data/spec/unit/event_spec.rb +41 -0
- data/spec/unit/filter_form_builder_spec.rb +182 -0
- data/spec/unit/form_builder_spec.rb +239 -0
- data/spec/unit/generators/install_rails_3_1_spec.rb +16 -0
- data/spec/unit/helpers/settings_spec.rb +30 -0
- data/spec/unit/menu_item_spec.rb +143 -0
- data/spec/unit/menu_spec.rb +53 -0
- data/spec/unit/namespace_spec.rb +214 -0
- data/spec/unit/pretty_format_spec.rb +35 -0
- data/spec/unit/rails_spec.rb +43 -0
- data/spec/unit/registration_spec.rb +76 -0
- data/spec/unit/reloader_spec.rb +28 -0
- data/spec/unit/renderer_spec.rb +108 -0
- data/spec/unit/resource/action_items_spec.rb +62 -0
- data/spec/unit/resource/menu_spec.rb +80 -0
- data/spec/unit/resource/naming_spec.rb +56 -0
- data/spec/unit/resource/scopes_spec.rb +30 -0
- data/spec/unit/resource/sidebars_spec.rb +50 -0
- data/spec/unit/resource_controller/collection_spec.rb +34 -0
- data/spec/unit/resource_controller_spec.rb +152 -0
- data/spec/unit/resource_spec.rb +260 -0
- data/spec/unit/routing_spec.rb +88 -0
- data/spec/unit/sass/helpers_spec.rb +47 -0
- data/spec/unit/scope_spec.rb +31 -0
- data/spec/unit/tabs_renderer_spec.rb +85 -0
- data/spec/unit/view_factory_spec.rb +19 -0
- data/spec/unit/views/components/attributes_table_spec.rb +100 -0
- data/spec/unit/views/components/blank_slate_spec.rb +31 -0
- data/spec/unit/views/components/columns_spec.rb +75 -0
- data/spec/unit/views/components/panel_spec.rb +31 -0
- data/spec/unit/views/components/sidebar_section_spec.rb +37 -0
- data/spec/unit/views/components/status_tag_spec.rb +81 -0
- data/spec/unit/views/components/table_for_spec.rb +130 -0
- data/spec/unit/views/pages/layout_spec.rb +22 -0
- data/tasks/docs.rake +39 -0
- data/tasks/test.rake +49 -0
- data/tasks/yard.rake +6 -0
- metadata +510 -0
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
module Arbre
|
|
2
|
+
module HTML
|
|
3
|
+
def current_dom_context
|
|
4
|
+
@__current_dom_element__ ||= Arbre::Context.new(assigns, helpers)
|
|
5
|
+
@__current_dom_element__.current_dom_context
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def helpers
|
|
9
|
+
@_helpers
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def method_missing(name, *args, &block)
|
|
13
|
+
if current_dom_context.respond_to?(name)
|
|
14
|
+
current_dom_context.send name, *args, &block
|
|
15
|
+
elsif assigns && assigns.has_key?(name)
|
|
16
|
+
assigns[name]
|
|
17
|
+
elsif helpers.respond_to?(name)
|
|
18
|
+
helpers.send(name, *args, &block)
|
|
19
|
+
else
|
|
20
|
+
super
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
module BuilderMethods
|
|
25
|
+
def build_tag(klass, *args, &block)
|
|
26
|
+
tag = klass.new(assigns, helpers)
|
|
27
|
+
|
|
28
|
+
# If you passed in a block and want the object
|
|
29
|
+
if block_given? && block.arity > 0
|
|
30
|
+
# Set out context to the tag, and pass responsibility to the tag
|
|
31
|
+
with_current_dom_context tag do
|
|
32
|
+
tag.build(*args, &block)
|
|
33
|
+
end
|
|
34
|
+
else
|
|
35
|
+
# Build the tag
|
|
36
|
+
tag.build(*args)
|
|
37
|
+
|
|
38
|
+
# Render the blocks contents
|
|
39
|
+
if block_given?
|
|
40
|
+
with_current_dom_context tag do
|
|
41
|
+
insert_text_node_if_string(yield)
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
tag
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def insert_tag(klass, *args, &block)
|
|
50
|
+
tag = build_tag(klass, *args, &block)
|
|
51
|
+
current_dom_context.add_child(tag)
|
|
52
|
+
tag
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def current_dom_context
|
|
56
|
+
@__current_dom_element_buffer__ ||= [self]
|
|
57
|
+
current_element = @__current_dom_element_buffer__.last
|
|
58
|
+
if current_element == self
|
|
59
|
+
self
|
|
60
|
+
else
|
|
61
|
+
current_element.current_dom_context
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
def with_current_dom_context(tag)
|
|
66
|
+
raise ArgumentError, "Can't be in the context of nil. #{@__current_dom_element_buffer__.inspect}" unless tag
|
|
67
|
+
current_dom_context # Ensure a context is setup
|
|
68
|
+
@__current_dom_element_buffer__.push tag
|
|
69
|
+
yield
|
|
70
|
+
@__current_dom_element_buffer__.pop
|
|
71
|
+
end
|
|
72
|
+
alias_method :within, :with_current_dom_context
|
|
73
|
+
|
|
74
|
+
# Inserts a text node if the tag is a string
|
|
75
|
+
def insert_text_node_if_string(tag)
|
|
76
|
+
if tag.is_a?(String)
|
|
77
|
+
current_dom_context << TextNode.from_string(tag)
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
module Arbre
|
|
2
|
+
module HTML
|
|
3
|
+
|
|
4
|
+
AUTO_BUILD_ELEMENTS = [ :a, :abbr, :address, :area, :article, :aside, :audio, :b, :base,
|
|
5
|
+
:bdo, :blockquote, :body, :br, :button, :canvas, :caption, :cite,
|
|
6
|
+
:code, :col, :colgroup, :command, :datalist, :dd, :del, :details,
|
|
7
|
+
:dfn, :div, :dl, :dt, :em, :embed, :fieldset, :figcaption, :figure,
|
|
8
|
+
:footer, :form, :h1, :h2, :h3, :h4, :h5, :h6, :head, :header, :hgroup,
|
|
9
|
+
:hr, :html, :i, :iframe, :img, :input, :ins, :keygen, :kbd, :label,
|
|
10
|
+
:legend, :li, :link, :map, :mark, :menu, :meta, :meter, :nav, :noscript,
|
|
11
|
+
:object, :ol, :optgroup, :option, :output, :pre, :progress, :q,
|
|
12
|
+
:s, :samp, :script, :section, :select, :small, :source, :span,
|
|
13
|
+
:strong, :style, :sub, :summary, :sup, :table, :tbody, :td,
|
|
14
|
+
:textarea, :tfoot, :th, :thead, :time, :title, :tr, :ul, :var, :video ]
|
|
15
|
+
|
|
16
|
+
HTML5_ELEMENTS = [ :p ] + AUTO_BUILD_ELEMENTS
|
|
17
|
+
|
|
18
|
+
AUTO_BUILD_ELEMENTS.each do |name|
|
|
19
|
+
class_eval <<-EOF
|
|
20
|
+
class #{name.to_s.capitalize} < Tag
|
|
21
|
+
builder_method :#{name}
|
|
22
|
+
end
|
|
23
|
+
EOF
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
class P < Tag
|
|
27
|
+
builder_method :para
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
class Table < Tag
|
|
31
|
+
def initialize(*)
|
|
32
|
+
super
|
|
33
|
+
set_table_tag_defaults
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
protected
|
|
37
|
+
|
|
38
|
+
# Set some good defaults for tables
|
|
39
|
+
def set_table_tag_defaults
|
|
40
|
+
set_attribute :border, 0
|
|
41
|
+
set_attribute :cellspacing, 0
|
|
42
|
+
set_attribute :cellpadding, 0
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
end
|
|
47
|
+
end
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
require 'erb'
|
|
2
|
+
|
|
3
|
+
module Arbre
|
|
4
|
+
module HTML
|
|
5
|
+
|
|
6
|
+
class Tag < Element
|
|
7
|
+
attr_reader :attributes
|
|
8
|
+
|
|
9
|
+
def initialize(*)
|
|
10
|
+
super
|
|
11
|
+
@attributes = Attributes.new
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def build(*args)
|
|
15
|
+
super
|
|
16
|
+
attributes = args.extract_options!
|
|
17
|
+
self.content = args.first if args.first
|
|
18
|
+
|
|
19
|
+
set_for_attribute(attributes.delete(:for))
|
|
20
|
+
|
|
21
|
+
attributes.each do |key, value|
|
|
22
|
+
set_attribute(key, value)
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def set_attribute(name, value)
|
|
27
|
+
@attributes[name.to_sym] = value
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def get_attribute(name)
|
|
31
|
+
@attributes[name.to_sym]
|
|
32
|
+
end
|
|
33
|
+
alias :attr :get_attribute
|
|
34
|
+
|
|
35
|
+
def has_attribute?(name)
|
|
36
|
+
@attributes.has_key?(name.to_sym)
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def remove_attribute(name)
|
|
40
|
+
@attributes.delete(name.to_sym)
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def id
|
|
44
|
+
get_attribute(:id)
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
# Generates and id for the object if it doesn't exist already
|
|
48
|
+
def id!
|
|
49
|
+
return id if id
|
|
50
|
+
self.id = object_id.to_s
|
|
51
|
+
id
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def id=(id)
|
|
55
|
+
set_attribute(:id, id)
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def add_class(class_names)
|
|
59
|
+
class_list.add class_names
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def remove_class(class_names)
|
|
63
|
+
class_list.delete(class_names)
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
# Returns a string of classes
|
|
67
|
+
def class_names
|
|
68
|
+
class_list.to_html
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
def class_list
|
|
72
|
+
get_attribute(:class) || set_attribute(:class, ClassList.new)
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
def to_html
|
|
76
|
+
indent("<#{tag_name}#{attributes_html}>", content, "</#{tag_name}>").html_safe
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
private
|
|
80
|
+
|
|
81
|
+
INDENT_SIZE = 2
|
|
82
|
+
|
|
83
|
+
def indent(open_tag, child_content, close_tag)
|
|
84
|
+
spaces = ' ' * indent_level * INDENT_SIZE
|
|
85
|
+
|
|
86
|
+
html = ""
|
|
87
|
+
|
|
88
|
+
if no_child? || child_is_text?
|
|
89
|
+
if self_closing_tag?
|
|
90
|
+
html << spaces << open_tag.sub( />$/, '/>' )
|
|
91
|
+
else
|
|
92
|
+
# one line
|
|
93
|
+
html << spaces << open_tag << child_content << close_tag
|
|
94
|
+
end
|
|
95
|
+
else
|
|
96
|
+
# multiple lines
|
|
97
|
+
html << spaces << open_tag << "\n"
|
|
98
|
+
html << child_content # the child takes care of its own spaces
|
|
99
|
+
html << spaces << close_tag
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
html << "\n"
|
|
103
|
+
|
|
104
|
+
html
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
def self_closing_tag?
|
|
108
|
+
%w|meta link|.include?(tag_name)
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
def no_child?
|
|
112
|
+
children.empty?
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
def child_is_text?
|
|
116
|
+
children.size == 1 && children.first.is_a?(TextNode)
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
|
|
120
|
+
def attributes_html
|
|
121
|
+
attributes.any? ? " " + attributes.to_html : nil
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
def set_for_attribute(record)
|
|
125
|
+
return unless record
|
|
126
|
+
set_attribute :id, ActionController::RecordIdentifier.dom_id(record, default_id_for_prefix)
|
|
127
|
+
add_class ActionController::RecordIdentifier.dom_class(record)
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
def default_id_for_prefix
|
|
131
|
+
nil
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
end
|
|
137
|
+
end
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
require 'erb'
|
|
2
|
+
|
|
3
|
+
module Arbre
|
|
4
|
+
module HTML
|
|
5
|
+
|
|
6
|
+
class TextNode < Element
|
|
7
|
+
|
|
8
|
+
builder_method :text_node
|
|
9
|
+
|
|
10
|
+
# Builds a text node from a string
|
|
11
|
+
def self.from_string(string)
|
|
12
|
+
node = new
|
|
13
|
+
node.build(string)
|
|
14
|
+
node
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def add_child(*args)
|
|
18
|
+
raise "TextNodes do not have children"
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def build(string)
|
|
22
|
+
@content = string
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def tag_name
|
|
26
|
+
nil
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def to_html
|
|
30
|
+
ERB::Util.html_escape(@content.to_html)
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
end
|
|
35
|
+
end
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
module ActiveAdmin
|
|
2
|
+
module AssetRegistration
|
|
3
|
+
|
|
4
|
+
# Stylesheets
|
|
5
|
+
|
|
6
|
+
def register_stylesheet(name)
|
|
7
|
+
stylesheets << name
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def stylesheets
|
|
11
|
+
@stylesheets ||= []
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def clear_stylesheets!
|
|
15
|
+
@stylesheets = []
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
# Javascripts
|
|
20
|
+
|
|
21
|
+
def register_javascript(name)
|
|
22
|
+
javascripts << name
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def javascripts
|
|
26
|
+
@javascripts ||= []
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def clear_javascripts!
|
|
30
|
+
@javascripts = []
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
end
|
|
34
|
+
end
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
module ActiveAdmin
|
|
2
|
+
module Callbacks
|
|
3
|
+
extend ActiveSupport::Concern
|
|
4
|
+
|
|
5
|
+
module InstanceMethods
|
|
6
|
+
protected
|
|
7
|
+
|
|
8
|
+
# Simple callback system. Implements before and after callbacks for
|
|
9
|
+
# use within the controllers.
|
|
10
|
+
#
|
|
11
|
+
# We didn't use the ActiveSupport callbacks becuase they do not support
|
|
12
|
+
# passing in any arbitrary object into the callback method (which we
|
|
13
|
+
# need to do)
|
|
14
|
+
|
|
15
|
+
def call_callback_with(method, *args)
|
|
16
|
+
case method
|
|
17
|
+
when Symbol
|
|
18
|
+
send(method, *args)
|
|
19
|
+
when Proc
|
|
20
|
+
instance_exec(*args, &method)
|
|
21
|
+
else
|
|
22
|
+
raise "Please register with callbacks using a symbol or a block/proc."
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
module ClassMethods
|
|
28
|
+
|
|
29
|
+
# Define a new callback.
|
|
30
|
+
#
|
|
31
|
+
# Example:
|
|
32
|
+
#
|
|
33
|
+
# class MyClassWithCallbacks
|
|
34
|
+
# include ActiveAdmin::Callbacks
|
|
35
|
+
#
|
|
36
|
+
# define_active_admin_callbacks :save
|
|
37
|
+
#
|
|
38
|
+
# before_save do |arg1, arg2|
|
|
39
|
+
# # runs before save
|
|
40
|
+
# end
|
|
41
|
+
#
|
|
42
|
+
# after_save :call_after_save
|
|
43
|
+
#
|
|
44
|
+
# def save
|
|
45
|
+
# # Will run before, yield, then after
|
|
46
|
+
# run_save_callbacks :arg1, :arg2 do
|
|
47
|
+
# save!
|
|
48
|
+
# end
|
|
49
|
+
# end
|
|
50
|
+
#
|
|
51
|
+
# protected
|
|
52
|
+
#
|
|
53
|
+
# def call_after_save(arg1, arg2)
|
|
54
|
+
# # runs after save
|
|
55
|
+
# end
|
|
56
|
+
# end
|
|
57
|
+
#
|
|
58
|
+
def define_active_admin_callbacks(*names)
|
|
59
|
+
names.each do |name|
|
|
60
|
+
[:before, :after].each do |type|
|
|
61
|
+
|
|
62
|
+
# Define a method to set the callback
|
|
63
|
+
class_eval(<<-EOS, __FILE__, __LINE__ + 1)
|
|
64
|
+
# def self.before_create_callbacks
|
|
65
|
+
def self.#{type}_#{name}_callbacks
|
|
66
|
+
@#{type}_#{name}_callbacks ||= []
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
# def self.before_create
|
|
70
|
+
def self.#{type}_#{name}(method = nil, &block)
|
|
71
|
+
#{type}_#{name}_callbacks << (method || block)
|
|
72
|
+
end
|
|
73
|
+
EOS
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
# Define a method to run the callbacks
|
|
77
|
+
class_eval(<<-EOS, __FILE__, __LINE__ + 1)
|
|
78
|
+
def run_#{name}_callbacks(*args)
|
|
79
|
+
self.class.before_#{name}_callbacks.each{|callback| call_callback_with(callback, *args)}
|
|
80
|
+
value = yield if block_given?
|
|
81
|
+
self.class.after_#{name}_callbacks.each{|callback| call_callback_with(callback, *args)}
|
|
82
|
+
return value
|
|
83
|
+
end
|
|
84
|
+
EOS
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
end
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
require 'active_admin/comments/configuration'
|
|
2
|
+
require 'active_admin/comments/comment'
|
|
3
|
+
require 'active_admin/comments/views'
|
|
4
|
+
require 'active_admin/comments/show_page_helper'
|
|
5
|
+
require 'active_admin/comments/namespace_helper'
|
|
6
|
+
require 'active_admin/comments/resource_helper'
|
|
7
|
+
|
|
8
|
+
# Add the comments configuration
|
|
9
|
+
ActiveAdmin::Application.send :include, ActiveAdmin::Comments::Configuration
|
|
10
|
+
|
|
11
|
+
# Add the comments module to ActiveAdmin::Namespace
|
|
12
|
+
ActiveAdmin::Namespace.send :include, ActiveAdmin::Comments::NamespaceHelper
|
|
13
|
+
|
|
14
|
+
# Add the comments module to ActiveAdmin::Resource
|
|
15
|
+
ActiveAdmin::Resource.send :include, ActiveAdmin::Comments::ResourceHelper
|
|
16
|
+
|
|
17
|
+
# Add the module to the show page
|
|
18
|
+
ActiveAdmin.application.view_factory.show_page.send :include, ActiveAdmin::Comments::ShowPageHelper
|
|
19
|
+
|
|
20
|
+
# Generate a Comment resource when namespaces are registered
|
|
21
|
+
ActiveAdmin::Event.subscribe ActiveAdmin::Namespace::RegisterEvent do |namespace|
|
|
22
|
+
if namespace.comments?
|
|
23
|
+
namespace.register ActiveAdmin::Comment, :as => 'Comment' do
|
|
24
|
+
actions :index, :show, :create
|
|
25
|
+
|
|
26
|
+
# Don't display in the menu
|
|
27
|
+
menu false
|
|
28
|
+
|
|
29
|
+
# Don't allow comments on comments
|
|
30
|
+
config.comments = false
|
|
31
|
+
|
|
32
|
+
# Filter Comments by date
|
|
33
|
+
filter :resource_type
|
|
34
|
+
filter :body
|
|
35
|
+
filter :created_at
|
|
36
|
+
|
|
37
|
+
# Only view comments in this namespace
|
|
38
|
+
scope :all, :default => true do |comments|
|
|
39
|
+
comments.where(:namespace => active_admin_config.namespace.name)
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
# Always redirect to the resource on show
|
|
43
|
+
before_filter :only => :show do
|
|
44
|
+
flash[:notice] = flash[:notice].dup if flash[:notice]
|
|
45
|
+
comment = ActiveAdmin::Comment.find(params[:id])
|
|
46
|
+
resource_config = active_admin_config.namespace.resource_for(comment.resource.class)
|
|
47
|
+
redirect_to send(resource_config.route_instance_path, comment.resource)
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
# Store the author and namespace
|
|
51
|
+
before_save do |comment|
|
|
52
|
+
comment.namespace = active_admin_config.namespace.name
|
|
53
|
+
comment.author = current_active_admin_user
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
# Redirect to the resource show page when failing to add a comment
|
|
57
|
+
# TODO: Provide helpers to make such kind of customization much simpler
|
|
58
|
+
controller do
|
|
59
|
+
def create
|
|
60
|
+
create! do |success, failure|
|
|
61
|
+
failure.html do
|
|
62
|
+
resource_config = active_admin_config.namespace.resource_for(@comment.resource.class)
|
|
63
|
+
flash[:error] = "Comment wasn't saved, text was empty."
|
|
64
|
+
redirect_to send(resource_config.route_instance_path, @comment.resource)
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
# Display as a table
|
|
72
|
+
index do
|
|
73
|
+
column("Resource"){|comment| auto_link(comment.resource) }
|
|
74
|
+
column("Author"){|comment| auto_link(comment.author) }
|
|
75
|
+
column :body
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
# Register for comments when new resources are registered
|
|
82
|
+
ActiveAdmin::Event.subscribe ActiveAdmin::Resource::RegisterEvent do |resource|
|
|
83
|
+
if resource.comments?
|
|
84
|
+
resource.resource.has_many :active_admin_comments, :class_name => "ActiveAdmin::Comment",
|
|
85
|
+
:as => :resource,
|
|
86
|
+
:dependent => :destroy
|
|
87
|
+
end
|
|
88
|
+
end
|