underworld 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/LICENSE +339 -0
- data/Rakefile +48 -0
- data/app/assets/fonts/DroidNaskh-Bold.ttf +0 -0
- data/app/assets/fonts/DroidNaskh-Regular.ttf +0 -0
- data/app/assets/fonts/OpenSans-Bold.ttf +0 -0
- data/app/assets/fonts/OpenSans-BoldItalic.ttf +0 -0
- data/app/assets/fonts/OpenSans-ExtraBold.ttf +0 -0
- data/app/assets/fonts/OpenSans-ExtraBoldItalic.ttf +0 -0
- data/app/assets/fonts/OpenSans-Italic.ttf +0 -0
- data/app/assets/fonts/OpenSans-Light.ttf +0 -0
- data/app/assets/fonts/OpenSans-LightItalic.ttf +0 -0
- data/app/assets/fonts/OpenSans-Regular.ttf +0 -0
- data/app/assets/fonts/OpenSans-Semibold.ttf +0 -0
- data/app/assets/fonts/OpenSans-SemiboldItalic.ttf +0 -0
- data/app/assets/images/underworld/select2-spinner.gif +0 -0
- data/app/assets/images/underworld/select2.png +0 -0
- data/app/assets/images/underworld/select2x2.png +0 -0
- data/app/assets/javascripts/underworld/application.js +16 -0
- data/app/assets/javascripts/underworld/dashboard/application.js.erb +30 -0
- data/app/assets/javascripts/underworld/dashboard/functions.js.erb +50 -0
- data/app/assets/javascripts/underworld/dashboard/init.js.coffee +33 -0
- data/app/assets/javascripts/underworld/dashboard/lib/actions.js +7 -0
- data/app/assets/javascripts/underworld/dashboard/lib/amd.js.coffee.erb +0 -0
- data/app/assets/javascripts/underworld/dashboard/lib/flash_message.js +71 -0
- data/app/assets/javascripts/underworld/dashboard/lib/locale.js +14 -0
- data/app/assets/javascripts/underworld/dashboard/lib/misc.js +5 -0
- data/app/assets/javascripts/underworld/dashboard/lib/string.js +3 -0
- data/app/assets/javascripts/underworld/dashboard/lib/ujs_patches.js.coffee +28 -0
- data/app/assets/javascripts/underworld/dashboard/manifest.js +5 -0
- data/app/assets/javascripts/underworld/dashboard/variables.js.erb +6 -0
- data/app/assets/javascripts/underworld/groups.js +2 -0
- data/app/assets/javascripts/underworld/home.js +2 -0
- data/app/assets/javascripts/underworld/i18n.js +13 -0
- data/app/assets/javascripts/underworld/simple.js +20 -0
- data/app/assets/javascripts/underworld/users.js +2 -0
- data/app/assets/stylesheets/underworld/dashboard/loadindicator.scss +17 -0
- data/app/assets/stylesheets/underworld/dashboard/ltr/application.css +38 -0
- data/app/assets/stylesheets/underworld/dashboard/ltr/base.css.scss +0 -0
- data/app/assets/stylesheets/underworld/dashboard/rtl/application.css +11 -0
- data/app/assets/stylesheets/underworld/dashboard/rtl/base.css.scss +0 -0
- data/app/assets/stylesheets/underworld/dashboard/share.scss +62 -0
- data/app/assets/stylesheets/underworld/dashboard/variables.scss +9 -0
- data/app/assets/stylesheets/underworld/ltr/application.css +0 -0
- data/app/assets/stylesheets/underworld/rtl/application.css +0 -0
- data/app/assets/stylesheets/underworld/simple/ltr/application.css +2 -0
- data/app/assets/stylesheets/underworld/simple/rtl/application.css +2 -0
- data/app/assets/stylesheets/underworld/simple/rtl/rtl.scss +16 -0
- data/app/assets/stylesheets/underworld/simple/share.scss +11 -0
- data/app/controllers/underworld/api_controller.rb +133 -0
- data/app/controllers/underworld/application_controller.rb +16 -0
- data/app/controllers/underworld/assets_controller.rb +6 -0
- data/app/controllers/underworld/dashboard/application_controller.rb +43 -0
- data/app/controllers/underworld/dashboard/groups_controller.rb +85 -0
- data/app/controllers/underworld/dashboard/profile_controller.rb +49 -0
- data/app/controllers/underworld/dashboard/user_messages_controller.rb +27 -0
- data/app/controllers/underworld/dashboard/users_controller.rb +116 -0
- data/app/controllers/underworld/dashboard_controller.rb +16 -0
- data/app/controllers/underworld/omniauth/callbacks_controller.rb +24 -0
- data/app/helpers/underworld/application_helper.rb +4 -0
- data/app/helpers/underworld/dashboard_helper.rb +107 -0
- data/app/helpers/underworld/groups_helper.rb +4 -0
- data/app/helpers/underworld/home_helper.rb +4 -0
- data/app/helpers/underworld/users_helper.rb +8 -0
- data/app/models/application_record.rb +3 -0
- data/app/models/underworld/concerns/assignment.rb +16 -0
- data/app/models/underworld/concerns/user/auth_definitions.rb +87 -0
- data/app/models/underworld/concerns/user/gravatar.rb +11 -0
- data/app/models/underworld/concerns/user/mongoid_fields.rb +81 -0
- data/app/models/underworld/concerns/user/permission.rb +47 -0
- data/app/models/underworld/concerns/user/user_roles.rb +24 -0
- data/app/models/underworld/group.rb +57 -0
- data/app/models/underworld/permission.rb +43 -0
- data/app/models/underworld/user.rb +81 -0
- data/app/models/underworld/user_message.rb +6 -0
- data/app/policies/underworld/admin_only_policy.rb +66 -0
- data/app/policies/underworld/application_policy.rb +55 -0
- data/app/policies/underworld/group_policy.rb +8 -0
- data/app/policies/underworld/user_message_policy.rb +9 -0
- data/app/policies/underworld/user_policy.rb +9 -0
- data/app/views/angular/auth/groups/details.html +2 -0
- data/app/views/angular/auth/groups/index.html +2 -0
- data/app/views/angular/auth/groups/new.html +2 -0
- data/app/views/angular/auth/index.html +30 -0
- data/app/views/angular/auth/profile/edit.html +54 -0
- data/app/views/angular/auth/users/details.html +28 -0
- data/app/views/angular/auth/users/index.html +6 -0
- data/app/views/angular/auth/users/new.html +57 -0
- data/app/views/angular/conversations/details.html +19 -0
- data/app/views/angular/conversations/index.html +13 -0
- data/app/views/angular/conversations/new.html +39 -0
- data/app/views/angular/conversations/show.html +6 -0
- data/app/views/angular/conversations/show_details.html +15 -0
- data/app/views/angular/fields/boolean/boolean.html +4 -0
- data/app/views/angular/fields/control-combo/control-list.html +19 -0
- data/app/views/angular/fields/datetime/datetime.html +10 -0
- data/app/views/angular/fields/datetime/time.html +25 -0
- data/app/views/angular/fields/file/file.html.slim +0 -0
- data/app/views/angular/fields/float/float.html +4 -0
- data/app/views/angular/fields/image/image.html +1 -0
- data/app/views/angular/fields/integer/integer.html +4 -0
- data/app/views/angular/fields/relation/relation.html +44 -0
- data/app/views/angular/fields/string/string.html +22 -0
- data/app/views/angular/fields/tag/tag.html +1 -0
- data/app/views/angular/fields/text/text.html +4 -0
- data/app/views/angular/filter/index.html +15 -0
- data/app/views/angular/index.html +3 -0
- data/app/views/angular/locale/fa.po +25 -0
- data/app/views/angular/locale/templates.pot +24 -0
- data/app/views/angular/logs/index.html +6 -0
- data/app/views/angular/modules.html +0 -0
- data/app/views/angular/nav.html.erb +39 -0
- data/app/views/angular/underworld/views/generic_add_view.html.slim +5 -0
- data/app/views/devise/registrations/edit.html.erb +29 -0
- data/app/views/devise/registrations/new.html.erb +38 -0
- data/app/views/devise/sessions/new.html.erb +37 -0
- data/app/views/devise/shared/_links.erb +19 -0
- data/app/views/devise/shared/_omni_link.erb +33 -0
- data/app/views/kaminari/_first_page.html.slim +3 -0
- data/app/views/kaminari/_gap.html.slim +2 -0
- data/app/views/kaminari/_last_page.html.slim +3 -0
- data/app/views/kaminari/_next_page.html.slim +3 -0
- data/app/views/kaminari/_page.html.slim +3 -0
- data/app/views/kaminari/_paginator.html.slim +13 -0
- data/app/views/kaminari/_prev_page.html.slim +3 -0
- data/app/views/layouts/underworld/application.html.erb +79 -0
- data/app/views/layouts/underworld/dashboard.html.erb +52 -0
- data/app/views/layouts/underworld/simple.html.erb +27 -0
- data/app/views/underworld/api/v1/conversations/create.json.jbuilder +1 -0
- data/app/views/underworld/api/v1/conversations/destroy.json.jbuilder +1 -0
- data/app/views/underworld/api/v1/conversations/index.json.jbuilder +1 -0
- data/app/views/underworld/api/v1/conversations/reply.json.jbuilder +1 -0
- data/app/views/underworld/api/v1/conversations/show.json.jbuilder +14 -0
- data/app/views/underworld/api/v1/conversations/trash.json.jbuilder +1 -0
- data/app/views/underworld/api/v1/groups/create.json.jbuilder +4 -0
- data/app/views/underworld/api/v1/groups/destroy.html.erb +2 -0
- data/app/views/underworld/api/v1/groups/destroy.json.jbuilder +1 -0
- data/app/views/underworld/api/v1/groups/edit.html.erb +2 -0
- data/app/views/underworld/api/v1/groups/index.html.erb +2 -0
- data/app/views/underworld/api/v1/groups/index.json.jbuilder +6 -0
- data/app/views/underworld/api/v1/groups/new.html.erb +2 -0
- data/app/views/underworld/api/v1/groups/show.html.erb +2 -0
- data/app/views/underworld/api/v1/groups/show.json.jbuilder +5 -0
- data/app/views/underworld/api/v1/groups/update.json.jbuilder +4 -0
- data/app/views/underworld/api/v1/logs/index.json.jbuilder +1 -0
- data/app/views/underworld/api/v1/permissions/index.json.jbuilder +1 -0
- data/app/views/underworld/api/v1/permissions/user_permissions.json.jbuilder +1 -0
- data/app/views/underworld/api/v1/users/create.html.erb +2 -0
- data/app/views/underworld/api/v1/users/create.json.jbuilder +1 -0
- data/app/views/underworld/api/v1/users/destroy.json.jbuilder +1 -0
- data/app/views/underworld/api/v1/users/distroy.html.erb +2 -0
- data/app/views/underworld/api/v1/users/edit.html.erb +2 -0
- data/app/views/underworld/api/v1/users/index.html.erb +2 -0
- data/app/views/underworld/api/v1/users/index.json.jbuilder +4 -0
- data/app/views/underworld/api/v1/users/show.html.erb +2 -0
- data/app/views/underworld/api/v1/users/show.json.jbuilder +2 -0
- data/app/views/underworld/api/v1/users/update.json.jbuilder +1 -0
- data/app/views/underworld/dashboard/groups/_form.html.slim +68 -0
- data/app/views/underworld/dashboard/groups/create.js.erb +3 -0
- data/app/views/underworld/dashboard/groups/edit.html.slim +3 -0
- data/app/views/underworld/dashboard/groups/errors.js.erb +3 -0
- data/app/views/underworld/dashboard/groups/index.html.slim +47 -0
- data/app/views/underworld/dashboard/groups/new.html.slim +2 -0
- data/app/views/underworld/dashboard/groups/update.js.erb +3 -0
- data/app/views/underworld/dashboard/index.html.erb +0 -0
- data/app/views/underworld/dashboard/login_required_page.html.erb +5 -0
- data/app/views/underworld/dashboard/not_found.html.slim +9 -0
- data/app/views/underworld/dashboard/not_found.js.erb +1 -0
- data/app/views/underworld/dashboard/profile/_form.html.erb +33 -0
- data/app/views/underworld/dashboard/profile/_profile_form.html.erb +33 -0
- data/app/views/underworld/dashboard/profile/create.js.erb +3 -0
- data/app/views/underworld/dashboard/profile/edit.html.erb +2 -0
- data/app/views/underworld/dashboard/profile/edit_password.html.erb +2 -0
- data/app/views/underworld/dashboard/profile/errors.js.erb +3 -0
- data/app/views/underworld/dashboard/resource/_form.html.slim +33 -0
- data/app/views/underworld/dashboard/resource/_input.html.slim +3 -0
- data/app/views/underworld/dashboard/resource/create.js.erb +3 -0
- data/app/views/underworld/dashboard/resource/destroy.js.erb +2 -0
- data/app/views/underworld/dashboard/resource/edit.html.slim +3 -0
- data/app/views/underworld/dashboard/resource/index.html.slim +60 -0
- data/app/views/underworld/dashboard/resource/new.html.slim +2 -0
- data/app/views/underworld/dashboard/resource/show.html.slim +22 -0
- data/app/views/underworld/dashboard/resource/update.js.erb +3 -0
- data/app/views/underworld/dashboard/shared/_content_header.html.slim +15 -0
- data/app/views/underworld/dashboard/shared/_control_sidebar.html.slim +50 -0
- data/app/views/underworld/dashboard/shared/_footer.html.slim +7 -0
- data/app/views/underworld/dashboard/shared/_header.html.erb +98 -0
- data/app/views/underworld/dashboard/shared/_sidebar.html.erb +69 -0
- data/app/views/underworld/dashboard/shared/_toolbar.html.slim +0 -0
- data/app/views/underworld/dashboard/shared/errors.js.erb +3 -0
- data/app/views/underworld/dashboard/user_messages/_form.html.slim +0 -0
- data/app/views/underworld/dashboard/user_messages/create.js.erb +0 -0
- data/app/views/underworld/dashboard/user_messages/destroy.js.erb +0 -0
- data/app/views/underworld/dashboard/user_messages/new.html.slim +72 -0
- data/app/views/underworld/dashboard/users/_form.html.slim +73 -0
- data/app/views/underworld/dashboard/users/_password_form.html.slim +37 -0
- data/app/views/underworld/dashboard/users/create.js.erb +3 -0
- data/app/views/underworld/dashboard/users/destroy.js.erb +2 -0
- data/app/views/underworld/dashboard/users/edit.html.slim +3 -0
- data/app/views/underworld/dashboard/users/edit_password.html.slim +1 -0
- data/app/views/underworld/dashboard/users/errors.js.erb +3 -0
- data/app/views/underworld/dashboard/users/index.html.slim +66 -0
- data/app/views/underworld/dashboard/users/new.html.slim +2 -0
- data/app/views/underworld/dashboard/users/show.html.slim +6 -0
- data/app/views/underworld/dashboard/users/update.js.erb +3 -0
- data/app/views/underworld/dashboard/users/update_password.js.erb +3 -0
- data/app/views/underworld/relations/_belongs_to.json.jbuilder +11 -0
- data/config/initializers/devise.rb +24 -0
- data/config/locales/devise.en.yml +59 -0
- data/config/locales/devise.fa.yml +58 -0
- data/config/locales/underworld.en.yml +96 -0
- data/config/locales/underworld.fa.yml +108 -0
- data/config/routes.rb +43 -0
- data/config/spring.rb +1 -0
- data/db/migrate/20131013091000_devise_create_underworld_users.rb +65 -0
- data/db/migrate/20131020124701_create_underworld_groups.rb +15 -0
- data/db/migrate/20131021170923_create_underworld_permissions.rb +15 -0
- data/db/migrate/20131123120422_add_permissions_groups_table.rb +16 -0
- data/db/migrate/20140613120923_add_users_groups_table.rb +13 -0
- data/db/migrate/20151122115129_add_uniqueness_index_to_users_groups.rb +11 -0
- data/db/migrate/20160310105736_create_underworld_user_messages.rb +25 -0
- data/db/seeds.rb +49 -0
- data/lib/generators/underworld/install_generator.rb +108 -0
- data/lib/generators/underworld/resource_generator.rb +70 -0
- data/lib/generators/underworld/resources_generator.rb +20 -0
- data/lib/generators/underworld/templates/README +21 -0
- data/lib/generators/underworld/templates/SPECS +13 -0
- data/lib/generators/underworld/templates/api/controller.rb.erb +60 -0
- data/lib/generators/underworld/templates/api_controller.rb +2 -0
- data/lib/generators/underworld/templates/dashboard/controller.rb.erb +2 -0
- data/lib/generators/underworld/templates/dashboard_controller.rb +18 -0
- data/lib/generators/underworld/templates/devise.rb +251 -0
- data/lib/generators/underworld/templates/features/api.feature +92 -0
- data/lib/generators/underworld/templates/features/api.step.rb +7 -0
- data/lib/generators/underworld/templates/features/step_definitions/email_steps.rb +206 -0
- data/lib/generators/underworld/templates/features/support/email_spec.rb +1 -0
- data/lib/generators/underworld/templates/features/support/env.rb +79 -0
- data/lib/generators/underworld/templates/javascripts/application.js +19 -0
- data/lib/generators/underworld/templates/policy/application_policy.rb +2 -0
- data/lib/generators/underworld/templates/policy/policy.rb.erb +2 -0
- data/lib/generators/underworld/templates/seeds.rb +1 -0
- data/lib/generators/underworld/templates/spec/factories/groups.rb +5 -0
- data/lib/generators/underworld/templates/spec/factories/users.rb +10 -0
- data/lib/generators/underworld/templates/spec/spec_helper.rb +69 -0
- data/lib/generators/underworld/templates/spec/support/devise.rb +3 -0
- data/lib/generators/underworld/templates/stylesheets/dashboard/ltr/application.css +3 -0
- data/lib/generators/underworld/templates/stylesheets/dashboard/rtl/application.css +3 -0
- data/lib/generators/underworld/templates/stylesheets/ltr/application.css +3 -0
- data/lib/generators/underworld/templates/stylesheets/rtl/application.css +3 -0
- data/lib/generators/underworld/templates/underworld.rb +12 -0
- data/lib/generators/underworld/templates/views/create.json.jbuilder.erb +3 -0
- data/lib/generators/underworld/templates/views/destroy.json.jbuilder.erb +1 -0
- data/lib/generators/underworld/templates/views/index.json.jbuilder.erb +13 -0
- data/lib/generators/underworld/templates/views/show.json.jbuilder.erb +6 -0
- data/lib/generators/underworld/templates/views/update.json.jbuilder.erb +6 -0
- data/lib/generators/underworld/views_generator.rb +57 -0
- data/lib/tasks/docs.rake +6 -0
- data/lib/tasks/sync.rake +9 -0
- data/lib/tasks/underworld_tasks.rake +38 -0
- data/lib/underworld.rb +35 -0
- data/lib/underworld/action_dispatch.rb +3 -0
- data/lib/underworld/api.rb +42 -0
- data/lib/underworld/api/groups_api.rb +41 -0
- data/lib/underworld/api/permissions_api.rb +24 -0
- data/lib/underworld/api/root.rb +15 -0
- data/lib/underworld/api/users_api.rb +20 -0
- data/lib/underworld/concerns.rb +7 -0
- data/lib/underworld/concerns/authorizable.rb +81 -0
- data/lib/underworld/configuration.rb +97 -0
- data/lib/underworld/dashboard.rb +11 -0
- data/lib/underworld/dashboard/dsl.rb +41 -0
- data/lib/underworld/dashboard/dsl/base.rb +133 -0
- data/lib/underworld/dashboard/dsl/create.rb +116 -0
- data/lib/underworld/dashboard/dsl/form_fields_properties.rb +62 -0
- data/lib/underworld/dashboard/dsl/index.rb +45 -0
- data/lib/underworld/dashboard/dsl/show.rb +6 -0
- data/lib/underworld/dashboard/dsl/update.rb +6 -0
- data/lib/underworld/dashboard/helpers/box_helpers.rb +129 -0
- data/lib/underworld/dashboard/models.rb +2 -0
- data/lib/underworld/dashboard/models/sidebar.rb +139 -0
- data/lib/underworld/dashboard/sections.rb +2 -0
- data/lib/underworld/dashboard/sections/resource.rb +229 -0
- data/lib/underworld/dashboard/sections/resource_create.rb +263 -0
- data/lib/underworld/dashboard/sections/resource_destroy.rb +27 -0
- data/lib/underworld/dashboard/sections/resource_show.rb +96 -0
- data/lib/underworld/dashboard/sections/resources_index.rb +113 -0
- data/lib/underworld/dashboard/sections/sidebar.rb +41 -0
- data/lib/underworld/discovery.rb +8 -0
- data/lib/underworld/discovery/permissions.rb +49 -0
- data/lib/underworld/engine.rb +53 -0
- data/lib/underworld/exceptions.rb +7 -0
- data/lib/underworld/extension.rb +18 -0
- data/lib/underworld/extension/base.rb +29 -0
- data/lib/underworld/fake_assets.rb +5 -0
- data/lib/underworld/i18n.rb +101 -0
- data/lib/underworld/initialize.rb +0 -0
- data/lib/underworld/liquid.rb +7 -0
- data/lib/underworld/liquid/block.rb +14 -0
- data/lib/underworld/liquid/render_tag.rb +50 -0
- data/lib/underworld/liquid/tag.rb +51 -0
- data/lib/underworld/middlewares.rb +1 -0
- data/lib/underworld/middlewares/locale.rb +29 -0
- data/lib/underworld/omniauth.rb +8 -0
- data/lib/underworld/omniauth/callbacks.rb +39 -0
- data/lib/underworld/orm.rb +30 -0
- data/lib/underworld/routes.rb +117 -0
- data/lib/underworld/version.rb +3 -0
- data/test/controllers/underworld/dashboard/resource_test.rb +118 -0
- data/test/dummy/README.rdoc +28 -0
- data/test/dummy/Rakefile +6 -0
- data/test/dummy/app/assets/javascripts/application.js +13 -0
- data/test/dummy/app/assets/javascripts/dashboard/application.js +19 -0
- data/test/dummy/app/assets/stylesheets/application.css +13 -0
- data/test/dummy/app/assets/stylesheets/dashboard/ltr/application.css +3 -0
- data/test/dummy/app/assets/stylesheets/dashboard/rtl/application.css +3 -0
- data/test/dummy/app/assets/stylesheets/ltr/application.css +3 -0
- data/test/dummy/app/assets/stylesheets/rtl/application.css +3 -0
- data/test/dummy/app/controllers/api_controller.rb +2 -0
- data/test/dummy/app/controllers/application_controller.rb +6 -0
- data/test/dummy/app/controllers/dashboard/application_controller.rb +18 -0
- data/test/dummy/app/helpers/application_helper.rb +2 -0
- data/test/dummy/app/policies/application_policy.rb +2 -0
- data/test/dummy/app/views/layouts/application.html.erb +14 -0
- data/test/dummy/bin/bundle +3 -0
- data/test/dummy/bin/rails +4 -0
- data/test/dummy/bin/rake +4 -0
- data/test/dummy/config.ru +4 -0
- data/test/dummy/config/application.rb +23 -0
- data/test/dummy/config/boot.rb +5 -0
- data/test/dummy/config/database.yml +25 -0
- data/test/dummy/config/environment.rb +5 -0
- data/test/dummy/config/environments/development.rb +29 -0
- data/test/dummy/config/environments/production.rb +80 -0
- data/test/dummy/config/environments/test.rb +38 -0
- data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/test/dummy/config/initializers/devise.rb +251 -0
- data/test/dummy/config/initializers/filter_parameter_logging.rb +4 -0
- data/test/dummy/config/initializers/formstatic.rb +76 -0
- data/test/dummy/config/initializers/formtastic.rb +110 -0
- data/test/dummy/config/initializers/inflections.rb +16 -0
- data/test/dummy/config/initializers/kaminari_config.rb +10 -0
- data/test/dummy/config/initializers/mime_types.rb +5 -0
- data/test/dummy/config/initializers/secret_token.rb +12 -0
- data/test/dummy/config/initializers/session_store.rb +3 -0
- data/test/dummy/config/initializers/underworld.rb +11 -0
- data/test/dummy/config/initializers/underworld_assets.rb +1 -0
- data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/test/dummy/config/locales/en.yml +23 -0
- data/test/dummy/config/routes.rb +13 -0
- data/test/dummy/lib/templates/slim/scaffold/_form.html.slim +8 -0
- data/test/dummy/public/404.html +58 -0
- data/test/dummy/public/422.html +58 -0
- data/test/dummy/public/500.html +57 -0
- data/test/dummy/public/favicon.ico +0 -0
- data/test/fabricators/underworld/groups.rb +27 -0
- data/test/fabricators/underworld/permissions.rb +14 -0
- data/test/fabricators/underworld/users.rb +17 -0
- data/test/generators/install_generator_test.rb +84 -0
- data/test/integration/underworld/authentication_test.rb +36 -0
- data/test/integration/underworld/dashboard_test.rb +64 -0
- data/test/test_helper.rb +72 -0
- metadata +1045 -0
- metadata.gz.sig +0 -0
@@ -0,0 +1,15 @@
|
|
1
|
+
// Content Header (Page header)
|
2
|
+
section.content-header
|
3
|
+
h1
|
4
|
+
= @dashboard_section_title || t('underworld.dashboard.dashboard')
|
5
|
+
small
|
6
|
+
= @dashboard_section_slug || Underworld::Engine.try(:slug) || 'SLUG'
|
7
|
+
|
8
|
+
ol.breadcrumb
|
9
|
+
li
|
10
|
+
a href="#"
|
11
|
+
i.fa.fa-dashboard
|
12
|
+
= t('underworld.home')
|
13
|
+
|
14
|
+
li.active
|
15
|
+
= t('underworld.dashboard.dashboard')
|
@@ -0,0 +1,50 @@
|
|
1
|
+
aside.control-sidebar.control-sidebar-dark
|
2
|
+
// Create the tabs
|
3
|
+
ul.nav.nav-tabs.nav-justified.control-sidebar-tabs
|
4
|
+
li
|
5
|
+
a[href="#control-sidebar-home-tab" data-toggle="tab"]
|
6
|
+
i.fa.fa-home
|
7
|
+
li
|
8
|
+
a[href="#control-sidebar-settings-tab" data-toggle="tab"]
|
9
|
+
i.fa.fa-gears
|
10
|
+
|
11
|
+
// Tab panes
|
12
|
+
.tab-content
|
13
|
+
// Home tab content
|
14
|
+
#control-sidebar-home-tab.tab-pane
|
15
|
+
h3.control-sidebar-heading
|
16
|
+
| t('underworld.recent_activity')
|
17
|
+
|
18
|
+
ul.control-sidebar-menu
|
19
|
+
li
|
20
|
+
a href="javascript::;"
|
21
|
+
i.menu-icon.fa.fa-birthday-cake.bg-red
|
22
|
+
.menu-info
|
23
|
+
h4.control-sidebar-subheading
|
24
|
+
| Langdon's Birthday
|
25
|
+
p
|
26
|
+
| Will be 23 on April 24th
|
27
|
+
|
28
|
+
h3.control-sidebar-heading
|
29
|
+
| Tasks Progress
|
30
|
+
ul.control-sidebar-menu
|
31
|
+
li
|
32
|
+
a href="javascript::;"
|
33
|
+
h4.control-sidebar-subheading
|
34
|
+
|Custom Template Design
|
35
|
+
span.label.label-danger.pull-right
|
36
|
+
| 70%
|
37
|
+
|
38
|
+
.progress.progress-xxs
|
39
|
+
.progress-bar.progress-bar-danger style="width: 70%"
|
40
|
+
|
41
|
+
// Stats tab content
|
42
|
+
#control-sidebar-stats-tab.tab-pane
|
43
|
+
| Stats Tab Content
|
44
|
+
// Settings tab content
|
45
|
+
#control-sidebar-settings-tab.tab-pane
|
46
|
+
h3.control-sidebar-heading
|
47
|
+
| General Settings
|
48
|
+
// Add the sidebar's background. This div must be placed
|
49
|
+
// immediately after the control sidebar
|
50
|
+
.control-sidebar-bg
|
@@ -0,0 +1,98 @@
|
|
1
|
+
<header class="main-header" id="topnav">
|
2
|
+
<!-- Logo -->
|
3
|
+
<a href="/" class="logo">
|
4
|
+
<span class="logo-lg"><%= Underworld::Engine.site_title || t('underworld.engine_name') %></span>
|
5
|
+
</a>
|
6
|
+
<!-- Header Navbar: style can be found in header.less -->
|
7
|
+
<nav class="navbar navbar-static-top" role="navigation">
|
8
|
+
<!-- Sidebar toggle button-->
|
9
|
+
<a href="#" class="sidebar-toggle" data-toggle="offcanvas" role="button">
|
10
|
+
<span class="sr-only">Toggle navigation</span>
|
11
|
+
</a>
|
12
|
+
<div class="navbar-custom-menu">
|
13
|
+
<ul class="nav navbar-nav">
|
14
|
+
<!-- Messages: style can be found in dropdown.less-->
|
15
|
+
<li class="dropdown messages-menu">
|
16
|
+
<a href="<%= Underworld::Engine.routes.url_helpers.dashboard_user_messages_path %>" class="dropdown-toggle" data-toggle="dropdown">
|
17
|
+
<i class="fa fa-envelope-o"></i>
|
18
|
+
<!-- <span class="label label-success">4</span>-->
|
19
|
+
</a>
|
20
|
+
</li>
|
21
|
+
|
22
|
+
<!-- Messages: style can be found in dropdown.less-->
|
23
|
+
<li class="dropdown notification-menu">
|
24
|
+
<a href="#" class="dropdown-toggle" data-toggle="dropdown">
|
25
|
+
<i class="fa fa-bell-o"></i>
|
26
|
+
<!-- <span class="label label-success">4</span>-->
|
27
|
+
</a>
|
28
|
+
</li>
|
29
|
+
<% if I18n.available_locales.length > 1 %>
|
30
|
+
<li class="notifications-menu dropdown">
|
31
|
+
<a href="#" class="dropdown-toggle" data-toggle="dropdown">
|
32
|
+
<i class="fa fa-flag-o"></i>
|
33
|
+
</a>
|
34
|
+
|
35
|
+
<ul class="dropdown-menu">
|
36
|
+
<li class="header"><%= t("underworld.select_a_language")%></li>
|
37
|
+
<% I18n.available_locales.each do |lang| %>
|
38
|
+
<li>
|
39
|
+
<!-- inner menu: contains the actual data -->
|
40
|
+
<ul class="menu">
|
41
|
+
<li>
|
42
|
+
<a href="/<%= lang %><%= request.env['PATH_INFO'] %>">
|
43
|
+
<%= t(lang) %>
|
44
|
+
</a>
|
45
|
+
</li><!-- end task item -->
|
46
|
+
</ul>
|
47
|
+
</li>
|
48
|
+
<% end %>
|
49
|
+
</ul>
|
50
|
+
</li>
|
51
|
+
<% end %>
|
52
|
+
|
53
|
+
<!-- User Account: style can be found in dropdown.less -->
|
54
|
+
<li class="dropdown user user-menu">
|
55
|
+
<a href="#" class="dropdown-toggle" data-toggle="dropdown">
|
56
|
+
<img src="<%= current_user.gravatar %>" class="user-image" alt="User Image" />
|
57
|
+
<span class="hidden-xs user-name-span"><%= current_user.full_name %></span>
|
58
|
+
</a>
|
59
|
+
<ul class="dropdown-menu">
|
60
|
+
<!-- User image -->
|
61
|
+
<li class="user-header">
|
62
|
+
<img src="<%= current_user.gravatar %>" class="img-circle" alt="User Image" />
|
63
|
+
<p>
|
64
|
+
<%= current_user.full_name %>
|
65
|
+
<small><%= t('underworld.member_since', date: current_user.created_at) %></small>
|
66
|
+
</p>
|
67
|
+
</li>
|
68
|
+
<!-- Menu Body -->
|
69
|
+
<li class="user-body">
|
70
|
+
<div class="col-xs-4 text-center">
|
71
|
+
<a href="#">Followers</a>
|
72
|
+
</div>
|
73
|
+
<div class="col-xs-4 text-center">
|
74
|
+
<a href="#">Sales</a>
|
75
|
+
</div>
|
76
|
+
<div class="col-xs-4 text-center">
|
77
|
+
<a href="#">Friends</a>
|
78
|
+
</div>
|
79
|
+
</li>
|
80
|
+
<!-- Menu Footer-->
|
81
|
+
<li class="user-footer">
|
82
|
+
<div class="pull-left">
|
83
|
+
<a href="#" class="btn btn-primary btn-flat">Profile</a>
|
84
|
+
</div>
|
85
|
+
<div class="pull-right">
|
86
|
+
<a href="<%= underworld.destroy_user_session_path %>" data-method="delete" class="btn btn-default btn-flat"><%= t('sign_out') %></a>
|
87
|
+
</div>
|
88
|
+
</li>
|
89
|
+
</ul>
|
90
|
+
</li>
|
91
|
+
<!-- Control Sidebar Toggle Button -->
|
92
|
+
<li>
|
93
|
+
<a href="#" data-toggle="control-sidebar"><i class="fa fa-gears"></i></a>
|
94
|
+
</li>
|
95
|
+
</ul>
|
96
|
+
</div>
|
97
|
+
</nav>
|
98
|
+
</header>
|
@@ -0,0 +1,69 @@
|
|
1
|
+
<!-- Left side column. contains the logo and sidebar -->
|
2
|
+
<aside class="main-sidebar" data-turbolinks-permanent id="sidebar">
|
3
|
+
<!-- sidebar: style can be found in sidebar.less -->
|
4
|
+
<section class="sidebar">
|
5
|
+
<!-- Sidebar user panel -->
|
6
|
+
<div class="user-panel">
|
7
|
+
<div class="pull-left image">
|
8
|
+
<img src="<%= current_user.gravatar %>" class="img-circle" alt="User Image" />
|
9
|
+
</div>
|
10
|
+
<div class="pull-left info">
|
11
|
+
<p><%= current_user.full_name %></p>
|
12
|
+
<a href="#"><i class="fa fa-circle text-success"></i>
|
13
|
+
<%= t('underworld.dashboard.sidebar.online') %>
|
14
|
+
</a>
|
15
|
+
</div>
|
16
|
+
</div>
|
17
|
+
<!-- search form -->
|
18
|
+
<form action="#" method="get" class="sidebar-form">
|
19
|
+
<div class="input-group">
|
20
|
+
<input type="text" name="q" class="form-control" placeholder="<%= t('underworld.dashboard.sidebar.search') %>..." />
|
21
|
+
<span class="input-group-btn">
|
22
|
+
<button type="submit" name="search" id="search-btn" class="btn btn-flat"><i class="fa fa-search"></i></button>
|
23
|
+
</span>
|
24
|
+
</div>
|
25
|
+
</form>
|
26
|
+
<!-- /.search form -->
|
27
|
+
<!-- sidebar menu: : style can be found in sidebar.less -->
|
28
|
+
<ul class="sidebar-menu">
|
29
|
+
<li class="header"><%= @sidebar.title %></li>
|
30
|
+
|
31
|
+
<li class="active treeview">
|
32
|
+
<a href="/<%= Underworld::Engine.dashboard_namespace.to_s %>/">
|
33
|
+
<i class="fa fa-dashboard"></i>
|
34
|
+
<span>
|
35
|
+
<%= t('underworld.dashboard.dashboard') %>
|
36
|
+
</span>
|
37
|
+
</a>
|
38
|
+
</li>
|
39
|
+
|
40
|
+
<% @sidebar.children.each do |menu| %>
|
41
|
+
<% if menu.visible? current_user %>
|
42
|
+
<li class="treeview">
|
43
|
+
<a href="#">
|
44
|
+
<i class="<%= menu.icon %>"></i>
|
45
|
+
<span><%= menu.title %></span>
|
46
|
+
<!-- <span class="label label-primary pull-right">4</span> -->
|
47
|
+
</a>
|
48
|
+
<% unless menu.children.nil? %>
|
49
|
+
<ul class="treeview-menu slide">
|
50
|
+
<% menu.children.each do |submenu| %>
|
51
|
+
<% if submenu.visible? current_user %>
|
52
|
+
<li>
|
53
|
+
<a href="<%= submenu.url %>">
|
54
|
+
<i class="<%= submenu.icon %>"></i>
|
55
|
+
<%= submenu.title %>
|
56
|
+
</a>
|
57
|
+
</li>
|
58
|
+
<% end %>
|
59
|
+
<% end %>
|
60
|
+
</ul>
|
61
|
+
<% end %>
|
62
|
+
</li>
|
63
|
+
<% end %>
|
64
|
+
<% end %>
|
65
|
+
|
66
|
+
</ul>
|
67
|
+
</section>
|
68
|
+
<!-- /.sidebar -->
|
69
|
+
</aside>
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
@@ -0,0 +1,72 @@
|
|
1
|
+
/! Content Wrapper. Contains page content
|
2
|
+
.content-wrapper
|
3
|
+
/! Content Header (Page header)
|
4
|
+
section.content-header
|
5
|
+
h1
|
6
|
+
| Inbox
|
7
|
+
small 13 new messages
|
8
|
+
|
9
|
+
/! Main content
|
10
|
+
section.content
|
11
|
+
.row
|
12
|
+
.col-md-3.header
|
13
|
+
.box.box-solid
|
14
|
+
.box-header.with-border
|
15
|
+
h3.box-title Labels
|
16
|
+
.box-tools
|
17
|
+
button.btn.btn-box-tool data-widget="collapse" type="button"
|
18
|
+
i.fa.fa-minus
|
19
|
+
/! /.box-header
|
20
|
+
.box-body.no-padding
|
21
|
+
ul.nav.nav-pills.nav-stacked
|
22
|
+
li
|
23
|
+
a href="#"
|
24
|
+
i.fa.fa-circle-o.text-red
|
25
|
+
| Important
|
26
|
+
li
|
27
|
+
a href="#"
|
28
|
+
i.fa.fa-circle-o.text-yellow
|
29
|
+
| Promotions
|
30
|
+
li
|
31
|
+
a href="#"
|
32
|
+
i.fa.fa-circle-o.text-light-blue
|
33
|
+
| Social
|
34
|
+
/! /.box-body
|
35
|
+
/! /.box
|
36
|
+
/! /.col
|
37
|
+
.col-md-9
|
38
|
+
.box.box-primary
|
39
|
+
.box-header.with-border
|
40
|
+
h3.box-title Compose New Message
|
41
|
+
/! /.box-header
|
42
|
+
.box-body
|
43
|
+
.form-group
|
44
|
+
input.form-control placeholder="To:" /
|
45
|
+
.form-group
|
46
|
+
input.form-control placeholder="Subject:" /
|
47
|
+
.form-group
|
48
|
+
textarea#compose-textarea.form-control style=("height: 300px")
|
49
|
+
.form-group
|
50
|
+
.btn.btn-default.btn-file
|
51
|
+
i.fa.fa-paperclip
|
52
|
+
| Attachment
|
53
|
+
input name="attachment" type="file" /
|
54
|
+
p.help-block Max. 32MB
|
55
|
+
/! /.box-body
|
56
|
+
.box-footer
|
57
|
+
.pull-right
|
58
|
+
button.btn.bg-navy type="button"
|
59
|
+
i.fa.fa-pencil
|
60
|
+
| Draft
|
61
|
+
button.btn.btn-success style=("margin-left: 5px") type="submit"
|
62
|
+
i.fa.fa-envelope-o
|
63
|
+
| Send
|
64
|
+
button.btn.btn-danger type="reset"
|
65
|
+
i.fa.fa-times
|
66
|
+
| Discard
|
67
|
+
/! /.box-footer
|
68
|
+
/! /. box
|
69
|
+
/! /.col
|
70
|
+
/! /.row
|
71
|
+
/! /.content
|
72
|
+
/! /.content-wrapper
|
@@ -0,0 +1,73 @@
|
|
1
|
+
= form_tag(form_target, remote: true, method: method) do
|
2
|
+
.row
|
3
|
+
.col-sm-12.col-lg-12
|
4
|
+
.box.box-primary
|
5
|
+
.box-header
|
6
|
+
|
7
|
+
.box-body
|
8
|
+
.row
|
9
|
+
.col-sm-12.col-lg-6
|
10
|
+
.form-group data-name="first_name"
|
11
|
+
label for="first_name"
|
12
|
+
= t('underworld.user.first_name')
|
13
|
+
input#group_name.form-control[name="user[first_name]" type="text" required value=(@user.first_name)]
|
14
|
+
|
15
|
+
.col-sm-12.col-lg-6
|
16
|
+
.form-group data-name="last_name"
|
17
|
+
label for="last_name"
|
18
|
+
= t('underworld.user.last_name')
|
19
|
+
input#group_name.form-control[name="user[last_name]" type="text" required value=(@user.last_name)]
|
20
|
+
|
21
|
+
.row
|
22
|
+
.col-sm-12.col-lg-6
|
23
|
+
.form-group data-name="email"
|
24
|
+
label for="email"
|
25
|
+
= t('underworld.user.user.email')
|
26
|
+
input#group_name.form-control[name="user[email]" type="text" required value=(@user.email)]
|
27
|
+
|
28
|
+
- if @user.new_record?
|
29
|
+
.row
|
30
|
+
.col-sm-12.col-lg-6
|
31
|
+
.form-group data-name="password"
|
32
|
+
label for="password"
|
33
|
+
= t('password')
|
34
|
+
input#group_name.form-control[name="user[password]" type="password"]
|
35
|
+
|
36
|
+
.col-sm-12.col-lg-6
|
37
|
+
.form-group data-name="password_confirmation"
|
38
|
+
label for="password_confirmation"
|
39
|
+
= t('password_confirmation')
|
40
|
+
input#group_name.form-control[name="user[password_confirmation]" type="password"]
|
41
|
+
|
42
|
+
.row
|
43
|
+
.col-sm-12
|
44
|
+
h3
|
45
|
+
= t('underworld.user.groups_of_user')
|
46
|
+
.row
|
47
|
+
.col-sm-12.col-lg-12
|
48
|
+
.form-group data-name="groups"
|
49
|
+
label
|
50
|
+
= t('underworld.group.groups')
|
51
|
+
select.multiple.select.form-control name="user[groups][]" multiple="multiple"
|
52
|
+
- @groups.each do |group|
|
53
|
+
- if @user.member_of? group
|
54
|
+
option[value=(group.id) selected]
|
55
|
+
= group.name
|
56
|
+
- else
|
57
|
+
option value=(group.id)
|
58
|
+
= group.name
|
59
|
+
|
60
|
+
|
61
|
+
.box-footer
|
62
|
+
.row
|
63
|
+
.col-sm-2
|
64
|
+
button.btn.btn-success.btn-block type="submit"
|
65
|
+
i.fa.fa-check
|
66
|
+
|
|
67
|
+
= t('underworld.save')
|
68
|
+
|
69
|
+
.col-sm-2.pull-right
|
70
|
+
|
71
|
+
a.btn.btn-danger.btn-block href=(index)
|
72
|
+
i.fa.fa-times
|
73
|
+
= t('underworld.cancel')
|
@@ -0,0 +1,37 @@
|
|
1
|
+
- form_target = underworld.auth_users_edit_password_dashboard_auth_user_path({id: @user.id})
|
2
|
+
- index = underworld.dashboard_auth_users_path
|
3
|
+
= form_tag(form_target, remote: true, method: :patch) do
|
4
|
+
.row
|
5
|
+
.col-sm-12
|
6
|
+
.box.box-primary
|
7
|
+
.box-header
|
8
|
+
.box-title
|
9
|
+
= t('underworld.dashboard.change_password')
|
10
|
+
|
11
|
+
.box-body
|
12
|
+
.row
|
13
|
+
.col-sm-12.col-lg-6
|
14
|
+
.form-group data-name="password"
|
15
|
+
label for="password"
|
16
|
+
= t('password')
|
17
|
+
input#group_name.form-control[name="user[password]" type="password"]
|
18
|
+
.row
|
19
|
+
.col-sm-12.col-lg-6
|
20
|
+
.form-group data-name="password_confirmation"
|
21
|
+
label for="password_confirmation"
|
22
|
+
= t('password_confirmation')
|
23
|
+
input#group_name.form-control[name="user[password_confirmation]" type="password"]
|
24
|
+
|
25
|
+
.box-footer
|
26
|
+
.row
|
27
|
+
.col-sm-2
|
28
|
+
button.btn.btn-success.btn-block type="submit"
|
29
|
+
i.fa.fa-check
|
30
|
+
|
|
31
|
+
= t('underworld.save')
|
32
|
+
|
33
|
+
.col-sm-2.pull-right
|
34
|
+
|
35
|
+
div.btn.btn-danger.btn-block onclick=("redirect_to('#{index}')")
|
36
|
+
i.fa.fa-times
|
37
|
+
= t('underworld.cancel')
|