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
@@ -20,7 +20,7 @@ module ActiveAdmin
|
|
20
20
|
template '3.1/active_admin.js', 'app/assets/javascripts/active_admin.js'
|
21
21
|
template '3.1/active_admin.css.scss', 'app/assets/stylesheets/active_admin.css.scss'
|
22
22
|
else
|
23
|
-
template '
|
23
|
+
template '3.0/active_admin.js', 'public/javascripts/active_admin.js'
|
24
24
|
directory '../../../../../app/assets/images/active_admin', 'public/images/active_admin'
|
25
25
|
generate "jquery:install --ui" if options.jquery?
|
26
26
|
install_bourbon if options.bourbon?
|
@@ -0,0 +1 @@
|
|
1
|
+
(function(){window.AA={}}).call(this),function(){window.AA.CheckboxToggler=AA.CheckboxToggler=function(){function a(a,b){var c;this.options=a,this.container=b,c={},this.options=$.extend({},c,a),this._init(),this._bind()}return a.name="CheckboxToggler",a.prototype._init=function(){if(!this.container)throw new Error("Container element not found");this.$container=$(this.container);if(!this.$container.find(".toggle_all").length)throw new Error("'toggle all' checkbox not found");return this.toggle_all_checkbox=this.$container.find(".toggle_all"),this.checkboxes=this.$container.find(":checkbox").not(this.toggle_all_checkbox)},a.prototype._bind=function(){var a=this;return this.checkboxes.bind("change",function(b){return a._didChangeCheckbox(b.target)}),this.toggle_all_checkbox.bind("change",function(b){return a._didChangeToggleAllCheckbox()})},a.prototype._didChangeCheckbox=function(a){if(this.checkboxes.filter(":checked").length===this.checkboxes.length-1)return this._uncheckToggleAllCheckbox();if(this.checkboxes.filter(":checked").length===this.checkboxes.length)return this._checkToggleAllCheckbox()},a.prototype._didChangeToggleAllCheckbox=function(){return this.toggle_all_checkbox.attr("checked")==="checked"?this._checkAllCheckboxes():this._uncheckAllCheckboxes()},a.prototype._uncheckToggleAllCheckbox=function(){return this.toggle_all_checkbox.removeAttr("checked")},a.prototype._checkToggleAllCheckbox=function(){return this.toggle_all_checkbox.attr("checked","checked")},a.prototype._uncheckAllCheckboxes=function(){var a=this;return this.checkboxes.each(function(b,c){return $(c).removeAttr("checked"),a._didChangeCheckbox(c)})},a.prototype._checkAllCheckboxes=function(){var a=this;return this.checkboxes.each(function(b,c){return $(c).attr("checked","checked"),a._didChangeCheckbox(c)})},a}(),function(a){return a.widget.bridge("checkboxToggler",AA.CheckboxToggler)}(jQuery)}.call(this),function(){window.AA.DropdownMenu=AA.DropdownMenu=function(){function a(a,b){var c;return this.options=a,this.element=b,this.$element=$(this.element),c={fadeInDuration:20,fadeOutDuration:100,onClickActionItemCallback:null},this.options=$.extend({},c,a),this.$menuButton=this.$element.find(".dropdown_menu_button"),this.$menuList=this.$element.find(".dropdown_menu_list_wrapper"),this.isOpen=!1,this._buildMenuList(),this._bind(),this}return a.name="DropdownMenu",a.prototype.open=function(){return this.isOpen=!0,this.$menuList.fadeIn(this.options.fadeInDuration),this._positionMenuList(),this._positionNipple(),this},a.prototype.close=function(){return this.isOpen=!1,this.$menuList.fadeOut(this.options.fadeOutDuration),this},a.prototype.destroy=function(){return this.$element.unbind(),this.$element=null,this},a.prototype.isDisabled=function(){return this.$menuButton.hasClass("disabled")},a.prototype.disable=function(){return this.$menuButton.addClass("disabled")},a.prototype.enable=function(){return this.$menuButton.removeClass("disabled")},a.prototype.option=function(a,b){return $.isPlainObject(a)?this.options=$.extend(!0,this.options,a):a!=null?this.options[a]:this.options[a]=b},a.prototype._buildMenuList=function(){return this.$menuList.prepend('<div class="dropdown_menu_nipple"></div>'),this.$menuList.hide()},a.prototype._bind=function(){var a=this;return $("body").bind("click",function(){if(a.isOpen===!0)return a.close()}),this.$menuButton.bind("click",function(){return a.isDisabled()||(a.isOpen===!0?a.close():a.open()),!1})},a.prototype._positionMenuList=function(){var a,b,c;return a=this.$menuButton.offset().left+this.$menuButton.outerWidth()/2,b=this.$menuList.outerWidth()/2,c=a-b,this.$menuList.css("left",c)},a.prototype._positionNipple=function(){var a,b,c,d,e;return c=this.$menuList.outerWidth()/2,b=this.$menuButton.offset().top+this.$menuButton.outerHeight()+10,this.$menuList.css("top",b),a=this.$menuList.find(".dropdown_menu_nipple"),d=a.outerWidth()/2,e=c-d,a.css("left",e)},a}(),function(a){return a.widget.bridge("aaDropdownMenu",AA.DropdownMenu),a(function(){return a(".dropdown_menu").aaDropdownMenu()})}(jQuery)}.call(this),function(){window.AA.Popover=AA.Popover=function(){function a(a,b){var c;return this.options=a,this.element=b,this.$element=$(this.element),c={fadeInDuration:20,fadeOutDuration:100,autoOpen:!0,pageWrapperElement:"#wrapper",onClickActionItemCallback:null},this.options=$.extend({},c,a),this.$popover=null,this.isOpen=!1,$(this.$element.attr("href")).length>0?this.$popover=$(this.$element.attr("href")):this.$popover=this.$element.next(".popover"),this._buildPopover(),this._bind(),this}return a.name="Popover",a.prototype.open=function(){return this.isOpen=!0,this.$popover.fadeIn(this.options.fadeInDuration),this._positionPopover(),this._positionNipple(),this},a.prototype.close=function(){return this.isOpen=!1,this.$popover.fadeOut(this.options.fadeOutDuration),this},a.prototype.destroy=function(){return this.$element.removeData("popover"),this.$element.unbind(),this.$element=null,this},a.prototype.option=function(){},a.prototype._buildPopover=function(){return this.$popover.prepend('<div class="popover_nipple"></div>'),this.$popover.hide(),this.$popover.addClass("popover")},a.prototype._bind=function(){var a=this;$(this.options.pageWrapperElement).bind("click",function(b){if(a.isOpen===!0)return a.close()});if(this.options.autoOpen===!0)return this.$element.bind("click",function(){return a.isOpen===!0?a.close():a.open(),!1})},a.prototype._positionPopover=function(){var a,b,c;return a=this.$element.offset().left+this.$element.outerWidth()/2,b=this.$popover.outerWidth()/2,c=a-b,this.$popover.css("left",c)},a.prototype._positionNipple=function(){var a,b,c,d,e;return c=this.$popover.outerWidth()/2,b=this.$element.offset().top+this.$element.outerHeight()+10,this.$popover.css("top",b),a=this.$popover.find(".popover_nipple"),d=a.outerWidth()/2,e=c-d,a.css("left",e)},a}(),function(a){return a.widget.bridge("popover",AA.Popover)}(jQuery)}.call(this),function(){var a={}.hasOwnProperty,b=function(b,c){function e(){this.constructor=b}for(var d in c)a.call(c,d)&&(b[d]=c[d]);return e.prototype=c.prototype,b.prototype=new e,b.__super__=c.prototype,b};window.AA.TableCheckboxToggler=AA.TableCheckboxToggler=function(a){function c(){return c.__super__.constructor.apply(this,arguments)}return b(c,a),c.name="TableCheckboxToggler",c.prototype._init=function(){return c.__super__._init.apply(this,arguments)},c.prototype._bind=function(){var a=this;return c.__super__._bind.apply(this,arguments),this.$container.find("tbody").find("td").bind("click",function(b){if(b.target.type!=="checkbox")return a._didClickCell(b.target)})},c.prototype._didChangeCheckbox=function(a){var b;return c.__super__._didChangeCheckbox.apply(this,arguments),b=$(a).parents("tr"),a.checked?b.addClass("selected"):b.removeClass("selected")},c.prototype._didClickCell=function(a){return $(a).parent("tr").find(":checkbox").click()},c}(AA.CheckboxToggler),function(a){return a.widget.bridge("tableCheckboxToggler",AA.TableCheckboxToggler)}(jQuery)}.call(this),function(){$(function(){return $(".datepicker").datepicker({dateFormat:"yy-mm-dd"}),$(".clear_filters_btn").click(function(){return window.location.search="",!1}),$(".dropdown_button").popover()})}.call(this),function(){jQuery(function(a){a(document).delegate("#batch_actions_selector li a","click.rails",function(){return a("#batch_action").val(a(this).attr("data-action")),a("#collection_selection").submit()});if(a("#batch_actions_selector").length&&a(":checkbox.toggle_all").length)return a(".paginated_collection").find("table.index_table").length?a(".paginated_collection table").tableCheckboxToggler():a(".paginated_collection").checkboxToggler(),a(".paginated_collection").find(":checkbox").bind("change",function(){return a(".paginated_collection").find(":checkbox").filter(":checked").length>0?a("#batch_actions_selector").aaDropdownMenu("enable"):a("#batch_actions_selector").aaDropdownMenu("disable")})})}.call(this);
|
@@ -1,6 +1,29 @@
|
|
1
|
-
// Active Admin
|
1
|
+
// SASS variable overrides must be declared before loading up Active Admin's styles.
|
2
|
+
//
|
3
|
+
// To view the variables that Active Admin provides, take a look at
|
4
|
+
// `app/assets/stylesheets/active_admin/mixins/_variables.css.scss` in the
|
5
|
+
// Active Admin source.
|
6
|
+
//
|
7
|
+
// For example, to change the sidebar width:
|
8
|
+
// $sidebar-width: 242px;
|
9
|
+
|
10
|
+
// Active Admin's got SASS!
|
2
11
|
@import "active_admin/mixins";
|
3
12
|
@import "active_admin/base";
|
4
13
|
|
5
|
-
//
|
6
|
-
//
|
14
|
+
// Overriding any non-variable SASS must be done after the fact.
|
15
|
+
// For example, to change the default status-tag color:
|
16
|
+
//
|
17
|
+
// body.active_admin {
|
18
|
+
// .status_tag { background: #6090DB; }
|
19
|
+
// }
|
20
|
+
//
|
21
|
+
// Notice that Active Admin CSS rules are nested within a
|
22
|
+
// 'body.active_admin' selector to prevent conflicts with
|
23
|
+
// other pages in the app. It is best to wrap your changes in a
|
24
|
+
// namespace so they are properly recognized. You have options
|
25
|
+
// if you e.g. want different styles for different namespaces:
|
26
|
+
//
|
27
|
+
// .active_admin applies to any Active Admin namespace
|
28
|
+
// .admin_namespace applies to the admin namespace (eg: /admin)
|
29
|
+
// .other_namespace applies to a custom namespace named other (eg: /other)
|
@@ -38,8 +38,8 @@ module ActiveAdmin
|
|
38
38
|
devise_migrations = Dir["db/migrate/*_devise_create_#{table_name}.rb"]
|
39
39
|
if devise_migrations.size > 0
|
40
40
|
inject_into_file Dir["db/migrate/*_devise_create_#{table_name}.rb"].first,
|
41
|
-
"# Create a default user\n
|
42
|
-
:before => "
|
41
|
+
"def migrate(direction)\n super\n # Create a default user\n AdminUser.create!(:email => 'admin@example.com', :password => 'password', :password_confirmation => 'password') if direction == :up\n end\n\n ",
|
42
|
+
:before => "def change"
|
43
43
|
end
|
44
44
|
end
|
45
45
|
|
@@ -1,29 +1,29 @@
|
|
1
|
+
require 'rails/generators/active_record'
|
2
|
+
|
1
3
|
module ActiveAdmin
|
2
4
|
module Generators
|
3
|
-
class InstallGenerator <
|
4
|
-
desc "Installs Active Admin and
|
5
|
+
class InstallGenerator < ActiveRecord::Generators::Base
|
6
|
+
desc "Installs Active Admin and generates the necessary migrations"
|
5
7
|
argument :name, :type => :string, :default => "AdminUser"
|
6
8
|
|
7
9
|
hook_for :users, :default => "devise", :desc => "Admin user generator to run. Skip with --skip-users"
|
8
10
|
|
9
|
-
include Rails::Generators::Migration
|
10
|
-
|
11
11
|
def self.source_root
|
12
12
|
@_active_admin_source_root ||= File.expand_path("../templates", __FILE__)
|
13
|
-
end
|
14
|
-
|
15
|
-
def self.next_migration_number(dirname)
|
16
|
-
Time.now.strftime("%Y%m%d%H%M%S")
|
17
13
|
end
|
18
14
|
|
19
|
-
|
15
|
+
def copy_initializer
|
20
16
|
@underscored_user_name = name.underscore
|
21
17
|
template 'active_admin.rb.erb', 'config/initializers/active_admin.rb'
|
22
18
|
end
|
23
19
|
|
24
20
|
def setup_directory
|
25
21
|
empty_directory "app/admin"
|
26
|
-
template '
|
22
|
+
template 'dashboard.rb', 'app/admin/dashboard.rb'
|
23
|
+
if options[:users].present?
|
24
|
+
@user_class = name
|
25
|
+
template 'admin_user.rb.erb', "app/admin/#{name.underscore}.rb"
|
26
|
+
end
|
27
27
|
end
|
28
28
|
|
29
29
|
def setup_routes
|
@@ -86,6 +86,13 @@ ActiveAdmin.setup do |config|
|
|
86
86
|
# Default:
|
87
87
|
# config.logout_link_method = :get
|
88
88
|
|
89
|
+
# == Root
|
90
|
+
#
|
91
|
+
# Set the action to call for the root path. You can set different
|
92
|
+
# roots for each namespace.
|
93
|
+
#
|
94
|
+
# Default:
|
95
|
+
# config.root_to = 'dashboard#index'
|
89
96
|
|
90
97
|
# == Admin Comments
|
91
98
|
#
|
@@ -104,6 +111,13 @@ ActiveAdmin.setup do |config|
|
|
104
111
|
# end
|
105
112
|
|
106
113
|
|
114
|
+
# == Batch Actions
|
115
|
+
#
|
116
|
+
# Enable and disable Batch Actions
|
117
|
+
#
|
118
|
+
config.batch_actions = true
|
119
|
+
|
120
|
+
|
107
121
|
# == Controller Filters
|
108
122
|
#
|
109
123
|
# You can add before, after and around filters to all of your
|
@@ -120,10 +134,16 @@ ActiveAdmin.setup do |config|
|
|
120
134
|
#
|
121
135
|
# To load a stylesheet:
|
122
136
|
# config.register_stylesheet 'my_stylesheet.css'
|
123
|
-
|
137
|
+
|
124
138
|
# You can provide an options hash for more control, which is passed along to stylesheet_link_tag():
|
125
139
|
# config.register_stylesheet 'my_print_stylesheet.css', :media => :print
|
126
140
|
#
|
127
141
|
# To load a javascript file:
|
128
142
|
# config.register_javascript 'my_javascript.js'
|
143
|
+
|
144
|
+
|
145
|
+
# == CSV options
|
146
|
+
#
|
147
|
+
# Set the CSV builder separator (default is ",")
|
148
|
+
# config.csv_column_separator = ','
|
129
149
|
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
ActiveAdmin.register <%= @user_class %> do
|
2
|
+
index do
|
3
|
+
column :email
|
4
|
+
column :current_sign_in_at
|
5
|
+
column :last_sign_in_at
|
6
|
+
column :sign_in_count
|
7
|
+
default_actions
|
8
|
+
end
|
9
|
+
|
10
|
+
filter :email
|
11
|
+
|
12
|
+
form do |f|
|
13
|
+
f.inputs "Admin Details" do
|
14
|
+
f.input :email
|
15
|
+
f.input :password
|
16
|
+
f.input :password_confirmation
|
17
|
+
end
|
18
|
+
f.buttons
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
ActiveAdmin.register_page "Dashboard" do
|
2
|
+
|
3
|
+
menu :priority => 1, :label => proc{ I18n.t("active_admin.dashboard") }
|
4
|
+
|
5
|
+
content :title => proc{ I18n.t("active_admin.dashboard") } do
|
6
|
+
div :class => "blank_slate_container", :id => "dashboard_default_message" do
|
7
|
+
span :class => "blank_slate" do
|
8
|
+
span "Welcome to Active Admin. This is the default dashboard page."
|
9
|
+
small "To add dashboard sections, checkout 'app/admin/dashboards.rb'"
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
# Here is an example of a simple dashboard with columns and panels.
|
14
|
+
#
|
15
|
+
# columns do
|
16
|
+
# column do
|
17
|
+
# panel "Recent Posts" do
|
18
|
+
# ul do
|
19
|
+
# Post.recent(5).map do |post|
|
20
|
+
# li link_to(post.title, admin_post_path(post))
|
21
|
+
# end
|
22
|
+
# end
|
23
|
+
# end
|
24
|
+
# end
|
25
|
+
|
26
|
+
# column do
|
27
|
+
# panel "Info" do
|
28
|
+
# para "Welcome to ActiveAdmin."
|
29
|
+
# end
|
30
|
+
# end
|
31
|
+
# end
|
32
|
+
end # content
|
33
|
+
end
|
@@ -6,21 +6,11 @@ require 'spec_helper'
|
|
6
6
|
describe "Memory Leak" do
|
7
7
|
|
8
8
|
def count_instances_of(klass)
|
9
|
-
|
10
|
-
|
11
|
-
ObjectSpace.each_object do |o|
|
12
|
-
if o.class == klass
|
13
|
-
count += 1
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
count
|
9
|
+
ObjectSpace.each_object(klass) { }
|
18
10
|
end
|
19
11
|
|
20
12
|
def self.it_should_not_leak(klass)
|
21
13
|
it "should not leak #{klass}" do
|
22
|
-
pending
|
23
|
-
|
24
14
|
GC.start
|
25
15
|
|
26
16
|
count = count_instances_of(klass)
|
@@ -0,0 +1,50 @@
|
|
1
|
+
describe "AA.CheckboxToggler", ->
|
2
|
+
|
3
|
+
beforeEach ->
|
4
|
+
loadFixtures('checkboxes.html')
|
5
|
+
|
6
|
+
@collection = $("#collection")
|
7
|
+
@toggle_all = @collection.find(".toggle_all")
|
8
|
+
|
9
|
+
@checkboxes = @collection.find(":checkbox").not(@toggle_all)
|
10
|
+
|
11
|
+
|
12
|
+
new AA.CheckboxToggler({}, @collection)
|
13
|
+
|
14
|
+
describe "on init", ->
|
15
|
+
it "should raise an error if container not found", ->
|
16
|
+
expect( => new AA.CheckboxToggler({}) ).toThrow("Container element not found")
|
17
|
+
|
18
|
+
it "should raise an error if 'toggle all' checkbox not found", ->
|
19
|
+
@toggle_all.remove()
|
20
|
+
expect( => new AA.CheckboxToggler({}, @collection); ).toThrow("'toggle all' checkbox not found")
|
21
|
+
|
22
|
+
describe "'toggle all' checkbox", ->
|
23
|
+
it "should check all checkboxes when checked", ->
|
24
|
+
@toggle_all.trigger("click")
|
25
|
+
expect(@checkboxes).toHaveAttr("checked")
|
26
|
+
|
27
|
+
it "should uncheck all checkboxes when unchecked", ->
|
28
|
+
@toggle_all.trigger("click")
|
29
|
+
@toggle_all.trigger("click")
|
30
|
+
expect(@checkboxes).not.toHaveAttr("checked")
|
31
|
+
|
32
|
+
describe "individual checkboxes", ->
|
33
|
+
|
34
|
+
describe "when all checkboxes are selected and one is unchecked", ->
|
35
|
+
beforeEach ->
|
36
|
+
@collection.find(":checkbox").attr("checked", "checked")
|
37
|
+
@collection.find("#item_1").trigger("click")
|
38
|
+
|
39
|
+
it "should uncheck the 'toggle all' checkbox", ->
|
40
|
+
expect(@toggle_all).not.toHaveAttr("checked")
|
41
|
+
|
42
|
+
describe "when the last checkbox is checked", ->
|
43
|
+
beforeEach ->
|
44
|
+
@checkboxes.attr("checked", "checked")
|
45
|
+
@collection.find("#item_1").removeAttr("checked")
|
46
|
+
@collection.find("#item_1").trigger("click")
|
47
|
+
|
48
|
+
it "should check the 'toggle all' checkbox", ->
|
49
|
+
expect(@toggle_all).toHaveAttr("checked")
|
50
|
+
|
@@ -0,0 +1,82 @@
|
|
1
|
+
describe "AA.Popover", ->
|
2
|
+
$wrapper = undefined
|
3
|
+
$button = undefined
|
4
|
+
$popover = undefined
|
5
|
+
popover = undefined
|
6
|
+
beforeEach ->
|
7
|
+
$wrapper = $(inject(id: "wrapper"))
|
8
|
+
$button = $(inject(
|
9
|
+
el: "a"
|
10
|
+
id: "my_popover_button"
|
11
|
+
attrs:
|
12
|
+
href: "#my_popover"
|
13
|
+
))
|
14
|
+
$popover = $(inject(id: "my_popover"))
|
15
|
+
$button.popover
|
16
|
+
fadeInDuration: 0
|
17
|
+
fadeOutDuration: 0
|
18
|
+
|
19
|
+
popover = $button.data("popover")
|
20
|
+
|
21
|
+
describe "opening button / link is pressed", ->
|
22
|
+
it "should open the popover", ->
|
23
|
+
$button.trigger "click"
|
24
|
+
expect($("#my_popover")).toBeVisible()
|
25
|
+
|
26
|
+
describe "when initiated", ->
|
27
|
+
it "should be hidden", ->
|
28
|
+
expect($popover).toBeHidden()
|
29
|
+
|
30
|
+
it "should be have class popover", ->
|
31
|
+
expect($popover).toHaveClass "popover"
|
32
|
+
|
33
|
+
describe "nipple", ->
|
34
|
+
it "should exist", ->
|
35
|
+
expect($popover).toContain ".popover_nipple"
|
36
|
+
|
37
|
+
describe "when open is called", ->
|
38
|
+
beforeEach ->
|
39
|
+
expect($popover).toBeHidden()
|
40
|
+
$button.popover "open"
|
41
|
+
|
42
|
+
it "should be open", ->
|
43
|
+
expect($popover).toBeVisible()
|
44
|
+
|
45
|
+
describe "when destroy is called", ->
|
46
|
+
beforeEach ->
|
47
|
+
$button.popover "destroy"
|
48
|
+
|
49
|
+
it "should not have popover stored as a data attr", ->
|
50
|
+
expect($button.data("popover")).toEqual `undefined`
|
51
|
+
|
52
|
+
it "should not be bound to any event listeners", ->
|
53
|
+
expect($button.data("events")).toEqual `undefined`
|
54
|
+
|
55
|
+
describe "when it's already open", ->
|
56
|
+
beforeEach ->
|
57
|
+
$button.popover "open"
|
58
|
+
|
59
|
+
describe "when close is called", ->
|
60
|
+
beforeEach ->
|
61
|
+
$button.popover "close"
|
62
|
+
|
63
|
+
it "should close", ->
|
64
|
+
expect($popover).toBeHidden()
|
65
|
+
|
66
|
+
describe "when user clicks outside", ->
|
67
|
+
beforeEach ->
|
68
|
+
$button.popover "open"
|
69
|
+
$("#wrapper").trigger "click"
|
70
|
+
|
71
|
+
it "should close", ->
|
72
|
+
expect($popover).toBeHidden()
|
73
|
+
|
74
|
+
describe "options", ->
|
75
|
+
describe "autoOpen set to false", ->
|
76
|
+
beforeEach ->
|
77
|
+
$button.popover "destroy"
|
78
|
+
$button.popover autoOpen: false
|
79
|
+
|
80
|
+
it "should not open when the link is clicked", ->
|
81
|
+
$button.trigger "click"
|
82
|
+
expect($("#my_popover")).toBeHidden()
|
@@ -0,0 +1,34 @@
|
|
1
|
+
describe "AA.TableCheckboxToggler", ->
|
2
|
+
|
3
|
+
beforeEach ->
|
4
|
+
loadFixtures('table_checkboxes.html');
|
5
|
+
|
6
|
+
@collection = $("#collection")
|
7
|
+
@toggle_all = @collection.find(".toggle_all")
|
8
|
+
|
9
|
+
@checkboxes = @collection.find(":checkbox").not(@toggle_all)
|
10
|
+
|
11
|
+
new AA.TableCheckboxToggler({}, @collection)
|
12
|
+
|
13
|
+
describe "'selected' class for table row", ->
|
14
|
+
it "should add the class 'selected' to rows when their checkbox is checked ", ->
|
15
|
+
checkbox = $("#item_1")
|
16
|
+
checkbox.attr("checked", "checked")
|
17
|
+
checkbox.trigger("change")
|
18
|
+
|
19
|
+
expect(checkbox.parents("tr")).toHaveAttr("class", "selected")
|
20
|
+
|
21
|
+
it "should remove the class 'selected' from rows when their checkbox is unchecked ", ->
|
22
|
+
checkbox = $("#item_1")
|
23
|
+
checkbox.trigger("change")
|
24
|
+
|
25
|
+
expect(checkbox.parents("tr")).not.toHaveAttr("class", "selected")
|
26
|
+
|
27
|
+
describe "clicking a cell", ->
|
28
|
+
it "should toggle the checkbox when a cell is clicked", ->
|
29
|
+
checkbox = $("#item_1")
|
30
|
+
row = checkbox.parents("td")
|
31
|
+
$(row).trigger("click")
|
32
|
+
|
33
|
+
expect(checkbox).toHaveAttr("checked", "checked")
|
34
|
+
|
@@ -0,0 +1,60 @@
|
|
1
|
+
(function() {
|
2
|
+
|
3
|
+
describe("AA.CheckboxToggler", function() {
|
4
|
+
beforeEach(function() {
|
5
|
+
loadFixtures('checkboxes.html');
|
6
|
+
this.collection = $("#collection");
|
7
|
+
this.toggle_all = this.collection.find(".toggle_all");
|
8
|
+
this.checkboxes = this.collection.find(":checkbox").not(this.toggle_all);
|
9
|
+
return new AA.CheckboxToggler({}, this.collection);
|
10
|
+
});
|
11
|
+
describe("on init", function() {
|
12
|
+
it("should raise an error if container not found", function() {
|
13
|
+
var _this = this;
|
14
|
+
return expect(function() {
|
15
|
+
return new AA.CheckboxToggler({});
|
16
|
+
}).toThrow("Container element not found");
|
17
|
+
});
|
18
|
+
return it("should raise an error if 'toggle all' checkbox not found", function() {
|
19
|
+
var _this = this;
|
20
|
+
this.toggle_all.remove();
|
21
|
+
return expect(function() {
|
22
|
+
return new AA.CheckboxToggler({}, _this.collection);
|
23
|
+
}).toThrow("'toggle all' checkbox not found");
|
24
|
+
});
|
25
|
+
});
|
26
|
+
describe("'toggle all' checkbox", function() {
|
27
|
+
it("should check all checkboxes when checked", function() {
|
28
|
+
this.toggle_all.trigger("click");
|
29
|
+
return expect(this.checkboxes).toHaveAttr("checked");
|
30
|
+
});
|
31
|
+
return it("should uncheck all checkboxes when unchecked", function() {
|
32
|
+
this.toggle_all.trigger("click");
|
33
|
+
this.toggle_all.trigger("click");
|
34
|
+
return expect(this.checkboxes).not.toHaveAttr("checked");
|
35
|
+
});
|
36
|
+
});
|
37
|
+
return describe("individual checkboxes", function() {
|
38
|
+
describe("when all checkboxes are selected and one is unchecked", function() {
|
39
|
+
beforeEach(function() {
|
40
|
+
this.collection.find(":checkbox").attr("checked", "checked");
|
41
|
+
return this.collection.find("#item_1").trigger("click");
|
42
|
+
});
|
43
|
+
return it("should uncheck the 'toggle all' checkbox", function() {
|
44
|
+
return expect(this.toggle_all).not.toHaveAttr("checked");
|
45
|
+
});
|
46
|
+
});
|
47
|
+
return describe("when the last checkbox is checked", function() {
|
48
|
+
beforeEach(function() {
|
49
|
+
this.checkboxes.attr("checked", "checked");
|
50
|
+
this.collection.find("#item_1").removeAttr("checked");
|
51
|
+
return this.collection.find("#item_1").trigger("click");
|
52
|
+
});
|
53
|
+
return it("should check the 'toggle all' checkbox", function() {
|
54
|
+
return expect(this.toggle_all).toHaveAttr("checked");
|
55
|
+
});
|
56
|
+
});
|
57
|
+
});
|
58
|
+
});
|
59
|
+
|
60
|
+
}).call(this);
|