From: Jiri Tomasek jtomasek@redhat.com
Breadcrumbs added to admin section. Breadcrumbs now track going back in history and can be cleared by calling clear_breadcrumbs in action. --- src/app/controllers/application_controller.rb | 21 ++++++++++--------- .../controllers/hardware_profiles_controller.rb | 3 ++ src/app/controllers/pool_families_controller.rb | 3 ++ src/app/controllers/pools_controller.rb | 4 +- .../controllers/provider_accounts_controller.rb | 4 +++ src/app/controllers/providers_controller.rb | 4 +++ src/app/controllers/realms_controller.rb | 7 ++++++ src/app/controllers/roles_controller.rb | 3 ++ .../suggested_deployables_controller.rb | 3 ++ src/app/controllers/users_controller.rb | 7 ++--- src/app/views/layouts/_nav_history.haml | 4 +- 11 files changed, 45 insertions(+), 18 deletions(-)
diff --git a/src/app/controllers/application_controller.rb b/src/app/controllers/application_controller.rb index 6c4c1a6..c70395c 100644 --- a/src/app/controllers/application_controller.rb +++ b/src/app/controllers/application_controller.rb @@ -27,7 +27,7 @@ class ApplicationController < ActionController::Base include ApplicationService filter_parameter_logging :password, :password_confirmation helper_method :current_user_session, :current_user, :filter_view? - before_filter :shift_breadcrumbs + before_filter :read_breadcrumbs layout 'old'
def top_section; end @@ -243,15 +243,13 @@ class ApplicationController < ActionController::Base # Breadcrumb-Related functionality ############################################################################
- def clear_breadcrumbs - session[:breadcrumbs] = [] + def read_breadcrumbs + session[:breadcrumbs] ||= [] + @read_breadcrumbs = session[:breadcrumbs].last(2) end
- def shift_breadcrumbs - session[:breadcrumbs] ||= [] - shifted_breadcrumb = session[:breadcrumbs].shift unless session[:breadcrumbs].length < 3 || request.request_uri == session[:breadcrumbs].last[:path] - #TODO waiting for the ViewState to be implemented - #ViewState.find(shifted_breadcrumb[:viewstate]).mark_for_deletion if shifted_breadcrumb[:viewstate] + def clear_breadcrumbs + session[:breadcrumbs] = [] end
def save_breadcrumb(path, name = controller_name) @@ -259,9 +257,12 @@ class ApplicationController < ActionController::Base breadcrumbs = session[:breadcrumbs] viewstate = @viewstate ? @viewstate.id : nil
- if breadcrumbs.empty? or path != breadcrumbs.last[:path] - breadcrumbs.push({:name => name, :path => path, :viewstate => viewstate, :class => controller_name}) + #if item with desired path is already in bc, then remove every bc behind it + if index = breadcrumbs.find_index {|b| b[:path] == path} + breadcrumbs.slice!(index, breadcrumbs.length) end + read_breadcrumbs + breadcrumbs.push({:name => name, :path => path, :viewstate => viewstate, :class => controller_name})
session[:breadcrumbs] = breadcrumbs end diff --git a/src/app/controllers/hardware_profiles_controller.rb b/src/app/controllers/hardware_profiles_controller.rb index 0967f68..2a91e95 100644 --- a/src/app/controllers/hardware_profiles_controller.rb +++ b/src/app/controllers/hardware_profiles_controller.rb @@ -12,6 +12,8 @@ class HardwareProfilesController < ApplicationController end
def index + clear_breadcrumbs + save_breadcrumb(hardware_profiles_path) @params = params respond_to do |format| format.js do @@ -41,6 +43,7 @@ class HardwareProfilesController < ApplicationController @details_tab = params[:details_tab].blank? ? 'properties' : params[:details_tab] properties matching_provider_hardware_profiles + save_breadcrumb(hardware_profile_path(@hardware_profile), @hardware_profile.name)
respond_to do |format| format.js do diff --git a/src/app/controllers/pool_families_controller.rb b/src/app/controllers/pool_families_controller.rb index 80f7885..bd57b2e 100644 --- a/src/app/controllers/pool_families_controller.rb +++ b/src/app/controllers/pool_families_controller.rb @@ -10,6 +10,8 @@ class PoolFamiliesController < ApplicationController end
def index + clear_breadcrumbs + save_breadcrumb(pool_families_path) @search_term = params[:q] if @search_term.blank? load_pool_families @@ -57,6 +59,7 @@ class PoolFamiliesController < ApplicationController def show @pool_family = PoolFamily.find(params[:id]) @url_params = params.clone + save_breadcrumb(pool_family_path(@pool_family), @pool_family.name)
respond_to do |format| format.js do diff --git a/src/app/controllers/pools_controller.rb b/src/app/controllers/pools_controller.rb index 707d32c..46b3e17 100644 --- a/src/app/controllers/pools_controller.rb +++ b/src/app/controllers/pools_controller.rb @@ -15,6 +15,7 @@ class PoolsController < ApplicationController
def index clear_breadcrumbs + save_breadcrumb(pools_path(:viewstate => @viewstate ? @viewstate.id : nil))
@user_pools = Pool.list_for_user(current_user, Privilege::VIEW) if filter_view? @@ -45,11 +46,11 @@ class PoolsController < ApplicationController format.html format.json { render :json => @pools } end - save_breadcrumb(pools_path(:viewstate => @viewstate ? @viewstate.id : nil)) end
def show @pool = Pool.find(params[:id]) + save_breadcrumb(pool_path(@pool), @pool.name) require_privilege(Privilege::VIEW, @pool) @statistics = @pool.statistics @view = params[:view] == 'filter' ? 'deployments/filter_view' : 'deployments/pretty_view' @@ -58,7 +59,6 @@ class PoolsController < ApplicationController format.html { render :action => :show} format.json { render :json => @pool } end - save_breadcrumb(pool_path(@pool), @pool.name) end
def new diff --git a/src/app/controllers/provider_accounts_controller.rb b/src/app/controllers/provider_accounts_controller.rb index 1f4dd05..f17ee70 100644 --- a/src/app/controllers/provider_accounts_controller.rb +++ b/src/app/controllers/provider_accounts_controller.rb @@ -9,6 +9,8 @@ class ProviderAccountsController < ApplicationController end
def index + clear_breadcrumbs + save_breadcrumb(provider_accounts_path) # TODO: this is temporary solution how to combine search and permissions # filtering @search_term = params[:q] @@ -36,6 +38,8 @@ class ProviderAccountsController < ApplicationController render :action => 'show' and return end
+ save_breadcrumb(provider_account_path(@account), @account.name) + respond_to do |format| format.js do if @url_params.delete :details_pane diff --git a/src/app/controllers/providers_controller.rb b/src/app/controllers/providers_controller.rb index ad0838b..b777bab 100644 --- a/src/app/controllers/providers_controller.rb +++ b/src/app/controllers/providers_controller.rb @@ -8,6 +8,8 @@ class ProvidersController < ApplicationController end
def index + clear_breadcrumbs + save_breadcrumb(providers_path) @params = params @search_term = params[:q]
@@ -48,6 +50,8 @@ class ProvidersController < ApplicationController test_connection(@provider) end
+ save_breadcrumb(provider_path(@provider), @provider.name) + respond_to do |format| format.js do if @url_params.delete :details_pane diff --git a/src/app/controllers/realms_controller.rb b/src/app/controllers/realms_controller.rb index 88b3747..4fa3824 100644 --- a/src/app/controllers/realms_controller.rb +++ b/src/app/controllers/realms_controller.rb @@ -7,6 +7,11 @@ class RealmsController < ApplicationController :administer end
+ def index + clear_breadcrumbs + save_breadcrumb(realms_path) + end + def new require_privilege(Privilege::CREATE, Realm) @realm = FrontendRealm.new @@ -78,6 +83,8 @@ class RealmsController < ApplicationController @backend_realm_targets = @realm.realm_backend_targets.select {|x| x.realm_or_provider_type == 'Realm'} @backend_provider_targets = @realm.realm_backend_targets.select {|x| x.realm_or_provider_type == 'Provider'}
+ save_breadcrumb(realm_path(@realm), @realm.name) + respond_to do |format| format.js do if @url_params.delete :details_pane diff --git a/src/app/controllers/roles_controller.rb b/src/app/controllers/roles_controller.rb index 07a6080..2cb5af8 100644 --- a/src/app/controllers/roles_controller.rb +++ b/src/app/controllers/roles_controller.rb @@ -9,6 +9,8 @@ class RolesController < ApplicationController end
def index + clear_breadcrumbs + save_breadcrumb(roles_path) @search_term = params[:q] if @search_term.blank? load_roles @@ -48,6 +50,7 @@ class RolesController < ApplicationController @url_params = params.clone @tab_captions = ['Properties'] @details_tab = params[:details_tab].blank? ? 'properties' : params[:details_tab] + save_breadcrumb(role_path(@role), @role.name) respond_to do |format| format.js do if @url_params.delete :details_pane diff --git a/src/app/controllers/suggested_deployables_controller.rb b/src/app/controllers/suggested_deployables_controller.rb index dfa6722..1900bf3 100644 --- a/src/app/controllers/suggested_deployables_controller.rb +++ b/src/app/controllers/suggested_deployables_controller.rb @@ -7,6 +7,8 @@ class SuggestedDeployablesController < ApplicationController end
def index + clear_breadcrumbs + save_breadcrumb(suggested_deployables_path(:viewstate => @viewstate ? @viewstate.id : nil)) @suggested_deployables = SuggestedDeployable.list_for_user(current_user, Privilege::VIEW) set_header end @@ -19,6 +21,7 @@ class SuggestedDeployablesController < ApplicationController def show @suggested_deployable = SuggestedDeployable.find(params[:id]) require_privilege(Privilege::VIEW, @suggested_deployable) + save_breadcrumb(suggested_deployable_path(@suggested_deployable), @suggested_deployable.name) end
def create diff --git a/src/app/controllers/users_controller.rb b/src/app/controllers/users_controller.rb index fe79da0..106c0eb 100644 --- a/src/app/controllers/users_controller.rb +++ b/src/app/controllers/users_controller.rb @@ -8,9 +8,9 @@ class UsersController < ApplicationController end
def index - clear_breadcrumbs require_privilege(Privilege::VIEW, User) - save_breadcrumb(users_path, "Users") + clear_breadcrumbs + save_breadcrumb(users_path) @params = params @search_term = params[:q] if @search_term.blank? @@ -57,7 +57,7 @@ class UsersController < ApplicationController @user = params[:id] ? User.find(params[:id]) : current_user require_privilege(Privilege::VIEW, User) unless current_user == @user @quota_resources = @user.quota.quota_resources - + save_breadcrumb(user_path(@user), @user.name) @url_params = params.clone @tab_captions = ['Properties'] @details_tab = params[:details_tab].blank? ? 'properties' : params[:details_tab] @@ -70,7 +70,6 @@ class UsersController < ApplicationController end format.html end - save_breadcrumb(user_path(@user), [@user.first_name, @user.last_name].join(' ').titlecase) end
def edit diff --git a/src/app/views/layouts/_nav_history.haml b/src/app/views/layouts/_nav_history.haml index 1a95c45..6688d10 100644 --- a/src/app/views/layouts/_nav_history.haml +++ b/src/app/views/layouts/_nav_history.haml @@ -1,7 +1,7 @@ -- unless session[:breadcrumbs].blank? +- unless @read_breadcrumbs.blank? %nav#nav_history %span.label.light.small « Return to %ol.nav_hist_bar - - session[:breadcrumbs][0..1].each do |breadcrumb| + - @read_breadcrumbs.each do |breadcrumb| %li{:class => breadcrumb[:class]} = link_to breadcrumb[:name].titleize, breadcrumb[:path]