UNPKG

devexpress-reporting

Version:

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

112 lines (111 loc) 4.24 kB
/** * DevExpress HTML/JS Reporting (viewer\mobile\internal\_mobileBindings.js) * Version: 26.1.3 * Build date: Jun 16, 2026 * Copyright (c) 2012 - 2026 Developer Express Inc. ALL RIGHTS RESERVED * License: https://www.devexpress.com/Support/EULAs/universal.xml */ import 'devextreme/common/core/events/transform'; import 'devextreme/common/core/events/pointer'; import { EventProcessor } from './_eventProcessor'; import * as events from 'devextreme/events'; import dxScrollView from 'devextreme/ui/scroll_view'; import { $dx } from '@devexpress/analytics-core/analytics-internal-native'; import { SearchBarModel } from './_mobileSearch'; export function initializeMobileZoomBinding(element, options) { let scroll; let zoom = options.getZoom(); const getScroll = () => { if (!scroll) { scroll = dxScrollView.getInstance(element.getElementsByClassName('dxrd-scrollView-mobile')[0]); } return scroll; }; const nativeTouchStartHandler = (e) => { if (e.touches.length >= 2) { getScroll()?.option('disabled', true); } }; const pinchHandler = (e) => { e.stopPropagation(); e.preventDefault(); const scale = e['scale']; let newZoom = zoom; newZoom *= scale; newZoom = Math.max(0.15, Math.min(2, newZoom)); options.setZoom(newZoom); }; const pinchStartHandler = (e) => { e.stopPropagation(); e.preventDefault(); const scroll = getScroll(); scroll?.option('disabled', true); options.setZoomUpdating(true); zoom = options.getZoom(); }; const pinchEndHandler = (e) => { e.stopPropagation(); setTimeout(() => { const scroll = getScroll(); if (scroll) { scroll.option('disabled', false); scroll.refresh(); const scrollPos = scroll.scrollOffset(); scrollPos && scroll.scrollTo(scrollPos); } options.setZoomUpdating(false); }, 10); }; element.addEventListener('touchstart', nativeTouchStartHandler, { passive: true, capture: true }); events.on(element, 'dxpinch', pinchHandler); events.on(element, 'dxpinchstart', pinchStartHandler); events.on(element, 'dxpinchend', pinchEndHandler); return () => { element.removeEventListener('touchstart', nativeTouchStartHandler, { capture: true }); events.off(element, 'dxpinch', pinchHandler); events.off(element, 'dxpinchstart', pinchStartHandler); events.off(element, 'dxpinchend', pinchEndHandler); }; } export function initializeSlideBinding(element, options) { let isStarted = false; const processor = new EventProcessor(element, options); const pointerDownHandler = (e) => { processor.start(e); isStarted = true; }; const pointerMoveHandler = (e) => { isStarted && processor.move(e); }; const pointerFinishHandler = (e) => { if (isStarted) { processor.end(e); isStarted = false; } }; events.on(element, 'dxpointerdown', pointerDownHandler); events.on(element, 'dxpointermove', pointerMoveHandler); ['dxpointercancel', 'dxpointerleave', 'dxpointerup'].forEach((value) => { events.on(element, value, pointerFinishHandler); }); return () => { events.off(element, 'dxpointerdown', pointerDownHandler); events.off(element, 'dxpointermove', pointerMoveHandler); ['dxpointercancel', 'dxpointerleave', 'dxpointerup'].forEach((value) => { events.off(element, value, pointerFinishHandler); }); processor.dispose(); }; } export function initializeMobileSearchBinding(element, viewModel) { const model = viewModel.getModel(); const $element = $dx(element); element.style.display = 'none'; const $searchText = $element.find('.dxrdp-taptosearch-text'); const searchBarModel = new SearchBarModel(model, element, $searchText); return () => searchBarModel.dispose(); } export function initializeMobilePaginatorBinding(element, viewModel) { const values = viewModel.getModel(); values.initialize(element); }