show.html.erb 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  1. <% blazer_title @dashboard.name %>
  2. <script>
  3. function submitIfCompleted($form) {
  4. var completed = true;
  5. $form.find("input[name], select").each( function () {
  6. if ($(this).val() == "") {
  7. completed = false;
  8. }
  9. });
  10. if (completed) {
  11. $form.submit();
  12. }
  13. }
  14. </script>
  15. <div style="position: fixed; top: 0; left: 0; right: 0; background-color: whitesmoke; height: 60px; z-index: 1001;">
  16. <div class="container">
  17. <div class="row" style="padding-top: 13px;">
  18. <div class="col-sm-9">
  19. <%= render partial: "blazer/nav" %>
  20. <h3 style="margin: 0; line-height: 34px; display: inline-block;">
  21. <%= @dashboard.name %>
  22. </h3>
  23. </div>
  24. <div class="col-sm-3 text-right">
  25. <%= link_to "Edit", edit_dashboard_path(@dashboard, variable_params), class: "btn btn-info" %>
  26. </div>
  27. </div>
  28. </div>
  29. </div>
  30. <div style="margin-bottom: 60px;"></div>
  31. <% if @bind_vars.any? %>
  32. <form id="bind" method="get" action="<%= url_for(params) %>" class="form-inline" style="margin-bottom: 10px;">
  33. <% date_vars = ["start_time", "end_time"] %>
  34. <% if (date_vars - @bind_vars).empty? %>
  35. <% @bind_vars = @bind_vars - date_vars %>
  36. <% else %>
  37. <% date_vars = nil %>
  38. <% end %>
  39. <% @bind_vars.each_with_index do |var, i| %>
  40. <%= label_tag var, var %>
  41. <% if (data = @smart_vars[var]) %>
  42. <%= select_tag var, options_for_select([[nil, nil]] + data, selected: params[var]), style: "margin-right: 20px; width: 200px; display: none;" %>
  43. <script>
  44. $("#<%= var %>").selectize({
  45. create: true
  46. });
  47. </script>
  48. <% else %>
  49. <%= text_field_tag var, params[var], style: "width: 120px; margin-right: 20px;", autofocus: i == 0 && !var.end_with?("_at") && !params[var], class: "form-control" %>
  50. <% if var.end_with?("_at") %>
  51. <script>
  52. $("#<%= var %>").daterangepicker({singleDatePicker: true, locale: {format: "YYYY-MM-DD"}});
  53. </script>
  54. <% end %>
  55. <% end %>
  56. <% end %>
  57. <% if date_vars %>
  58. <% date_vars.each do |var| %>
  59. <%= hidden_field_tag var, params[var] %>
  60. <% end %>
  61. <%= label_tag nil, date_vars.join(" & ") %>
  62. <div class="selectize-control single" style="width: 300px;">
  63. <div id="reportrange" class="selectize-input" style="display: inline-block;">
  64. <span>Select a time range</span>
  65. </div>
  66. </div>
  67. <script>
  68. var timeZone = "<%= Blazer.time_zone.tzinfo.name %>";
  69. var format = "YYYY-MM-DD";
  70. var now = moment.tz(timeZone);
  71. function dateStr(daysAgo) {
  72. return now.clone().subtract(daysAgo || 0, "days").format(format);
  73. }
  74. function toDate(time) {
  75. return moment.tz(time.format(format), timeZone);
  76. }
  77. function setTimeInputs(start, end) {
  78. $("#start_time").val(toDate(start).utc().format());
  79. $("#end_time").val(toDate(end).endOf("day").utc().format());
  80. }
  81. $('#reportrange').daterangepicker(
  82. {
  83. ranges: {
  84. "Today": [dateStr(), dateStr()],
  85. "Last 7 Days": [dateStr(6), dateStr()],
  86. "Last 30 Days": [dateStr(29), dateStr()]
  87. },
  88. locale: {
  89. format: format
  90. },
  91. startDate: dateStr(29),
  92. endDate: dateStr(),
  93. opens: "left"
  94. },
  95. function(start, end) {
  96. setTimeInputs(start, end);
  97. submitIfCompleted($("#start_time").closest("form"));
  98. }
  99. ).on('apply.daterangepicker', function(ev, picker) {
  100. setTimeInputs(picker.startDate, picker.endDate);
  101. $('#reportrange span').html(toDate(picker.startDate).format('MMMM D, YYYY') + ' - ' + toDate(picker.endDate).format('MMMM D, YYYY'));
  102. })
  103. if ($("#start_time").val().length > 0) {
  104. var picker = $("#reportrange").data('daterangepicker');
  105. picker.setStartDate(moment.tz($("#start_time").val(), timeZone));
  106. picker.setEndDate(moment.tz($("#end_time").val(), timeZone));
  107. $("#reportrange").trigger('apply.daterangepicker', picker)
  108. } else {
  109. var picker = $("#reportrange").data('daterangepicker');
  110. $("#reportrange").trigger('apply.daterangepicker', picker);
  111. submitIfCompleted($("#start_time").closest("form"));
  112. }
  113. </script>
  114. <% end %>
  115. </form>
  116. <% end %>
  117. <% @queries.each_with_index do |query, i| %>
  118. <div style="padding-top: 10px;">
  119. <h4 style="text-align: center;"><%= link_to query.friendly_name, query_path(query, variable_params), target: "_blank", style: "color: inherit;" %></h4>
  120. <div id="chart-<%= i %>" class="chart">
  121. <p class="text-muted">Loading...</p>
  122. </div>
  123. </div>
  124. <script>
  125. var request = $.ajax({
  126. url: "<%= run_queries_path %>",
  127. method: "POST",
  128. data: <%= blazer_json_escape({statement: query.statement, query_id: query.id, only_chart: true}.to_json).html_safe %>,
  129. dataType: "html"
  130. }).done(function(data) {
  131. $("#chart-<%= i %>").html(data);
  132. $("#chart-<%= i %> table").stupidtable();
  133. }).fail(function(jqXHR, textStatus, errorThrown) {
  134. var message = (typeof errorThrown === "string") ? errorThrown : errorThrown.message;
  135. $("#chart-<%= i %>").css("color", "red").html(message);
  136. });
  137. </script>
  138. <% end %>
  139. <script>
  140. $(".form-inline input, .form-inline select").change( function () {
  141. submitIfCompleted($(this).closest("form"));
  142. });
  143. </script>