aboutsummaryrefslogtreecommitdiff
path: root/data/assets/js/admin/posts.js
blob: e5fe341e3a94988869e42d51c552d52bda7b59cc (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
126
jQuery(function($) {
  "use strict";

  var TEMPLATES = new LuigiTemplate.Cache({
    user: [
      "<a ",
        "href='#' ",
        "class='list-group-item %{css|h}' ",
        "title='Edit user \"%{user_name|h}\".' ",
        "data-row='%{row|json|h}' ",
        "data-q='%{q|h}' ",
      ">",
        "<i class='fa fa-fw fa-spinner fa-spin hidden loading'></i>",
        "<i class='fa fa-fw fa-user loading'></i>",
        " ",
        "%{user_name|h} (%{email|h})",

        "<span class='badge pull-right'>",
          "%{role_name|h}",
        "</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: %{responseText|h}",
      "</span>",
    ],
  });

  function update_slug(name, slug) {
    if (slug.prop('disabled')) {
      slug.val(
        name.val().toLowerCase()
        .replace(/[^a-z0-9_\.-]+/g, '-')
        .replace(/^-+|-+$/g, '')
      );
    }
  }

  $.each(['blog', 'page', 'project'], function(i, id) {
    var p = '#' + id + '-edit-';

    $(p + 'dialog').one('shown.bs.modal', function() {
      // lazy-init editor
      CKEDITOR.replace(id + '-edit-body');
    }).on('show.bs.modal', function() {
      // reset close confirmation
      $(this).data('close-dialog-confirmed', false);

      // TODO load post
      $(p + 'name').val('');
      $(p + 'slug').val('');
    }).on('shown.bs.modal', function() {
      $(p + 'name').focus();
    }).on('hide.bs.modal', function() {
      return (
        $(this).data('close-dialog-confirmed') ||
        confirm('Close without saving changes?')
      );
    }).find('button[data-dismiss="modal"]').click(function() {
      // override close confirmation
      // FIXME: should this only be on save?
      $(p + 'dialog').data('close-dialog-confirmed', true);
    });

    $(p + 'confirm').click(function() {
      if ($(this).hasClass('disabled'))
        return false;

      // TODO: see #user-add-confirm
      alert('TODO: create');

      // stop event
      return false;
    });
  });

  $('.post-name').keydown(function() {
    var name = $(this),
        slug = $(this).parents('.modal-body').find('.post-slug');

    setTimeout(function() {
      update_slug(name, slug);
    }, 10);
  });

  $('.post-slug-lock').click(function() {
    var modal_body = $(this).parents('.modal-body');

    // toggle locked state
    $(this).toggleClass('btn-default btn-primary')
      .find('.fa').toggleClass('fa-lock fa-unlock');
    var locked = $(this).hasClass('btn-default');

    // update slug disabled state
    var slug = modal_body.find('.post-slug');
    slug.prop('disabled', locked ? 'disabled' : null);

    if (locked) {
      // auto-generate slug
      update_slug(modal_body.find('.post-name'), slug);
    }

    // stop event
    return false;
  });

  $('.post-state').click(function() {
    $(this).parent().find('.btn-primary').toggleClass('btn-default btn-primary');
    $(this).toggleClass('btn-default btn-primary');

    // stop event
    return false;
  });
});