finery 3.0.1 → 3.0.3

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 (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" %>