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 = $( "" + "" + "" + asset.name + "" + "" ); 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) { $("", { "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(); } }); } };