UNPKG

@progress/telerik-jquery-report-viewer

Version:

Progress® Telerik® Report Viewer for jQuery

490 lines (485 loc) 17.2 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var utils = require('./utils.js'); var stringResources = require('./stringResources.js'); var parameterValidators = require('./parameterValidators.js'); var parameters = require('./parameters.js'); var enums = require('./enums.js'); var globalSettings = require('./globalSettings.js'); var defaultOptions = {}; var Events = { PARAMETERS_READY: "pa.parametersReady", ERROR: "pa.Error" }; function ParametersArea(placeholder, options, otherOptions) { options = $.extend({}, defaultOptions, options, otherOptions); var parametersArea = {}; var $parametersArea = $(parametersArea); var editors = {}; var controller = options.controller; if (!controller) { throw "No controller (telerikReporting.reportViewerController) has been specified."; } var parameterEditors = [].concat(options.parameterEditors, parameters.ParameterEditors); var recentParameterValues; var parameters$1; var initialParameterValues; var processedParameterValues = void 0; var $placeholder = $(placeholder); var $content = $placeholder.find(".trv-parameters-area-content"); var $errorMessage = $placeholder.find(".trv-error-message"); var $previewButton = $placeholder.find(".trv-parameters-area-preview-button"); $previewButton.text(stringResources.stringResources[$previewButton.text()]); $previewButton.attr("aria-label", stringResources.stringResources[$previewButton.attr("aria-label")]); $previewButton.on("click", function(e) { e.preventDefault(); if (allParametersValid()) { applyParameters(); } }); var parameterContainerTemplate = options.templates["trv-parameter"]; var parametersAreaVisible = options.parametersAreaVisible !== false; var enableAccessibility = options.enableAccessibility; init(); function init() { replaceStringResources($placeholder); } function replaceStringResources($paramsArea) { var $previewButton2 = $paramsArea.find(".trv-parameters-area-preview-button"); if (!$previewButton2) { return; } $previewButton2.attr("aria-label", stringResources.stringResources[$previewButton2.attr("aria-label")]); $previewButton2.text(stringResources.stringResources[$previewButton2.text()]); } function toggleElementDisplay(el, shouldHide) { el.style.display = shouldHide ? "none" : ""; } function createParameterContainer() { return $(parameterContainerTemplate); } function createParameterUI(parameter) { var $container = createParameterContainer(); var $editorPlaceholder = $container.find(".trv-parameter-value"); var $title = $container.find(".trv-parameter-title"); var $error = $container.find(".trv-parameter-error"); var $errorMessage2 = $container.find(".trv-parameter-error-message"); var $useDefaultValueCheckbox = $container.find(".trv-parameter-use-default input"); var editorsTypes = options.parameters && options.parameters.editors ? options.parameters.editors : null; var editorFactory = selectParameterEditorFactory(parameter, editorsTypes); var parameterText = utils.escapeHtml(parameter.text); var isHiddenParameter = !parameter.isVisible; if (isHiddenParameter) { parameterText += " [<b>hidden</b>]"; } $title.html(parameterText).attr("title", parameterText); $errorMessage2.text(parameter.Error); (parameter.Error ? $.fn.show : $.fn.hide).call($error); var editor = editorFactory.createEditor( $editorPlaceholder, { templates: options.templates, parameterChanged: function(parameter2, newValue) { var invalidParameterLI = document.querySelector(".trv-pages-area .trv-error-message ul li." + parameter2.name); try { newValue = parameterValidators.ParameterValidators.validate(parameter2, newValue); $error.hide(); if (invalidParameterLI) { toggleElementDisplay(invalidParameterLI, true); } onParameterChanged(parameter2, newValue); } catch (error) { if (invalidParameterLI) { toggleElementDisplay(invalidParameterLI, false); } parameter2.Error = error; parameter2.value = []; $errorMessage2.text(error); $error.show(); enablePreviewButton(false); } finally { setAccessibilityErrorState(parameter2); } }, enableAccessibility } ); editors[parameter.id] = editor; editor.beginEdit(parameter); if (enableAccessibility && !isHiddenParameter) { editor.addAccessibility(parameter); } if ($useDefaultValueCheckbox.length > 0) { $useDefaultValueCheckbox.on( "click", function() { var useDefaultValue = $(this).is(":checked"); if (useDefaultValue) { delete recentParameterValues[parameter.id]; delete initialParameterValues[parameter.id]; invalidateChildParameters(parameter); updateParameters(onLoadParametersSuccess); } else { recentParameterValues[parameter.id] = parameter.value; initialParameterValues[parameter.id] = parameter.value; } editor.enable(!useDefaultValue); raiseParametersReady(); } ); var hasInitialValues = initialParameterValues !== null; if (hasInitialValues) { if (!(parameter.id in initialParameterValues)) { $useDefaultValueCheckbox.prop("checked", true); editor.enable(false); } } else if (isHiddenParameter) { $useDefaultValueCheckbox.prop("checked", true); editor.enable(false); } } return $container; } function setAccessibilityErrorState(parameter) { var editor = editors[parameter.id]; if (!editor || !enableAccessibility) { return; } editor.setAccessibilityErrorState(parameter); } function enablePreviewButton(enabled) { if (enabled) { $previewButton.prop("disabled", false); $previewButton.removeClass("k-disabled"); } else { $previewButton.prop("disabled", true); $previewButton.addClass("k-disabled"); } } function selectParameterEditorFactory(parameter, editorsType) { var factory = Array.from(parameterEditors).find((editor) => { return editor.match(parameter, editorsType); }); return factory; } function showError(error) { $errorMessage.text(error); (error ? $.fn.addClass : $.fn.removeClass).call($placeholder, "trv-error"); } function showPreviewButton() { (allParametersAutoRefresh() ? $.fn.removeClass : $.fn.addClass).call($placeholder, "preview"); } function allParametersAutoRefresh() { var allAuto = Array.from(parameters$1).every((parameter) => { return !parameter.isVisible || parameter.autoRefresh; }); return allAuto; } function allParametersValid() { var allValid = Array.from(parameters$1).every((parameter) => { return !parameter.Error; }); return allValid; } function clearEditors() { Object.entries(editors).forEach(([key, editor]) => { if (typeof editor.destroy === "function") { editor.destroy(); } }); editors = {}; } function fill(newParameters) { recentParameterValues = {}; processedParameterValues = {}; parameters$1 = newParameters || []; clearEditors(); var $parameterContainer; var $tempContainer = $("<div></div>"); Array.from(parameters$1).forEach((parameter) => { try { parameter.value = parameterValidators.ParameterValidators.validate(parameter, parameter.value); } catch (e) { parameter.Error = parameter.Error || e; } var hasError = Boolean(parameter.Error); var hasValue = !hasError; if (hasValue) { recentParameterValues[parameter.id] = parameter.value; } else { parameter.Error = stringResources.stringResources.invalidParameter; } if (parameter.availableValues) { processedParameterValues[parameter.id] = { valueMember: parameter.value, displayMember: parameter.label, availableValues: parameter.availableValues, multivalue: parameter.multivalue }; } else { processedParameterValues[parameter.id] = parameter.value; } if (parameter.isVisible || options.showHiddenParameters) { $parameterContainer = createParameterUI(parameter); if ($parameterContainer) { $tempContainer.append($parameterContainer); } } }); if (initialParameterValues !== void 0) { if (null === initialParameterValues) { initialParameterValues = {}; Array.from(parameters$1).forEach((parameter) => { if (parameter.isVisible) { initialParameterValues[parameter.id] = parameter.value; } else { delete recentParameterValues[parameter.id]; } }); } else { Array.from(parameters$1).forEach((parameter) => { if (!(parameter.id in initialParameterValues)) { delete recentParameterValues[parameter.id]; } }); } } $content.empty(); if (parameters$1.length > 0) { $content.append($tempContainer.children()); if (enableAccessibility) { $content.attr("aria-label", "Parameters area. Contains " + parameters$1.length + " parameters."); } } showPreviewButton(); var allValid = allParametersValid(); enablePreviewButton(allValid); applyProcessedParameters(); } function applyParameters() { controller.setParameters($.extend({}, recentParameterValues)); controller.previewReport(false); } function applyProcessedParameters() { controller.setProcessedParameter($.extend({}, processedParameterValues)); } function allParametersValidForAutoRefresh() { var triggerAutoUpdate = true; for (var i = parameters$1.length - 1; triggerAutoUpdate && i >= 0; i--) { var p = parameters$1[i]; triggerAutoUpdate = p.id in recentParameterValues && (Boolean(p.autoRefresh) || !p.isVisible); } return triggerAutoUpdate; } function raiseParametersReady() { parametersArea.parametersReady(recentParameterValues); } function tryRefreshReport() { raiseParametersReady(); if (allParametersValidForAutoRefresh()) { applyParameters(); } } function invalidateChildParameters(parameter) { if (parameter.childParameters) { Array.from(parameter.childParameters).forEach((parameterId) => { var childParameter = getParameterById(parameterId); if (childParameter) { invalidateChildParameters(childParameter); } delete recentParameterValues[parameterId]; resetPendingParameterChange(parameterId); }); } } function resetPendingParameterChange(parameterId) { if (editors) { var editor = editors[parameterId]; if (editor && typeof editor.clearPendingChange === "function") { editor.clearPendingChange(); } } } function onParameterChanged(parameter, newValue) { delete parameter["Error"]; parameter.value = newValue; recentParameterValues[parameter.id] = newValue; if (initialParameterValues !== void 0) { if (parameter.id in initialParameterValues) { recentParameterValues[parameter.id] = newValue; } } else { recentParameterValues[parameter.id] = newValue; } invalidateChildParameters(parameter); if (parameter.childParameters) { updateParameters(tryRefreshReport); } else { var allValid = allParametersValid(); enablePreviewButton(allValid); if (allValid) { var errorMsg = document.querySelector(".trv-pages-area .trv-error-message"); if ($previewButton.is(":visible") && errorMsg) { errorMsg.textContent = stringResources.stringResources.tryReportPreview; } tryRefreshReport(); } } } function getParameterById(parameterId) { if (parameters$1) { for (var i = 0; i < parameters$1.length; i++) { var p = parameters$1[i]; if (p.id === parameterId) { return p; } } } return null; } function hasVisibleParameters(params) { if (!params || null === params) { return false; } var hasVisible = Array.from(params).some((parameter) => { return parameter.isVisible; }); return hasVisible; } var loadingCount = 0; function beginLoad() { loadingCount++; $placeholder.addClass("trv-loading"); } function endLoad() { if (loadingCount > 0) { if (0 === --loadingCount) { $placeholder.removeClass("trv-loading"); } } } var parametersAreaNecessary = false; function onLoadParametersComplete(params, successAction) { parametersAreaNecessary = hasVisibleParameters(params); if (!parametersAreaNecessary) { showParametersArea(false); } fill(params); showError(""); if (parametersAreaNecessary && parametersAreaVisible) { showParametersArea(true); if (enableAccessibility) { setSplitbarAccessibilityAttributes(); } } controller.updateUIInternal(); if (typeof successAction === "function") { successAction(); } endLoad(); } function updateParameters(successAction) { acceptParameters(controller.loadParameters(recentParameterValues), successAction); } function acceptParameters(controllerLoadParametersPromise, successAction) { beginLoad(); controllerLoadParametersPromise.then(function(parameters2) { onLoadParametersComplete(parameters2, successAction); }).catch(function(error) { endLoad(); clear(); if (!$placeholder.hasClass("trv-hidden")) { showError(error); } parametersArea.error(error); }); } function getEventHandlerFromArguments(args) { var arg0; if (args && args.length) { arg0 = args[0]; } if (typeof arg0 === "function") { return arg0; } return null; } function eventFactory(event, args) { var h = getEventHandlerFromArguments(args); if (h) { $parametersArea.on(event, h); } else { $parametersArea.trigger(event, args); } return controller; } function onLoadParametersSuccess() { if (initialParameterValues === null) { initialParameterValues = $.extend({}, recentParameterValues); } raiseParametersReady(); } function showParametersArea(show) { var splitter = globalSettings.GlobalSettings.viewerInstances.find((element) => element.id === options.viewerSelector + "-parameters-splitter").instance; var sibling = $placeholder.prev(); if (options.parametersAreaPosition === enums.ParametersAreaPositions.TOP || options.parametersAreaPosition === enums.ParametersAreaPositions.LEFT) { sibling = $placeholder.next(); } if (splitter) { (parametersAreaNecessary ? $.fn.removeClass : $.fn.addClass).call(sibling, "trv-hidden"); splitter.toggle(".trv-parameters-area", show); } } function setSplitbarAccessibilityAttributes() { var splitbar = $placeholder.prev(); var tabIndex = $placeholder.find(".trv-parameters-area-content").attr("tabIndex"); if (options.parametersAreaPosition === enums.ParametersAreaPositions.TOP || options.parametersAreaPosition === enums.ParametersAreaPositions.LEFT) { splitbar = $placeholder.next(); } splitbar.attr("aria-label", stringResources.stringResources.ariaLabelParametersAreaSplitter); splitbar.attr("tabIndex", tabIndex); } function onReloadParameters(event, controllerLoadParametersPromise) { showError(); $content.empty(); acceptParameters(controllerLoadParametersPromise, onLoadParametersSuccess); } controller.reloadParameters(onReloadParameters).beforeLoadReport(function() { loadingCount = 0; beginLoad(); }).error(endLoad).pageReady(endLoad); controller.getParametersAreaState(function(event, args) { var parametersAreaNecessary2 = false; if (parameters$1) { parametersAreaNecessary2 = hasVisibleParameters(parameters$1); } args.enabled = parametersAreaNecessary2; args.visible = parametersAreaVisible; }).setParametersAreaVisible(function(event, args) { parametersAreaVisible = args.visible; showParametersArea(args.visible && hasVisibleParameters(parameters$1)); }); function clear() { fill([]); } $.extend( parametersArea, { allParametersValid: function() { return allParametersValid(); }, clear: function() { clear(); }, error: function() { return eventFactory(Events.ERROR, arguments); }, parametersReady: function() { return eventFactory(Events.PARAMETERS_READY, arguments); }, fill: function(parameters2) { return fill(parameters2); }, setParameters: function(parameterValues) { initialParameterValues = null === parameterValues ? null : $.extend({}, parameterValues); } } ); return parametersArea; } exports.ParametersArea = ParametersArea;