finery 3.0.1 → 3.0.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (42) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -2
  3. data/app/assets/javascripts/blazer/application.js +2 -2
  4. data/app/assets/javascripts/blazer/controllers/application.js.erb +2 -0
  5. data/app/assets/javascripts/blazer/controllers/index.js +2 -0
  6. data/app/assets/javascripts/blazer/controllers/more_controller.js +13 -0
  7. data/app/assets/javascripts/blazer/controllers/navbar_padding_controller.js +7 -0
  8. data/app/assets/stylesheets/blazer/application.css +18 -52
  9. data/app/controllers/blazer/base_controller.rb +1 -0
  10. data/app/controllers/blazer/queries_controller.rb +2 -1
  11. data/app/helpers/blazer/base_helper.rb +6 -0
  12. data/app/views/blazer/_navbar.html.erb +40 -0
  13. data/app/views/blazer/_variables.html.erb +16 -12
  14. data/app/views/blazer/checks/_form.html.erb +6 -6
  15. data/app/views/blazer/checks/index.html.erb +0 -19
  16. data/app/views/blazer/dashboards/_form.html.erb +7 -5
  17. data/app/views/blazer/dashboards/show.html.erb +7 -18
  18. data/app/views/blazer/queries/_form.html.erb +19 -13
  19. data/app/views/blazer/queries/home.html.erb +17 -30
  20. data/app/views/blazer/queries/run.html.erb +1 -1
  21. data/app/views/blazer/queries/show.html.erb +26 -31
  22. data/app/views/blazer/uploads/_form.html.erb +3 -3
  23. data/app/views/blazer/uploads/index.html.erb +0 -18
  24. data/app/views/layouts/blazer/application.html.erb +10 -11
  25. data/lib/blazer/adapters/clickhouse_adapter.rb +5 -2
  26. data/lib/blazer/engine.rb +0 -5
  27. data/lib/blazer/version.rb +1 -1
  28. data/lib/blazer.rb +11 -8
  29. metadata +6 -15
  30. data/app/assets/fonts/blazer/glyphicons-halflings-regular.eot +0 -0
  31. data/app/assets/fonts/blazer/glyphicons-halflings-regular.svg +0 -288
  32. data/app/assets/fonts/blazer/glyphicons-halflings-regular.ttf +0 -0
  33. data/app/assets/fonts/blazer/glyphicons-halflings-regular.woff +0 -0
  34. data/app/assets/fonts/blazer/glyphicons-halflings-regular.woff2 +0 -0
  35. data/app/assets/javascripts/blazer/bootstrap.js +0 -2580
  36. data/app/assets/javascripts/blazer/controllers/application.js +0 -2
  37. data/app/assets/javascripts/blazer/selectize.js +0 -3891
  38. data/app/assets/stylesheets/blazer/bootstrap-propshaft.css +0 -10
  39. data/app/assets/stylesheets/blazer/bootstrap-sprockets.css.erb +0 -10
  40. data/app/assets/stylesheets/blazer/bootstrap.css +0 -6828
  41. data/app/assets/stylesheets/blazer/selectize.css +0 -403
  42. data/app/views/blazer/_nav.html.erb +0 -18
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4a40d95bfaaec38b95bad08470391cd99a51a83fe31644fc72cf513b6ac0b69f
4
- data.tar.gz: e0e41fd7197e9f4a14b288f253bb865ce97cc85a4937b5f2e64112468fe1940b
3
+ metadata.gz: 581c9c47c4c0b79536e441a4d4471fe021dfb782988a397e4ce781436cabe9fb
4
+ data.tar.gz: f5cf561aaff9f8362b28a28217b01b5591ce73b90d0c1eb7cd54dd67d51c8590
5
5
  SHA512:
6
- metadata.gz: 6df58aa1566ca58dbb5f0fcfdae18ba56657a1fdba72a87a4e77e1415cef15852efb2522703939870906523fb099e28849d4788a6a8ef6eb1e9f6f90fe1f1645
7
- data.tar.gz: a4e647be9599ba0869f71be477f3829de5d6e26e266f879b9b5f37ddf740af7404a90801b06b68d427c18f5450a610371cbb16a6170c666d220902d35716073c
6
+ metadata.gz: 07b7c9c15a2d9a433c2d0b4d45faeba9d2d7ea5c64fcd06b7099f8b849e2aa0e385b026b9198051230efa8c5fe15c0f368a43d3d0fc0319f7df3c6ce2a756f00
7
+ data.tar.gz: 8a4f16b2080bbc21071068bd93995c08255a0aac0dd3a72ea58fb1f51e0935580c36ede132d0617b8ce6163420f84d1a898b61d05c265e1ddf71d0784b342873
data/README.md CHANGED
@@ -53,7 +53,7 @@ gem "finery"
53
53
  Run:
54
54
 
55
55
  ```sh
56
- rails generate finery:install
56
+ rails generate blazer:install
57
57
  rails db:migrate
58
58
  ```
59
59
 
@@ -763,7 +763,6 @@ data_sources:
763
763
  # optional settings
764
764
  ssl_verify: true # false by default
765
765
  ```
766
- >>>>>>> 41a6b49 (Added support for ClickHouse)
767
766
 
768
767
  ### Druid
769
768
 
@@ -5,7 +5,7 @@
5
5
  //= require ./stupidtable
6
6
  //= require ./stupidtable-custom-settings
7
7
  //= require ./jquery.stickytableheaders
8
- //= require ./selectize
8
+ //= require selectize.min
9
9
  //= require ./highlight.min
10
10
  //= require ./moment
11
11
  //= require ./moment-timezone-with-data
@@ -17,7 +17,7 @@
17
17
  //= require ./chartjs-plugin-annotation.min
18
18
  //= require ./ace
19
19
  //= require ./Sortable
20
- //= require ./bootstrap
20
+ //= require bootstrap.bundle.min
21
21
  //= require ./vue.global.prod
22
22
  //= require ./routes
23
23
  //= require ./queries
@@ -0,0 +1,2 @@
1
+ import { Application, Controller } from "<%= javascript_url "stimulus.min" %>"
2
+ window.Stimulus = Application.start()
@@ -7,5 +7,7 @@
7
7
  //= require ./code_controller
8
8
  //= require ./datepicker_controller
9
9
  //= require ./daterangepicker_controller
10
+ //= require ./more_controller
11
+ //= require ./navbar_padding_controller
10
12
  //= require ./selectize_controller
11
13
  //= require ./unsaved_controller
@@ -0,0 +1,13 @@
1
+ Stimulus.register("more", class extends Controller {
2
+ static targets = [ "field", "show" ]
3
+
4
+ connect() {
5
+ this.fieldTargets.forEach((e) => { e.style.display = "none" })
6
+ this.showTarget.classList.remove("d-none")
7
+ }
8
+
9
+ show(event) {
10
+ this.fieldTargets.forEach((e) => { e.style.display = "block" })
11
+ this.showTarget.classList.add("d-none")
12
+ }
13
+ })
@@ -0,0 +1,7 @@
1
+ Stimulus.register("navbar-padding", class extends Controller {
2
+ static targets = [ "navbar" ]
3
+
4
+ connect() {
5
+ this.element.style.paddingTop = (this.navbarTarget.clientHeight || 0) + "px"
6
+ }
7
+ })
@@ -1,20 +1,26 @@
1
1
  /*
2
- *= require ./bootstrap-sprockets
3
- *= require ./bootstrap
4
- *= require ./selectize
2
+ *= require bootstrap.min
3
+ *= require selectize.bootstrap5
5
4
  *= require ./github
6
5
  *= require ./daterangepicker
7
6
  *= require_self
8
7
  */
9
8
 
9
+ .hide {
10
+ display: none !important;
11
+ }
12
+
10
13
  pre {
11
14
  border: none;
12
15
  border-radius: 0;
13
16
  }
14
17
 
15
- body {
16
- padding-top: 15px;
17
- padding-bottom: 15px;
18
+ .text-pre-line {
19
+ white-space: pre-line;
20
+ }
21
+
22
+ body.with-navbar {
23
+ padding-top: 3.5rem;
18
24
  }
19
25
 
20
26
  table.results-table {
@@ -52,7 +58,11 @@ input.search:focus {
52
58
  outline: none;
53
59
  }
54
60
 
55
- .form-inline .selectize-control, .text-right .selectize-control {
61
+ .selectize-control {
62
+ min-width: 10em;
63
+ }
64
+
65
+ .text-right .selectize-control {
56
66
  display: inline-block;
57
67
  vertical-align: middle;
58
68
  margin-left: 5px;
@@ -157,26 +167,10 @@ input.search:focus {
157
167
  background-color: #fff;
158
168
  }
159
169
 
160
- .glyphicon-remove {
161
- cursor: pointer;
162
- color: #d9534f;
163
- display: none;
164
- float: right;
165
- margin-top: 3px;
166
- }
167
-
168
- .list-group li:hover .glyphicon-remove {
169
- display: inline;
170
- }
171
-
172
- .list-group {
170
+ #queries.list-group {
173
171
  cursor: move;
174
172
  }
175
173
 
176
- #header a.active {
177
- color: #999;
178
- }
179
-
180
174
  [v-cloak] {
181
175
  display: none;
182
176
  }
@@ -197,34 +191,6 @@ input.search:focus {
197
191
  color: red;
198
192
  }
199
193
 
200
- .small-form {
201
- margin-right: auto;
202
- margin-left: auto;
203
- max-width: 400px;
204
- }
205
-
206
- .alert {
207
- padding-top: 8px;
208
- padding-bottom: 8px;
209
- }
210
-
211
- h1, h2, h3, h4, p, hr, .table, .navbar, #header, .alert, .form-group {
212
- margin-top: 0;
213
- margin-bottom: 15px;
214
- }
215
-
216
- .double-margin, .chart-container {
217
- margin-bottom: 30px;
218
- }
219
-
220
- h1 {
221
- font-size: 24px;
222
- }
223
-
224
- h2 {
225
- font-size: 20px;
226
- }
227
-
228
194
  .schema-table {
229
195
  max-width: 500px;
230
196
  }
@@ -103,6 +103,7 @@ module Blazer
103
103
  end
104
104
 
105
105
  def variable_params(resource, var_params = nil)
106
+ return {} unless resource.present?
106
107
  permitted_keys = resource.variables
107
108
  var_params ||= request.query_parameters
108
109
  var_params.slice(*permitted_keys)
@@ -61,6 +61,7 @@ module Blazer
61
61
  def show
62
62
  @statement = @query.statement_object
63
63
  @success = process_vars(@statement)
64
+ @data_sources = [Blazer.data_sources[@query.data_source]]
64
65
 
65
66
  @smart_vars = {}
66
67
  @sql_errors = []
@@ -273,7 +274,7 @@ module Blazer
273
274
  raise Error, @error if @error && Rails.env.test?
274
275
 
275
276
  data = csv_data(@columns, @rows, @data_source)
276
- query_params = variable_params.select { |k| @query.variables.include?(k) }
277
+ query_params = variable_params(@query).select { |k| @query.variables.include?(k) }
277
278
  name = @query.try(:name).presence || "query"
278
279
  filename = "#{name}-#{query_params.to_query}".parameterize + ".csv"
279
280
  send_data data, type: "text/csv; charset=utf-8", disposition: "attachment", filename: filename
@@ -36,6 +36,12 @@ module Blazer
36
36
  k.nil? ? "null" : k.to_s
37
37
  end
38
38
 
39
+ def blazer_var_default?(key)
40
+ value = request.query_parameters[key]
41
+ return true if value.to_s == ""
42
+ return true if @data_sources.any? { |source| source.variable_defaults[key].to_s == value.to_s }
43
+ end
44
+
39
45
  def blazer_format_annotations(annotations)
40
46
  return [] unless annotations.is_a?(Array)
41
47
  sorted = annotations.sort_by { |annotation| annotation[:min_date] }
@@ -0,0 +1,40 @@
1
+ <nav class="navbar navbar-expand-md fixed-top bg-body-tertiary" data-navbar-padding-target="navbar">
2
+ <div class="container">
3
+ <div class="d-flex flex-nowrap mw-100">
4
+ <span class="navbar-brand d-none d-sm-inline">Finery</span>
5
+ <button class="navbar-toggler me-3" type="button" data-bs-toggle="collapse" data-bs-target="#navbarCollapse" aria-controls="navbarCollapse" aria-expanded="false" aria-label="Toggle navigation">
6
+ <span class="navbar-toggler-icon"></span>
7
+ </button>
8
+ <span class="navbar-brand d-sm-none text-truncate"><%= blazer_title || "Finery" %></span>
9
+ </div>
10
+ <div class="collapse navbar-collapse" id="navbarCollapse">
11
+ <ul class="navbar-nav me-auto mb-2 mb-md-0">
12
+ <li class="nav-item">
13
+ <%= link_to "Home", blazer.root_path, class: "nav-link" %>
14
+ </li>
15
+ <li class="nav-item">
16
+ <%= link_to "Checks", blazer.checks_path, class: "nav-link" %>
17
+ </li>
18
+ <% if Blazer.uploads? %>
19
+ <li class="nav-item">
20
+ <%= link_to "Uploads", blazer.uploads_path, class: "nav-link" %>
21
+ </li>
22
+ <% end %>
23
+ <li class="nav-item dropdown">
24
+ <a class="nav-link dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" aria-expanded="false">
25
+ New
26
+ </a>
27
+ <ul class="dropdown-menu">
28
+ <li><%= link_to "Query", blazer.new_query_path, class: "dropdown-item" %></li>
29
+ <li><%= link_to "Dashboard", blazer.new_dashboard_path, class: "dropdown-item" %></li>
30
+ <li><%= link_to "Check", blazer.new_check_path(query_id: @query&.id), class: "dropdown-item" %></li>
31
+ <% if Blazer.uploads? %>
32
+ <%= link_to "Upload", blazer.new_upload_path, class: "dropdown-item" %>
33
+ <% end %>
34
+ </ul>
35
+ </li>
36
+ </ul>
37
+ <%= yield(:nav) %>
38
+ </div>
39
+ </div>
40
+ </nav>
@@ -3,7 +3,7 @@
3
3
  <script>
4
4
  <%= blazer_js_var "timeZone", Blazer.time_zone.tzinfo.name %>
5
5
  </script>
6
- <form id="bind" method="get" action="<%= action %>" class="form-inline" style="margin-bottom: 15px;" data-controller="autosubmit" data-action="change->autosubmit#call">
6
+ <form id="bind" method="get" action="<%= action %>" class="form-inline row g-3" style="margin-bottom: 15px;" data-controller="autosubmit more" data-action="change->autosubmit#call">
7
7
  <% date_vars = ["start_time", "end_time"] %>
8
8
  <% if (date_vars - @bind_vars).empty? %>
9
9
  <% @bind_vars = @bind_vars - date_vars %>
@@ -12,19 +12,17 @@
12
12
  <% end %>
13
13
 
14
14
  <% @bind_vars.each_with_index do |var, i| %>
15
- <div class="form-group">
16
- <%= label_tag var, var %>
17
- <% if (data = @smart_vars[var]) %>
18
- <%= select_tag var, options_for_select([[nil, nil]] + data, selected: var_params[var]), data: { controller: "selectize" }, style: "margin-right: 20px; width: 200px; display: none;" %>
15
+ <div class="col-12 col-md-2" <% if blazer_var_default?(var) %>data-more-target="field"<% end %>>
16
+ <%= label_tag var, var, class: "form-label" %>
17
+ <% if @smart_vars.key? var %>
18
+ <%= select_tag var, options_for_select(@smart_vars[var], var_params[var]), include_blank: true, data: { controller: "selectize" }, class: "form-select" %>
19
19
  <% elsif var.end_with?("_at") || var == "start_time" || var == "end_time" %>
20
-
21
- <div class="selectize-control single" style="width: 200px;">
22
- <div id="<%= var %>-select" class="selectize-input" style="display: inline-block;" data-controller="datepicker">
20
+ <div class="selectize-control single">
21
+ <div id="<%= var %>-select" class="selectize-input" data-controller="datepicker">
23
22
  <%= hidden_field_tag var, var_params[var], data: { datepicker_target: "input" } %>
24
23
  <span data-datepicker-target="span">Select a date</span>
25
24
  </div>
26
25
  </div>
27
-
28
26
  <% else %>
29
27
  <%= text_field_tag var, var_params[var], autofocus: i == 0 && !var.end_with?("_at") && !var_params[var], class: "form-control" %>
30
28
  <% end %>
@@ -36,14 +34,20 @@
36
34
  <%= hidden_field_tag var, var_params[var] %>
37
35
  <% end %>
38
36
 
39
- <%= label_tag nil, date_vars.join(" & ") %>
40
- <div class="selectize-control single" style="width: 300px;">
37
+ <div class="selectize-control single col-12 col-md-4">
38
+ <%= label_tag nil, date_vars.join(" & "), class: "form-label" %>
41
39
  <div id="reportrange" class="selectize-input" style="display: inline-block;" data-controller="daterangepicker">
42
40
  <span>Select a time range</span>
43
41
  </div>
44
42
  </div>
45
43
  <% end %>
46
44
 
47
- <input type="submit" class="btn btn-success" value="Run" style="vertical-align: top;" />
45
+ <div class="col-12 col-md-2 d-flex align-items-end d-none" data-more-target="show">
46
+ <button type="button" class="btn btn-info" data-action="more#show:prevent">More filters</button>
47
+ </div>
48
+
49
+ <div class="col-12">
50
+ <input type="submit" class="btn btn-success col-12 col-md-1 offset-md-11" value="Run">
51
+ </div>
48
52
  </form>
49
53
  <% end %>
@@ -7,7 +7,7 @@
7
7
  <div class="alert alert-danger"><%= @check.errors.full_messages.first %></div>
8
8
  <% end %>
9
9
 
10
- <div class="form-group">
10
+ <div class="form-group mb-3">
11
11
  <%= f.label :query_id, "Query" %>
12
12
  <div class="hide">
13
13
  <%= f.select :query_id, [], {include_blank: true} %>
@@ -21,7 +21,7 @@
21
21
  </div>
22
22
 
23
23
  <% if @check.respond_to?(:check_type) %>
24
- <div class="form-group">
24
+ <div class="form-group mb-3">
25
25
  <%= f.label :check_type, "Alert if" %>
26
26
  <div class="hide">
27
27
  <% check_options = [["Any results (bad data)", "bad_data"], ["No results (missing data)", "missing_data"]] %>
@@ -33,7 +33,7 @@
33
33
  </script>
34
34
  </div>
35
35
  <% elsif @check.respond_to?(:invert) %>
36
- <div class="form-group">
36
+ <div class="form-group mb-3">
37
37
  <%= f.label :invert, "Fails if" %>
38
38
  <div class="hide">
39
39
  <%= f.select :invert, [["Any results (bad data)", false], ["No results (missing data)", true]] %>
@@ -45,7 +45,7 @@
45
45
  <% end %>
46
46
 
47
47
  <% if @check.respond_to?(:schedule) && Blazer.check_schedules %>
48
- <div class="form-group">
48
+ <div class="form-group mb-3">
49
49
  <%= f.label :schedule, "Run every" %>
50
50
  <div class="hide">
51
51
  <%= f.select :schedule, Blazer.check_schedules.map { |v| [v, v] } %>
@@ -56,13 +56,13 @@
56
56
  </div>
57
57
  <% end %>
58
58
 
59
- <div class="form-group">
59
+ <div class="form-group mb-3">
60
60
  <%= f.label :emails %>
61
61
  <%= f.text_field :emails, placeholder: "Optional, comma separated", class: "form-control" %>
62
62
  </div>
63
63
 
64
64
  <% if Blazer.slack? %>
65
- <div class="form-group">
65
+ <div class="form-group mb-3">
66
66
  <%= f.label :slack_channels %>
67
67
  <%= f.text_field :slack_channels, placeholder: "Optional, comma separated", class: "form-control" %>
68
68
  </div>
@@ -1,25 +1,6 @@
1
1
  <% blazer_title "Checks" %>
2
2
 
3
3
  <div id="header">
4
- <div class="pull-right" style="line-height: 34px;">
5
- <div class="btn-group">
6
- <%= link_to "New Check", new_check_path, class: "btn btn-info" %>
7
- <button type="button" class="btn btn-info dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
8
- <span class="caret"></span>
9
- <span class="sr-only">Toggle Dropdown</span>
10
- </button>
11
- <ul class="dropdown-menu">
12
- <li><%= link_to "Home", root_path %></li>
13
- <% if Blazer.uploads? %>
14
- <li><%= link_to "Uploads", uploads_path %></li>
15
- <% end %>
16
- <li role="separator" class="divider"></li>
17
- <li><%= link_to "New Query", new_query_path %></li>
18
- <li><%= link_to "New Dashboard", new_dashboard_path %></li>
19
- </ul>
20
- </div>
21
- </div>
22
-
23
4
  <input id="search" type="text" placeholder="Start typing a query or state" style="width: 300px; display: inline-block;" class="search form-control" />
24
5
  </div>
25
6
 
@@ -3,21 +3,23 @@
3
3
  <div class="alert alert-danger"><%= @dashboard.errors.full_messages.first %></div>
4
4
  <% end %>
5
5
 
6
- <div class="form-group">
6
+ <div class="form-group mb-3">
7
7
  <%= f.label :name %>
8
8
  <%= f.text_field :name, class: "form-control" %>
9
9
  </div>
10
- <div class="form-group" v-show="queries.length">
10
+ <div class="form-group mb-3" v-show="queries.length">
11
11
  <%= f.label :charts %>
12
12
  <ul id="queries" class="list-group">
13
- <li class="list-group-item" v-for="(query, index) in queries" :key="query.id" v-cloak>
14
- <span class="glyphicon glyphicon-remove" aria-hidden="true" v-on:click="remove(index)"></span>
13
+ <li class="list-group-item d-flex justify-content-between align-items-center" v-for="(query, index) in queries" :key="query.id" v-cloak>
15
14
  {{ query.name }}
15
+ <button class="btn btn-sm btn-danger" v-on:click="remove(index)">
16
+ remove
17
+ </button>
16
18
  <input type="hidden" name="query_ids[]" :value="query.id">
17
19
  </li>
18
20
  </ul>
19
21
  </div>
20
- <div class="form-group" v-cloak>
22
+ <div class="form-group mb-3" v-cloak>
21
23
  <%= f.label :query_id, "Add Chart" %>
22
24
  <%= select_tag :query_id, nil, {include_blank: true, placeholder: "Select chart"} %>
23
25
  </div>
@@ -1,22 +1,11 @@
1
1
  <% blazer_title @dashboard.name %>
2
-
3
- <div class="topbar">
4
- <div class="container">
5
- <div class="row" style="padding-top: 13px;">
6
- <div class="col-sm-9">
7
- <%= render partial: "blazer/nav" %>
8
- <h3 style="line-height: 34px; display: inline; margin-left: 5px;">
9
- <%= @dashboard.name %>
10
- </h3>
11
- </div>
12
- <div class="col-sm-3 text-right">
13
- <%= link_to "Edit", edit_dashboard_path(@dashboard, params: variable_params(@dashboard)), class: "btn btn-info" %>
14
- </div>
15
- </div>
16
- </div>
17
- </div>
18
-
19
- <div style="margin-bottom: 60px;"></div>
2
+ <% content_for :nav do %>
3
+ <ul class="navbar-nav justify-content-end flex-grow-1 pe-3">
4
+ <li class="nav-item">
5
+ <%= link_to "Edit", blazer.edit_dashboard_path(@dashboard, params: variable_params(@dashboard)), class: "nav-link" %>
6
+ </li>
7
+ </ul>
8
+ <% end %>
20
9
 
21
10
  <% if @data_sources.any? { |ds| ds.cache_mode != "off" } %>
22
11
  <p class="text-muted" style="float: right;">
@@ -7,38 +7,44 @@
7
7
  <div id="app" v-cloak>
8
8
  <%= form_for @query, url: (@query.persisted? ? query_path(@query, params: @variable_params) : queries_path(params: @variable_params)), html: {autocomplete: "off"}, data: { controller: "unsaved", action: "unsaved#clear input->unsaved#set" } do |f| %>
9
9
  <div class="row">
10
- <div id="statement-box" class="col-xs-8">
10
+ <div id="statement-box" class="col-8">
11
11
  <div class= "form-group">
12
12
  <%= f.hidden_field :statement %>
13
13
  <div id="editor-container">
14
14
  <div id="editor" :style="{ height: editorHeight }"><%= @query.statement %></div>
15
15
  </div>
16
16
  </div>
17
- <div class="form-group text-right" style="margin-bottom: 8px;">
18
- <div class="pull-left" style="margin-top: 8px;">
19
- <%= link_to "Back", :back %>
20
- <a :href="docsPath" target="_blank" style="margin-left: 40px;">Docs</a>
21
- <a :href="schemaPath" target="_blank" style="margin-left: 40px;">Schema</a>
17
+ <div class="form-group d-flex justify-content-between my-2">
18
+ <div>
19
+ <%= link_to "Back", :back, class: "me-2" %>
20
+ <a :href="docsPath" target="_blank" class="m-2">Docs</a>
21
+ <a :href="schemaPath" target="_blank" class="m-2">Schema</a>
22
22
  </div>
23
23
 
24
- <%= f.select :data_source, Blazer.data_sources.map { |_, ds| [ds.name, ds.id] }, {}, class: ("hide" if Blazer.data_sources.size <= 1), style: "width: 140px;" %>
25
- <div id="tables" style="display: inline-block; width: 250px; margin-right: 10px;">
26
- <select id="table_names" style="width: 240px;" placeholder="Preview table"></select>
24
+ <div class="row">
25
+ <div class="col">
26
+ <%= f.select :data_source, Blazer.data_sources.map { |_, ds| [ds.name, ds.id] }, {}, class: ("hide" if Blazer.data_sources.size <= 1) %>
27
+ </div>
28
+ <div class="col">
29
+ <select id="table_names" placeholder="Preview table"></select>
30
+ </div>
27
31
  </div>
32
+ </div>
33
+ <div class="form-group">
28
34
  <a v-on:click="run" v-if="!running" class="btn btn-info" style="vertical-align: top; width: 70px;">Run</a>
29
35
  <a v-on:click="cancel" v-if="running" class="btn btn-danger" style="vertical-align: top; width: 70px;">Cancel</a>
30
36
  </div>
31
37
  </div>
32
- <div class="col-xs-4">
33
- <div class="form-group">
38
+ <div class="col-4">
39
+ <div class="form-group mb-3">
34
40
  <%= f.label :name %>
35
41
  <%= f.text_field :name, class: "form-control" %>
36
42
  </div>
37
- <div class="form-group">
43
+ <div class="form-group mb-3">
38
44
  <%= f.label :description %>
39
45
  <%= f.text_area :description, placeholder: "Optional", style: "height: 80px;", class: "form-control" %>
40
46
  </div>
41
- <div class="form-group text-right">
47
+ <div class="form-group text-end mb-3">
42
48
  <%= f.submit "For Enter Press", class: "hide" %>
43
49
  <% if @query.persisted? %>
44
50
  <%= link_to "Delete", query_path(@query), method: :delete, "data-confirm" => "Are you sure?", class: "btn btn-danger" %>
@@ -1,35 +1,22 @@
1
1
  <div id="queries">
2
- <div id="header">
3
- <div class="pull-right" style="line-height: 34px;">
4
- <% if blazer_user %>
5
- <%= link_to "All", root_path, class: !params[:filter] ? "active" : nil, style: "margin-right: 40px;" %>
6
-
7
- <% if Blazer.audit %>
8
- <%= link_to "Viewed", root_path(filter: "viewed"), class: params[:filter] == "viewed" ? "active" : nil, style: "margin-right: 40px;" %>
9
- <% end %>
10
-
11
- <%= link_to "Mine", root_path(filter: "mine"), class: params[:filter] == "mine" ? "active" : nil, style: "margin-right: 40px;" %>
2
+ <ul class="nav nav-pills d-flex flex-column flex-sm-row mb-3">
3
+ <li class="text-start flex-fill">
4
+ <input type="text" v-model="searchTerm" placeholder="Start typing a query, dashboard, or person" autofocus class="search form-control flex-fill align-self-stretch" />
5
+ </li>
6
+ <% if blazer_user %>
7
+ <li class="nav-item">
8
+ <%= link_to "All", blazer.root_path, class: { "nav-link": true, active: !params[:filter] } %>
9
+ </li>
10
+ <% if Blazer.audit %>
11
+ <li class="nav-item">
12
+ <%= link_to "Viewed", blazer.root_path(filter: "viewed"), class: { "nav-link": true, active: params[:filter] == "viewed" } %>
13
+ </li>
12
14
  <% end %>
13
-
14
- <div class="btn-group">
15
- <%= link_to "New Query", new_query_path, class: "btn btn-info" %>
16
- <button type="button" class="btn btn-info dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
17
- <span class="caret"></span>
18
- <span class="sr-only">Toggle Dropdown</span>
19
- </button>
20
- <ul class="dropdown-menu">
21
- <li><%= link_to "Checks", checks_path %></li>
22
- <% if Blazer.uploads? %>
23
- <li><%= link_to "Uploads", uploads_path %></li>
24
- <% end %>
25
- <li role="separator" class="divider"></li>
26
- <li><%= link_to "New Dashboard", new_dashboard_path %></li>
27
- <li><%= link_to "New Check", new_check_path %></li>
28
- </ul>
29
- </div>
30
- </div>
31
- <input type="text" v-model="searchTerm" placeholder="Start typing a query, dashboard, or person" style="width: 300px; display: inline-block;" v-focus class="search form-control" />
32
- </div>
15
+ <li class="nav-item">
16
+ <%= link_to "Mine", blazer.root_path(filter: "mine"), class: { "nav-link": true, active: params[:filter] == "mine" } %>
17
+ </li>
18
+ <% end %>
19
+ </ul>
33
20
 
34
21
  <table class="table">
35
22
  <thead>
@@ -131,7 +131,7 @@
131
131
 
132
132
  <% unless @only_chart && !@no_chart %>
133
133
  <% header_width = 100 / @columns.size.to_f %>
134
- <div class="results-container">
134
+ <div class="results-container overflow-x-scroll">
135
135
  <% if @columns == ["QUERY PLAN"] %>
136
136
  <pre><code><%= @rows.map { |r| r[0] }.join("\n") %></code></pre>
137
137
  <% elsif @columns == ["PLAN"] && @data_source.adapter == "druid" %>