summaryrefslogtreecommitdiff
path: root/public/javascripts/related_assets.js
blob: 803332f24a7f418ea83a0c3ed4cb12b57b18f2d2 (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
related_assets = {
  initialize: function() {
    var container = $("#related_assets");
    var searchUrl = container.data("search-url");
    var createUrl = container.data("create-url");
    var list = $("#related_asset_list");

    related_assets.update_headline_badge(list);

    initSearchPicker({
      inputSelector: "#related_asset_search_term",
      resultsSelector: "#related_asset_search_results",
      url: searchUrl,
      loadOnFocus: true,
      renderResults: function(data, results) {
        var found = false;
        data.forEach(function(asset) {
          var item = $(
            "<a href='#' class='related_asset_result'>" +
              "<img src='" + asset.thumb_url + "' alt=''>" +
              "<span>" + asset.name + "</span>" +
            "</a>"
          );
          item.bind("click", function() {
            related_assets.attach(asset.id, createUrl, list);
            return false;
          });
          results.append(item);
          found = true;
        });
        return found;
      }
    });

    $(document).on("click", function(e) {
      if (!$(e.target).closest("#related_assets").length) {
        $("#related_asset_search_results").slideUp().empty();
      }
    });

    list.sortable({
      handle: ".related_asset_handle",
      update: function(event, ui) {
        var newPosition = ui.item.index() + 1; // acts_as_list is 1-based; jQuery UI's index() is 0-based
        $.ajax({
          type: "PATCH",
          url: ui.item.data("url"),
          data: "position=" + newPosition
        });
        related_assets.update_headline_badge(list);
      }
    });

    list.on("click", ".related_asset_remove", function() {
      var item = $(this).closest("li");
      $.ajax({
        type: "DELETE",
        url: item.data("url"),
        success: function() {
          item.remove();
          related_assets.update_headline_badge(list);
        }
      });
    });
  },

  update_headline_badge: function(list) {
    list.find(".related_asset_headline_badge").remove();
    var first = list.children("li").first();
    if (first.length) {
      $("<span>", {
        "class": "related_asset_headline_badge",
        "title": "Shown automatically as this page's headline image"
      }).text("Headline").insertBefore(first.find(".related_asset_remove"));
    }
  },

  attach: function(assetId, createUrl, list) {
    $.ajax({
      type: "POST",
      url: createUrl,
      data: "asset_id=" + assetId,
      dataType: "json",
      success: function(related) {
        var item = $($("#related_asset_template").html().trim());
        item.attr("data-url", related.url);
        item.attr("data-large-url", related.large_url);
        item.attr("data-original-url", related.original_url);
        item.attr("data-name", related.name);
        item.find("img").attr("src", related.thumb_url);
        list.append(item);
        list.sortable("refresh");
        related_assets.update_headline_badge(list);
        $("#related_asset_search_term").val("");
        $("#related_asset_search_results").slideUp().empty();
      }
    });
  }
};