summaryrefslogtreecommitdiff
path: root/app/assets/javascripts/groups_select.js
blob: e5dfa30edab6cfc6e379c9f689a8e62a194279af (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
/* eslint-disable func-names, space-before-function-paren, no-var, wrap-iife, one-var, camelcase, one-var-declaration-per-line, quotes, object-shorthand, prefer-arrow-callback, comma-dangle, consistent-return, yoda, prefer-rest-params, prefer-spread, no-unused-vars, prefer-template, max-len */
/* global Api */

var slice = [].slice;

window.GroupsSelect = (function() {
  function GroupsSelect() {
    $('.ajax-groups-select').each((function(_this) {
      return function(i, select) {
        var all_available, skip_groups;
        all_available = $(select).data('all-available');
        skip_groups = $(select).data('skip-groups') || [];
        return $(select).select2({
          placeholder: "Search for a group",
          multiple: $(select).hasClass('multiselect'),
          minimumInputLength: 0,
          query: function(query) {
            var options = { all_available: all_available, skip_groups: skip_groups };
            return Api.groups(query.term, options, function(groups) {
              var data;
              data = {
                results: groups
              };
              return query.callback(data);
            });
          },
          initSelection: function(element, callback) {
            var id;
            id = $(element).val();
            if (id !== "") {
              return Api.group(id, callback);
            }
          },
          formatResult: function() {
            var args;
            args = 1 <= arguments.length ? slice.call(arguments, 0) : [];
            return _this.formatResult.apply(_this, args);
          },
          formatSelection: function() {
            var args;
            args = 1 <= arguments.length ? slice.call(arguments, 0) : [];
            return _this.formatSelection.apply(_this, args);
          },
          dropdownCssClass: "ajax-groups-dropdown",
          // we do not want to escape markup since we are displaying html in results
          escapeMarkup: function(m) {
            return m;
          }
        });
      };
    })(this));
  }

  GroupsSelect.prototype.formatResult = function(group) {
    var avatar;
    if (group.avatar_url) {
      avatar = group.avatar_url;
    } else {
      avatar = gon.default_avatar_url;
    }
    return "<div class='group-result'> <div class='group-name'>" + group.full_name + "</div> <div class='group-path'>" + group.full_path + "</div> </div>";
  };

  GroupsSelect.prototype.formatSelection = function(group) {
    return group.full_name;
  };

  return GroupsSelect;
})();