@progress/telerik-jquery-report-viewer
Version:
Progress® Telerik® Report Viewer for jQuery
217 lines (212 loc) • 7 kB
JavaScript
Object.defineProperty(exports, '__esModule', { value: true });
var utils = require('./utils.js');
var stringResources = require('./stringResources.js');
function SideMenu(dom, rootOptions, otherOptions) {
var options = $.extend({}, rootOptions, otherOptions);
var menu = $(dom).data("kendoMenu");
var enableAccessibility = options.enableAccessibility;
var DEFAULT_TABINDEX = 3;
var panelBar;
var sideMenuVisible = false;
var controller = options.controller;
if (!controller) {
throw "No controller (telerikReporting.ReportViewerController) has been specified.";
}
if (!menu) {
init(dom);
}
function init(root) {
var $root = $(root);
try {
panelBar = $root.children("ul").kendoPanelBar().data("kendoPanelBar");
} catch (e) {
console.error("Instantiation of Kendo PanelBar as side menu threw an exception", e);
throw e;
}
panelBar.bind("expand", onSubmenuOpen);
panelBar.element.off("keydown", onPanelKeyDown);
panelBar.element.on("keydown", onPanelKeyDown);
setTabIndexes($root);
enableCloseOnClick($root);
$root.click(function(e) {
if (e.target == root) {
controller.setSideMenuVisible({ visible: !sideMenuVisible });
}
});
replaceStringResources();
}
controller.setSideMenuVisible(function(event, args) {
setSideMenuVisibility();
if (enableAccessibility) {
panelBar.element.focus();
}
sideMenuVisible = args.visible;
if (!sideMenuVisible) {
panelBar.collapse($("#trv-side-menu-export-command"));
}
}).getSideMenuVisible(function(event, args) {
args.visible = sideMenuVisible;
});
function setSideMenuVisibility() {
var $root = panelBar.element.parent();
var hidden = $root.position().left < 0 || !$root.is(":visible");
if (hidden) {
$root.show();
} else {
window.setTimeout(function() {
$root.hide();
}, 500);
}
}
function onSubmenuOpen(e) {
var $item = $(e.item);
panelBar.unbind("expand", onSubmenuOpen);
panelBar.append({ text: stringResources.stringResources.loadingFormats, spriteCssClass: "k-icon k-loading" }, $item);
options.controller.getDocumentFormats().then(fillFormats).then(function() {
panelBar.expand($item);
}).then(function() {
panelBar.bind("expand", onSubmenuOpen);
});
}
function fillFormats(formats) {
Array.from($(dom).find("ul[data-command-list=export-format-list]")).forEach((list) => {
var $list = $(list);
var $parent = $list.parents("li");
var tabIndex = $parent.attr("tabindex");
if (!tabIndex) {
tabIndex = DEFAULT_TABINDEX;
}
$list.empty();
Array.from(formats).forEach((format) => {
var ariaLabel = enableAccessibility ? utils.stringFormat('aria-label="{localizedName}" ', format) : " ";
var li = "<li " + ariaLabel + utils.stringFormat('tabindex="' + tabIndex + '"><a tabindex="-1" href="#" data-command="telerik_ReportViewer_export" data-command-parameter="{name}"><span>{localizedName}</span></a></li>', format);
panelBar.append(li, $parent);
});
setListItemsTabIndex($parent.find("li"), tabIndex);
enableCloseOnClick($parent);
});
}
function enableCloseOnClick(root) {
Array.from(root.find("li")).forEach((listItem) => {
var isLeaf = $(listItem).children("ul").length === 0;
if (isLeaf) {
$(listItem).children("a").on("click", (event) => {
controller.setSideMenuVisible({ visible: !sideMenuVisible });
});
}
});
}
function setTabIndexes(root) {
if (!root) {
return;
}
var $list = root.children("ul");
var parentTabIndex = root.attr("tabindex");
var listIndex = parentTabIndex ? parentTabIndex : DEFAULT_TABINDEX;
setListItemsTabIndex($list, listIndex);
}
function setListItemsTabIndex(list, tabIndex) {
list.attr("tabindex", tabIndex);
var items = list.find("li");
Array.from(items).forEach((item) => {
var $item = $(item);
$item.attr("tabindex", tabIndex);
var anchor = $item.children("a");
if (anchor.length > 0) {
var $anchor = $(anchor);
$anchor.attr("tabindex", -1);
}
$item.on("focus", (event) => {
var anchor2 = $item.children("a");
if (anchor2.length > 0) {
anchor2.addClass("k-focus");
}
});
$item.on("blur", (event) => {
var anchor2 = $item.children("a");
if (anchor2.length > 0) {
anchor2.removeClass("k-focus");
}
});
$item.off("keydown", onItemKeyDown);
$item.on("keydown", onItemKeyDown);
});
}
function onPanelKeyDown(e) {
if (e.which == kendo.keys.ENTER) {
var $item;
var isSelectedFocusedItem = false;
var focusedItem = document.activeElement;
if (focusedItem && focusedItem.localName == "li") {
var items = panelBar.element.find("li.k-item");
for (var i = 0; i < items.length; i++) {
var listItem = items[i];
if (focusedItem === listItem) {
$item = $(listItem);
isSelectedFocusedItem = true;
break;
}
}
} else {
$item = panelBar.select();
}
if (!$item || !$item.length > 0) {
return;
}
handleItemSelect($item, isSelectedFocusedItem);
}
}
function onItemKeyDown(e) {
if (e.which == kendo.keys.ENTER) {
handleItemSelect($(e.target), false);
}
}
function handleItemSelect(item, handleExpandCollapse) {
if (!item.length > 0) {
return;
}
var isLeaf = item.children("ul").length === 0;
if (!isLeaf) {
if (handleExpandCollapse) {
if (item.hasClass("k-active")) {
panelBar.collapse(item);
} else {
panelBar.expand(item);
}
}
} else {
var $anchor = item.find("a");
if ($anchor.length > 0) {
$anchor[0].click();
}
}
}
function replaceStringResources() {
var menuAreas = findMenuArea();
if (!menuAreas) {
return;
}
Array.from(menuAreas).forEach((menu2) => {
var $menu = $(menu2);
var menuItems = $menu.children("li.k-panelbar-header");
$menu.attr("aria-label", stringResources.stringResources[$menu.attr("aria-label")]);
Array.from(menuItems).forEach((menuItem) => {
var $menuItem = $(menuItem);
var $a = $menuItem.find("a");
$menuItem.attr("aria-label", stringResources.stringResources[$menuItem.attr("aria-label")]);
if ($a) {
var $span = $a.find("span:not(.k-icon)");
$a.attr("title", stringResources.stringResources[$a.attr("title")]);
if ($span) {
$span.text(stringResources.stringResources[$span.text()]);
}
}
});
});
}
function findMenuArea() {
return $("div[data-role=telerik_ReportViewer_SideMenu] > ul");
}
}
exports.SideMenu = SideMenu;
;