UNPKG

devexpress-reporting

Version:

DevExpress Reporting provides the capability to develop a reporting application to create and customize reports.

282 lines (281 loc) 13.4 kB
/** * DevExpress HTML/JS Reporting (viewer\internal\_page.js) * Version: 20.2.13 * Build date: Apr 10, 2023 * Copyright (c) 2012 - 2023 Developer Express Inc. ALL RIGHTS RESERVED * License: https://www.devexpress.com/Support/EULAs/universal.xml */ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { extendStatics = Object.setPrototypeOf || ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; return extendStatics(d, b); }; return function (d, b) { extendStatics(d, b); function __() { this.constructor = d; } d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); }; })(); Object.defineProperty(exports, "__esModule", { value: true }); var _brickUtils_1 = require("./_brickUtils"); var _previewRequestWrapper_1 = require("./_previewRequestWrapper"); var _utils_1 = require("../../common/utils/_utils"); var _previewSelection_1 = require("./_previewSelection"); var _utils_2 = require("./_utils"); var settings_1 = require("../settings"); var analytics_utils_1 = require("@devexpress/analytics-core/analytics-utils"); var ko = require("knockout"); var $ = require("jquery"); var _previewEditingFieldsKeyboardHelper_1 = require("../accessibility/_previewEditingFieldsKeyboardHelper"); var PreviewPage = (function (_super) { __extends(PreviewPage, _super); function PreviewPage(preview, pageIndex, processClick, loading) { var _this = _super.call(this) || this; _this.isClientVisible = ko.observable(false); _this.originalHeight = ko.observable(0); _this.originalWidth = ko.observable(0); _this.loadingText = analytics_utils_1.getLocalization('Loading...', 'AnalyticsCoreStringId.Loading'); _this.realZoom = ko.observable(1); _this.actualResolution = 0; _this.currentScaleFactor = ko.observable(1); _this.imageHeight = ko.observable(0); _this.imageWidth = ko.observable(0); _this.imageSrc = ko.observable('').extend({ rateLimit: { timeout: 100, method: 'notifyWhenChangesStop' } }); _this.displayImageSrc = ko.observable(''); _this.brick = ko.observable(null); _this.brickLoading = ko.observable(true); _this.bricks = ko.computed(function () { return _this.getBricksFlatList(_this.brick()); }); _this.activeBricks = ko.computed(function () { return _this.bricks().filter(function (x) { return x.active(); }); }); _this.clickableBricks = ko.computed(function () { return _this.bricks().filter(function (x) { return !!x.navigation; }); }); _this.active = ko.observable(false); _this.maxZoom = 0; _this.disableResolutionReduction = false; _this._lastZoom = 0; _this._selectedBrickPath = null; _this.pageIndex = pageIndex; _this.documentId = preview._currentDocumentId || ko.observable(null); _this._disposables.push(_this.imageSrc.subscribe(function (newVal) { var documentId = _this.documentId.peek(); _this._lastGetPageDeferred && _this._lastGetPageDeferred.resolve(null); var currentGetPageDeferred = $.Deferred(); currentGetPageDeferred .done(function (response) { if (!response) return; _this.imageHeight(response.height); _this.imageWidth(response.width); _this.currentScaleFactor(_this._currentScaleFactor); _this.displayImageSrc('data:image/png;base64,' + response.base64string); _this._onPageLoaded(response, processClick, preview._editingFields); }).fail(function (_e) { _this._onPageLoadFailed(); }); var ignoreError = preview._closeDocumentRequests && (function () { return preview._closeDocumentRequests[documentId] || currentGetPageDeferred.state() != 'pending'; }); _previewRequestWrapper_1.PreviewRequestWrapper.getPage(newVal, ignoreError) .done(function (response) { currentGetPageDeferred.resolve(response); }).fail(function (_e) { currentGetPageDeferred.reject(_e); }); _this._lastGetPageDeferred = currentGetPageDeferred; })); var unifier = ko.isObservable(preview._unifier) ? preview._unifier : ko.observable(preview._unifier || _utils_1.generateGuid()); _this.pageLoading = loading || ko.observable(true); _this.originalHeight(ko.unwrap(preview._pageHeight)); _this.originalWidth(ko.unwrap(preview._pageWidth)); _this.zoom = preview._zoom; _this.imageWidth(_this.originalWidth() * _this.zoom() / _this._getPixelRatio()); _this.imageHeight(_this.originalHeight() * _this.zoom() / _this._getPixelRatio()); _this._disposables.push(_this.isClientVisible.subscribe(function (newVal) { if (newVal) { _this._setPageImgSrc(_this.documentId(), unifier(), _this.zoom()); } })); _this.color = ko.isObservable(preview._pageBackColor) ? preview._pageBackColor.peek() : ''; _this.width = ko.pureComputed(function () { return _this.imageWidth() * _this.zoom() / _this.currentScaleFactor() / _this._getPixelRatio(); }); _this.height = ko.pureComputed(function () { return _this.imageHeight() * _this.zoom() / _this.currentScaleFactor() / _this._getPixelRatio(); }); _this.isEmpty = pageIndex === -1 && !_this.brick() && !processClick; _this.resetBrickRecusive = function (brick) { if (brick && brick.active) { brick.active(false); if (brick.bricks) { brick.bricks.forEach(function (childBrick) { _this.resetBrickRecusive(childBrick); }); } } }; _this.selectBrick = function (path, ctrlKey) { if (_previewSelection_1.PreviewSelection.started) return; processClick && processClick(null); var currentBrick = _this.brick(); !ctrlKey && _this.resetBrickRecusive(currentBrick); if (!path) { return; } if (!currentBrick) { _this._selectedBrickPath = path; return; } var pathElements = path.split(','); pathElements.forEach(function (el) { currentBrick = currentBrick.bricks[parseInt(el)]; }); currentBrick.active(true); }; _this._disposables.push(ko.computed(function () { if (!_this.active()) { _this.resetBrickRecusive(_this.brick()); _this._selectedBrickPath = null; } })); _this.editingFieldsKeyboardHelper = new _previewEditingFieldsKeyboardHelper_1.PreviewEditingFieldsKeyboardHelper(); _this._disposables.push(_this.editingFieldsKeyboardHelper); return _this; } PreviewPage.prototype._initializeEditingFields = function (editingFieldBricks, previewEditngFields, originalWidth, originalHeight) { var _this = this; if (this.editingFields) { var oldEditFields = ko.unwrap(this.editingFields()); if (oldEditFields && oldEditFields.length > 0) { oldEditFields.forEach(function (field) { return field.dispose && field.dispose(); }); } this.editingFields.dispose(); } this.editingFields = ko.pureComputed(function () { if (!previewEditngFields || editingFieldBricks.length === 0) { return []; } var allEditingFields = previewEditngFields(); var pageFieldViewModels = []; for (var i = 0; i < editingFieldBricks.length; i++) { var brick = editingFieldBricks[i]; var editingField = allEditingFields[brick.efIndex - 1]; if (!editingField) return []; pageFieldViewModels.push(editingField.createViewModel(_this.zoom, originalWidth, originalHeight, function () { return allEditingFields; }, brick.absoluteBounds)); brick.text = (function (brick) { return (function () { return _brickUtils_1.brickText(brick, function () { return allEditingFields; }); }); })(brick); } return pageFieldViewModels; }); }; PreviewPage.prototype._getPixelRatio = function () { return window['devicePixelRatio'] || 1; }; PreviewPage.prototype._onPageLoaded = function (result, processClick, previewEditingFields) { if (this._isDisposed) return; this.pageLoading(false); try { if (!result || !result.brick) { return; } this.brickColumnWidthArray = result.columnWidthArray; this.originalWidth(result.brick.width); this.originalHeight(result.brick.height); var editignFieldBricks = []; this.initializeBrick(result.brick, processClick, this.zoom, editignFieldBricks); this._initializeEditingFields(editignFieldBricks, previewEditingFields, result.brick.width, result.brick.height); this._selectedBrickPath && this.selectBrick(this._selectedBrickPath); } finally { this.brickLoading(false); } }; PreviewPage.prototype._onPageLoadFailed = function () { if (this._isDisposed) return; if (this.isClientVisible()) { this.pageLoading(false); this.pageIndex !== -1 && this.brickLoading(false); } }; PreviewPage.prototype.updateSize = function (zoom) { var newResolution = _utils_2.getCurrentResolution(zoom); this.realZoom(newResolution / settings_1.previewDefaultResolution()); return newResolution; }; PreviewPage.prototype.clearBricks = function () { this.brickLoading(true); }; PreviewPage.prototype.dispose = function () { _super.prototype.dispose.call(this); this._isDisposed = true; }; PreviewPage.prototype._setPageImgSrc = function (documentId, unifier, zoom) { if (!documentId || this.pageIndex === -1) { return; } if (this.maxZoom && this.maxZoom < zoom) { zoom = this.maxZoom; } if (this._lastZoom < zoom) { this._lastZoom = zoom; } else { if (this.actualResolution && this.disableResolutionReduction && this.imageSrc()) return; } var newResolution = this.updateSize(zoom); if ((this.actualResolution === newResolution || newResolution < 9) && this.imageSrc()) { return; } this.actualResolution = newResolution; this._currentScaleFactor = zoom; var imageResolution = Math.floor(newResolution * this._getPixelRatio()); this.imageSrc(settings_1.HandlerUri() + '?actionKey=getPage&unifier=' + unifier + '&arg=' + encodeURIComponent(JSON.stringify({ pageIndex: this.pageIndex, documentId: documentId, resolution: imageResolution, includeBricks: this.brickLoading() }))); }; PreviewPage.prototype._clear = function () { this.pageIndex = -1; this.isClientVisible(false); this._setPageImgSrc(null, null, 1); this.actualResolution = 0; }; PreviewPage.prototype.initializeBrick = function (brick, processClick, zoom, editingFieldBricks) { _brickUtils_1.initializeBrick(brick, processClick, this.zoom, editingFieldBricks); _brickUtils_1.updateBricksPosition(brick, brick.height, brick.width); this.brick(brick); }; PreviewPage.prototype.clickToBrick = function (s, e) { var target = $(e.currentTarget); var offset = target.offset(); var xPerc = (e.clientX - offset.left + window.scrollX) / target.width() * 100; var yPerc = (e.clientY - offset.top + window.scrollY) / target.height() * 100; var bricks = s.bricks(); for (var i = 0; i < bricks.length; i++) { if (parseFloat(bricks[i].topP) < yPerc && parseFloat(bricks[i].topP) + parseFloat(bricks[i].heightP) > yPerc && parseFloat(bricks[i].leftP) < xPerc && parseFloat(bricks[i].leftP) + parseFloat(bricks[i].widthP) > xPerc) { bricks[i].onClick && bricks[i].onClick(e); break; } } }; PreviewPage.prototype.getBricksFlatList = function (brick) { if (brick) { var bricks = []; var innerBricksLength = brick.bricks && brick.bricks.length || 0; for (var i = 0; i < innerBricksLength; i++) { bricks = bricks.concat(this.getBricksFlatList(brick.bricks[i])); } bricks.push(brick); return bricks; } return []; }; return PreviewPage; }(analytics_utils_1.Disposable)); exports.PreviewPage = PreviewPage;