padrino-admin 0.11.3 → 0.11.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (89) hide show
  1. checksums.yaml +7 -0
  2. data/README.rdoc +3 -3
  3. data/lib/padrino-admin/access_control.rb +46 -47
  4. data/lib/padrino-admin/bootstrap-less/alerts.less +29 -55
  5. data/lib/padrino-admin/bootstrap-less/badges.less +13 -15
  6. data/lib/padrino-admin/bootstrap-less/bootstrap.less +17 -21
  7. data/lib/padrino-admin/bootstrap-less/breadcrumbs.less +6 -11
  8. data/lib/padrino-admin/bootstrap-less/button-groups.less +114 -32
  9. data/lib/padrino-admin/bootstrap-less/buttons.less +41 -41
  10. data/lib/padrino-admin/bootstrap-less/carousel.less +43 -18
  11. data/lib/padrino-admin/bootstrap-less/close.less +4 -4
  12. data/lib/padrino-admin/bootstrap-less/code.less +8 -10
  13. data/lib/padrino-admin/bootstrap-less/component-animations.less +10 -4
  14. data/lib/padrino-admin/bootstrap-less/dropdowns.less +78 -51
  15. data/lib/padrino-admin/bootstrap-less/forms.less +183 -274
  16. data/lib/padrino-admin/bootstrap-less/glyphicons.less +232 -0
  17. data/lib/padrino-admin/bootstrap-less/grid.less +230 -88
  18. data/lib/padrino-admin/bootstrap-less/input-groups.less +127 -0
  19. data/lib/padrino-admin/bootstrap-less/jumbotron.less +16 -8
  20. data/lib/padrino-admin/bootstrap-less/labels.less +25 -37
  21. data/lib/padrino-admin/bootstrap-less/list-group.less +34 -35
  22. data/lib/padrino-admin/bootstrap-less/media.less +7 -5
  23. data/lib/padrino-admin/bootstrap-less/mixins.less +321 -108
  24. data/lib/padrino-admin/bootstrap-less/modals.less +24 -20
  25. data/lib/padrino-admin/bootstrap-less/navbar.less +474 -216
  26. data/lib/padrino-admin/bootstrap-less/navs.less +67 -85
  27. data/lib/padrino-admin/bootstrap-less/pager.less +4 -4
  28. data/lib/padrino-admin/bootstrap-less/pagination.less +64 -69
  29. data/lib/padrino-admin/bootstrap-less/panels.less +114 -62
  30. data/lib/padrino-admin/bootstrap-less/popovers.less +18 -18
  31. data/lib/padrino-admin/bootstrap-less/print.less +22 -7
  32. data/lib/padrino-admin/bootstrap-less/progress-bars.less +10 -33
  33. data/lib/padrino-admin/bootstrap-less/responsive-utilities.less +141 -40
  34. data/lib/padrino-admin/bootstrap-less/scaffolding.less +66 -19
  35. data/lib/padrino-admin/bootstrap-less/tables.less +154 -158
  36. data/lib/padrino-admin/bootstrap-less/theme.less +232 -0
  37. data/lib/padrino-admin/bootstrap-less/thumbnails.less +9 -20
  38. data/lib/padrino-admin/bootstrap-less/tooltip.less +3 -3
  39. data/lib/padrino-admin/bootstrap-less/type.less +47 -55
  40. data/lib/padrino-admin/bootstrap-less/utilities.less +2 -2
  41. data/lib/padrino-admin/bootstrap-less/variables.less +289 -93
  42. data/lib/padrino-admin/bootstrap-less/wells.less +2 -2
  43. data/lib/padrino-admin/generators/actions.rb +11 -10
  44. data/lib/padrino-admin/generators/admin_app.rb +11 -11
  45. data/lib/padrino-admin/generators/admin_page.rb +9 -9
  46. data/lib/padrino-admin/generators/orm.rb +6 -7
  47. data/lib/padrino-admin/generators/templates/account/activerecord.rb.tt +7 -7
  48. data/lib/padrino-admin/generators/templates/account/couchrest.rb.tt +16 -16
  49. data/lib/padrino-admin/generators/templates/account/datamapper.rb.tt +7 -7
  50. data/lib/padrino-admin/generators/templates/account/minirecord.rb.tt +7 -7
  51. data/lib/padrino-admin/generators/templates/account/mongoid.rb.tt +8 -8
  52. data/lib/padrino-admin/generators/templates/account/mongomapper.rb.tt +7 -7
  53. data/lib/padrino-admin/generators/templates/account/ohm.rb.tt +9 -9
  54. data/lib/padrino-admin/generators/templates/account/sequel.rb.tt +8 -8
  55. data/lib/padrino-admin/generators/templates/assets/javascripts/bootstrap/affix.js +9 -3
  56. data/lib/padrino-admin/generators/templates/assets/javascripts/bootstrap/alert.js +4 -2
  57. data/lib/padrino-admin/generators/templates/assets/javascripts/bootstrap/bootstrap.min.js +4 -4
  58. data/lib/padrino-admin/generators/templates/assets/javascripts/bootstrap/button.js +9 -5
  59. data/lib/padrino-admin/generators/templates/assets/javascripts/bootstrap/carousel.js +19 -12
  60. data/lib/padrino-admin/generators/templates/assets/javascripts/bootstrap/collapse.js +68 -45
  61. data/lib/padrino-admin/generators/templates/assets/javascripts/bootstrap/dropdown.js +6 -7
  62. data/lib/padrino-admin/generators/templates/assets/javascripts/bootstrap/modal.js +43 -40
  63. data/lib/padrino-admin/generators/templates/assets/javascripts/bootstrap/popover.js +16 -10
  64. data/lib/padrino-admin/generators/templates/assets/javascripts/bootstrap/scrollspy.js +6 -4
  65. data/lib/padrino-admin/generators/templates/assets/javascripts/bootstrap/tab.js +4 -2
  66. data/lib/padrino-admin/generators/templates/assets/javascripts/bootstrap/tooltip.js +78 -48
  67. data/lib/padrino-admin/generators/templates/assets/javascripts/bootstrap/transition.js +10 -1
  68. data/lib/padrino-admin/generators/templates/assets/stylesheets/application.css +1 -0
  69. data/lib/padrino-admin/generators/templates/assets/stylesheets/bootstrap.css +622 -334
  70. data/lib/padrino-admin/generators/templates/erb/app/layouts/error.erb.tt +2 -2
  71. data/lib/padrino-admin/generators/templates/erb/app/sessions/new.erb.tt +9 -9
  72. data/lib/padrino-admin/generators/templates/erb/page/_form.erb.tt +3 -3
  73. data/lib/padrino-admin/generators/templates/erb/page/index.erb.tt +3 -3
  74. data/lib/padrino-admin/generators/templates/haml/app/layouts/error.haml.tt +1 -1
  75. data/lib/padrino-admin/generators/templates/haml/app/sessions/new.haml.tt +9 -7
  76. data/lib/padrino-admin/generators/templates/haml/page/_form.haml.tt +2 -2
  77. data/lib/padrino-admin/generators/templates/haml/page/index.haml.tt +2 -2
  78. data/lib/padrino-admin/generators/templates/page/controller.rb.tt +3 -3
  79. data/lib/padrino-admin/generators/templates/slim/app/layouts/error.slim.tt +1 -1
  80. data/lib/padrino-admin/generators/templates/slim/app/sessions/new.slim.tt +9 -7
  81. data/lib/padrino-admin/generators/templates/slim/page/_form.slim.tt +2 -2
  82. data/lib/padrino-admin/generators/templates/slim/page/index.slim.tt +2 -2
  83. data/lib/padrino-admin/helpers/authentication_helpers.rb +35 -35
  84. data/lib/padrino-admin/helpers/view_helpers.rb +12 -19
  85. data/lib/padrino-admin/utils/crypt.rb +10 -9
  86. data/lib/padrino-admin.rb +4 -5
  87. data/test/fixtures/data_mapper.rb +10 -9
  88. data/test/generators/test_account_model_generator.rb +2 -2
  89. metadata +14 -21
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: cf3dcdd045be97a348167272e0164460b6df4162
4
+ data.tar.gz: bd4f782b57d442725eb6729d7a0fbc8681c008be
5
+ SHA512:
6
+ metadata.gz: 6b5b0e6d13948f5cb6c90d25e0e9cab1f888f3da99124fe2c7138da8f47e20ec55db5e2ad6c998cf899b2b07e72da603d958516872f5ad16ac092dbacb848740
7
+ data.tar.gz: 75a724d82e3e3b787d4f441a88c9fc08fcc5885133df0996f67a4ae3c6c9f61b798e882e4b376dcdf270c32997dd987d12f84b6718af5d71bd051cee56df0808
data/README.rdoc CHANGED
@@ -6,7 +6,7 @@ Padrino has a beautiful Admin management dashboard with these features:
6
6
 
7
7
  Orm Agnostic:: Data Adapters for Datamapper, Activerecord, Sequel, Mongomapper, Mongoid, Couchrest
8
8
  Template Agnostic:: Erb, Erubis and Haml Renderer
9
- Authentication:: Support for Account authentication, Account Permission managment
9
+ Authentication:: Support for Account authentication, Account Permission management
10
10
  Scaffold:: You can simply create a new "admin interface" by providing a Model
11
11
  Access Control:: Supports authentication and role permissions for your application
12
12
 
@@ -59,7 +59,7 @@ by the admin access control features:
59
59
  end
60
60
  end
61
61
 
62
- In this example +if+ we visit urls that start with /+customer+/+orders+ or /+cart/checkout+ we will be redirected
62
+ In this example +if+ we visit URLs that start with /+customer+/+orders+ or /+cart/checkout+ we will be redirected
63
63
  to our :+login_page+ "/login". Once we are correctly logged in we can visit these pages.
64
64
 
65
65
  For a more complete look at using the Admin panel functionality and access features, be sure to check out the
@@ -67,4 +67,4 @@ For a more complete look at using the Admin panel functionality and access featu
67
67
 
68
68
  == Copyright
69
69
 
70
- Copyright (c) 2011 Padrino. See LICENSE for details.
70
+ Copyright (c) 2011-2013 Padrino. See LICENSE for details.
@@ -2,15 +2,15 @@ require 'active_support/core_ext/class/attribute_accessors'
2
2
 
3
3
  module Padrino
4
4
  module Admin
5
- class AccessControlError < StandardError # @private
5
+ class AccessControlError < StandardError
6
6
  end
7
7
  ##
8
- # This module enables access control functionality within a padrino application.
8
+ # This module enables access control functionality within a Padrino application.
9
9
  #
10
10
  module AccessControl
11
11
  class << self
12
12
  ##
13
- # Method used by Padrino::Application when we register the extension
13
+ # Method used by Padrino::Application when we register the extension.
14
14
  #
15
15
  def registered(app)
16
16
  app.set :session_id, "_padrino_#{File.basename(Padrino.root)}_#{app.app_name}".to_sym
@@ -28,12 +28,12 @@ module Padrino
28
28
  # This base access control class where roles are defined as are authorizations.
29
29
  #
30
30
  class Base
31
- def initialize # @private
31
+ def initialize
32
32
  @roles, @authorizations, @project_modules = [], [], []
33
33
  end
34
34
 
35
35
  ##
36
- # We map project modules for a given role or roles
36
+ # We map project modules for a given role or roles.
37
37
  #
38
38
  def roles_for(*roles, &block)
39
39
  raise Padrino::Admin::AccessControlError, "Role #{role} must be present and must be a symbol!" if roles.any? { |r| !r.kind_of?(Symbol) } || roles.empty?
@@ -44,14 +44,14 @@ module Padrino
44
44
  end
45
45
 
46
46
  ##
47
- # Return an array of roles
47
+ # Return an array of roles.
48
48
  #
49
49
  def roles
50
50
  @roles.uniq.reject { |r| r == :any }
51
51
  end
52
52
 
53
53
  ##
54
- # Return an array of project_modules
54
+ # Return an array of project_modules.
55
55
  #
56
56
  def project_modules(account)
57
57
  role = account.role.to_sym rescue :any
@@ -62,37 +62,37 @@ module Padrino
62
62
  ##
63
63
  # Return true if the given account is allowed to see the given path.
64
64
  #
65
- # @example Hiding a disallowed link from a user
65
+ # @example Hiding a disallowed link from a user.
66
66
  #
67
- # # File: config/apps.rb
68
- # # [...]
69
- # Padrino.mount('Admin').to('/admin')
67
+ # # File: config/apps.rb
68
+ # # [...]
69
+ # Padrino.mount('Admin').to('/admin')
70
70
  #
71
- # # File: admin/app.rb
72
- # class Admin < Padrino::Application
73
- # # [...]
74
- # register Padrino::Admin::AccessControl
75
- # # [...]
71
+ # # File: admin/app.rb
72
+ # class Admin < Padrino::Application
73
+ # # [...]
74
+ # register Padrino::Admin::AccessControl
75
+ # # [...]
76
76
  #
77
- # # Goals:
78
- # # * Admins can manage widgets and accounts
79
- # # * Workers can only manage widgets
77
+ # # Goals:
78
+ # # * Admins can manage widgets and accounts.
79
+ # # * Workers can only manage widgets.
80
80
  #
81
- # access_control.roles_for :admin do |role|
82
- # role.project_module :accounts, '/accounts'
83
- # role.project_module :widgets, '/widgets'
84
- # end
81
+ # access_control.roles_for :admin do |role|
82
+ # role.project_module :accounts, '/accounts'
83
+ # role.project_module :widgets, '/widgets'
84
+ # end
85
85
  #
86
- # access_control.roles_for :worker do |role|
87
- # role.project_module :widgets, '/widgets'
88
- # end
89
- # end
86
+ # access_control.roles_for :worker do |role|
87
+ # role.project_module :widgets, '/widgets'
88
+ # end
89
+ # end
90
90
  #
91
- # # File: admin/views/layouts/application.haml
92
- # # NOTE The un-mounted path is used ('/accounts' instead of '/admin/accounts')
93
- # - if access_control.allowed?(current_account, '/accounts')
94
- # # Admins see the "Profile" link, but Workers do not
95
- # = link_to 'Profile', url(:accounts, :edit, :id => current_account.id)
91
+ # # File: admin/views/layouts/application.haml
92
+ # # NOTE The un-mounted path is used ('/accounts' instead of '/admin/accounts')
93
+ # - if access_control.allowed?(current_account, '/accounts')
94
+ # # Admins see the "Profile" link, but Workers do not
95
+ # = link_to 'Profile', url(:accounts, :edit, :id => current_account.id)
96
96
  #
97
97
  def allowed?(account=nil, path=nil)
98
98
  path = "/" if path.blank?
@@ -114,15 +114,15 @@ module Padrino
114
114
  return false if denied_paths.any? { |p| path =~ /^#{p}/ }
115
115
  true
116
116
  end
117
- end # Base
117
+ end
118
118
 
119
119
  ###
120
- # Project Authorization Class
120
+ # Project Authorization Class.
121
121
  #
122
122
  class Authorization
123
123
  attr_reader :allowed, :denied, :project_modules, :roles
124
124
 
125
- def initialize(*roles, &block) # @private
125
+ def initialize(*roles, &block)
126
126
  @roles = roles
127
127
  @allowed = []
128
128
  @denied = []
@@ -131,35 +131,35 @@ module Padrino
131
131
  end
132
132
 
133
133
  ##
134
- # Allow a specified path
134
+ # Allow a specified path.
135
135
  #
136
136
  def allow(path)
137
137
  @allowed << path unless @allowed.include?(path)
138
138
  end
139
139
 
140
140
  ##
141
- # Protect access from
141
+ # Protect access from.
142
142
  #
143
143
  def protect(path)
144
144
  @denied << path unless @denied.include?(path)
145
145
  end
146
146
 
147
147
  ##
148
- # Create a project module
148
+ # Create a project module.
149
149
  #
150
150
  def project_module(name, path, options={})
151
151
  allow(path)
152
152
  @project_modules << ProjectModule.new(name, path, options)
153
153
  end
154
- end # Authorization
154
+ end
155
155
 
156
156
  ##
157
- # Project Module class
157
+ # Project Module class.
158
158
  #
159
159
  class ProjectModule
160
160
  attr_reader :name, :options
161
161
 
162
- def initialize(name, path, options={}) # @private
162
+ def initialize(name, path, options={})
163
163
  @name, @path, @options = name, path, options
164
164
  end
165
165
 
@@ -171,7 +171,7 @@ module Padrino
171
171
  end
172
172
 
173
173
  ##
174
- # Return the path of the project module. If a prefix given will be prepended.
174
+ # Return the path of the project module. If a prefix given will be pre pended.
175
175
  #
176
176
  # @example
177
177
  # # => /accounts/new
@@ -184,8 +184,7 @@ module Padrino
184
184
  path = File.join(ENV['RACK_BASE_URI'].to_s, path) if ENV['RACK_BASE_URI']
185
185
  path
186
186
  end
187
-
188
- end # ProjectModule
189
- end # AccessControl
190
- end # Admin
191
- end # Padrino
187
+ end
188
+ end
189
+ end
190
+ end
@@ -7,11 +7,9 @@
7
7
  // -------------------------
8
8
 
9
9
  .alert {
10
- padding: 10px 35px 10px 15px;
10
+ padding: @alert-padding;
11
11
  margin-bottom: @line-height-computed;
12
- color: @alert-text;
13
- background-color: @alert-bg;
14
- border: 1px solid @alert-border;
12
+ border: 1px solid transparent;
15
13
  border-radius: @alert-border-radius;
16
14
 
17
15
  // Headings for larger alerts
@@ -20,15 +18,27 @@
20
18
  // Specified for the h4 to prevent conflicts of changing @headingsColor
21
19
  color: inherit;
22
20
  }
23
- // Match the hr to the border of the alert
24
- hr {
25
- border-top-color: darken(@alert-border, 5%);
26
- }
27
21
  // Provide class for links that match alerts
28
22
  .alert-link {
29
- font-weight: 500;
30
- color: darken(@alert-text, 10%);
23
+ font-weight: @alert-link-font-weight;
24
+ }
25
+
26
+ // Improve alignment and spacing of inner content
27
+ > p,
28
+ > ul {
29
+ margin-bottom: 0;
30
+ }
31
+ > p + p {
32
+ margin-top: 5px;
31
33
  }
34
+ }
35
+
36
+ // Dismissable alerts
37
+ //
38
+ // Expand the right padding and account for the close button's positioning.
39
+
40
+ .alert-dismissable {
41
+ padding-right: (@alert-padding + 20);
32
42
 
33
43
  // Adjust close link position
34
44
  .close {
@@ -40,54 +50,18 @@
40
50
  }
41
51
 
42
52
  // Alternate styles
43
- // -------------------------
53
+ //
54
+ // Generate contextual modifier classes for colorizing the alert.
44
55
 
45
56
  .alert-success {
46
- background-color: @alert-success-bg;
47
- border-color: @alert-success-border;
48
- color: @alert-success-text;
49
- hr {
50
- border-top-color: darken(@alert-success-border, 5%);
51
- }
52
- .alert-link {
53
- color: darken(@alert-success-text, 10%);
54
- }
55
- }
56
- .alert-danger {
57
- background-color: @alert-danger-bg;
58
- border-color: @alert-danger-border;
59
- color: @alert-danger-text;
60
- hr {
61
- border-top-color: darken(@alert-danger-border, 5%);
62
- }
63
- .alert-link {
64
- color: darken(@alert-danger-text, 10%);
65
- }
57
+ .alert-variant(@alert-success-bg; @alert-success-border; @alert-success-text);
66
58
  }
67
59
  .alert-info {
68
- background-color: @alert-info-bg;
69
- border-color: @alert-info-border;
70
- color: @alert-info-text;
71
- hr {
72
- border-top-color: darken(@alert-info-border, 5%);
73
- }
74
- .alert-link {
75
- color: darken(@alert-info-text, 10%);
76
- }
60
+ .alert-variant(@alert-info-bg; @alert-info-border; @alert-info-text);
77
61
  }
78
-
79
- // Block alerts
80
- // -------------------------
81
-
82
- .alert-block {
83
- padding-top: 15px;
84
- padding-bottom: 15px;
85
-
86
- > p,
87
- > ul {
88
- margin-bottom: 0;
89
- }
90
- p + p {
91
- margin-top: 5px;
92
- }
62
+ .alert-warning {
63
+ .alert-variant(@alert-warning-bg; @alert-warning-border; @alert-warning-text);
64
+ }
65
+ .alert-danger {
66
+ .alert-variant(@alert-danger-bg; @alert-danger-border; @alert-danger-text);
93
67
  }
@@ -9,16 +9,16 @@
9
9
  min-width: 10px;
10
10
  padding: 3px 7px;
11
11
  font-size: @font-size-small;
12
- font-weight: bold;
13
- color: #fff;
14
- line-height: 1;
15
- vertical-align: middle;
12
+ font-weight: @badge-font-weight;
13
+ color: @badge-color;
14
+ line-height: @badge-line-height;
15
+ vertical-align: baseline;
16
16
  white-space: nowrap;
17
17
  text-align: center;
18
- background-color: @gray-light;
19
- border-radius: 10px;
18
+ background-color: @badge-bg;
19
+ border-radius: @badge-border-radius;
20
20
 
21
- // Empty labels/badges collapse
21
+ // Empty badges collapse automatically (not available in IE8)
22
22
  &:empty {
23
23
  display: none;
24
24
  }
@@ -28,25 +28,23 @@
28
28
  a.badge {
29
29
  &:hover,
30
30
  &:focus {
31
- color: #fff;
31
+ color: @badge-link-hover-color;
32
32
  text-decoration: none;
33
33
  cursor: pointer;
34
34
  }
35
35
  }
36
36
 
37
37
  // Quick fix for labels/badges in buttons
38
- .btn {
39
- .badge {
40
- position: relative;
41
- top: -1px;
42
- }
38
+ .btn .badge {
39
+ position: relative;
40
+ top: -1px;
43
41
  }
44
42
 
45
43
  // Account for counters in navs
46
44
  a.list-group-item.active > .badge,
47
45
  .nav-pills > .active > a > .badge {
48
- color: @link-color;
49
- background-color: #fff;
46
+ color: @badge-active-color;
47
+ background-color: @badge-active-bg;
50
48
  }
51
49
  .nav-pills > li > a > .badge {
52
50
  margin-left: 3px;
@@ -21,43 +21,39 @@
21
21
  @import "type.less";
22
22
  @import "code.less";
23
23
  @import "grid.less";
24
-
25
24
  @import "tables.less";
26
25
  @import "forms.less";
27
26
  @import "buttons.less";
28
27
 
29
- // Components: common
28
+ // Components
30
29
  @import "component-animations.less";
30
+ @import "glyphicons.less";
31
31
  @import "dropdowns.less";
32
- @import "list-group.less";
33
- @import "panels.less";
34
- @import "wells.less";
35
- @import "close.less";
36
-
37
- // Components: Nav
32
+ @import "button-groups.less";
33
+ @import "input-groups.less";
38
34
  @import "navs.less";
39
35
  @import "navbar.less";
40
- @import "button-groups.less";
41
36
  @import "breadcrumbs.less";
42
37
  @import "pagination.less";
43
38
  @import "pager.less";
39
+ @import "labels.less";
40
+ @import "badges.less";
41
+ @import "jumbotron.less";
42
+ @import "thumbnails.less";
43
+ @import "alerts.less";
44
+ @import "progress-bars.less";
45
+ @import "media.less";
46
+ @import "list-group.less";
47
+ @import "panels.less";
48
+ @import "wells.less";
49
+ @import "close.less";
44
50
 
45
- // Components: Popovers
51
+ // Components w/ JavaScript
46
52
  @import "modals.less";
47
53
  @import "tooltip.less";
48
54
  @import "popovers.less";
49
-
50
- // Components: Misc
51
- @import "alerts.less";
52
- @import "thumbnails.less";
53
- @import "media.less";
54
- @import "labels.less";
55
- @import "badges.less";
56
- @import "progress-bars.less";
57
- @import "accordion.less";
58
55
  @import "carousel.less";
59
- @import "jumbotron.less";
60
56
 
61
57
  // Utility classes
62
- @import "utilities.less"; // Has to be last to override when necessary
58
+ @import "utilities.less";
63
59
  @import "responsive-utilities.less";
@@ -5,24 +5,19 @@
5
5
 
6
6
  .breadcrumb {
7
7
  padding: 8px 15px;
8
- margin: 0 0 @line-height-computed;
8
+ margin-bottom: @line-height-computed;
9
9
  list-style: none;
10
- background-color: #f5f5f5;
10
+ background-color: @breadcrumb-bg;
11
11
  border-radius: @border-radius-base;
12
12
  > li {
13
13
  display: inline-block;
14
- text-shadow: 0 1px 0 #fff;
15
- &:after {
16
- display: inline-block;
17
- content: "\00a0 /"; // Unicode space added since inline-block means non-collapsing white-space
14
+ &+li:before {
15
+ content: "/\00a0"; // Unicode space added since inline-block means non-collapsing white-space
18
16
  padding: 0 5px;
19
- color: #ccc;
20
- }
21
- &:last-child:after {
22
- display: none; // No divider after last element
17
+ color: @breadcrumb-color;
23
18
  }
24
19
  }
25
20
  > .active {
26
- color: @gray-light;
21
+ color: @breadcrumb-active-color;
27
22
  }
28
23
  }