diff options
| -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' | 
