_form.html.erb 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. <% if @query.errors.any? %>
  2. <div class="alert alert-danger"><%= @query.errors.full_messages.first %></div>
  3. <% end %>
  4. <%= form_for @query, html: {class: "the_form", autocomplete: "off"} do |f| %>
  5. <div class="row">
  6. <div class="col-xs-8">
  7. <div class= "form-group">
  8. <%= f.hidden_field :statement %>
  9. <div id="editor-container">
  10. <div id="editor"><%= @query.statement %></div>
  11. </div>
  12. </div>
  13. <div class="form-group text-right">
  14. <div class="pull-left" style="margin-top: 6px;">
  15. <%= link_to "Back", :back %>
  16. <span class="text-muted" style="margin-left: 20px;"> Use {start_time} and {end_time} for time ranges</span>
  17. </div>
  18. <%= select_tag :table_names, options_for_select([["Preview table", nil]] + tables.keys), style: "margin-right: 20px; width: 240px;" %>
  19. <%= link_to "Run", "#", class: "btn btn-info", id: "run", style: "vertical-align: top;" %>
  20. </div>
  21. </div>
  22. <div class="col-xs-4">
  23. <div class="form-group">
  24. <%= f.text_field :name, placeholder: "Name", class: "form-control" %>
  25. </div>
  26. <div class="form-group">
  27. <%= f.text_area :description, placeholder: "Optional description", style: "height: 70px;", class: "form-control" %>
  28. </div>
  29. <div class="text-right">
  30. <% if @query.persisted? %>
  31. <%= link_to "Delete", query_path(@query), method: :delete, "data-confirm" => "Are you sure?", class: "btn btn-danger" %>
  32. <% end %>
  33. <%= f.submit "Save", class: "btn btn-success" %>
  34. </div>
  35. </div>
  36. </div>
  37. <% end %>
  38. <div id="results"></div>
  39. <script>
  40. var editor = ace.edit("editor");
  41. editor.setTheme("ace/theme/twilight");
  42. editor.getSession().setMode("ace/mode/sql");
  43. editor.setOptions({
  44. enableBasicAutocompletion: false,
  45. enableSnippets: false,
  46. enableLiveAutocompletion: false,
  47. highlightActiveLine: false,
  48. fontSize: 12
  49. });
  50. editor.renderer.setShowGutter(false);
  51. editor.renderer.setPrintMarginColumn(false);
  52. editor.renderer.setPadding(10);
  53. editor.getSession().setUseWrapMode(true);
  54. $("#editor").show();
  55. $("#run").click( function (e) {
  56. e.preventDefault();
  57. $("#results").html('<p class="text-muted">Loading...</p>');
  58. $.post("<%= run_queries_path %>", {statement: editor.getValue()}, function (data) {
  59. $("#results").html(data);
  60. });
  61. });
  62. if ($("#query_statement").val() != "") {
  63. $("#run").click();
  64. }
  65. $("#table_names").selectize({
  66. }).change( function () {
  67. var val = $(this).val();
  68. if (val.length > 0) {
  69. editor.setValue("SELECT * FROM " + val + " LIMIT 10");
  70. $("#run").click();
  71. }
  72. });
  73. $("form.the_form").on("submit", function() {
  74. $("#query_statement").val(editor.getValue());
  75. return true;
  76. });
  77. </script>