rails-data-explorer 1.0.0 → 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (29) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +9 -0
  3. data/CHANGELOG.md +11 -1
  4. data/README.md +4 -1
  5. data/lib/rails-data-explorer.rb +5 -0
  6. data/lib/rails_data_explorer/action_view_extension.rb +24 -1
  7. data/lib/rails_data_explorer/data_series.rb +2 -2
  8. data/lib/rails_data_explorer/data_set.rb +6 -0
  9. data/lib/rails_data_explorer/engine.rb +1 -1
  10. data/lib/rails_data_explorer/exploration.rb +1 -19
  11. data/rails-data-explorer.gemspec +10 -10
  12. data/vendor/assets/javascripts/rails-data-explorer.js +8 -6
  13. data/vendor/assets/javascripts/{sources → rails-data-explorer}/d3.boxplot.js +0 -0
  14. data/vendor/assets/javascripts/{sources → rails-data-explorer}/d3.parcoords.js +0 -0
  15. data/vendor/assets/javascripts/{sources → rails-data-explorer}/d3.parsets.js +0 -0
  16. data/vendor/assets/javascripts/{sources → rails-data-explorer}/d3.v3.js +0 -0
  17. data/vendor/assets/javascripts/{sources → rails-data-explorer}/nv.d3.js +0 -0
  18. data/vendor/assets/javascripts/{sources → rails-data-explorer}/vega.js +0 -0
  19. data/vendor/assets/stylesheets/rails-data-explorer.css +10 -7
  20. data/vendor/assets/stylesheets/rails-data-explorer/bootstrap-theme.css +476 -0
  21. data/vendor/assets/stylesheets/rails-data-explorer/bootstrap.css +6566 -0
  22. data/vendor/assets/stylesheets/{sources → rails-data-explorer}/d3.boxplot.css +0 -0
  23. data/vendor/assets/stylesheets/{sources → rails-data-explorer}/d3.parcoords.css +0 -0
  24. data/vendor/assets/stylesheets/{sources → rails-data-explorer}/d3.parsets.css +0 -0
  25. data/vendor/assets/stylesheets/{sources → rails-data-explorer}/nv.d3.css +0 -0
  26. data/vendor/assets/stylesheets/{sources → rails-data-explorer}/rde-default-style.css +0 -0
  27. metadata +59 -28
  28. data/vendor/assets/stylesheets/sources/bootstrap-theme.css +0 -346
  29. data/vendor/assets/stylesheets/sources/bootstrap.css +0 -1727
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 411afabc4250e907fbdbe7e70805be898219eb5a
4
- data.tar.gz: 6a95cd6abc7828634bfd88ac69ca9b2a805a4970
3
+ metadata.gz: d359492c5e290bf9416c9040224f2c248cb8cad9
4
+ data.tar.gz: c245c7979079b276ac307427c4345fe987a303a5
5
5
  SHA512:
6
- metadata.gz: 598df5a92a7f39dbb213283cfd93cbf0a7c72fdc3c12aaa03fd875d924b2160eacfcdbec079045c8a8eca67da6fa336939ed58e8f4d8b6e839ce48ba5ad866d9
7
- data.tar.gz: 8f9ee3dd2de65400978ea82a3445c40974bac8e5a5e8a54137fe062a25eed16ecd6b10e92e5a2ffcdf57b7ad37f651451b12f6e4d23a5b93271630f9f7a1226e
6
+ metadata.gz: e7ef42c4035f467cbf96b0bfdd6fad6725139a091fd2f3191c55042e23d3fbf0290850dae6abe6f651706f8175d0b10bf8d36d8ce9e0692e10fe2e7170ffc665
7
+ data.tar.gz: 5d5e8ecdf816c24a95b10189391e75abd207454f81ed4219ad378046f7fa19c369b66ef403b6c495faf35c9f409c5b37e04ee87985e4d567a05869d604a3009c
@@ -0,0 +1,9 @@
1
+ language: ruby
2
+
3
+ script: "bundle exec rake test"
4
+
5
+ rvm:
6
+ - 1.9.3
7
+ - 2.0.0
8
+ - 2.1.2
9
+ - 2.2.0
@@ -1,4 +1,14 @@
1
- TODO: add sampling for large ActiveRecord tables
1
+ TODO:
2
+
3
+ * sampling for large ActiveRecord tables
4
+ * automatic clustering of records (using each row as a feature vector)
5
+
6
+ ### 1.0.1
7
+
8
+ * Added :note option to data series specs
9
+ * Updated bootstrap assets
10
+ * Updated gem dependencies
11
+ * added Travis-CI integration
2
12
 
3
13
  # 1.0.0
4
14
 
data/README.md CHANGED
@@ -127,7 +127,7 @@ With just a few lines of code you get comprehensive statistics and charts for yo
127
127
  * ActionView >= 3.0
128
128
  * ActiveSupport >= 3.0
129
129
  * Asset pipeline (for batteries included, otherwise you'll have to pull in a number of assets manually)
130
- * jQuery??
130
+ * jQuery
131
131
 
132
132
  ### Resources
133
133
 
@@ -135,6 +135,9 @@ With just a few lines of code you get comprehensive statistics and charts for yo
135
135
  * [Source code (github)](https://github.com/jhund/rails-data-explorer)
136
136
  * [Issues](https://github.com/jhund/rails-data-explorer/issues)
137
137
  * [Rubygems.org](http://rubygems.org/gems/rails-data-explorer)
138
+ * [API documentation](http://www.rubydoc.info/gems/rails-data-explorer/)
139
+
140
+ [![Build Status](https://travis-ci.org/jhund/rails-data-explorer.svg?branch=master)](https://travis-ci.org/jhund/rails-data-explorer)
138
141
 
139
142
  ### License
140
143
 
@@ -10,6 +10,7 @@ require 'interpolate'
10
10
  require 'rails_data_explorer/action_view_extension.rb'
11
11
 
12
12
  require 'rails_data_explorer/engine.rb'
13
+ # dependency boundary
13
14
 
14
15
  require 'rails_data_explorer.rb'
15
16
  require 'rails_data_explorer/chart.rb'
@@ -26,6 +27,8 @@ require 'rails_data_explorer/utils/data_quantizer.rb'
26
27
  require 'rails_data_explorer/utils/rde_table.rb'
27
28
  require 'rails_data_explorer/utils/value_formatter.rb'
28
29
 
30
+ # dependency boundary
31
+
29
32
  require 'rails_data_explorer/chart/box_plot.rb'
30
33
  require 'rails_data_explorer/chart/box_plot_group.rb'
31
34
  require 'rails_data_explorer/chart/contingency_table.rb'
@@ -45,4 +48,6 @@ require 'rails_data_explorer/data_type/quantitative/decimal.rb'
45
48
  require 'rails_data_explorer/data_type/quantitative/integer.rb'
46
49
  require 'rails_data_explorer/data_type/quantitative/temporal.rb'
47
50
 
51
+ # dependency boundary
52
+
48
53
  require 'rails_data_explorer/chart/stacked_bar_chart_categorical_percent.rb'
@@ -209,7 +209,30 @@ class RailsDataExplorer
209
209
  end
210
210
 
211
211
  def rde_explorations_with_charts(explorations)
212
- explorations.map { |e| e.render }.join.html_safe
212
+ explorations.map { |ex|
213
+ content_tag(:div, class: 'rde-exploration panel panel-default', id: ex.dom_id) do
214
+ content_tag(:div, class: 'panel-heading') do
215
+ %(<span style="float: right;"><a href="#rails_data_explorer-toc">Top</a></span>).html_safe +
216
+ content_tag(:h2, ex.title, class: 'rde-exploration-title panel-title')
217
+ end +
218
+ content_tag(:div, class: 'panel-body') do
219
+ if ex.charts.any?
220
+ if ex.notes.any?
221
+ content_tag(:ul, class: 'rde-data_series_note') do
222
+ ex.notes.map { |note_attrs|
223
+ content_tag(:li, [note_attrs[:ds_name], note_attrs[:body]].join(': '))
224
+ }.join.html_safe
225
+ end
226
+ else
227
+ ''.html_safe
228
+ end +
229
+ ex.charts.map { |ch| ch.render }.join.html_safe
230
+ else
231
+ "No charts are available for this combination of data series."
232
+ end
233
+ end
234
+ end.html_safe
235
+ }.join.html_safe
213
236
  end
214
237
 
215
238
  end
@@ -20,7 +20,7 @@ class RailsDataExplorer
20
20
  # TODO: Add concept of significant figures for rounding values when displaying them
21
21
  # http://en.wikipedia.org/wiki/Significant_figures
22
22
 
23
- attr_reader :data_type, :name, :chart_roles
23
+ attr_reader :data_type, :name, :chart_roles, :options
24
24
  delegate :available_chart_types, to: :data_type, prefix: false
25
25
  delegate :available_chart_roles, to: :data_type, prefix: false
26
26
 
@@ -44,7 +44,7 @@ class RailsDataExplorer
44
44
  @values = _values
45
45
  @data_type = init_data_type(options[:data_type])
46
46
  @chart_roles = init_chart_roles(options[:chart_roles]) # after data_type!
47
- @options = options
47
+ @options = options.symbolize_keys
48
48
  end
49
49
 
50
50
  # Returns descriptive_statistics as a flat Array
@@ -140,5 +140,11 @@ class RailsDataExplorer
140
140
  data_series.map { |e| e.name }
141
141
  end
142
142
 
143
+ # Returns an Array of notes attributes for data_series.
144
+ def notes
145
+ data_series.find_all { |ds| ds.options[:note].present? }
146
+ .map { |ds| { ds_name: ds.name, body: ds.options[:note] }}
147
+ end
148
+
143
149
  end
144
150
  end
@@ -32,7 +32,7 @@ class RailsDataExplorer
32
32
  # extend RailsDataExplorer::ActiveRecordExtension
33
33
  # end
34
34
 
35
- initializer "filterrific" do |app|
35
+ initializer "rails-data-explorer.assets.precompile" do |app|
36
36
  app.config.assets.precompile += %w(
37
37
  multiple_bivariate_small.png
38
38
  )
@@ -12,12 +12,10 @@ class RailsDataExplorer
12
12
  #
13
13
  class Exploration
14
14
 
15
- attr_accessor :output_buffer # required for content_tag
16
- include ActionView::Helpers::TagHelper
17
-
18
15
  attr_accessor :charts, :data_set, :title
19
16
 
20
17
  delegate :data_series_names, to: :data_set, prefix: false
18
+ delegate :notes, to: :data_set, prefix: false
21
19
  delegate :number_of_values, to: :data_set, prefix: false
22
20
 
23
21
  # Computes a dom_id for data_series_names
@@ -46,22 +44,6 @@ class RailsDataExplorer
46
44
  @charts = initialize_charts(chart_specs)
47
45
  end
48
46
 
49
- def render
50
- content_tag(:div, class: 'rde-exploration panel panel-default', id: dom_id) do
51
- content_tag(:div, class: 'panel-heading') do
52
- %(<span style="float: right;"><a href="#rails_data_explorer-toc">Top</a></span>).html_safe +
53
- content_tag(:h2, @title, class: 'rde-exploration-title panel-title')
54
- end +
55
- content_tag(:div, class: 'panel-body') do
56
- if @charts.any?
57
- @charts.map { |e| e.render }.join.html_safe
58
- else
59
- "No charts are available for this combination of data series."
60
- end
61
- end
62
- end.html_safe
63
- end
64
-
65
47
  # Returns true if charts for this exploration are to be rendered.
66
48
  def render_charts?
67
49
  @render_charts
@@ -3,7 +3,7 @@ $:.push File.expand_path('../lib', __FILE__)
3
3
 
4
4
  Gem::Specification.new do |gem|
5
5
  gem.name = 'rails-data-explorer'
6
- gem.version = '1.0.0'
6
+ gem.version = '1.0.1'
7
7
  gem.platform = Gem::Platform::RUBY
8
8
 
9
9
  gem.authors = ['Jo Hund']
@@ -16,14 +16,14 @@ Gem::Specification.new do |gem|
16
16
  gem.files = `git ls-files`.split("\n")
17
17
  gem.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
18
18
 
19
- gem.add_dependency 'color', ['~> 1.7.1']
20
- gem.add_dependency 'descriptive-statistics', ['~> 2.1.2']
21
- gem.add_dependency 'distribution', ['~> 0.7.1']
22
- gem.add_dependency 'interpolate', ['~> 0.3.0']
19
+ gem.add_dependency 'rails', '>= 3.1.0'
20
+ gem.add_dependency 'color', '~> 1.7', '>= 1.7.1'
21
+ gem.add_dependency 'descriptive-statistics', '~> 2.1', '>= 2.1.2'
22
+ gem.add_dependency 'distribution', '~> 0.7', '>= 0.7.1'
23
+ gem.add_dependency 'interpolate', '~> 0.3', '>= 0.3.0'
23
24
 
24
- gem.add_development_dependency 'actionview', '>= 3.0.0'
25
- gem.add_development_dependency 'bundler', ['>= 1.0.0']
26
- gem.add_development_dependency 'minitest'
27
- gem.add_development_dependency 'minitest-spec-expect'
28
- gem.add_development_dependency 'rake', ['>= 0']
25
+ gem.add_development_dependency 'bundler', '~> 1.0', '>= 1.0.0'
26
+ gem.add_development_dependency 'minitest', '>= 0'
27
+ gem.add_development_dependency 'minitest-spec-expect', '>= 0'
28
+ gem.add_development_dependency 'rake', '>= 0'
29
29
  end
@@ -11,10 +11,12 @@
11
11
  // about supported directives.
12
12
  //
13
13
 
14
- //= require sources/d3.v3
14
+ //= require rails-data-explorer/d3.v3
15
15
 
16
- // //= require sources/nv.d3
17
- //= require sources/d3.boxplot
18
- //= require sources/d3.parcoords
19
- //= require sources/d3.parsets
20
- //= require sources/vega.js
16
+ // Currently we're not using NVD3
17
+ // //= require rails-data-explorer/nv.d3
18
+
19
+ //= require rails-data-explorer/d3.boxplot
20
+ //= require rails-data-explorer/d3.parcoords
21
+ //= require rails-data-explorer/d3.parsets
22
+ //= require rails-data-explorer/vega.js
@@ -9,13 +9,16 @@
9
9
  * compiled file, but it's generally better to create a new file per style scope.
10
10
  *
11
11
 
12
- *= require sources/bootstrap
13
- *= require sources/bootstrap-theme
14
- * *= require sources/nv.d3
15
- *= require sources/d3.boxplot
16
- *= require sources/d3.parcoords
17
- *= require sources/d3.parsets
12
+ *= require rails-data-explorer/bootstrap
13
+ *= require rails-data-explorer/bootstrap-theme
18
14
 
19
- *= require sources/rde-default-style
15
+ * Currently we're not using NVD3
16
+ * *= require rails-data-explorer/nv.d3
17
+
18
+ *= require rails-data-explorer/d3.boxplot
19
+ *= require rails-data-explorer/d3.parcoords
20
+ *= require rails-data-explorer/d3.parsets
21
+
22
+ *= require rails-data-explorer/rde-default-style
20
23
 
21
24
  */
@@ -0,0 +1,476 @@
1
+ /*!
2
+ * Bootstrap v3.3.2 (http://getbootstrap.com)
3
+ * Copyright 2011-2015 Twitter, Inc.
4
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
5
+ */
6
+
7
+ .btn-default,
8
+ .btn-primary,
9
+ .btn-success,
10
+ .btn-info,
11
+ .btn-warning,
12
+ .btn-danger {
13
+ text-shadow: 0 -1px 0 rgba(0, 0, 0, .2);
14
+ -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);
15
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);
16
+ }
17
+ .btn-default:active,
18
+ .btn-primary:active,
19
+ .btn-success:active,
20
+ .btn-info:active,
21
+ .btn-warning:active,
22
+ .btn-danger:active,
23
+ .btn-default.active,
24
+ .btn-primary.active,
25
+ .btn-success.active,
26
+ .btn-info.active,
27
+ .btn-warning.active,
28
+ .btn-danger.active {
29
+ -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
30
+ box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
31
+ }
32
+ .btn-default .badge,
33
+ .btn-primary .badge,
34
+ .btn-success .badge,
35
+ .btn-info .badge,
36
+ .btn-warning .badge,
37
+ .btn-danger .badge {
38
+ text-shadow: none;
39
+ }
40
+ .btn:active,
41
+ .btn.active {
42
+ background-image: none;
43
+ }
44
+ .btn-default {
45
+ text-shadow: 0 1px 0 #fff;
46
+ background-image: -webkit-linear-gradient(top, #fff 0%, #e0e0e0 100%);
47
+ background-image: -o-linear-gradient(top, #fff 0%, #e0e0e0 100%);
48
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#e0e0e0));
49
+ background-image: linear-gradient(to bottom, #fff 0%, #e0e0e0 100%);
50
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);
51
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
52
+ background-repeat: repeat-x;
53
+ border-color: #dbdbdb;
54
+ border-color: #ccc;
55
+ }
56
+ .btn-default:hover,
57
+ .btn-default:focus {
58
+ background-color: #e0e0e0;
59
+ background-position: 0 -15px;
60
+ }
61
+ .btn-default:active,
62
+ .btn-default.active {
63
+ background-color: #e0e0e0;
64
+ border-color: #dbdbdb;
65
+ }
66
+ .btn-default.disabled,
67
+ .btn-default:disabled,
68
+ .btn-default[disabled] {
69
+ background-color: #e0e0e0;
70
+ background-image: none;
71
+ }
72
+ .btn-primary {
73
+ background-image: -webkit-linear-gradient(top, #337ab7 0%, #265a88 100%);
74
+ background-image: -o-linear-gradient(top, #337ab7 0%, #265a88 100%);
75
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#265a88));
76
+ background-image: linear-gradient(to bottom, #337ab7 0%, #265a88 100%);
77
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0);
78
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
79
+ background-repeat: repeat-x;
80
+ border-color: #245580;
81
+ }
82
+ .btn-primary:hover,
83
+ .btn-primary:focus {
84
+ background-color: #265a88;
85
+ background-position: 0 -15px;
86
+ }
87
+ .btn-primary:active,
88
+ .btn-primary.active {
89
+ background-color: #265a88;
90
+ border-color: #245580;
91
+ }
92
+ .btn-primary.disabled,
93
+ .btn-primary:disabled,
94
+ .btn-primary[disabled] {
95
+ background-color: #265a88;
96
+ background-image: none;
97
+ }
98
+ .btn-success {
99
+ background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%);
100
+ background-image: -o-linear-gradient(top, #5cb85c 0%, #419641 100%);
101
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#419641));
102
+ background-image: linear-gradient(to bottom, #5cb85c 0%, #419641 100%);
103
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);
104
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
105
+ background-repeat: repeat-x;
106
+ border-color: #3e8f3e;
107
+ }
108
+ .btn-success:hover,
109
+ .btn-success:focus {
110
+ background-color: #419641;
111
+ background-position: 0 -15px;
112
+ }
113
+ .btn-success:active,
114
+ .btn-success.active {
115
+ background-color: #419641;
116
+ border-color: #3e8f3e;
117
+ }
118
+ .btn-success.disabled,
119
+ .btn-success:disabled,
120
+ .btn-success[disabled] {
121
+ background-color: #419641;
122
+ background-image: none;
123
+ }
124
+ .btn-info {
125
+ background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);
126
+ background-image: -o-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);
127
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#2aabd2));
128
+ background-image: linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%);
129
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);
130
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
131
+ background-repeat: repeat-x;
132
+ border-color: #28a4c9;
133
+ }
134
+ .btn-info:hover,
135
+ .btn-info:focus {
136
+ background-color: #2aabd2;
137
+ background-position: 0 -15px;
138
+ }
139
+ .btn-info:active,
140
+ .btn-info.active {
141
+ background-color: #2aabd2;
142
+ border-color: #28a4c9;
143
+ }
144
+ .btn-info.disabled,
145
+ .btn-info:disabled,
146
+ .btn-info[disabled] {
147
+ background-color: #2aabd2;
148
+ background-image: none;
149
+ }
150
+ .btn-warning {
151
+ background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);
152
+ background-image: -o-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);
153
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#eb9316));
154
+ background-image: linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%);
155
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);
156
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
157
+ background-repeat: repeat-x;
158
+ border-color: #e38d13;
159
+ }
160
+ .btn-warning:hover,
161
+ .btn-warning:focus {
162
+ background-color: #eb9316;
163
+ background-position: 0 -15px;
164
+ }
165
+ .btn-warning:active,
166
+ .btn-warning.active {
167
+ background-color: #eb9316;
168
+ border-color: #e38d13;
169
+ }
170
+ .btn-warning.disabled,
171
+ .btn-warning:disabled,
172
+ .btn-warning[disabled] {
173
+ background-color: #eb9316;
174
+ background-image: none;
175
+ }
176
+ .btn-danger {
177
+ background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%);
178
+ background-image: -o-linear-gradient(top, #d9534f 0%, #c12e2a 100%);
179
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c12e2a));
180
+ background-image: linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%);
181
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);
182
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
183
+ background-repeat: repeat-x;
184
+ border-color: #b92c28;
185
+ }
186
+ .btn-danger:hover,
187
+ .btn-danger:focus {
188
+ background-color: #c12e2a;
189
+ background-position: 0 -15px;
190
+ }
191
+ .btn-danger:active,
192
+ .btn-danger.active {
193
+ background-color: #c12e2a;
194
+ border-color: #b92c28;
195
+ }
196
+ .btn-danger.disabled,
197
+ .btn-danger:disabled,
198
+ .btn-danger[disabled] {
199
+ background-color: #c12e2a;
200
+ background-image: none;
201
+ }
202
+ .thumbnail,
203
+ .img-thumbnail {
204
+ -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
205
+ box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
206
+ }
207
+ .dropdown-menu > li > a:hover,
208
+ .dropdown-menu > li > a:focus {
209
+ background-color: #e8e8e8;
210
+ background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
211
+ background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
212
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8));
213
+ background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);
214
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);
215
+ background-repeat: repeat-x;
216
+ }
217
+ .dropdown-menu > .active > a,
218
+ .dropdown-menu > .active > a:hover,
219
+ .dropdown-menu > .active > a:focus {
220
+ background-color: #2e6da4;
221
+ background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
222
+ background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
223
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));
224
+ background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);
225
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);
226
+ background-repeat: repeat-x;
227
+ }
228
+ .navbar-default {
229
+ background-image: -webkit-linear-gradient(top, #fff 0%, #f8f8f8 100%);
230
+ background-image: -o-linear-gradient(top, #fff 0%, #f8f8f8 100%);
231
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#f8f8f8));
232
+ background-image: linear-gradient(to bottom, #fff 0%, #f8f8f8 100%);
233
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);
234
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
235
+ background-repeat: repeat-x;
236
+ border-radius: 4px;
237
+ -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075);
238
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075);
239
+ }
240
+ .navbar-default .navbar-nav > .open > a,
241
+ .navbar-default .navbar-nav > .active > a {
242
+ background-image: -webkit-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);
243
+ background-image: -o-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);
244
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#dbdbdb), to(#e2e2e2));
245
+ background-image: linear-gradient(to bottom, #dbdbdb 0%, #e2e2e2 100%);
246
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0);
247
+ background-repeat: repeat-x;
248
+ -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075);
249
+ box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075);
250
+ }
251
+ .navbar-brand,
252
+ .navbar-nav > li > a {
253
+ text-shadow: 0 1px 0 rgba(255, 255, 255, .25);
254
+ }
255
+ .navbar-inverse {
256
+ background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222 100%);
257
+ background-image: -o-linear-gradient(top, #3c3c3c 0%, #222 100%);
258
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#3c3c3c), to(#222));
259
+ background-image: linear-gradient(to bottom, #3c3c3c 0%, #222 100%);
260
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);
261
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
262
+ background-repeat: repeat-x;
263
+ }
264
+ .navbar-inverse .navbar-nav > .open > a,
265
+ .navbar-inverse .navbar-nav > .active > a {
266
+ background-image: -webkit-linear-gradient(top, #080808 0%, #0f0f0f 100%);
267
+ background-image: -o-linear-gradient(top, #080808 0%, #0f0f0f 100%);
268
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#080808), to(#0f0f0f));
269
+ background-image: linear-gradient(to bottom, #080808 0%, #0f0f0f 100%);
270
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);
271
+ background-repeat: repeat-x;
272
+ -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25);
273
+ box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25);
274
+ }
275
+ .navbar-inverse .navbar-brand,
276
+ .navbar-inverse .navbar-nav > li > a {
277
+ text-shadow: 0 -1px 0 rgba(0, 0, 0, .25);
278
+ }
279
+ .navbar-static-top,
280
+ .navbar-fixed-top,
281
+ .navbar-fixed-bottom {
282
+ border-radius: 0;
283
+ }
284
+ @media (max-width: 767px) {
285
+ .navbar .navbar-nav .open .dropdown-menu > .active > a,
286
+ .navbar .navbar-nav .open .dropdown-menu > .active > a:hover,
287
+ .navbar .navbar-nav .open .dropdown-menu > .active > a:focus {
288
+ color: #fff;
289
+ background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
290
+ background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
291
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));
292
+ background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);
293
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);
294
+ background-repeat: repeat-x;
295
+ }
296
+ }
297
+ .alert {
298
+ text-shadow: 0 1px 0 rgba(255, 255, 255, .2);
299
+ -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05);
300
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05);
301
+ }
302
+ .alert-success {
303
+ background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);
304
+ background-image: -o-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);
305
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#c8e5bc));
306
+ background-image: linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%);
307
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);
308
+ background-repeat: repeat-x;
309
+ border-color: #b2dba1;
310
+ }
311
+ .alert-info {
312
+ background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%);
313
+ background-image: -o-linear-gradient(top, #d9edf7 0%, #b9def0 100%);
314
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#b9def0));
315
+ background-image: linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%);
316
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);
317
+ background-repeat: repeat-x;
318
+ border-color: #9acfea;
319
+ }
320
+ .alert-warning {
321
+ background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);
322
+ background-image: -o-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);
323
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#f8efc0));
324
+ background-image: linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%);
325
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);
326
+ background-repeat: repeat-x;
327
+ border-color: #f5e79e;
328
+ }
329
+ .alert-danger {
330
+ background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);
331
+ background-image: -o-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);
332
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#e7c3c3));
333
+ background-image: linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%);
334
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);
335
+ background-repeat: repeat-x;
336
+ border-color: #dca7a7;
337
+ }
338
+ .progress {
339
+ background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);
340
+ background-image: -o-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);
341
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#ebebeb), to(#f5f5f5));
342
+ background-image: linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%);
343
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);
344
+ background-repeat: repeat-x;
345
+ }
346
+ .progress-bar {
347
+ background-image: -webkit-linear-gradient(top, #337ab7 0%, #286090 100%);
348
+ background-image: -o-linear-gradient(top, #337ab7 0%, #286090 100%);
349
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#286090));
350
+ background-image: linear-gradient(to bottom, #337ab7 0%, #286090 100%);
351
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0);
352
+ background-repeat: repeat-x;
353
+ }
354
+ .progress-bar-success {
355
+ background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%);
356
+ background-image: -o-linear-gradient(top, #5cb85c 0%, #449d44 100%);
357
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#449d44));
358
+ background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%);
359
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);
360
+ background-repeat: repeat-x;
361
+ }
362
+ .progress-bar-info {
363
+ background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);
364
+ background-image: -o-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);
365
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#31b0d5));
366
+ background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%);
367
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);
368
+ background-repeat: repeat-x;
369
+ }
370
+ .progress-bar-warning {
371
+ background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);
372
+ background-image: -o-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);
373
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#ec971f));
374
+ background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%);
375
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);
376
+ background-repeat: repeat-x;
377
+ }
378
+ .progress-bar-danger {
379
+ background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%);
380
+ background-image: -o-linear-gradient(top, #d9534f 0%, #c9302c 100%);
381
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c9302c));
382
+ background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%);
383
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);
384
+ background-repeat: repeat-x;
385
+ }
386
+ .progress-bar-striped {
387
+ background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
388
+ background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
389
+ background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
390
+ }
391
+ .list-group {
392
+ border-radius: 4px;
393
+ -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
394
+ box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
395
+ }
396
+ .list-group-item.active,
397
+ .list-group-item.active:hover,
398
+ .list-group-item.active:focus {
399
+ text-shadow: 0 -1px 0 #286090;
400
+ background-image: -webkit-linear-gradient(top, #337ab7 0%, #2b669a 100%);
401
+ background-image: -o-linear-gradient(top, #337ab7 0%, #2b669a 100%);
402
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2b669a));
403
+ background-image: linear-gradient(to bottom, #337ab7 0%, #2b669a 100%);
404
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0);
405
+ background-repeat: repeat-x;
406
+ border-color: #2b669a;
407
+ }
408
+ .list-group-item.active .badge,
409
+ .list-group-item.active:hover .badge,
410
+ .list-group-item.active:focus .badge {
411
+ text-shadow: none;
412
+ }
413
+ .panel {
414
+ -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .05);
415
+ box-shadow: 0 1px 2px rgba(0, 0, 0, .05);
416
+ }
417
+ .panel-default > .panel-heading {
418
+ background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
419
+ background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
420
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8));
421
+ background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);
422
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);
423
+ background-repeat: repeat-x;
424
+ }
425
+ .panel-primary > .panel-heading {
426
+ background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
427
+ background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
428
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));
429
+ background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);
430
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);
431
+ background-repeat: repeat-x;
432
+ }
433
+ .panel-success > .panel-heading {
434
+ background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);
435
+ background-image: -o-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);
436
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#d0e9c6));
437
+ background-image: linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%);
438
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);
439
+ background-repeat: repeat-x;
440
+ }
441
+ .panel-info > .panel-heading {
442
+ background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);
443
+ background-image: -o-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);
444
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#c4e3f3));
445
+ background-image: linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%);
446
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);
447
+ background-repeat: repeat-x;
448
+ }
449
+ .panel-warning > .panel-heading {
450
+ background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);
451
+ background-image: -o-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);
452
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#faf2cc));
453
+ background-image: linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%);
454
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);
455
+ background-repeat: repeat-x;
456
+ }
457
+ .panel-danger > .panel-heading {
458
+ background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%);
459
+ background-image: -o-linear-gradient(top, #f2dede 0%, #ebcccc 100%);
460
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#ebcccc));
461
+ background-image: linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%);
462
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);
463
+ background-repeat: repeat-x;
464
+ }
465
+ .well {
466
+ background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);
467
+ background-image: -o-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);
468
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#e8e8e8), to(#f5f5f5));
469
+ background-image: linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%);
470
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);
471
+ background-repeat: repeat-x;
472
+ border-color: #dcdcdc;
473
+ -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1);
474
+ box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1);
475
+ }
476
+ /*# sourceMappingURL=bootstrap-theme.css.map */