misago-posting-participants.js 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. Misago.Participants = function($e) {
  2. this.$users = $e.find('.users-list');
  3. this.$input = $e.find('.user-input');
  4. this.$value = $e.find('input[type=hidden]');
  5. this.api_url = this.$input.data('api-url');
  6. this.csrf_token = $e.parents('form').find("input[name=csrfmiddlewaretoken]").val()
  7. var _this = this;
  8. this.add_user = function(user) {
  9. if (!this.$users.find('.user-' + user.username).length) {
  10. var $user = $('<li class="user-' + user.username + '" data-username="' + user.username + '">' + user.username + '</li>');
  11. var $cancel = $('<button type="button" class="btn btn-sm"><span class="fa fa-times"></span></button>')
  12. $cancel.click(function() {
  13. $cancel.parent().remove();
  14. _this.update_val();
  15. });
  16. var $avatar = $('<img src="' + user.avatar[Object.keys(user.avatar)[0]] + '" alt="">');
  17. $user.prepend($avatar);
  18. $user.append($cancel);
  19. this.$users.append($user);
  20. this.update_val();
  21. }
  22. }
  23. this.update_val = function() {
  24. var usernames = [];
  25. this.$users.find('li').each(function(index, el) {
  26. usernames.push($(el).data('username'));
  27. });
  28. this.$value.val(usernames.join(',', usernames));
  29. }
  30. this.clear = function() {
  31. this.$users.find('li').remove();
  32. this.$value.val("");
  33. }
  34. this.$input.typeahead({
  35. minLength: 2,
  36. hint: false,
  37. },
  38. {
  39. name: 'profiles',
  40. displayKey: 'username',
  41. source: function(query, cb) {
  42. var POST = {'username': query, 'csrfmiddlewaretoken': _this.csrf_token};
  43. return $.post(_this.api_url, POST, function (data) {
  44. return cb(data.profiles);
  45. });
  46. },
  47. templates: {
  48. suggestion: function(data) {
  49. return '<img src="' + data.avatar[Object.keys(data.avatar)[0]] + '" alt=""> ' + data.username;
  50. }
  51. }
  52. });
  53. this.$input.on('typeahead:selected', function(e, suggestion, dataset) {
  54. _this.$input.typeahead('val', '');
  55. _this.add_user(suggestion);
  56. });
  57. }