UNPKG

devexpress-reporting

Version:

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

154 lines (153 loc) 7.39 kB
/** * DevExpress HTML/JS Reporting (viewer\internal\_previewSelection.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"; Object.defineProperty(exports, "__esModule", { value: true }); var analytics_internal_1 = require("@devexpress/analytics-core/analytics-internal"); var popup_1 = require("devextreme/ui/popup"); var ko = require("knockout"); var $ = require("jquery"); function rectIntersection(r1, r2) { return !(r2.left > r1.right || r2.right < r1.left || r2.top > r1.bottom || r2.bottom < r1.top); } var PreviewSelection = (function () { function PreviewSelection(_element, _page, _click) { var _this = this; this._element = _element; this._page = _page; this._click = _click; this._bodyEvents = { move: null, up: null }; this.dispose = function () { return _this._dispose && _this._dispose(); }; this._$element = $(this._element); var mousemove = function (event) { return _this._mouseMove(event); }; var mouseup = function (event) { return _this._mouseUp(event); }; var mousedown = function (event) { return _this._mouseDown(event); }; this._element.addEventListener('mousemove', mousemove); this._element.addEventListener('mouseup', mouseup); this._element.addEventListener('mousedown', mousedown); this._dispose = function () { _this._element.removeEventListener('mousemove', mousemove); _this._element.removeEventListener('mouseup', mouseup); _this._element.removeEventListener('mousedown', mousedown); _this._dispose = null; _this._click = null; _this._page = null; _this._element = null; mousemove = null; mouseup = null; mousedown = null; }; } PreviewSelection.prototype._getBodyScrollTop = function () { return document.documentElement && document.documentElement.scrollTop || (document.body && document.body.scrollTop); }; PreviewSelection.prototype._getBodyScrollLeft = function () { return document.documentElement && document.documentElement.scrollLeft || (document.body && document.body.scrollLeft); }; PreviewSelection.prototype._updateSelectionContent = function (event) { if (this._startRect.left > event.clientX) { this._$selectionContent.css('left', event.clientX); } else { this._$selectionContent.css('right', document.documentElement.clientWidth - event.clientX); } if (this._startRect.top > event.clientY) { this._$selectionContent.css('top', event.clientY); } else { this._$selectionContent.css('bottom', document.documentElement.clientHeight - event.clientY); } var offset = this._$element.offset(); var currentRect = { left: (parseInt(this._$selectionContent.css('left')) - offset.left + this._getBodyScrollLeft()) / this._$element.width() * 100, width: this._$selectionContent.width() / this._$element.width() * 100, top: (parseInt(this._$selectionContent.css('top')) - offset.top + this._getBodyScrollTop()) / this._$element.height() * 100, height: this._$selectionContent.height() / this._$element.height() * 100 }; currentRect['right'] = currentRect.left + currentRect.width; currentRect['bottom'] = currentRect.top + currentRect.height; var bricks = this._page.bricks(); for (var i = 0; i < bricks.length; i++) { if (!bricks[i].bricks) { bricks[i].active(rectIntersection({ left: parseFloat(bricks[i].leftP), top: parseFloat(bricks[i].topP), right: parseFloat(bricks[i].leftP) + parseFloat(bricks[i].widthP), bottom: parseFloat(bricks[i].topP) + parseFloat(bricks[i].heightP), }, currentRect)); } } }; PreviewSelection.prototype._mouseMove = function (event) { var _this = this; if (!this._startRect || !this._page.active() || PreviewSelection.disabled) return; var leftButtonPressed = event.which === 1; if (leftButtonPressed) { if (!this._$selectionContainer) { if (Math.abs(this._startRect.left - event.clientX) >= 2 || Math.abs(this._startRect.top - event.clientY) >= 2) { PreviewSelection.started = true; this._$selectionContainer = $('<div style="position: fixed; top: 0; bottom: 0; left: 0; right: 0">').appendTo(document.body); this._$selectionContent = $('<div>').appendTo(this._$selectionContainer); this._$selectionContent.css(this._startRect); this._$selectionContent.addClass('dxrd-selection-content ui-selectable-helper'); if (popup_1.default.prototype._zIndexInitValue) this._$selectionContent.css('z-index', popup_1.default.prototype._zIndexInitValue() + 100); this._updateSelectionContent(event); this._bodyEvents.move = function (event) { return _this._mouseMove(event); }; this._bodyEvents.up = function (event) { return _this._mouseUp(event); }; document.body.addEventListener('mousemove', this._bodyEvents.move); document.body.addEventListener('mouseup', this._bodyEvents.up); } } else { this._updateSelectionContent(event); } } }; PreviewSelection.prototype._mouseUp = function (event) { this._$selectionContainer && this._$selectionContainer.remove(); this._$selectionContainer = null; this._bodyEvents.move && document.body.removeEventListener('mousemove', this._bodyEvents.move); this._bodyEvents.up && document.body.removeEventListener('mouseup', this._bodyEvents.up); this._startRect = null; setTimeout(function () { PreviewSelection.started = false; }, 1); }; PreviewSelection.prototype._mouseDown = function (event) { if (PreviewSelection.disabled) { return; } this._startRect = { left: event.clientX, top: event.clientY, right: document.documentElement.clientWidth - event.clientX, bottom: document.documentElement.clientHeight - event.clientY }; this._click(this._page.pageIndex); }; PreviewSelection.started = false; PreviewSelection.disabled = false; return PreviewSelection; }()); exports.PreviewSelection = PreviewSelection; ko.bindingHandlers['brick-selection-prog'] = { init: function (element, valueAccessor, allBindings, viewModel, bindingContext) { var values = valueAccessor(), unwrappedValues = ko.unwrap(values); var selection = new PreviewSelection(element, unwrappedValues.page, unwrappedValues.click); analytics_internal_1.addDisposeCallback(element, function () { selection.dispose(); }); } };