aboutsummaryrefslogtreecommitdiff
path: root/data/assets/js/admin/tabs/sites.js
blob: 1ed7b48c6f6ce65f937c1c37d453a925a79fd5f6 (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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
jQuery(function($) {
  "use strict";

  var TEMPLATES = new LuigiTemplate.Cache({
    site: [
      "<a ",
        "href='#' ",
        "class='list-group-item %{css|h}' ",
        "title='Edit site \"%{name|h}\".' ",
        "data-site_id='%{site_id|h}' ",
        "data-q='%{q|h}' ",
      ">",
        "%{name|h}",

        "<span class='%{badge_css} badge pull-right'>",
          "default",
        "</span>",
      "</a>",
    ],

    loading: [
      "<span class='list-group-item disabled'>",
        "<i class='fa fa-spinner fa-spin'></i>",
        " ",
        "Loading...",
      "</span>",
    ],

    error: [
      "<span class='list-group-item list-group-item-danger disabled'>",
        "<i class='fa fa-exclamation-triangle'></i>",
        " ",
        "Error: %{error|h}",
      "</span>",
    ],
  });

  function filter() {
    var qs = $('#sites-q').val().replace(/^\s+|\s+$/g, '').toLowerCase().split(/\s+/);

    if (qs.length > 0) {
      // hide all sites
      $('#sites .list-group-item').addClass('hidden');

      // show matching sites
      $($.grep($('#sites .list-group-item'), function(el) {
        var eq = $(el).data('q');

        return ($.grep(qs, function(q) {
          return eq.indexOf(q) !== -1;
        }).length == qs.length);
      })).removeClass('hidden');
    } else {
      // show all sites
      $('#sites .list-group-item').removeClass('hidden');
    }
  }

  function reload() {
    var btn = $('#sites-reload'),
        list = $('#sites');

    // show loading
    btn.toggleClass('disabled').find('.loading').toggleClass('hidden');
    list.html(TEMPLATES.run('loading'));

    send('site/get_sites').always(function() {
      btn.toggleClass('disabled').find('.loading').toggleClass('hidden');
      list.html('');
    }).fail(function(r) {
      var error = r.responseText;

      try {
        var data = $.parseJSON(r.responseText);
        if (data.error)
          error = data.error;
      } catch (e) {}

      list.html(TEMPLATES.run('error', {
        error: error
      }));
    }).done(function(r) {
      list.html($.map(r, function(row) {
        var is_default = !!+row.is_default;

        return TEMPLATES.run('site', $.extend({}, row, {
          q:   [row.site_id, row.slug, row.name, row.body].join('  ').toLowerCase(),
          badge_css: is_default ? '' : 'hidden',
          css: is_default ? 'list-group-item-warning' : '',
        }));
      }).join(''));

      // refresh filters
      filter();
    });

    // stop event
    return false;
  }

  $('#sites-q').on('search-update', function() {
    filter();
  });

  $('#sites').on('click', 'a.list-group-item', function() {
    var site_id = $(this).data('site_id');

    // update highlight
    $('#sites .active').removeClass('active');
    $(this).addClass('active');

    // show dialog
    $('#site-edit-dialog').data('site_id', site_id).modal('show');

    // stop event
    return false;
  });

  $('#sites-reload').click(reload);

  // load sites
  $('#settings-tab-sites').on('show.bs.tab', function() {
    reload();
  });
});