UNPKG

@progress/telerik-jquery-report-viewer

Version:

Progress® Telerik® Report Viewer for jQuery

204 lines (199 loc) 7.83 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var stringResources = require('./stringResources.js'); var pageCountLabel = require('./toolbar/page-count-label.js'); var pageNumberInput = require('./toolbar/page-number-input.js'); var constants = require('./constants.js'); function replaceStringResources($toolbar) { if (!$toolbar) { return; } const labels = $toolbar.find(".trv-replace-string"); if (labels && labels.length > 0) { Array.from(labels).forEach((element) => { const $element = $(element); const stringResource = stringResources.stringResources[$element.text()]; if ($element && stringResource) { $element.text(stringResource); } }); } } class Toolbar { // #region fields _options; /** @type {HTMLElement} */ _element; $element; _kendoToolbar; _neverOverflowToolBarButtons = ["goToPrevPage", "goToNextPage"]; // #endregion // #region constructor constructor(element, options, viewerOptions) { this._element = element; this._options = options; this.$element = $(this._element); if (this._kendoToolbar === void 0) { this.initKendoToolbar(); } this._options.controller.on("beginLoadReport", () => { const kendoExportDropDown = this.$element.find(`#${constants.ToolBarConstants.ExportDropdownId}`).data("kendoDropDownButton"); kendoExportDropDown?.enable(false); }).onAsync("reportLoadComplete", async () => { if (viewerOptions.renderingExtensions === void 0) { this._options.controller.getDocumentFormats().then((extensions) => { this.updateExportDropdownItems(extensions); }).catch((error) => { this._options.controller.trigger("error", { message: error }); }); } else { this.updateExportDropdownItems(viewerOptions.renderingExtensions); } }); } // #endregion // #region methods initKendoToolbar() { replaceStringResources(this.$element); const children = Array.from(this._element.children); const toolBarItems = []; children.forEach((child) => toolBarItems.push(this.createToolbarItem(child))); this.$element.empty(); this._kendoToolbar = this.$element.kendoToolBar({ items: toolBarItems, click: (e) => { this.executeCommand(e); }, toggle: (e) => { this.executeCommand(e); } }).data("kendoToolBar"); const pageNumberInputEl = this.$element.find(constants.ToolBarConstants.PageNumberInputDataRoleSelector).get(0); if (pageNumberInputEl) { new pageNumberInput.PageNumberInput(pageNumberInputEl, this._options); } const pageCountLabelEl = this.$element.find(constants.ToolBarConstants.PageCountLabelDataRoleSelector).get(0); if (pageCountLabelEl) { new pageCountLabel.PageCountLabel(pageCountLabelEl, this._options); } } createToolbarItem(elementData) { const cmdName = (elementData.dataset?.command || "").replace("telerik_ReportViewer_", ""); if (cmdName === "toggleAiPromptDialog" && !this._options.controller.getAiConfigurationOptions()?.isAvailable) { return; } const id = elementData.id; const role = elementData.dataset?.role; const icon = elementData.dataset?.icon; const overflow = elementData.dataset?.overflow; const title = stringResources.stringResources[elementData.title] || elementData.title || ""; const ariaLabel = stringResources.stringResources[elementData.ariaLabel] || elementData.ariaLabel || ""; const cmdParam = elementData.dataset?.commandParameter; const command = this._options.commands[cmdName]; switch (role) { case constants.ToolBarConstants.Separator: return { type: constants.ToolBarConstants.Separator, overflow: overflow || "auto" }; case constants.ToolBarConstants.CustomElement: elementData.title = title; elementData.ariaLabel = ariaLabel; return { template: elementData.outerHTML }; case constants.ToolBarConstants.MenuButton: return { id, type: constants.ToolBarConstants.DropDownButton, icon, enable: false, showArrowButton: true, overflow: "never", fillMode: "flat", menuButtons: [ { text: "Loading...", enabled: false } ] }; case constants.ToolBarConstants.ButtonGroup: const groupChildren = Array.from(elementData.children); const buttonGroupButtons = []; groupChildren.forEach((groupChild) => { if (groupChild.dataset?.role !== constants.ToolBarConstants.Button && groupChild.dataset?.role !== constants.ToolBarConstants.ToggleButton) { console.warn("The data-role attribute of element nested inside a buttonGroup is missing or not supported. Only 'button' or 'toggle-button' data-role is allowed."); return; } buttonGroupButtons.push(this.createToolbarItem(groupChild)); }); return { type: constants.ToolBarConstants.ButtonGroup, buttons: buttonGroupButtons, fillMode: "flat", overflow: overflow ? overflow : "auto" }; case constants.ToolBarConstants.Button: case constants.ToolBarConstants.ToggleButton: $(command).on("enabledChanged", (e, newState) => { this._kendoToolbar.enable($(`button[${constants.ToolBarConstants.DataCommandAttr}="${cmdName}"]`), newState); }).on("checkedChanged", (e, newState) => { this._kendoToolbar.toggle($(`button[${constants.ToolBarConstants.DataCommandAttr}="${cmdName}"]`), newState); }); return { id, type: constants.ToolBarConstants.Button, text: title, icon, attributes: { [constants.ToolBarConstants.DataCommandAttr]: cmdName, [constants.ToolBarConstants.DataCommandParameterAttr]: cmdParam, [constants.ToolBarConstants.AriaLabelAttr]: ariaLabel, [constants.ToolBarConstants.TitleAttr]: title }, fillMode: "flat", togglable: role === constants.ToolBarConstants.ToggleButton, overflow: overflow ? overflow : "auto", showText: "overflow" }; default: console.error(`The data-role attribute is missing or not supported: ${role}`); return {}; } } executeCommand(event) { const cmdName = event.target.get(0)?.dataset.command || ""; const cmdParam = event.target.get(0)?.dataset.commandParameter || ""; if (!cmdName) { return; } const cmdFn = this._options.commands[cmdName]; if (!cmdFn) { console.error(`The provided data-command attribute is not present within the commands collection: ${cmdName}`); return; } cmdFn.exec(cmdParam); } updateExportDropdownItems(extensions) { const kendoExportDropDown = this.$element.find(`#${constants.ToolBarConstants.ExportDropdownId}`).data("kendoDropDownButton"); if (!kendoExportDropDown) { return; } if (!(extensions && extensions.length > 0)) { console.warn("No extensions found - the export dropdown button will remain disabled."); return; } const exportDropdownItems = []; extensions.forEach((extension) => exportDropdownItems.push({ id: extension.name, text: extension.localizedName, attributes: { [constants.ToolBarConstants.DataCommandAttr]: "export", [constants.ToolBarConstants.DataCommandParameterAttr]: extension.name } })); const options = kendoExportDropDown.options; options.items = exportDropdownItems; kendoExportDropDown.setOptions(options); kendoExportDropDown.enable(true); } } exports.Toolbar = Toolbar;