devise-secure_password 1.0.7 → 1.0.8

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 (47) hide show
  1. checksums.yaml +4 -4
  2. data/Changelog.md +18 -4
  3. data/Gemfile.lock +8 -8
  4. data/README.md +17 -3
  5. data/app/controllers/devise/passwords_with_policy_controller.rb +52 -10
  6. data/app/views/devise/passwords_with_policy/edit.html.erb +5 -1
  7. data/config/locales/en.yml +40 -0
  8. data/coverage/assets/0.10.2/application.css +799 -0
  9. data/coverage/assets/0.10.2/application.js +1707 -0
  10. data/coverage/assets/0.10.2/colorbox/border.png +0 -0
  11. data/coverage/assets/0.10.2/colorbox/controls.png +0 -0
  12. data/coverage/assets/0.10.2/colorbox/loading.gif +0 -0
  13. data/coverage/assets/0.10.2/colorbox/loading_background.png +0 -0
  14. data/coverage/assets/0.10.2/favicon_green.png +0 -0
  15. data/coverage/assets/0.10.2/favicon_red.png +0 -0
  16. data/coverage/assets/0.10.2/favicon_yellow.png +0 -0
  17. data/coverage/assets/0.10.2/loading.gif +0 -0
  18. data/coverage/assets/0.10.2/magnify.png +0 -0
  19. data/coverage/assets/0.10.2/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  20. data/coverage/assets/0.10.2/smoothness/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
  21. data/coverage/assets/0.10.2/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
  22. data/coverage/assets/0.10.2/smoothness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  23. data/coverage/assets/0.10.2/smoothness/images/ui-bg_glass_75_dadada_1x400.png +0 -0
  24. data/coverage/assets/0.10.2/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
  25. data/coverage/assets/0.10.2/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
  26. data/coverage/assets/0.10.2/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
  27. data/coverage/assets/0.10.2/smoothness/images/ui-icons_222222_256x240.png +0 -0
  28. data/coverage/assets/0.10.2/smoothness/images/ui-icons_2e83ff_256x240.png +0 -0
  29. data/coverage/assets/0.10.2/smoothness/images/ui-icons_454545_256x240.png +0 -0
  30. data/coverage/assets/0.10.2/smoothness/images/ui-icons_888888_256x240.png +0 -0
  31. data/coverage/assets/0.10.2/smoothness/images/ui-icons_cd0a0a_256x240.png +0 -0
  32. data/coverage/index.html +4115 -0
  33. data/devise-secure_password-1.0.0.gem +0 -0
  34. data/gemfiles/rails-5_0.gemfile +2 -2
  35. data/gemfiles/rails-5_0.gemfile.lock +288 -0
  36. data/gemfiles/rails-5_0_6.gemfile.lock +286 -0
  37. data/gemfiles/rails-5_1.gemfile.lock +9 -7
  38. data/gemfiles/rails-5_1_4.gemfile.lock +282 -0
  39. data/lib/devise/secure_password.rb +1 -0
  40. data/lib/devise/secure_password/controllers/helpers.rb +3 -1
  41. data/lib/devise/secure_password/grammar.rb +13 -0
  42. data/lib/devise/secure_password/models/password_disallows_frequent_changes.rb +3 -1
  43. data/lib/devise/secure_password/models/password_has_required_content.rb +40 -4
  44. data/lib/devise/secure_password/version.rb +1 -1
  45. data/lib/support/string/character_counter.rb +2 -0
  46. metadata +32 -3
  47. data/pkg/devise-secure_password-1.0.7.gem +0 -0
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 7d48b94f72dec051554ab4176e23b7509e77674c
4
- data.tar.gz: 73bba702c406149b9a0ea5356c55bcd6da0d63ba
3
+ metadata.gz: fc2514ce88171ebaaa22eb85bad9d2eafb2a8cca
4
+ data.tar.gz: 4d42922e163662e35c01dcfacd3412f2fd5f105b
5
5
  SHA512:
6
- metadata.gz: cae5af852eb447a67736844354bc34c7857d041075c25e32ee1e8177e047bffc0b10d11746dbf3a834f45357663781a70eb64922a53eb0ca302726508950468c
7
- data.tar.gz: 8c60f1e2df9ea2d686d8ce48d5cc0a9206e6d3dd83c1a6703bf74b0242dc5112f49c39154b5b9556d61dbf15d4da90b68b15f554a7a9baeb2f3c447cf32c2111
6
+ metadata.gz: 295b7b314f4c00b4d2d3987c719a7018d6a46bacd462c8a057c8b14ff1fc7cd6c598a7b048676b28007bec9fb77c0c542500955b9c7039226a116a9ff4510db3
7
+ data.tar.gz: 71cf450bf4c751a143ddc8bd6d6ecd1818413225395213bfe6c0993c37e619381e0e7007e5b687e370be154356df576dc4ccc1b1db1ea076fffcfb9e0d141815
data/Changelog.md CHANGED
@@ -1,5 +1,19 @@
1
1
  # Changelog: devise-secure_password
2
2
 
3
+ ## 1.0.8 / 2018-06-15
4
+
5
+ * Update README for ruby versions tested (2.5.1, 2.4.4).
6
+ * Update README for target reconfig instructions.
7
+ * Update README for test screenshot generation.
8
+ * Fix grammar for error messages.
9
+ * Fix empty new passwords skipping validation.
10
+ * Add tests for invalid empty and current passwords.
11
+ * Add total string length counting to character_counter.
12
+ * Add password confirmation equality validator.
13
+ * Add length validations to password fields.
14
+ * Add update_action hidden field to forced password change form.
15
+ * Refactor passwords_with_policy controller.
16
+
3
17
  ## 1.0.7 / 2018-05-25
4
18
 
5
19
  * Fix specs to use appropriate Rails version
@@ -41,13 +55,13 @@
41
55
  ## v1.0.0 / 2018-03-07
42
56
 
43
57
  * Update license.
44
- * [VME-1693] Refactor to simplify install and test commands.
58
+ * Refactor to simplify install and test commands.
45
59
 
46
60
  ## v0.9.4 / 2018-01-24
47
61
 
48
- * [VME-1661] Fix typos in README.
49
- * [VME-1646] Update circleci badge token.
50
- * [VME-1646] Rename modules according to convention for Rails concerns.
62
+ * Fix typos in README.
63
+ * Update circleci badge token.
64
+ * Rename modules according to convention for Rails concerns.
51
65
  * Implement code coverage.
52
66
  * Support multiple rails versions for testing.
53
67
  * Rename password_regular_update_enforcement_controller to dppe_passwords_controller.
data/Gemfile.lock CHANGED
@@ -9,7 +9,7 @@ GIT
9
9
  PATH
10
10
  remote: .
11
11
  specs:
12
- devise-secure_password (1.0.7)
12
+ devise-secure_password (1.0.8)
13
13
  devise (>= 4.0.0, < 5.0.0)
14
14
  railties (>= 5.0.0, < 6.0.0)
15
15
 
@@ -62,7 +62,7 @@ GEM
62
62
  ansi (1.5.0)
63
63
  arel (9.0.0)
64
64
  ast (2.4.0)
65
- bcrypt (3.1.12)
65
+ bcrypt (3.1.11)
66
66
  builder (3.2.3)
67
67
  capybara (2.18.0)
68
68
  addressable
@@ -71,7 +71,7 @@ GEM
71
71
  rack (>= 1.0.0)
72
72
  rack-test (>= 0.5.4)
73
73
  xpath (>= 2.0, < 4.0)
74
- capybara-screenshot (1.0.21)
74
+ capybara-screenshot (1.0.19)
75
75
  capybara (>= 1.0, < 4)
76
76
  launchy
77
77
  childprocess (0.9.0)
@@ -98,7 +98,7 @@ GEM
98
98
  erubis (2.7.0)
99
99
  execjs (2.7.0)
100
100
  ffi (1.9.23)
101
- flay (2.12.0)
101
+ flay (2.11.0)
102
102
  erubis (~> 2.7.0)
103
103
  path_expander (~> 1.0)
104
104
  ruby_parser (~> 3.0)
@@ -124,7 +124,7 @@ GEM
124
124
  mini_mime (1.0.0)
125
125
  mini_portile2 (2.3.0)
126
126
  minitest (5.11.3)
127
- nio4r (2.3.1)
127
+ nio4r (2.3.0)
128
128
  nokogiri (1.8.2)
129
129
  mini_portile2 (~> 2.3.0)
130
130
  orm_adapter (0.5.0)
@@ -193,7 +193,7 @@ GEM
193
193
  rspec-support (3.7.1)
194
194
  rspec_junit_formatter (0.3.0)
195
195
  rspec-core (>= 2, < 4, != 2.12.0)
196
- rubocop (0.56.0)
196
+ rubocop (0.55.0)
197
197
  parallel (~> 1.10)
198
198
  parser (>= 2.5)
199
199
  powerpack (~> 0.1)
@@ -218,7 +218,7 @@ GEM
218
218
  sprockets (>= 2.8, < 4.0)
219
219
  sprockets-rails (>= 2.0, < 4.0)
220
220
  tilt (>= 1.1, < 3)
221
- selenium-webdriver (3.12.0)
221
+ selenium-webdriver (3.11.0)
222
222
  childprocess (~> 0.5)
223
223
  rubyzip (~> 1.2)
224
224
  sexp_processor (4.11.0)
@@ -285,4 +285,4 @@ DEPENDENCIES
285
285
  therubyracer (~> 0.12.3)
286
286
 
287
287
  BUNDLED WITH
288
- 1.16.2
288
+ 1.16.1
data/README.md CHANGED
@@ -33,7 +33,7 @@ and [Ruby on Rails](http://guides.rubyonrails.org/maintenance_policy.html). More
33
33
  are currently supported by the __Devise Secure Password Extension__:
34
34
 
35
35
  - Ruby on Rails: __5.1.Z__, __5.0.Z__ (current and previous stable release)
36
- - Ruby: __2.5.0__, __2.4.3__ (current and previous stable release)
36
+ - Ruby: __2.5.1__, __2.4.4__ (current and previous stable release)
37
37
 
38
38
  ## Installation
39
39
 
@@ -234,8 +234,8 @@ Available Rails targets: 5.0, 5.1
234
234
  Reconfigure the project by specifying the correct Gemfile when running bundler, followed by running tests:
235
235
 
236
236
  ```bash
237
- prompt> BUNDLE_GEMFILE=gemfiles/rails-5_0_6.gemfile bundle
238
- prompt> BUNDLE_GEMFILE=gemfiles/rails-5_0_6.gemfile bundle exec rake
237
+ prompt> BUNDLE_GEMFILE=gemfiles/rails-5_0.gemfile bundle
238
+ prompt> BUNDLE_GEMFILE=gemfiles/rails-5_0.gemfile bundle exec rake
239
239
  ```
240
240
 
241
241
  The only time you need to define the `BUNDLE_GEMFILE` environment variable is when testing a non-default target.
@@ -265,6 +265,20 @@ prompt> brew install chromedriver
265
265
  You can always install [ChromeDriver](https://sites.google.com/a/chromium.org/chromedriver/) by downloading and then
266
266
  unpacking into the `/usr/local/bin` directory.
267
267
 
268
+ #### Automated screenshots on failure
269
+
270
+ The [capybara-screenshot gem](https://github.com/mattheworiordan/capybara-screenshot) supports automated screenshot
271
+ captures on failing tests but this will only take place for tests that have JavaScript enabled. You can temporarily
272
+ modify an example by setting `js: true` as in the following example:
273
+
274
+ ```ruby
275
+ context 'when minimum age enforcement is enabled', js: true do
276
+ ...
277
+ end
278
+ ```
279
+
280
+ Do not submit pull requests with this setting enabled where it wasn't enabled previously.
281
+
268
282
  ### Testing inside the spec/rails-app-X_y_z
269
283
 
270
284
  To debug from inside of the dummy rails-app you will need to first install the rails bin stubs and then perform a db
@@ -1,6 +1,6 @@
1
1
  module Devise
2
- class PasswordsWithPolicyController < DeviseController
3
- before_action :authenticate_scope!
2
+ class PasswordsWithPolicyController < Devise::RegistrationsController
3
+ before_action :configure_permitted_parameters
4
4
 
5
5
  def edit
6
6
  self.resource = resource_class.new
@@ -9,16 +9,23 @@ module Devise
9
9
  end
10
10
 
11
11
  def update
12
- if resource.update_with_password(password_params)
12
+ if update_resource(resource, account_update_params)
13
13
  prepare_for_redirect
14
14
  redirect_to stored_location_for(scope_name) || :root
15
15
  else
16
- clean_up_passwords(resource)
17
16
  render :edit
18
17
  end
19
18
  end
20
19
 
21
- private
20
+ def devise_parameter_sanitizer
21
+ @devise_parameter_sanitizer ||= Devise::ParameterSanitizer.new(resource_class, resource_name, params)
22
+ end
23
+
24
+ protected
25
+
26
+ def account_update_params
27
+ devise_parameter_sanitizer.sanitize(:account_update)
28
+ end
22
29
 
23
30
  def authenticate_scope!
24
31
  send(:"authenticate_#{scope_name}!")
@@ -29,22 +36,57 @@ module Devise
29
36
  I18n.t('secure_password.password_requires_regular_updates.alerts.messages.password_updated')
30
37
  end
31
38
 
39
+ def configure_permitted_parameters
40
+ devise_parameter_sanitizer.permit(:account_update, keys: [:update_action])
41
+ end
42
+
32
43
  def error_string_for_password_expired
33
44
  return 'password expired' unless warden.user.class.respond_to?(:password_maximum_age)
34
45
  I18n.t(
35
46
  'secure_password.password_requires_regular_updates.errors.messages.password_expired',
36
- timeframe: distance_of_time_in_words(warden.user.class.password_maximum_age)
47
+ timeframe: precise_distance_of_time_in_words(warden.user.class.password_maximum_age)
37
48
  )
38
49
  end
39
50
 
40
- def password_params
41
- params.require(scope_name).permit(:current_password, :password, :password_confirmation)
42
- end
43
-
44
51
  def prepare_for_redirect
45
52
  unset_devise_secure_password_expired!
46
53
  flash[:notice] = alert_string_for_password_updated
47
54
  bypass_sign_in resource, scope: scope_name
48
55
  end
56
+
57
+ def update_resource(resource, params)
58
+ update_action = (params[:update_action] ? params.delete(:update_action) : nil)
59
+ return false unless update_action == 'change_password'
60
+
61
+ update_password(resource, params)
62
+
63
+ # do what devise would do under normal circumstances but also be aware of
64
+ # secure_password or other validators that would be ignored by devise.
65
+ result = if resource.errors.count.zero?
66
+ resource.update(params)
67
+ else
68
+ false
69
+ end
70
+
71
+ resource.clean_up_passwords
72
+ result
73
+ end
74
+
75
+ def update_password(resource, params)
76
+ #
77
+ # order of operations that follow is absolutely critical
78
+ #
79
+ current_password = params.delete(:current_password)
80
+ current_password_valid = resource.valid_password?(current_password)
81
+
82
+ # let our installed validator chain handle the validation work
83
+ resource.assign_attributes(params)
84
+ resource.valid?
85
+ unless current_password_valid
86
+ resource.errors.add(:current_password, current_password.blank? ? :blank : :invalid)
87
+ end
88
+
89
+ resource
90
+ end
49
91
  end
50
92
  end
@@ -1,7 +1,11 @@
1
1
  <h2><%= t('.titles.section_title') %></h2>
2
2
 
3
3
  <%= form_for(resource, as: resource_name, url: [resource_name, :password_with_policy], html: { method: :put }) do |f| %>
4
- <%= devise_error_messages! %>
4
+ <% if resource.errors.full_messages.count.positive? %>
5
+ <%= devise_error_messages! %>
6
+ <% end %>
7
+
8
+ <%= f.hidden_field :update_action, value: :change_password %>
5
9
 
6
10
  <p><%= f.label :current_password, t('.labels.current_password') %><br />
7
11
  <%= f.password_field :current_password %></p>
@@ -6,6 +6,8 @@ en:
6
6
  unknown_characters: "contains %{count} invalid %{subject}"
7
7
  minimum_characters: "must contain at least %{count} %{type} %{subject}"
8
8
  maximum_characters: "must contain less than %{count} %{type} %{subject}"
9
+ minimum_length: "must contain at least %{count} %{subject}"
10
+ maximum_length: "must contain less than %{count} %{subject}"
9
11
  password_disallows_frequent_reuse:
10
12
  errors:
11
13
  messages:
@@ -21,6 +23,44 @@ en:
21
23
  errors:
22
24
  messages:
23
25
  password_expired: "Your password has expired. Passwords must be changed every %{timeframe}"
26
+ datetime:
27
+ # update distance_in_words translations to remove the determiner words:
28
+ # about, almost, over, less than, etc.
29
+ precise_distance_in_words:
30
+ half_a_minute: "half a minute"
31
+ less_than_x_seconds:
32
+ one: "1 second" # default was: "less than 1 second"
33
+ other: "%{count} seconds" # default was: "less than %{count} seconds"
34
+ x_seconds:
35
+ one: "1 second"
36
+ other: "%{count} seconds"
37
+ less_than_x_minutes:
38
+ one: "a minute" # default was: "less than a minute"
39
+ other: "%{count} minutes" # default was: "less than %{count} minutes"
40
+ x_minutes:
41
+ one: "1 minute"
42
+ other: "%{count} minutes"
43
+ about_x_hours:
44
+ one: "1 hour" # default was: "about 1 hour"
45
+ other: "%{count} hours" # default was: "about %{count} hours"
46
+ x_days:
47
+ one: "1 day"
48
+ other: "%{count} days"
49
+ about_x_months:
50
+ one: "1 month" # default was: "about 1 month"
51
+ other: "%{count} months" # default was: "about %{count} months"
52
+ x_months:
53
+ one: "1 month"
54
+ other: "%{count} months"
55
+ about_x_years:
56
+ one: "1 year" # default was: "about 1 year"
57
+ other: "%{count} years" # default was: "about %{count} years"
58
+ over_x_years:
59
+ one: "1 year" # default was: "over 1 year"
60
+ other: "%{count} years" # default was: "over %{count} years"
61
+ almost_x_years:
62
+ one: "1 year" # default was: "almost 1 year"
63
+ other: "%{count} years" # default was: "almost %{count} years"
24
64
  devise:
25
65
  passwords_with_policy:
26
66
  edit:
@@ -0,0 +1,799 @@
1
+ /* -----------------------------------------------------------------------
2
+
3
+
4
+ Blueprint CSS Framework 0.9
5
+ http://blueprintcss.org
6
+
7
+ * Copyright (c) 2007-Present. See LICENSE for more info.
8
+ * See README for instructions on how to use Blueprint.
9
+ * For credits and origins, see AUTHORS.
10
+ * This is a compressed file. See the sources in the 'src' directory.
11
+
12
+ ----------------------------------------------------------------------- */
13
+
14
+ /* reset.css */
15
+
16
+ html, body, div, span, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, code, del, dfn, em, img, q, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, dialog, figure, footer, header, hgroup, nav, section {margin:0;padding:0;border:0;font-weight:inherit;font-style:inherit;font-size:100%;font-family:inherit;vertical-align:baseline;}
17
+ article, aside, dialog, figure, footer, header, hgroup, nav, section {display:block;}
18
+ body {line-height:1.5;}
19
+ table {border-collapse:separate;border-spacing:0;}
20
+ caption, th, td {text-align:left;font-weight:normal;}
21
+ table, td, th {vertical-align:middle;}
22
+ blockquote:before, blockquote:after, q:before, q:after {content:"";}
23
+ blockquote, q {quotes:"" "";}
24
+ a img {border:none;}
25
+
26
+ /* typography.css */
27
+ html {font-size:100.01%;}
28
+ body {font-size:82%;color:#222;background:#fff;font-family:"Helvetica Neue", Arial, Helvetica, sans-serif;}
29
+ h1, h2, h3, h4, h5, h6 {font-weight:normal;color:#111;}
30
+ h1 {font-size:3em;line-height:1;margin-bottom:0.5em;}
31
+ h2 {font-size:2em;margin-bottom:0.75em;}
32
+ h3 {font-size:1.5em;line-height:1;margin-bottom:1em;}
33
+ h4 {font-size:1.2em;line-height:1.25;margin-bottom:1.25em;}
34
+ h5 {font-size:1em;font-weight:bold;margin-bottom:1.5em;}
35
+ h6 {font-size:1em;font-weight:bold;}
36
+ h1 img, h2 img, h3 img, h4 img, h5 img, h6 img {margin:0;}
37
+ p {margin:0 0 1.5em;}
38
+ p img.left {float:left;margin:1.5em 1.5em 1.5em 0;padding:0;}
39
+ p img.right {float:right;margin:1.5em 0 1.5em 1.5em;}
40
+ a:focus, a:hover {color:#000;}
41
+ a {color:#009;text-decoration:underline;}
42
+ blockquote {margin:1.5em;color:#666;font-style:italic;}
43
+ strong {font-weight:bold;}
44
+ em, dfn {font-style:italic;}
45
+ dfn {font-weight:bold;}
46
+ sup, sub {line-height:0;}
47
+ abbr, acronym {border-bottom:1px dotted #666;}
48
+ address {margin:0 0 1.5em;font-style:italic;}
49
+ del {color:#666;}
50
+ pre {margin:1.5em 0;white-space:pre;}
51
+ pre, code, tt {font:1em 'andale mono', 'lucida console', monospace;line-height:1.5;}
52
+ li ul, li ol {margin:0;}
53
+ ul, ol {margin:0 1.5em 1.5em 0;padding-left:3.333em;}
54
+ ul {list-style-type:disc;}
55
+ ol {list-style-type:decimal;}
56
+ dl {margin:0 0 1.5em 0;}
57
+ dl dt {font-weight:bold;}
58
+ dd {margin-left:1.5em;}
59
+ table {margin-bottom:1.4em;width:100%;}
60
+ th {font-weight:bold;}
61
+ thead th {background:#c3d9ff;}
62
+ th, td, caption {padding:4px 10px 4px 5px;}
63
+ tr.even td {background:#efefef;}
64
+ tfoot {font-style:italic;}
65
+ caption {background:#eee;}
66
+ .small {font-size:.8em;margin-bottom:1.875em;line-height:1.875em;}
67
+ .large {font-size:1.2em;line-height:2.5em;margin-bottom:1.25em;}
68
+ .hide {display:none;}
69
+ .quiet {color:#666;}
70
+ .loud {color:#000;}
71
+ .highlight {background:#ff0;}
72
+ .added {background:#060;color:#fff;}
73
+ .removed {background:#900;color:#fff;}
74
+ .first {margin-left:0;padding-left:0;}
75
+ .last {margin-right:0;padding-right:0;}
76
+ .top {margin-top:0;padding-top:0;}
77
+ .bottom {margin-bottom:0;padding-bottom:0;}
78
+
79
+ /* forms.css */
80
+ label {font-weight:bold;}
81
+ fieldset {padding:1.4em;margin:0 0 1.5em 0;border:1px solid #ccc;}
82
+ legend {font-weight:bold;font-size:1.2em;}
83
+ input[type=text], input[type=password], input.text, input.title, textarea, select {background-color:#fff;border:1px solid #bbb;}
84
+ input[type=text]:focus, input[type=password]:focus, input.text:focus, input.title:focus, textarea:focus, select:focus {border-color:#666;}
85
+ input[type=text], input[type=password], input.text, input.title, textarea, select {margin:0.5em 0;}
86
+ input.text, input.title {width:300px;padding:5px;}
87
+ input.title {font-size:1.5em;}
88
+ textarea {width:390px;height:250px;padding:5px;}
89
+ input[type=checkbox], input[type=radio], input.checkbox, input.radio {position:relative;top:.25em;}
90
+ form.inline {line-height:3;}
91
+ form.inline p {margin-bottom:0;}
92
+ .error, .notice, .success {padding:.8em;margin-bottom:1em;border:2px solid #ddd;}
93
+ .error {background:#FBE3E4;color:#8a1f11;border-color:#FBC2C4;}
94
+ .notice {background:#FFF6BF;color:#514721;border-color:#FFD324;}
95
+ .success {background:#E6EFC2;color:#264409;border-color:#C6D880;}
96
+ .error a {color:#8a1f11;}
97
+ .notice a {color:#514721;}
98
+ .success a {color:#264409;}
99
+ .box {padding:1.5em;margin-bottom:1.5em;background:#E5ECF9;}
100
+ hr {background:#ddd;color:#ddd;clear:both;float:none;width:100%;height:.1em;margin:0 0 1.45em;border:none;}
101
+ hr.space {background:#fff;color:#fff;visibility:hidden;}
102
+ .clearfix:after, .container:after {content:"\0020";display:block;height:0;clear:both;visibility:hidden;overflow:hidden;}
103
+ .clearfix, .container {display:block;}
104
+ .clear {clear:both;}
105
+ /*
106
+ github.com style (c) Vasily Polovnyov <vast@whiteants.net>
107
+ */
108
+
109
+
110
+ pre code {
111
+ }
112
+
113
+ pre .comment,
114
+ pre .template_comment,
115
+ pre .diff .header,
116
+ pre .javadoc {
117
+ color: #998;
118
+ font-style: italic
119
+ }
120
+
121
+ pre .keyword,
122
+ pre .css .rule .keyword,
123
+ pre .winutils,
124
+ pre .javascript .title,
125
+ pre .lisp .title {
126
+ color: #000;
127
+ font-weight: bold
128
+ }
129
+
130
+ pre .number,
131
+ pre .hexcolor {
132
+ color: #458
133
+ }
134
+
135
+
136
+ pre .string,
137
+ pre .tag .value,
138
+ pre .phpdoc,
139
+ pre .tex .formula {
140
+ color: #d14
141
+ }
142
+
143
+ pre .subst {
144
+ color: #712;
145
+ }
146
+
147
+ pre .constant,
148
+ pre .title,
149
+ pre .id {
150
+ color: #900;
151
+ font-weight: bold
152
+ }
153
+
154
+ pre .javascript .title,
155
+ pre .lisp .title,
156
+ pre .subst {
157
+ font-weight: normal
158
+ }
159
+
160
+ pre .class .title,
161
+ pre .haskell .label,
162
+ pre .tex .command {
163
+ color: #458;
164
+ font-weight: bold
165
+ }
166
+
167
+ pre .tag,
168
+ pre .tag .title,
169
+ pre .rules .property,
170
+ pre .django .tag .keyword {
171
+ color: #000080;
172
+ font-weight: normal
173
+ }
174
+
175
+ pre .attribute,
176
+ pre .variable,
177
+ pre .instancevar,
178
+ pre .lisp .body {
179
+ color: #008080
180
+ }
181
+
182
+ pre .regexp {
183
+ color: #009926
184
+ }
185
+
186
+ pre .class {
187
+ color: #458;
188
+ font-weight: bold
189
+ }
190
+
191
+ pre .symbol,
192
+ pre .ruby .symbol .string,
193
+ pre .ruby .symbol .keyword,
194
+ pre .ruby .symbol .keymethods,
195
+ pre .lisp .keyword,
196
+ pre .tex .special,
197
+ pre .input_number {
198
+ color: #990073
199
+ }
200
+
201
+ pre .builtin,
202
+ pre .built_in,
203
+ pre .lisp .title {
204
+ color: #0086b3
205
+ }
206
+
207
+ pre .preprocessor,
208
+ pre .pi,
209
+ pre .doctype,
210
+ pre .shebang,
211
+ pre .cdata {
212
+ color: #999;
213
+ font-weight: bold
214
+ }
215
+
216
+ pre .deletion {
217
+ background: #fdd
218
+ }
219
+
220
+ pre .addition {
221
+ background: #dfd
222
+ }
223
+
224
+ pre .diff .change {
225
+ background: #0086b3
226
+ }
227
+
228
+ pre .chunk {
229
+ color: #aaa
230
+ }
231
+
232
+ pre .tex .formula {
233
+ opacity: 0.5;
234
+ }
235
+ /*
236
+ * jQuery UI CSS Framework @VERSION
237
+ *
238
+ * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
239
+ * Dual licensed under the MIT or GPL Version 2 licenses.
240
+ * http://jquery.org/license
241
+ *
242
+ * http://docs.jquery.com/UI/Theming/API
243
+ */
244
+
245
+ /* Layout helpers
246
+ ----------------------------------*/
247
+
248
+ .ui-helper-hidden { display: none; }
249
+ .ui-helper-hidden-accessible { position: absolute; left: -99999999px; }
250
+ .ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; }
251
+ .ui-helper-clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; }
252
+ .ui-helper-clearfix { display: inline-block; }
253
+ /* required comment for clearfix to work in Opera \*/
254
+ * html .ui-helper-clearfix { height:1%; }
255
+ .ui-helper-clearfix { display:block; }
256
+ /* end clearfix */
257
+ .ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); }
258
+
259
+
260
+ /* Interaction Cues
261
+ ----------------------------------*/
262
+ .ui-state-disabled { cursor: default !important; }
263
+
264
+
265
+ /* Icons
266
+ ----------------------------------*/
267
+
268
+ /* states and images */
269
+ .ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; }
270
+
271
+
272
+ /* Misc visuals
273
+ ----------------------------------*/
274
+
275
+ /* Overlays */
276
+ .ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; }
277
+
278
+
279
+ /*
280
+ * jQuery UI CSS Framework @VERSION
281
+ *
282
+ * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
283
+ * Dual licensed under the MIT or GPL Version 2 licenses.
284
+ * http://jquery.org/license
285
+ *
286
+ * http://docs.jquery.com/UI/Theming/API
287
+ *
288
+ * To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Verdana,Arial,sans-serif&fwDefault=normal&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=cccccc&bgTextureHeader=03_highlight_soft.png&bgImgOpacityHeader=75&borderColorHeader=aaaaaa&fcHeader=222222&iconColorHeader=222222&bgColorContent=ffffff&bgTextureContent=01_flat.png&bgImgOpacityContent=75&borderColorContent=aaaaaa&fcContent=222222&iconColorContent=222222&bgColorDefault=e6e6e6&bgTextureDefault=02_glass.png&bgImgOpacityDefault=75&borderColorDefault=d3d3d3&fcDefault=555555&iconColorDefault=888888&bgColorHover=dadada&bgTextureHover=02_glass.png&bgImgOpacityHover=75&borderColorHover=999999&fcHover=212121&iconColorHover=454545&bgColorActive=ffffff&bgTextureActive=02_glass.png&bgImgOpacityActive=65&borderColorActive=aaaaaa&fcActive=212121&iconColorActive=454545&bgColorHighlight=fbf9ee&bgTextureHighlight=02_glass.png&bgImgOpacityHighlight=55&borderColorHighlight=fcefa1&fcHighlight=363636&iconColorHighlight=2e83ff&bgColorError=fef1ec&bgTextureError=02_glass.png&bgImgOpacityError=95&borderColorError=cd0a0a&fcError=cd0a0a&iconColorError=cd0a0a&bgColorOverlay=aaaaaa&bgTextureOverlay=01_flat.png&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=aaaaaa&bgTextureShadow=01_flat.png&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=8px&offsetTopShadow=-8px&offsetLeftShadow=-8px&cornerRadiusShadow=8px
289
+ */
290
+
291
+
292
+ /* Component containers
293
+ ----------------------------------*/
294
+ .ui-widget { font-family: Verdana,Arial,sans-serif; font-size: 1.1em; }
295
+ .ui-widget .ui-widget { font-size: 1em; }
296
+ .ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Verdana,Arial,sans-serif; font-size: 1em; }
297
+ .ui-widget-content { border: 1px solid #aaaaaa; background: #ffffff url(images/ui-bg_flat_75_ffffff_40x100.png) 50% 50% repeat-x; color: #222222; }
298
+ .ui-widget-content a { color: #222222; }
299
+ .ui-widget-header { border: 1px solid #aaaaaa; background: #cccccc url(images/ui-bg_highlight-soft_75_cccccc_1x100.png) 50% 50% repeat-x; color: #222222; font-weight: bold; }
300
+ .ui-widget-header a { color: #222222; }
301
+
302
+ /* Interaction states
303
+ ----------------------------------*/
304
+ .ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #d3d3d3; background: #e6e6e6 url(images/ui-bg_glass_75_e6e6e6_1x400.png) 50% 50% repeat-x; font-weight: normal; color: #555555; }
305
+ .ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #555555; text-decoration: none; }
306
+ .ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #999999; background: #dadada url(images/ui-bg_glass_75_dadada_1x400.png) 50% 50% repeat-x; font-weight: normal; color: #212121; }
307
+ .ui-state-hover a, .ui-state-hover a:hover { color: #212121; text-decoration: none; }
308
+ .ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #aaaaaa; background: #ffffff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x; font-weight: normal; color: #212121; }
309
+ .ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #212121; text-decoration: none; }
310
+ .ui-widget :active { outline: none; }
311
+
312
+ /* Interaction Cues
313
+ ----------------------------------*/
314
+ .ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight {border: 1px solid #fcefa1; background: #fbf9ee url(images/ui-bg_glass_55_fbf9ee_1x400.png) 50% 50% repeat-x; color: #363636; }
315
+ .ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #363636; }
316
+ .ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {border: 1px solid #cd0a0a; background: #fef1ec url(images/ui-bg_glass_95_fef1ec_1x400.png) 50% 50% repeat-x; color: #cd0a0a; }
317
+ .ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #cd0a0a; }
318
+ .ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #cd0a0a; }
319
+ .ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; }
320
+ .ui-priority-secondary, .ui-widget-content .ui-priority-secondary, .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; }
321
+ .ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; }
322
+
323
+ /* Icons
324
+ ----------------------------------*/
325
+
326
+ /* states and images */
327
+ .ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_222222_256x240.png); }
328
+ .ui-widget-content .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); }
329
+ .ui-widget-header .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); }
330
+ .ui-state-default .ui-icon { background-image: url(images/ui-icons_888888_256x240.png); }
331
+ .ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_454545_256x240.png); }
332
+ .ui-state-active .ui-icon {background-image: url(images/ui-icons_454545_256x240.png); }
333
+ .ui-state-highlight .ui-icon {background-image: url(images/ui-icons_2e83ff_256x240.png); }
334
+ .ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_cd0a0a_256x240.png); }
335
+
336
+ /* positioning */
337
+ .ui-icon-carat-1-n { background-position: 0 0; }
338
+ .ui-icon-carat-1-ne { background-position: -16px 0; }
339
+ .ui-icon-carat-1-e { background-position: -32px 0; }
340
+ .ui-icon-carat-1-se { background-position: -48px 0; }
341
+ .ui-icon-carat-1-s { background-position: -64px 0; }
342
+ .ui-icon-carat-1-sw { background-position: -80px 0; }
343
+ .ui-icon-carat-1-w { background-position: -96px 0; }
344
+ .ui-icon-carat-1-nw { background-position: -112px 0; }
345
+ .ui-icon-carat-2-n-s { background-position: -128px 0; }
346
+ .ui-icon-carat-2-e-w { background-position: -144px 0; }
347
+ .ui-icon-triangle-1-n { background-position: 0 -16px; }
348
+ .ui-icon-triangle-1-ne { background-position: -16px -16px; }
349
+ .ui-icon-triangle-1-e { background-position: -32px -16px; }
350
+ .ui-icon-triangle-1-se { background-position: -48px -16px; }
351
+ .ui-icon-triangle-1-s { background-position: -64px -16px; }
352
+ .ui-icon-triangle-1-sw { background-position: -80px -16px; }
353
+ .ui-icon-triangle-1-w { background-position: -96px -16px; }
354
+ .ui-icon-triangle-1-nw { background-position: -112px -16px; }
355
+ .ui-icon-triangle-2-n-s { background-position: -128px -16px; }
356
+ .ui-icon-triangle-2-e-w { background-position: -144px -16px; }
357
+ .ui-icon-arrow-1-n { background-position: 0 -32px; }
358
+ .ui-icon-arrow-1-ne { background-position: -16px -32px; }
359
+ .ui-icon-arrow-1-e { background-position: -32px -32px; }
360
+ .ui-icon-arrow-1-se { background-position: -48px -32px; }
361
+ .ui-icon-arrow-1-s { background-position: -64px -32px; }
362
+ .ui-icon-arrow-1-sw { background-position: -80px -32px; }
363
+ .ui-icon-arrow-1-w { background-position: -96px -32px; }
364
+ .ui-icon-arrow-1-nw { background-position: -112px -32px; }
365
+ .ui-icon-arrow-2-n-s { background-position: -128px -32px; }
366
+ .ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
367
+ .ui-icon-arrow-2-e-w { background-position: -160px -32px; }
368
+ .ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
369
+ .ui-icon-arrowstop-1-n { background-position: -192px -32px; }
370
+ .ui-icon-arrowstop-1-e { background-position: -208px -32px; }
371
+ .ui-icon-arrowstop-1-s { background-position: -224px -32px; }
372
+ .ui-icon-arrowstop-1-w { background-position: -240px -32px; }
373
+ .ui-icon-arrowthick-1-n { background-position: 0 -48px; }
374
+ .ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
375
+ .ui-icon-arrowthick-1-e { background-position: -32px -48px; }
376
+ .ui-icon-arrowthick-1-se { background-position: -48px -48px; }
377
+ .ui-icon-arrowthick-1-s { background-position: -64px -48px; }
378
+ .ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
379
+ .ui-icon-arrowthick-1-w { background-position: -96px -48px; }
380
+ .ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
381
+ .ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
382
+ .ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
383
+ .ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
384
+ .ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
385
+ .ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
386
+ .ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
387
+ .ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
388
+ .ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
389
+ .ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
390
+ .ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
391
+ .ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
392
+ .ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
393
+ .ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
394
+ .ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
395
+ .ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
396
+ .ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
397
+ .ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
398
+ .ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
399
+ .ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
400
+ .ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
401
+ .ui-icon-arrow-4 { background-position: 0 -80px; }
402
+ .ui-icon-arrow-4-diag { background-position: -16px -80px; }
403
+ .ui-icon-extlink { background-position: -32px -80px; }
404
+ .ui-icon-newwin { background-position: -48px -80px; }
405
+ .ui-icon-refresh { background-position: -64px -80px; }
406
+ .ui-icon-shuffle { background-position: -80px -80px; }
407
+ .ui-icon-transfer-e-w { background-position: -96px -80px; }
408
+ .ui-icon-transferthick-e-w { background-position: -112px -80px; }
409
+ .ui-icon-folder-collapsed { background-position: 0 -96px; }
410
+ .ui-icon-folder-open { background-position: -16px -96px; }
411
+ .ui-icon-document { background-position: -32px -96px; }
412
+ .ui-icon-document-b { background-position: -48px -96px; }
413
+ .ui-icon-note { background-position: -64px -96px; }
414
+ .ui-icon-mail-closed { background-position: -80px -96px; }
415
+ .ui-icon-mail-open { background-position: -96px -96px; }
416
+ .ui-icon-suitcase { background-position: -112px -96px; }
417
+ .ui-icon-comment { background-position: -128px -96px; }
418
+ .ui-icon-person { background-position: -144px -96px; }
419
+ .ui-icon-print { background-position: -160px -96px; }
420
+ .ui-icon-trash { background-position: -176px -96px; }
421
+ .ui-icon-locked { background-position: -192px -96px; }
422
+ .ui-icon-unlocked { background-position: -208px -96px; }
423
+ .ui-icon-bookmark { background-position: -224px -96px; }
424
+ .ui-icon-tag { background-position: -240px -96px; }
425
+ .ui-icon-home { background-position: 0 -112px; }
426
+ .ui-icon-flag { background-position: -16px -112px; }
427
+ .ui-icon-calendar { background-position: -32px -112px; }
428
+ .ui-icon-cart { background-position: -48px -112px; }
429
+ .ui-icon-pencil { background-position: -64px -112px; }
430
+ .ui-icon-clock { background-position: -80px -112px; }
431
+ .ui-icon-disk { background-position: -96px -112px; }
432
+ .ui-icon-calculator { background-position: -112px -112px; }
433
+ .ui-icon-zoomin { background-position: -128px -112px; }
434
+ .ui-icon-zoomout { background-position: -144px -112px; }
435
+ .ui-icon-search { background-position: -160px -112px; }
436
+ .ui-icon-wrench { background-position: -176px -112px; }
437
+ .ui-icon-gear { background-position: -192px -112px; }
438
+ .ui-icon-heart { background-position: -208px -112px; }
439
+ .ui-icon-star { background-position: -224px -112px; }
440
+ .ui-icon-link { background-position: -240px -112px; }
441
+ .ui-icon-cancel { background-position: 0 -128px; }
442
+ .ui-icon-plus { background-position: -16px -128px; }
443
+ .ui-icon-plusthick { background-position: -32px -128px; }
444
+ .ui-icon-minus { background-position: -48px -128px; }
445
+ .ui-icon-minusthick { background-position: -64px -128px; }
446
+ .ui-icon-close { background-position: -80px -128px; }
447
+ .ui-icon-closethick { background-position: -96px -128px; }
448
+ .ui-icon-key { background-position: -112px -128px; }
449
+ .ui-icon-lightbulb { background-position: -128px -128px; }
450
+ .ui-icon-scissors { background-position: -144px -128px; }
451
+ .ui-icon-clipboard { background-position: -160px -128px; }
452
+ .ui-icon-copy { background-position: -176px -128px; }
453
+ .ui-icon-contact { background-position: -192px -128px; }
454
+ .ui-icon-image { background-position: -208px -128px; }
455
+ .ui-icon-video { background-position: -224px -128px; }
456
+ .ui-icon-script { background-position: -240px -128px; }
457
+ .ui-icon-alert { background-position: 0 -144px; }
458
+ .ui-icon-info { background-position: -16px -144px; }
459
+ .ui-icon-notice { background-position: -32px -144px; }
460
+ .ui-icon-help { background-position: -48px -144px; }
461
+ .ui-icon-check { background-position: -64px -144px; }
462
+ .ui-icon-bullet { background-position: -80px -144px; }
463
+ .ui-icon-radio-off { background-position: -96px -144px; }
464
+ .ui-icon-radio-on { background-position: -112px -144px; }
465
+ .ui-icon-pin-w { background-position: -128px -144px; }
466
+ .ui-icon-pin-s { background-position: -144px -144px; }
467
+ .ui-icon-play { background-position: 0 -160px; }
468
+ .ui-icon-pause { background-position: -16px -160px; }
469
+ .ui-icon-seek-next { background-position: -32px -160px; }
470
+ .ui-icon-seek-prev { background-position: -48px -160px; }
471
+ .ui-icon-seek-end { background-position: -64px -160px; }
472
+ .ui-icon-seek-start { background-position: -80px -160px; }
473
+ /* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
474
+ .ui-icon-seek-first { background-position: -80px -160px; }
475
+ .ui-icon-stop { background-position: -96px -160px; }
476
+ .ui-icon-eject { background-position: -112px -160px; }
477
+ .ui-icon-volume-off { background-position: -128px -160px; }
478
+ .ui-icon-volume-on { background-position: -144px -160px; }
479
+ .ui-icon-power { background-position: 0 -176px; }
480
+ .ui-icon-signal-diag { background-position: -16px -176px; }
481
+ .ui-icon-signal { background-position: -32px -176px; }
482
+ .ui-icon-battery-0 { background-position: -48px -176px; }
483
+ .ui-icon-battery-1 { background-position: -64px -176px; }
484
+ .ui-icon-battery-2 { background-position: -80px -176px; }
485
+ .ui-icon-battery-3 { background-position: -96px -176px; }
486
+ .ui-icon-circle-plus { background-position: 0 -192px; }
487
+ .ui-icon-circle-minus { background-position: -16px -192px; }
488
+ .ui-icon-circle-close { background-position: -32px -192px; }
489
+ .ui-icon-circle-triangle-e { background-position: -48px -192px; }
490
+ .ui-icon-circle-triangle-s { background-position: -64px -192px; }
491
+ .ui-icon-circle-triangle-w { background-position: -80px -192px; }
492
+ .ui-icon-circle-triangle-n { background-position: -96px -192px; }
493
+ .ui-icon-circle-arrow-e { background-position: -112px -192px; }
494
+ .ui-icon-circle-arrow-s { background-position: -128px -192px; }
495
+ .ui-icon-circle-arrow-w { background-position: -144px -192px; }
496
+ .ui-icon-circle-arrow-n { background-position: -160px -192px; }
497
+ .ui-icon-circle-zoomin { background-position: -176px -192px; }
498
+ .ui-icon-circle-zoomout { background-position: -192px -192px; }
499
+ .ui-icon-circle-check { background-position: -208px -192px; }
500
+ .ui-icon-circlesmall-plus { background-position: 0 -208px; }
501
+ .ui-icon-circlesmall-minus { background-position: -16px -208px; }
502
+ .ui-icon-circlesmall-close { background-position: -32px -208px; }
503
+ .ui-icon-squaresmall-plus { background-position: -48px -208px; }
504
+ .ui-icon-squaresmall-minus { background-position: -64px -208px; }
505
+ .ui-icon-squaresmall-close { background-position: -80px -208px; }
506
+ .ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
507
+ .ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
508
+ .ui-icon-grip-solid-vertical { background-position: -32px -224px; }
509
+ .ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
510
+ .ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
511
+ .ui-icon-grip-diagonal-se { background-position: -80px -224px; }
512
+
513
+
514
+ /* Misc visuals
515
+ ----------------------------------*/
516
+
517
+ /* Corner radius */
518
+ .ui-corner-tl { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; border-top-left-radius: 4px; }
519
+ .ui-corner-tr { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; border-top-right-radius: 4px; }
520
+ .ui-corner-bl { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; }
521
+ .ui-corner-br { -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; }
522
+ .ui-corner-top { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; border-top-left-radius: 4px; -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; border-top-right-radius: 4px; }
523
+ .ui-corner-bottom { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; }
524
+ .ui-corner-right { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; border-top-right-radius: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; }
525
+ .ui-corner-left { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; border-top-left-radius: 4px; -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; }
526
+ .ui-corner-all { -moz-border-radius: 4px; -webkit-border-radius: 4px; border-radius: 4px; }
527
+
528
+ /* Overlays */
529
+ .ui-widget-overlay { background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); }
530
+ .ui-widget-shadow { margin: -8px 0 0 -8px; padding: 8px; background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); -moz-border-radius: 8px; -webkit-border-radius: 8px; border-radius: 8px; }
531
+ /*
532
+ ColorBox Core Style:
533
+ The following CSS is consistent between example themes and should not be altered.
534
+ */
535
+ #colorbox, #cboxOverlay, #cboxWrapper{position:absolute; top:0; left:0; z-index:9999; overflow:hidden;}
536
+ #cboxOverlay{position:fixed; width:100%; height:100%;}
537
+ #cboxMiddleLeft, #cboxBottomLeft{clear:left;}
538
+ #cboxContent{position:relative;}
539
+ #cboxLoadedContent{overflow:auto;}
540
+ #cboxTitle{margin:0;}
541
+ #cboxLoadingOverlay, #cboxLoadingGraphic{position:absolute; top:0; left:0; width:100%; height:100%;}
542
+ #cboxPrevious, #cboxNext, #cboxClose, #cboxSlideshow{cursor:pointer;}
543
+ .cboxPhoto{float:left; margin:auto; border:0; display:block; max-width:none;}
544
+ .cboxIframe{width:100%; height:100%; display:block; border:0;}
545
+ #colorbox, #cboxContent, #cboxLoadedContent{box-sizing:content-box;}
546
+
547
+ /*
548
+ User Style:
549
+ Change the following styles to modify the appearance of ColorBox. They are
550
+ ordered & tabbed in a way that represents the nesting of the generated HTML.
551
+ */
552
+ #cboxOverlay{background:#000;}
553
+ #colorbox{}
554
+ #cboxTopLeft{width:14px; height:14px; background:url(colorbox/controls.png) no-repeat 0 0;}
555
+ #cboxTopCenter{height:14px; background:url(colorbox/border.png) repeat-x top left;}
556
+ #cboxTopRight{width:14px; height:14px; background:url(colorbox/controls.png) no-repeat -36px 0;}
557
+ #cboxBottomLeft{width:14px; height:43px; background:url(colorbox/controls.png) no-repeat 0 -32px;}
558
+ #cboxBottomCenter{height:43px; background:url(colorbox/border.png) repeat-x bottom left;}
559
+ #cboxBottomRight{width:14px; height:43px; background:url(colorbox/controls.png) no-repeat -36px -32px;}
560
+ #cboxMiddleLeft{width:14px; background:url(colorbox/controls.png) repeat-y -175px 0;}
561
+ #cboxMiddleRight{width:14px; background:url(colorbox/controls.png) repeat-y -211px 0;}
562
+ #cboxContent{background:#fff; overflow:visible;}
563
+ .cboxIframe{background:#fff;}
564
+ #cboxError{padding:50px; border:1px solid #ccc;}
565
+ #cboxLoadedContent{margin-bottom:5px;}
566
+ #cboxLoadingOverlay{background:url(colorbox/loading_background.png) no-repeat center center;}
567
+ #cboxLoadingGraphic{background:url(colorbox/loading.gif) no-repeat center center;}
568
+ #cboxTitle{position:absolute; bottom:-25px; left:0; text-align:center; width:100%; font-weight:bold; color:#7C7C7C;}
569
+ #cboxCurrent{position:absolute; bottom:-25px; left:58px; font-weight:bold; color:#7C7C7C;}
570
+
571
+ #cboxPrevious, #cboxNext, #cboxClose, #cboxSlideshow{position:absolute; bottom:-29px; background:url(colorbox/controls.png) no-repeat 0px 0px; width:23px; height:23px; text-indent:-9999px;}
572
+ #cboxPrevious{left:0px; background-position: -51px -25px;}
573
+ #cboxPrevious:hover{background-position:-51px 0px;}
574
+ #cboxNext{left:27px; background-position:-75px -25px;}
575
+ #cboxNext:hover{background-position:-75px 0px;}
576
+ #cboxClose{right:0; background-position:-100px -25px;}
577
+ #cboxClose:hover{background-position:-100px 0px;}
578
+
579
+ .cboxSlideshow_on #cboxSlideshow{background-position:-125px 0px; right:27px;}
580
+ .cboxSlideshow_on #cboxSlideshow:hover{background-position:-150px 0px;}
581
+ .cboxSlideshow_off #cboxSlideshow{background-position:-150px -25px; right:27px;}
582
+ .cboxSlideshow_off #cboxSlideshow:hover{background-position:-125px 0px;}
583
+ #loading {
584
+ position: fixed;
585
+ left: 40%;
586
+ top: 50%; }
587
+
588
+ a {
589
+ color: #333333;
590
+ text-decoration: none; }
591
+ a:hover {
592
+ color: black;
593
+ text-decoration: underline; }
594
+
595
+ body {
596
+ font-family: "Lucida Grande", Helvetica, "Helvetica Neue", Arial, sans-serif;
597
+ padding: 12px;
598
+ background-color: #333333; }
599
+
600
+ h1, h2, h3, h4 {
601
+ color: #1c2324;
602
+ margin: 0;
603
+ padding: 0;
604
+ margin-bottom: 12px; }
605
+
606
+ table {
607
+ width: 100%; }
608
+
609
+ #content {
610
+ clear: left;
611
+ background-color: white;
612
+ border: 2px solid #dddddd;
613
+ border-top: 8px solid #dddddd;
614
+ padding: 18px;
615
+ -webkit-border-bottom-left-radius: 5px;
616
+ -webkit-border-bottom-right-radius: 5px;
617
+ -webkit-border-top-right-radius: 5px;
618
+ -moz-border-radius-bottomleft: 5px;
619
+ -moz-border-radius-bottomright: 5px;
620
+ -moz-border-radius-topright: 5px;
621
+ border-bottom-left-radius: 5px;
622
+ border-bottom-right-radius: 5px;
623
+ border-top-right-radius: 5px; }
624
+
625
+ .dataTables_filter, .dataTables_info {
626
+ padding: 2px 6px; }
627
+
628
+ abbr.timeago {
629
+ text-decoration: none;
630
+ border: none;
631
+ font-weight: bold; }
632
+
633
+ .timestamp {
634
+ float: right;
635
+ color: #dddddd; }
636
+
637
+ .group_tabs {
638
+ list-style: none;
639
+ float: left;
640
+ margin: 0;
641
+ padding: 0; }
642
+ .group_tabs li {
643
+ display: inline;
644
+ float: left; }
645
+ .group_tabs li a {
646
+ font-family: Helvetica, Arial, sans-serif;
647
+ display: block;
648
+ float: left;
649
+ text-decoration: none;
650
+ padding: 4px 8px;
651
+ background-color: #aaaaaa;
652
+ background: -webkit-gradient(linear, 0 0, 0 bottom, from(#dddddd), to(#aaaaaa));
653
+ background: -moz-linear-gradient(#dddddd, #aaaaaa);
654
+ background: linear-gradient(#dddddd, #aaaaaa);
655
+ text-shadow: #e5e5e5 1px 1px 0px;
656
+ border-bottom: none;
657
+ color: #333333;
658
+ font-weight: bold;
659
+ margin-right: 8px;
660
+ border-top: 1px solid #efefef;
661
+ -webkit-border-top-left-radius: 2px;
662
+ -webkit-border-top-right-radius: 2px;
663
+ -moz-border-radius-topleft: 2px;
664
+ -moz-border-radius-topright: 2px;
665
+ border-top-left-radius: 2px;
666
+ border-top-right-radius: 2px; }
667
+ .group_tabs li a:hover {
668
+ background-color: #cccccc;
669
+ background: -webkit-gradient(linear, 0 0, 0 bottom, from(#eeeeee), to(#aaaaaa));
670
+ background: -moz-linear-gradient(#eeeeee, #aaaaaa);
671
+ background: linear-gradient(#eeeeee, #aaaaaa); }
672
+ .group_tabs li a:active {
673
+ padding-top: 5px;
674
+ padding-bottom: 3px; }
675
+ .group_tabs li.active a {
676
+ color: black;
677
+ text-shadow: white 1px 1px 0px;
678
+ background-color: #dddddd;
679
+ background: -webkit-gradient(linear, 0 0, 0 bottom, from(white), to(#dddddd));
680
+ background: -moz-linear-gradient(white, #dddddd);
681
+ background: linear-gradient(white, #dddddd); }
682
+
683
+ .file_list {
684
+ margin-bottom: 18px; }
685
+
686
+ a.src_link {
687
+ background: url("./magnify.png") no-repeat left 50%;
688
+ padding-left: 18px; }
689
+
690
+ tr, td {
691
+ margin: 0;
692
+ padding: 0; }
693
+
694
+ th {
695
+ white-space: nowrap; }
696
+ th.ui-state-default {
697
+ cursor: pointer; }
698
+ th span.ui-icon {
699
+ float: left; }
700
+
701
+ td {
702
+ padding: 4px 8px; }
703
+ td.strong {
704
+ font-weight: bold; }
705
+
706
+ .source_table h3, .source_table h4 {
707
+ padding: 0;
708
+ margin: 0;
709
+ margin-bottom: 4px; }
710
+ .source_table .header {
711
+ padding: 10px; }
712
+ .source_table pre {
713
+ margin: 0;
714
+ padding: 0;
715
+ white-space: normal;
716
+ color: black;
717
+ font-family: "Monaco", "Inconsolata", "Consolas", monospace; }
718
+ .source_table code {
719
+ color: black;
720
+ font-family: "Monaco", "Inconsolata", "Consolas", monospace; }
721
+ .source_table pre {
722
+ background-color: #333333; }
723
+ .source_table pre ol {
724
+ margin: 0px;
725
+ padding: 0px;
726
+ margin-left: 45px;
727
+ font-size: 12px;
728
+ color: white; }
729
+ .source_table pre li {
730
+ margin: 0px;
731
+ padding: 2px 6px;
732
+ border-left: 5px solid white; }
733
+ .source_table pre li code {
734
+ white-space: pre;
735
+ white-space: pre-wrap; }
736
+ .source_table pre .hits {
737
+ float: right;
738
+ margin-left: 10px;
739
+ padding: 2px 4px;
740
+ background-color: #444444;
741
+ background: -webkit-gradient(linear, 0 0, 0 bottom, from(#222222), to(#666666));
742
+ background: -moz-linear-gradient(#222222, #666666);
743
+ background: linear-gradient(#222222, #666666);
744
+ color: white;
745
+ font-family: Helvetica, "Helvetica Neue", Arial, sans-serif;
746
+ font-size: 10px;
747
+ font-weight: bold;
748
+ text-align: center;
749
+ border-radius: 6px; }
750
+
751
+ #footer {
752
+ color: #dddddd;
753
+ font-size: 12px;
754
+ font-weight: bold;
755
+ margin-top: 12px;
756
+ text-align: right; }
757
+ #footer a {
758
+ color: #eeeeee;
759
+ text-decoration: underline; }
760
+ #footer a:hover {
761
+ color: white;
762
+ text-decoration: none; }
763
+
764
+ .green {
765
+ color: #009900; }
766
+
767
+ .red {
768
+ color: #990000; }
769
+
770
+ .yellow {
771
+ color: #ddaa00; }
772
+
773
+ .source_table .covered {
774
+ border-color: #009900; }
775
+ .source_table .missed {
776
+ border-color: #990000; }
777
+ .source_table .never {
778
+ border-color: black; }
779
+ .source_table .skipped {
780
+ border-color: #ffcc00; }
781
+ .source_table .covered:nth-child(odd) {
782
+ background-color: #cdf2cd; }
783
+ .source_table .covered:nth-child(even) {
784
+ background-color: #dbf2db; }
785
+ .source_table .missed:nth-child(odd) {
786
+ background-color: #f7c0c0; }
787
+ .source_table .missed:nth-child(even) {
788
+ background-color: #f7cfcf; }
789
+ .source_table .never:nth-child(odd) {
790
+ background-color: #efefef; }
791
+ .source_table .never:nth-child(even) {
792
+ background-color: #f4f4f4; }
793
+ .source_table .skipped:nth-child(odd) {
794
+ background-color: #fbf0c0; }
795
+ .source_table .skipped:nth-child(even) {
796
+ background-color: #fbffcf; }
797
+
798
+
799
+