summaryrefslogtreecommitdiff
path: root/public/javascripts/related_assets.js
diff options
context:
space:
mode:
Diffstat (limited to 'public/javascripts/related_assets.js')
-rw-r--r--public/javascripts/related_assets.js80
1 files changed, 80 insertions, 0 deletions
diff --git a/public/javascripts/related_assets.js b/public/javascripts/related_assets.js
new file mode 100644
index 0000000..2955cbf
--- /dev/null
+++ b/public/javascripts/related_assets.js
@@ -0,0 +1,80 @@
1related_assets = {
2 initialize: function() {
3 var container = $("#related_assets");
4 var searchUrl = container.data("search-url");
5 var createUrl = container.data("create-url");
6 var list = $("#related_asset_list");
7
8 initSearchPicker({
9 inputSelector: "#related_asset_search_term",
10 resultsSelector: "#related_asset_search_results",
11 url: searchUrl,
12 loadOnFocus: true,
13 renderResults: function(data, results) {
14 var found = false;
15 data.forEach(function(asset) {
16 var item = $(
17 "<a href='#' class='related_asset_result'>" +
18 "<img src='" + asset.thumb_url + "' alt=''>" +
19 "<span>" + asset.name + "</span>" +
20 "</a>"
21 );
22 item.bind("click", function() {
23 related_assets.attach(asset.id, createUrl, list);
24 return false;
25 });
26 results.append(item);
27 found = true;
28 });
29 return found;
30 }
31 });
32
33 $(document).on("click", function(e) {
34 if (!$(e.target).closest("#related_assets").length) {
35 $("#related_asset_search_results").slideUp().empty();
36 }
37 });
38
39 list.sortable({
40 handle: ".related_asset_handle",
41 update: function(event, ui) {
42 var newPosition = ui.item.index() + 1; // acts_as_list is 1-based; jQuery UI's index() is 0-based
43 $.ajax({
44 type: "PATCH",
45 url: ui.item.data("url"),
46 data: "position=" + newPosition
47 });
48 }
49 });
50
51 list.on("click", ".related_asset_remove", function() {
52 var item = $(this).closest("li");
53 $.ajax({
54 type: "DELETE",
55 url: item.data("url"),
56 success: function() {
57 item.remove();
58 }
59 });
60 });
61 },
62
63 attach: function(assetId, createUrl, list) {
64 $.ajax({
65 type: "POST",
66 url: createUrl,
67 data: "asset_id=" + assetId,
68 dataType: "json",
69 success: function(related) {
70 var item = $($("#related_asset_template").html().trim());
71 item.attr("data-url", related.url);
72 item.find("img").attr("src", related.thumb_url);
73 list.append(item);
74 list.sortable("refresh");
75 $("#related_asset_search_term").val("");
76 $("#related_asset_search_results").slideUp().empty();
77 }
78 });
79 }
80};