UNPKG

basicprimitives

Version:

Basic Primitives Diagrams for JavaScript - data visualization components library that implements organizational chart and multi-parent dependency diagrams, contains implementations of JavaScript Controls and PDF rendering plugins.

81 lines (70 loc) 2.9 kB
import ObjectReader from '../../readers/ObjectReader'; import ValueReader from '../../readers/ValueReader'; import { PageFitMode } from '../../enums'; import Size from '../../graphics/structs/Size'; import Thickness from '../../graphics/structs/Thickness'; export default function CurrentControlSizeTask(layoutOptionsTask, itemsSizesOptionTask, frameSizeTask, levelTitleSizeTask) { var _data = {}, _hash = {}, _dataTemplate = new ObjectReader({ scrollPanelSize: new ObjectReader({ width: new ValueReader(["number"], true), height: new ValueReader(["number"], true) }, true), optimalPanelSize: new ObjectReader({ width: new ValueReader(["number"], true), height: new ValueReader(["number"], true) }, true), hasFrame: new ValueReader(["boolean"], true), hasLevelTitles: new ValueReader(["boolean"], true) }); function process() { var result = false, context = { isChanged: false, hash: _hash }, layoutOptions = layoutOptionsTask.getOptions(), { pageFitMode } = itemsSizesOptionTask.getOptions(), frameThickness = new Thickness(frameSizeTask.getThickness()), levelTitlesThickness = new Thickness(levelTitleSizeTask.getOptions().thickness); // disable outer level titles if its square space is bigger than viewport layoutOptions.hasLevelTitles = false; if(levelTitlesThickness.isPositive()) { let viewportSize = new Size(layoutOptions.scrollPanelSize); viewportSize.removeThickness(levelTitlesThickness); if(layoutOptions.scrollPanelSize.space() < viewportSize.space() * 2) { layoutOptions.scrollPanelSize = viewportSize; layoutOptions.hasLevelTitles = true; } } // disable frame if its square space is bigger than viewport layoutOptions.hasFrame = false; if(frameThickness.isPositive()) { let viewportSize = new Size(layoutOptions.scrollPanelSize); viewportSize.removeThickness(frameThickness); if(layoutOptions.scrollPanelSize.space() < viewportSize.space() * 2) { layoutOptions.scrollPanelSize = viewportSize; layoutOptions.hasFrame = true; } } layoutOptions.optimalPanelSize = new Size(layoutOptions.scrollPanelSize.width - 25, layoutOptions.scrollPanelSize.height - 25) _data = _dataTemplate.read(_data, layoutOptions, "layout", context); switch (pageFitMode) { case PageFitMode.PageWidth: case PageFitMode.PageHeight: case PageFitMode.FitToPage: case PageFitMode.None: case PageFitMode.SelectionOnly: result = context.isChanged; break; default: break; } return result; } function getOptions() { return _data; } return { process: process, getOptions: getOptions }; };