rails-data-explorer 1.0.0 → 1.0.1

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 (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 */