_form.html.erb 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. <%= bootstrap_form_for(@conversation) do |f| %>
  2. <%= render 'shared/error_messages', object: f.object %>
  3. <%= f.text_field :name, label: "Topic" %>
  4. <%= f.label :participants %>
  5. <div class="chips form-control">
  6. <div class="chip-container">
  7. </div>
  8. <input class="search" type="text" />
  9. <ul class="results">
  10. </ul>
  11. </div>
  12. <%= f.fields_for :messages do |m| %>
  13. <%= m.text_area :content %>
  14. <% end %>
  15. <%= f.submit "Submit", class: "btn btn-primary" %>
  16. <% end %>
  17. <script>
  18. function getArray() {
  19. var elements = $(".chip-container").find("input");
  20. var result = [];
  21. for (var i = 0; i < elements.length; i++) {
  22. result.push(parseInt(elements[i].value));
  23. }
  24. return result;
  25. }
  26. function addChip(user) {
  27. $(".chip-container").append("<div id='" + user.id + "'>" + user.name + "</div>");
  28. $("#" + user.id).append("<input type='hidden' name='conversation[user_ids][]' value='" + user.id + "' />");
  29. $(".chip-container div").click(function() {
  30. $(this).remove();
  31. });
  32. $(".search").val("");
  33. $(".search").keyup();
  34. }
  35. var lastVal;
  36. $(document).ready(function() {
  37. $.get("/users.json", function(users) {
  38. $(".chips").click(function() {
  39. $(".search").focus();
  40. });
  41. $(".search").keydown(function(e) {
  42. if (e.which === 13) {
  43. e.preventDefault();
  44. }
  45. lastVal = $(this).val();
  46. });
  47. $(".search").keyup(function(e) {
  48. $(".results").empty();
  49. var val = $(this).val();
  50. var filtered = users.filter(function(user) {
  51. return user.name.toLowerCase().includes(val.toLowerCase())
  52. && getArray().indexOf(user.id) === -1;
  53. });
  54. if (e.which === 8) { // Backspace
  55. if (!lastVal) {
  56. $(".chip-container").children().last().remove();
  57. }
  58. }
  59. if (val.length < 2) {
  60. $(".results").hide();
  61. } else if (e.which === 13) { // Return
  62. if (filtered.length > 0) {
  63. addChip(filtered[0]);
  64. }
  65. } else {
  66. $(".results").show();
  67. filtered.forEach(function(user) {
  68. $(".results").append("<li user-id='" + user.id + "'>" + user.name + "</li>");
  69. });
  70. $(".results li").click(function() {
  71. var id = $(this).attr("user-id");
  72. var user = users.find(function(user) {
  73. return user.id === parseInt(id);
  74. });
  75. addChip(user);
  76. });
  77. }
  78. });
  79. });
  80. });
  81. </script>