UNPKG

vue-poster-editor

Version:

A poster editor based on Vue.js

156 lines (133 loc) 5.76 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var Alignment = { alignmentTop: function alignmentTop(elementsRect, selectsRect) { elementsRect.forEach(function (item) { item.element.top += selectsRect.top - item.rect.top; }); }, alignmentMiddle: function alignmentMiddle(elementsRect, selectsRect) { elementsRect.forEach(function (item) { item.element.top += selectsRect.middle - item.rect.middle; }); }, alignmentBottom: function alignmentBottom(elementsRect, selectsRect) { elementsRect.forEach(function (item) { item.element.top += selectsRect.bottom - item.rect.bottom; }); }, alignmentLeft: function alignmentLeft(elementsRect, selectsRect) { elementsRect.forEach(function (item) { item.element.left += selectsRect.left - item.rect.left; }); }, alignmentCenter: function alignmentCenter(elementsRect, selectsRect) { elementsRect.forEach(function (item) { item.element.left += selectsRect.center - item.rect.center; }); }, alignmentRight: function alignmentRight(elementsRect, selectsRect) { elementsRect.forEach(function (item) { item.element.left += selectsRect.right - item.rect.right; }); }, distributionTop: function distributionTop(elementsRect, selectsRect) { elementsRect.sort(function (first, second) { return first.rect.top - second.rect.top; }); var step = elementsRect.length - 1; var perHeight = (elementsRect[step].rect.top - elementsRect[0].rect.top) / step; elementsRect.forEach(function (item, index) { item.element.top += selectsRect.top + index * perHeight - item.rect.top; }); }, distributionMiddle: function distributionMiddle(elementsRect) { elementsRect.sort(function (first, second) { return first.rect.middle - second.rect.middle; }); var step = elementsRect.length - 1; var perHeight = (elementsRect[step].rect.middle - elementsRect[0].rect.middle) / step; elementsRect.forEach(function (item, index) { item.element.top += elementsRect[0].rect.middle + index * perHeight - item.rect.middle; }); }, distributionBottom: function distributionBottom(elementsRect) { elementsRect.sort(function (first, second) { return first.rect.bottom - second.rect.bottom; }); var step = elementsRect.length - 1; var perHeight = (elementsRect[step].rect.bottom - elementsRect[0].rect.bottom) / step; elementsRect.forEach(function (item, index) { item.element.top += elementsRect[0].rect.bottom + index * perHeight - item.rect.bottom; }); }, distributionLeft: function distributionLeft(elementsRect, selectsRect) { elementsRect.sort(function (first, second) { return first.rect.left - second.rect.left; }); var step = elementsRect.length - 1; var perWidth = (elementsRect[step].rect.left - elementsRect[0].rect.left) / step; elementsRect.forEach(function (item, index) { item.element.left += selectsRect.left + index * perWidth - item.rect.left; }); }, distributionCenter: function distributionCenter(elementsRect) { elementsRect.sort(function (first, second) { return first.rect.center - second.rect.center; }); var step = elementsRect.length - 1; var perWidth = (elementsRect[step].rect.center - elementsRect[0].rect.center) / step; elementsRect.forEach(function (item, index) { item.element.left += elementsRect[0].rect.center + index * perWidth - item.rect.center; }); }, distributionRight: function distributionRight(elementsRect) { elementsRect.sort(function (first, second) { return first.rect.right - second.rect.right; }); var step = elementsRect.length - 1; var perWidth = (elementsRect[step].rect.right - elementsRect[0].rect.right) / step; elementsRect.forEach(function (item, index) { item.element.left += elementsRect[0].rect.right + index * perWidth - item.rect.right; }); } }; exports.default = { alignment: function alignment(direction, elements) { var _this = this; var elementsRect = elements.map(function (element) { return { element: element, rect: _this.getBBoxByElement(element) }; }); var selectsRect = elementsRect.reduce(function (preRect, current) { var rect = current.rect; rect.right = rect.left + rect.width; rect.bottom = rect.top + rect.height; rect.center = rect.left + rect.width / 2; rect.middle = rect.top + rect.height / 2; var top = Math.min(preRect.top, rect.top); var left = Math.min(preRect.left, rect.left); var right = Math.max(preRect.left + preRect.width, rect.right); var bottom = Math.max(preRect.top + preRect.height, rect.bottom); return { top: top, left: left, right: right, bottom: bottom, width: right - left, height: bottom - top, center: (left + right) / 2, middle: (top + bottom) / 2 }; }, elementsRect[0].rect); var doAlign = Alignment[direction]; if (doAlign) { doAlign(elementsRect, selectsRect); } } }; module.exports = exports["default"];