UNPKG

devexpress-reporting

Version:

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

141 lines (140 loc) 5.76 kB
/** * DevExpress HTML/JS Reporting (designer\controls\xrTableOfContentsLevel.js) * Version: 25.1.3 * Build date: Jun 26, 2025 * Copyright (c) 2012 - 2025 Developer Express Inc. ALL RIGHTS RESERVED * License: https://www.devexpress.com/Support/EULAs/universal.xml */ import { ElementViewModel } from '@devexpress/analytics-core/analytics-elements'; import { extend } from '@devexpress/analytics-core/analytics-internal'; import * as $ from 'jquery'; import * as ko from 'knockout'; import { recalculateUnit } from '../internal/_utils'; import { controlsFactory } from '../utils/settings'; import { levelDefaultHeight } from './defaultTableOfContentsLevelHeight'; import { tocTitleSerializationsInfo } from './metadata/xrTableOfContents'; import { tocLevelSerializationsInfo } from './metadata/xrTableOfContentsLevel'; import { XRControlSurfaceBase } from './xrControl'; import { createPaddingProperty } from './utils/_paddingUtils'; export class TableOfContentsLevel extends ElementViewModel { dispose() { super.dispose(); this.parentModel(null); } static createNew(parent) { return new TableOfContentsLevel({ '@Height': recalculateUnit(levelDefaultHeight, parent.dpi()) }, parent); } beforeDeserialize(model) { this.isTitle = model.isTitle; delete model['isTitle']; } constructor(model, parent, serializer, isTitle = false) { super(extend({ '@ControlType': 'TableOfContentsLevel', isTitle: isTitle }, model), parent, serializer); this.borderWidth = parent.borderWidth; this.borderColor = parent.borderColor; this.borders = parent.borders; this.dpi = parent.dpi; if (this.padding) { createPaddingProperty(this, parent); } this.borderDashStyle = parent.borderDashStyle; this.borderDefault = parent.borderDefault; this._disposables.push(this._levelIndex = ko.pureComputed(() => parent.allLevels().indexOf(this))); this._disposables.push(this._indentFactor = ko.pureComputed(() => recalculateUnit(60, this.parentModel().dpi()))); this.indent = this.indent || ko.observable(0); this._disposables.push(this.left = ko.pureComputed({ read: () => { if (!this.indent) return 0; if (this.indent() !== null && this.indent() !== undefined) return this.indent(); return this._levelIndex() === 0 ? 0 : (this._levelIndex() - 1) * this._indentFactor(); }, write: () => void (0) })); this._disposables.push(this.width = ko.pureComputed({ read: () => parent.size.width() - this.left(), write: () => void (0) })); this._disposables.push(this.name = ko.pureComputed(() => { if (this.isTitle) return null; if (this._levelIndex() == parent.allLevels().length - 1) return 'Level (Default)'; return 'Level ' + this._levelIndex(); })); this._disposables.push(this.top = ko.computed({ read: () => { const previousLevel = parent.allLevels()[this._levelIndex() - 1]; return previousLevel ? previousLevel.top() + previousLevel.height() : 0; }, write: () => void (0), deferEvaluation: true })); this.lockedInUserDesigner = parent.lockedInUserDesigner; } getInfo() { return this.isTitle ? tocTitleSerializationsInfo : tocLevelSerializationsInfo; } isPropertyModified(name) { return false; } getControlFactory() { return controlsFactory(); } rtl() { return this.parentModel() && this.parentModel().rtl(); } } TableOfContentsLevel.unitProperties = ['height', 'indent']; export class TableOfContentsLevelSurface extends XRControlSurfaceBase { constructor(control, context) { super(control, context, TableOfContentsLevelSurface._unitProperties); this._leaderSymbolWidth = ko.pureComputed(() => { if (!TableOfContentsLevelSurface._$leaderSymbol) TableOfContentsLevelSurface._$leaderSymbol = $.fn.constructor('<span />').hide().appendTo('body'); TableOfContentsLevelSurface._$leaderSymbol.html(this.getControlModel().leaderSymbol()).css(this.contentCss()); return TableOfContentsLevelSurface._$leaderSymbol.width(); }); this.leaderSymbols = ko.pureComputed(() => { const elementWidth = this.contentWidthWithoutZoom(); if (elementWidth <= 0 || this._leaderSymbolWidth() === 0) return ''; const symbolsCount = elementWidth / this._leaderSymbolWidth(); const symbol = this.getControlModel().leaderSymbol(); const a = []; while (a.length < symbolsCount) { a.push(symbol); } return a.join(''); }); this._disposables.push(this.isIntersect = ko.computed(() => { return false; })); this._disposables.push(this.leaderSymbols); this.text = control.text; this.template = 'dxrd-table-of-contents-level'; } resizable(resizeHandler, element) { return extend({}, resizeHandler, { handles: 's', $selectedNodes: $.fn.constructor(element), minimumHeight: 10 }); } rtlLayout() { return this._control.rtl(); } } TableOfContentsLevelSurface._unitProperties = { _height: (o) => { return o.height; }, _width: (o) => { return o.width; }, _x: (o) => { return o.left; }, _y: (o) => { return o.top; }, };