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.

97 lines (83 loc) 3.76 kB
import ObjectReader from '../../readers/ObjectReader'; import ValueReader from '../../readers/ValueReader'; import Thickness from '../../graphics/structs/Thickness'; import Size from '../../graphics/structs/Size'; export default function FrameSizeTask(frameOptionTask, readTemplatesTask, scaleOptionTask) { var _data = {}, _hash = {}; var _dataTemplate = new ObjectReader({ median: new ObjectReader({ left: new ValueReader(["number"], false, 0), top: new ValueReader(["number"], false, 0), right: new ValueReader(["number"], false, 0), bottom: new ValueReader(["number"], false, 0) }, false, new Thickness(0, 0, 0, 0)), thickness: new ObjectReader({ left: new ValueReader(["number"], false, 0), top: new ValueReader(["number"], false, 0), right: new ValueReader(["number"], false, 0), bottom: new ValueReader(["number"], false, 0) }, false, new Thickness(0, 0, 0, 0)) }); function process() { var context = { isChanged: false, hash: _hash }; _data = _dataTemplate.read(_data, getFrameSize(), "options", context); return context.isChanged; } function getFrameSize() { var frameOptions = frameOptionTask.getOptions(), showFrame = frameOptions.showFrame, frameInnerPadding = frameOptions.frameInnerPadding, frameOuterPadding = frameOptions.frameOuterPadding, scale = scaleOptionTask.getOptions().scale, median = new Thickness(0, 0, 0, 0), thickness = new Thickness(0, 0, 0, 0); if(showFrame) { var maximumMarkerSize = new Size(0, 0), maximumMarkerPadding = new Thickness(0, 0, 0, 0), index, len, templates = readTemplatesTask.getItemTemplates(); for (index = 0, len = templates.length; index < len; index += 1) { var template = templates[index]; var templateConfig = template.templateConfig, cursorPadding = new Thickness(templateConfig.cursorPadding), highlightPadding = new Thickness(templateConfig.highlightPadding); cursorPadding.addThickness(templateConfig.cursorBorderWidth); highlightPadding.addThickness(templateConfig.highlightBorderWidth); maximumMarkerSize.maxSize(templateConfig.minimizedItemSize); maximumMarkerPadding.maxThickness(templateConfig.cursorPadding); maximumMarkerPadding.maxThickness(templateConfig.highlightPadding); } median = new Thickness(Math.ceil(maximumMarkerSize.width / 2.0) + maximumMarkerPadding.right, Math.ceil(maximumMarkerSize.height / 2.0) + maximumMarkerPadding.bottom, Math.ceil(maximumMarkerSize.width / 2.0) + maximumMarkerPadding.left, Math.ceil(maximumMarkerSize.height / 2.0) + maximumMarkerPadding.top ); median.addThickness(frameInnerPadding); median.scale(scale); thickness = new Thickness(maximumMarkerSize.width + maximumMarkerPadding.left + maximumMarkerPadding.right, maximumMarkerSize.height + maximumMarkerPadding.top + maximumMarkerPadding.bottom, maximumMarkerSize.width + maximumMarkerPadding.left + maximumMarkerPadding.right, maximumMarkerSize.height + maximumMarkerPadding.top + maximumMarkerPadding.bottom ); thickness.addThickness(frameInnerPadding); thickness.addThickness(frameOuterPadding); thickness.scale(scale); } return { median: median, thickness: thickness }; } function getMedian() { return _data.median; } function getThickness() { return _data.thickness; } return { process: process, getMedian: getMedian, getThickness: getThickness }; };