padrino-admin 0.11.3 → 0.11.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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
  }