@progress/telerik-jquery-report-viewer
Version:
Progress® Telerik® Report Viewer for jQuery
209 lines (204 loc) • 6.5 kB
JavaScript
Object.defineProperty(exports, '__esModule', { value: true });
var utils = require('./utils.js');
var stringResources = require('./stringResources.js');
var defaultOptions = {};
function Accessibility(options) {
var controller;
var pageInitialized = false;
var areas;
var lastArea;
var keyMap = {
CONFIRM_KEY: 13,
// C
CONTENT_AREA_KEY: 67,
// D
DOCUMENT_MAP_AREA_KEY: 68,
// M
MENU_AREA_KEY: 77,
// P
PARAMETERS_AREA_KEY: 80
};
options = $.extend({}, defaultOptions, options);
controller = options.controller;
if (!controller) {
throw "No controller (telerikReporting.ReportViewerController) has been specified.";
}
controller.reportLoadComplete(function() {
setAccessibilityUI();
var content = findContentArea();
if (content.length > 0) {
content.focus();
}
}).pageReady(function(event, page) {
initPage(page);
pageInitialized = true;
}).error(function(e, message) {
focusOnErrorMessage();
window.setTimeout(setAccessibilityUI, 500);
});
controller.updateUI(function(e) {
if (pageInitialized) {
setPageSelector();
decorateMenuItems();
}
});
function setAccessibilityUI() {
if (!areas) {
initAreas();
$(document.body).off("keydown", processKeyDown);
$(document.body).on("keydown", processKeyDown);
}
}
function focusOnErrorMessage() {
var $errMsg = $("div.trv-pages-area div.trv-error-message");
if ($errMsg.length === 0) {
return;
}
$errMsg.attr("tabIndex", 0);
$errMsg.focus();
}
function initPage(page) {
if (!page) {
return;
}
setAccessibilityUI();
var area = areas[keyMap.CONTENT_AREA_KEY];
setContentAreaKeyDown(area);
}
function setPageSelector() {
var pagers = document.querySelectorAll(".trv-report-pager");
var pageNumber = this._controller.getCurrentPageNumber();
var pageCount = this._controller.getPageCount();
pagers.forEach((pager) => {
pager.setAttribute("aria-label", utils.stringFormat(stringResources.stringResources.ariaLabelPageNumberSelector, [pageNumber, pageCount]));
var pageInputs = pager.querySelectorAll("input[data-role=telerik_ReportViewer_PageNumberInput]");
pageInputs.forEach((input) => {
input.setAttribute("aria-label", stringResources.stringResources.ariaLabelPageNumberEditor);
});
});
}
function initAreas() {
areas = {};
areas[keyMap.DOCUMENT_MAP_AREA_KEY] = findDocumentMapArea();
areas[keyMap.MENU_AREA_KEY] = findMenuArea();
areas[keyMap.CONTENT_AREA_KEY] = findContentArea();
var parametersArea = findParametersArea();
if (parametersArea) {
areas[keyMap.PARAMETERS_AREA_KEY] = parametersArea;
setParameterEditorsKeyDown(parametersArea);
}
}
function findContentArea() {
return $("div[data-role=telerik_ReportViewer_PagesArea]");
}
function findDocumentMapArea() {
return $("div[data-role=telerik_ReportViewer_DocumentMapArea] div[data-role=treeview]");
}
function findMenuArea() {
return $("ul[data-role=telerik_ReportViewer_MainMenu]");
}
function findParametersArea() {
return $("div[data-role=telerik_ReportViewer_ParametersArea] div.trv-parameters-area-content");
}
function processKeyDown(event) {
if (!areas) {
return;
}
if (!(event.altKey && event.ctrlKey)) {
return;
}
var currentArea = areas[event.which];
if (!currentArea) {
return;
}
if (!IsAreaContainerVisible(currentArea.parent())) {
return;
}
var className = "k-focus";
if (lastArea) {
lastArea.removeClass(className);
}
currentArea.addClass(className);
currentArea.focus();
lastArea = currentArea;
event.preventDefault();
}
function setParameterEditorsKeyDown(parametersAreaContent) {
if (parametersAreaContent.length === 0) {
return;
}
var $paramsArea = parametersAreaContent.parent("div[data-role=telerik_ReportViewer_ParametersArea]");
if (!IsAreaContainerVisible($paramsArea)) {
return;
}
Array.from(parametersAreaContent.children()).forEach((child) => {
$(child).on("keydown", (event) => {
if (event.which == keyMap.CONFIRM_KEY) {
var paramsButton = $paramsArea.find("button.trv-parameters-area-preview-button");
paramsButton.focus();
event.preventDefault();
}
});
});
}
function IsAreaContainerVisible(container) {
return container && !(container.hasClass("k-collapsed") || container.hasClass("trv-hidden"));
}
function setContentAreaKeyDown(contentArea) {
if (!contentArea) {
return;
}
var actions = contentArea.find("div [data-reporting-action]");
if (!actions.length > 0) {
return;
}
Array.from(actions).forEach((action) => {
var $action = $(action);
$action.on("keydown", (event) => {
if (event.which == keyMap.CONFIRM_KEY) {
$action.trigger("click");
}
});
});
}
function decorateMenuItems() {
var menuAreas = areas[keyMap.MENU_AREA_KEY];
if (!menuAreas) {
return;
}
Array.from(menuAreas).forEach((menu) => {
var $menu = $(menu);
var menuItems = $menu.children("li.k-item");
Array.from(menuItems).forEach((menuItem) => {
var $menuItem = $(menuItem);
if (!$menuItem.hasClass("trv-report-pager")) {
var ariaLabel = $menuItem.attr("aria-label");
var expandableSr = utils.stringFormat(". {0}", [stringResources.stringResources.ariaLabelExpandable]);
var expandable = $menuItem.find("ul").length > 0 && ariaLabel.indexOf(expandableSr) < 0 ? expandableSr : "";
var selectedSr = utils.stringFormat(". {0}", [stringResources.stringResources.ariaLabelSelected]);
var selected = $menuItem.hasClass("k-selected") && ariaLabel.indexOf(selectedSr) < 0 ? selectedSr : "";
var label = ariaLabel + expandable + selected;
$menuItem.attr("aria-label", label);
if ($menuItem.hasClass("k-disabled")) {
$menuItem.attr("aria-disabled", "true");
} else {
$menuItem.removeAttr("aria-disabled");
}
}
});
});
}
function setKeyMap(keyMapValues) {
keyMap = keyMapValues;
areas = void 0;
}
function getKeyMap() {
return keyMap;
}
return {
getKeyMap,
setKeyMap
};
}
exports.Accessibility = Accessibility;
;