aboutsummaryrefslogtreecommitdiffstats
path: root/server/sonar-web/src/main/js/apps/update-center/plugin.js
blob: 697979e4ed073c41f0a71873506f07cf55ed485e (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
70
define(function () {

  return Backbone.Model.extend({
    idAttribute: 'key',

    defaults: {
      _hidden: false,
      _system: false
    },

    _matchAttribute: function (attr, query) {
      var value = this.get(attr) || '';
      return value.search(new RegExp(query, 'i')) !== -1;
    },

    match: function (query) {
      return this._matchAttribute('name', query) ||
          this._matchAttribute('category', query) ||
          this._matchAttribute('description', query);
    },

    _action: function (options) {
      var that = this;
      var opts = _.extend({}, options, {
        type: 'POST',
        data: { key: this.id },
        beforeSend: function () {
          // disable global ajax notifications
        },
        success: function () {
          options.success(that);
        },
        error: function (jqXHR) {
          that.set({ _status: 'failed', _errors: jqXHR.responseJSON.errors });
        }
      });
      var xhr = Backbone.ajax(opts);
      this.trigger('request', this, xhr);
      return xhr;
    },

    install: function () {
      return this._action({
        url: baseUrl + '/api/plugins/install',
        success: function (model) {
          model.set({ _status: 'installing' });
        }
      });
    },

    update: function () {
      return this._action({
        url: baseUrl + '/api/plugins/update',
        success: function (model) {
          model.set({ _status: 'installing' });
        }
      });
    },

    uninstall: function () {
      return this._action({
        url: baseUrl + '/api/plugins/uninstall',
        success: function (model) {
          model.set({ _status: 'uninstalling' });
        }
      });
    }
  });

});