Thursday, August 23, 2018

AEM 62 Touch UI Add Zoom in Assets Card View

AEM 62 Touch UI Add Zoom in Assets Card View


Goal


Add Zoom functionality in Assets Card view, so the user doesnt need to go into Asset Detail - /assetdetails.html for zoom in/out the asset (needs dynamic media -Dsling.run.modes=dynamicmedia)

For Zooming card thumbnails check this post

Demo | Package Install | GitHub


Bug Fixes

Full screen doesnt work - Package Install


Zoom Quick Action



Asset Zoom



Solution


1) Login to CRXDE Lite, create folder (nt:folder) /apps/experience-aem-asset-zoom

2) Create clientlib (type cq:ClientLibraryFolder/apps/experience-aem-asset-zoom/clientlib and set a property categories of String type to dam.gui.actions.coraldependencies of type String[] with value underscore

3) Create file ( type nt:file ) /apps/experience-aem-asset-zoom/clientlib/js.txt, add the following

                         card-zoom.js

4) Create file ( type nt:file ) /apps/experience-aem-asset-zoom/clientlib/card-zoom.js, add the following code


(function ($, $document) {
var FOUNDATION_MODE_CHANGE = "foundation-mode-change",
DAM_ADMIN_CHILD_PAGES = ".cq-damadmin-admin-childpages",
META_TYPE = "data-foundation-collection-meta-type",
LAYOUT_CARD_VIEW = "card",
ASSET_DETAIL = "/libs/dam/gui/content/assetdetails/jcr:content/content/items/assetdetail.html";

$document.on(FOUNDATION_MODE_CHANGE, function(event){
_.defer(function(){
contentLoaded(event);
});
});

function contentLoaded(){
var $childPage = $(DAM_ADMIN_CHILD_PAGES),
foundationLayout = $childPage.data("foundation-layout");

if(_.isEmpty(foundationLayout)){
return;
}

var layoutId = foundationLayout.layoutId;

if(layoutId !== LAYOUT_CARD_VIEW){
return;
}

var $items = $("coral-masonry-item"), $item,
dialog = getZoomDialog();

$items.each(function(){
$item = $(this);

if($item.find("[" + META_TYPE + "]").attr(META_TYPE) !== "asset"){
return;
}

var $action = getZoomAction(dialog).appendTo($item);

$item.mouseenter(function(){
$action.show();
});

$item.mouseleave(function(){
$action.hide();
})
});
}

function getZoomDialog(){
var dialog = new Coral.Dialog().set({
closable: "on",
header: {
innerHTML: Zoom
},
content: {
innerHTML: getZoomDialogContent()
}
});

var uiAdjust = { "left" : "0%", "margin-left" : "0px", "max-width" : "100%" };

dialog.$.find(".coral-Dialog-wrapper").css(uiAdjust);

return dialog;
}

function getZoomDialogContent(){
var vpWidth = $(window).width() - 30,
vpHeight = $(window).height() - 110;

return "<iframe webkitallowfullscreen mozallowfullscreen allowfullscreen width="
+ vpWidth + "px height=" + vpHeight + "px scrolling=no frameBorder=0></iframe>";
}

function getZoomAction(dialog){
return $(getHtml()).hide().click(clickHandler);

function clickHandler(event){
event.stopPropagation();

var assetPath = $(this).closest(".foundation-collection-item").data("foundationCollectionItemId");

dialog.$.find("iframe").attr("src", ASSET_DETAIL + assetPath);

dialog.show();
}
}

function getHtml(){
return <button style="position: absolute;top: 35%;left: 35%;z-index: 10000;cursor: zoom-in;" +
class="coral-Button coral-Button--square coral-QuickActions-button"> +
<coral-icon icon="zoomIn"></coral-icon> +
</button>;
}
})(jQuery, jQuery(document));



visit link download