UNPKG

@progress/telerik-jquery-report-viewer

Version:

Progress® Telerik® Report Viewer for jQuery

209 lines (204 loc) 6.5 kB
'use strict'; 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;