Goal
Asset Navigation is available only in Asset Details page otb. Here we add the same navigation in Annotate page (with keyboard arrow keys support)
Demo | Package Install | Github
Product
Extension
Solution
1) Login to CRXDE Lite, create folder (nt:folder) /apps/eaem-touchui-asset-navigator-in-annotate
2) Create UI node /apps/eaem-touchui-asset-navigator-in-annotate/ui/asset-navigator add the following code, for fetching navigator html
<?xml version="1.0" encoding="UTF-8"?>
<jcr:root xmlns:sling="http://sling.apache.org/jcr/sling/1.0" xmlns:jcr="http://www.jcp.org/jcr/1.0" xmlns:nt="http://www.jcp.org/jcr/nt/1.0"
jcr:primaryType="nt:unstructured"
sling:resourceType="/libs/dam/gui/coral/components/admin/assetdetails/assetnavigator"/>
3) Create clientlib (type cq:ClientLibraryFolder) /apps/eaem-touchui-asset-navigator-in-annotate/clientlib and set property categories of String[] type to dam.gui.annotation.coral and dependencies String[] to [lodash,dam.gui.coral.assetdetails.assetnavigator]
4) Create file ( type nt:file ) /apps/eaem-touchui-asset-navigator-in-annotate/clientlib/js.txt, add the following
asset-navigator.js
5) Create file (type nt:file) /apps/eaem-touchui-asset-navigator-in-annotate/clientlib/asset-navigator.js, add the following code
(function ($, $document) {
"use strict";
var _ = window._,
eaemNavigatorAdded = false,
TITLE_BAR = ".granite-title",
ANNOTATE_PAGE_URL = "/mnt/overlay/dam/gui/content/assets/annotate.html",
ASSET_DETAILS_PAGE_URL = "/assetdetails.html",
FOUNDATION_CONTENT_REL = ".foundation-content-path",
NAVIGATION_EVENT = "asset-detail-navigation",
NAVIGATOR_UI = "/apps/eaem-touchui-asset-navigator-in-annotate/ui/asset-navigator.html";
$document.on("foundation-contentloaded", addAssetNavigation);
function addAssetNavigation(){
if(!isAnnotatePage() || !!eaemNavigatorAdded){
return;
}
eaemNavigatorAdded = true;
$.ajax(NAVIGATOR_UI + getAssetPath()).done(addNavigationUI);
}
function addNavigationUI(html){
var $titleBar = $(TITLE_BAR);
html = html.substring(html.indexOf("<div"));
html = "<div class='assetdetails-title-container'>" + $titleBar.html() + html + "</div>";
$titleBar.html(html);
$document.trigger("foundation-contentloaded");
$(FOUNDATION_CONTENT_REL).off(NAVIGATION_EVENT).on(NAVIGATION_EVENT, navigateTo);
$document.on('keydown', handleHotKeyNavigation);
}
function handleHotKeyNavigation(event){
var $mainImage = $("#asset-mainimage");
if (event.keyCode == 37){
navigateTo( { asset : getPathInAssetDetailsPage($mainImage.attr("prev"))} )
}else if(event.keyCode == 39){
navigateTo( { asset : getPathInAssetDetailsPage($mainImage.attr("next"))} )
}
}
function getPathInAssetDetailsPage(path){
if(_.isEmpty(path)){
return;
}
return path.substring(path.indexOf(ASSET_DETAILS_PAGE_URL) + ASSET_DETAILS_PAGE_URL.length);
}
function navigateTo(data){
if (_.isEmpty(data.asset)) {
return;
}
window.location.href = Granite.HTTP.externalize(ANNOTATE_PAGE_URL + data.asset);
}
function isAnnotatePage() {
return (window.location.pathname.indexOf(ANNOTATE_PAGE_URL) >= 0);
}
function getAssetPath() {
var path = window.location.pathname;
return (path.substring(path.indexOf(ANNOTATE_PAGE_URL) + ANNOTATE_PAGE_URL.length));
}
})(jQuery, jQuery(document));


No comments:
Post a Comment