diff options
| author | Zog | 2018-01-24 08:58:28 +0100 |
|---|---|---|
| committer | Zog | 2018-01-24 08:58:28 +0100 |
| commit | 82279efd9598204d5429e4b3cc98ddfad0e6dd56 (patch) | |
| tree | 405534ef15157e7456a64a2f2684d5cfae72bf2e | |
| parent | 5ecadfdead964381304fcf56a2564e2045988ef7 (diff) | |
| download | chouette-core-82279efd9598204d5429e4b3cc98ddfad0e6dd56.tar.bz2 | |
Add a toolbar for devs to easily manage permissions and features
| -rw-r--r-- | .gitignore | 1 | ||||
| -rw-r--r-- | app/assets/stylesheets/components/_toolbar.sass | 47 | ||||
| -rw-r--r-- | app/controllers/development_toolbar_controller.rb | 11 | ||||
| -rw-r--r-- | app/views/layouts/application.html.slim | 3 | ||||
| -rw-r--r-- | app/views/layouts/navigation/_main_nav_top.html.slim | 4 | ||||
| -rw-r--r-- | app/views/shared/_development_toolbar.html.slim | 48 | ||||
| -rw-r--r-- | config/environments/development.rb | 7 | ||||
| -rw-r--r-- | config/routes.rb | 4 |
8 files changed, 125 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore index ddd5fdda3..acdb5e230 100644 --- a/.gitignore +++ b/.gitignore @@ -49,3 +49,4 @@ coverage /bin/spring spec/fixtures/target_* +config/development_toolbar.rb diff --git a/app/assets/stylesheets/components/_toolbar.sass b/app/assets/stylesheets/components/_toolbar.sass new file mode 100644 index 000000000..47ae2ac0c --- /dev/null +++ b/app/assets/stylesheets/components/_toolbar.sass @@ -0,0 +1,47 @@ +#development-toolbar + .inner + overflow: scroll + padding: 10px + max-height: 70vh + display: flex + flex-direction: row + .toggles + font-size: 0.7em + float: right + a:first-child + padding-right: 3px + margin-right: 3px + border-right: 1px solid $lightgrey + + .col + flex: 1 1 + padding-right: 10px + padding-left: 10px + border-right: 1px solid $lightgrey + &:last-child + padding-right: 0 + border-right: none + + ul + padding: 0 + li + list-style-type: none + label + padding-left: 5px + font-weight: normal + h5 + font-weight: bold + &.permissions + ul + overflow: hidden + li + float: left + width: 33% + label + font-size: 0.8em + max-width: calc(100% - 15px) + text-overflow: ellipsis + overflow: hidden + padding-top: 3px + input + vertical-align: top diff --git a/app/controllers/development_toolbar_controller.rb b/app/controllers/development_toolbar_controller.rb new file mode 100644 index 000000000..20349f7b8 --- /dev/null +++ b/app/controllers/development_toolbar_controller.rb @@ -0,0 +1,11 @@ +class DevelopmentToolbarController < ApplicationController + def update_settings + return unless Rails.application.config.development_toolbar.present? + organisation = current_user.organisation + organisation.features = params[:features].keys.select{|k| params[:features][k] == "true"} + organisation.save + current_user.permissions = params[:permissions].keys.select{|k| params[:permissions][k] == "true"} + current_user.save + redirect_to request.referrer || "/" + end +end diff --git a/app/views/layouts/application.html.slim b/app/views/layouts/application.html.slim index 567e14ef0..34b373295 100644 --- a/app/views/layouts/application.html.slim +++ b/app/views/layouts/application.html.slim @@ -21,3 +21,6 @@ html lang=I18n.locale = yield #sidebar = yield :sidebar + + = render 'shared/development_toolbar' + = yield :javascript diff --git a/app/views/layouts/navigation/_main_nav_top.html.slim b/app/views/layouts/navigation/_main_nav_top.html.slim index 278249e09..f664d5416 100644 --- a/app/views/layouts/navigation/_main_nav_top.html.slim +++ b/app/views/layouts/navigation/_main_nav_top.html.slim @@ -14,9 +14,13 @@ span = current_user.name span.fa.fa-lg.fa-user + - if Rails.application.config.development_toolbar + = link_to '#', data: { toggle: 'modal', target: '#development-toolbar' }, class: "toolbar-button menu-item" do + .fa.fa-cog = link_to destroy_user_session_path, method: :delete, class: 'menu-item', title: 'Se déconnecter' do span.fa.fa-lg.fa-sign-out + = render 'layouts/navigation/nav_panel_operations' = render 'layouts/navigation/nav_panel_profile' if user_signed_in? diff --git a/app/views/shared/_development_toolbar.html.slim b/app/views/shared/_development_toolbar.html.slim new file mode 100644 index 000000000..b51bb3de6 --- /dev/null +++ b/app/views/shared/_development_toolbar.html.slim @@ -0,0 +1,48 @@ +- if Rails.application.config.development_toolbar + = modalbox 'development-toolbar' do + = form_tag development_toolbar_update_settings_path, authenticity_token: true do + .modal-header + h3= "Toolbar" + + .inner + .col.features + h4 + = "Features" + .toggles + = link_to 'all', '#', data: {mask: 'features', val: true} + = link_to 'none', '#', data: {mask: 'features', val: false} + ul + - Rails.application.config.development_toolbar.available_features.sort.each do |feature| + li + = hidden_field_tag "features[#{feature}]", false, id: "" + = check_box_tag "features[#{feature}]", true, has_feature?(feature) + = label :features, feature + .col.permissions + h4 + = "Permissions" + .toggles + = link_to 'all', '#', data: {mask: 'permissions', val: true} + = link_to 'none', '#', data: {mask: 'permissions', val: false} + - model = "" + - Rails.application.config.development_toolbar.available_permissions.sort.each do |permission| + - if permission.split('.').first != model + - model = permission.split('.').first + </ul> + h5 + = model + .toggles + = link_to 'all', '#', data: {mask: "permissions[#{model}", val: true} + = link_to 'none', '#', data: {mask: "permissions[#{model}", val: false} + <ul> + li + = hidden_field_tag "permissions[#{permission}]", false, id: "" + = check_box_tag "permissions[#{permission}]", true, current_user.has_permission?(permission) + = label :permissions, permission, permission.split('.').last + .modal-footer= submit_tag t("actions.submit"), class: 'btn btn-primary' + + - content_for :javascript do + coffee: + $('#development-toolbar .toggles a').click (e)-> + $('#development-toolbar').find("[name^=\"#{e.currentTarget.dataset.mask}\"]").attr "checked", e.currentTarget.dataset.val == 'true' + e.preventDefault() + false diff --git a/config/environments/development.rb b/config/environments/development.rb index 24a4ed6b8..925718e69 100644 --- a/config/environments/development.rb +++ b/config/environments/development.rb @@ -95,4 +95,11 @@ Rails.application.configure do config.i18n.available_locales = [:fr, :en] config.middleware.insert_after(ActionDispatch::Static, Rack::LiveReload) if ENV['LIVERELOAD'] + config.development_toolbar = false + if ENV['TOOLBAR'] && File.exists?("config/development_toolbar.rb") + config.development_toolbar = OpenStruct.new + config.development_toolbar.tap do |toolbar| + eval File.read("config/development_toolbar.rb") + end + end end diff --git a/config/routes.rb b/config/routes.rb index 0f60733af..432423ac5 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -238,6 +238,10 @@ ChouetteIhm::Application.routes.draw do get '/help/(*slug)' => 'help#show' + if Rails.application.config.development_toolbar + post "/development_toolbar" => "development_toolbar#update_settings", as: :development_toolbar_update_settings + end + match '/404', to: 'errors#not_found', via: :all, as: 'not_found' match '/403', to: 'errors#forbidden', via: :all, as: 'forbidden' match '/422', to: 'errors#server_error', via: :all, as: 'unprocessable_entity' |
