Goal
Extend Asset Finder to show asset metadata in a tooltip in Touch UI.
Demo | Package Install
A similar extension for Classic UI is here
Solution
2) Create node /apps/asset-meta-data/clientlib of type cq:ClientLibraryFolder and add a String property categories with value cq.authoring.editor.hook.assetfinder
3) Create file (nt:file) /apps/asset-meta-data/clientlib/js.txt and add
metadata.js
4) Create file (nt:file) /apps/asset-meta-data/clientlib/metadata.js and add the following code
(function (document, $, assetFinder) {
// class assetfinder-content-container is defined in
// libs/wcm/core/content/editor/jcr:content/sidepanels/edit/items/assetsTab/items/contentPanel/items/assetfinder
var aContainer = assetFinder.$el.find('.assetfinder-content-container');
// id assetfinder-filter and class assetfilter.type are defined in
// libs/wcm/core/content/editor/jcr:content/sidepanels/edit/items/assetsTab/items/filterPanel/items/views/items/search/items/searchpanel
var $assetFinderFilter = $('#assetfinder-filter');
var $assetFinderType = $assetFinderFilter.find(".assetfilter.type");
var showMeta = { "dam:FileFormat": "File format", "dam:MIMEtype": "Mime type",
"dam:size": "Size in bytes", "jcr:lastModified": "Last Modified",
"tiff:ImageLength": "Length", "tiff:ImageWidth": "Width" };
var c$cardView = CUI.CardView.get(aContainer);
c$cardView.$element.on("change:insertitem", function (event) {
if (event.moreItems) {
return;
}
var type = $assetFinderType.find("select").find("option:selected").val();
if (type !== "Images") {
return;
}
var $cards = $(event.target).find(".card-asset");
$.each($cards, function (i, card) {
addToolTip(card);
});
});
var addToolTip = function (card) {
var $card = $(card), nodeValue = "";
var addHtml = function (key, value) {
return "<div style='display: block;'>" +
"<span style='font-family:adobe-clean; font-weight: bold'>" + key + "</span>: "
+ value +
"</div>";
};
$.ajax({
url: $card.data("path") + "/jcr:content/metadata.json",
dataType: "json"
}).done(function (data) {
nodeValue = addHtml("Name", $card.find("h4").text());
for (var x in data) {
if (!data.hasOwnProperty(x) || !showMeta.hasOwnProperty(x)) {
continue;
}
if (data[x]) {
nodeValue = nodeValue + addHtml(showMeta[x], data[x]);
}
}
nodeValue = nodeValue + "</div>";
$card.mouseenter(function () {
var tooltip = new CUI.Tooltip({
type: "info",
target: $(card),
content: nodeValue,
arrow: "bottom",
interactive: true
});
});
});
}
}(document, jQuery, Granite.author.ui.assetFinder));
5) Tooltip widget can be attached using this simple JS code
var tooltip = new CUI.Tooltip({
type: "info",
target: $(card),
content: nodeValue,
arrow: "bottom",
interactive: true
});

hey,
ReplyDeleteI've created reference components and in the content finder, I've customized it.(Reference : https://helpx.adobe.com/experience-manager/kb/CustomCFTab.html)
But, the same isn't working with Asset finder in TOUCH UI. One way, I found is /libs/cq/gui/components/authoring/clientlibs/assetfinder/js....Inside it, create a new folder and copy paste js from any of images, pages etc. Then, the new tab will get display. Then, what I did was change the servlet URL to my custom servlet URL and others param changes I did which was required. Then, using AJAX call, I printed the data on console and it's getting printing in successfully but I don't know the way how to render it on GUI so I can display reference components in Asset Finder tab like it's getting displayed in content finder.