UNPKG

vue-poster-editor

Version:

A poster editor based on Vue.js

288 lines (231 loc) 10.1 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _merge2 = require('lodash/merge'); var _merge3 = _interopRequireDefault(_merge2); var _jquery = require('jquery'); var _jquery2 = _interopRequireDefault(_jquery); var _utils = require('../utils/utils'); var _utils2 = _interopRequireDefault(_utils); var _vueInherit = require('../utils/vue-inherit'); var _vueInherit2 = _interopRequireDefault(_vueInherit); var _editorElementEditor = require('./editor-element-editor'); var _editorElementEditor2 = _interopRequireDefault(_editorElementEditor); var _editorImageCroper = require('./editor-image-croper.html'); var _editorImageCroper2 = _interopRequireDefault(_editorImageCroper); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } exports.default = (0, _vueInherit2.default)(_editorElementEditor2.default, { template: _editorImageCroper2.default, props: ['model', 'currentElement', 'currentLayout', 'global'], data: function data() { return { type: 'croper', clickLocked: true, showGrid: false }; }, computed: { editModelInner: function editModelInner() { var model = this.model; if (!model) { return false; } var innerProps = this.innerProps; var editModelInner = innerProps.editModelInner; if (editModelInner && model === innerProps.modelCache) { return editModelInner; } var padding = model.padding; editModelInner = (0, _merge3.default)({}, model, { type: '$' + this.type, $name: '$cropperInner', active: true, $dragLimit: true, $customDragMove: true, height: model.height + padding[0] + padding[2], width: model.width + padding[1] + padding[3], left: model.left, top: model.top, resize: 7, rotatable: false, dragable: true, $guider: { show: true, snapTo: true } }); editModelInner = this.editor.createElement(editModelInner); model.$editing = true; innerProps.editModelInner = editModelInner; innerProps.modelCache = model; return editModelInner; } }, watch: {}, methods: { activeInnerEdit: function activeInnerEdit(e) { var editModelInner = this.editModelInner; this.editor.focusElement(editModelInner); editModelInner.active = true; this.$events.$emit('imageCroper.activeInner', e); }, activeOuterEdit: function activeOuterEdit(e) { var _this = this; (0, _jquery2.default)(this.$el).off('mousedown'); setTimeout(function () { _this.$events.$emit('transform.drag', e); }, 0); }, updateInner: function updateInner() { var modelInner = this.editModelInner; if (modelInner.active) { var rotate = this.model.rotate; var editModel = this.editModel; var modelClip = this.editModelClip; var xOffset = (editModel.width - modelInner.width) / 2; var yOffset = (editModel.height - modelInner.height) / 2; var dx = modelInner.left - editModel.left - xOffset; var dy = modelInner.top - editModel.top - yOffset; var sin = Math.sin(rotate / 180 * Math.PI); var cos = Math.cos(rotate / 180 * Math.PI); var left = dx * cos + dy * sin; var top = -dx * sin + dy * cos; modelClip.left = left + xOffset; modelClip.top = top + yOffset; modelClip.right = editModel.width - (modelClip.left + modelInner.width); modelClip.bottom = editModel.height - (modelClip.top + modelInner.height); } } }, events: { 'editor.transform.active': function editorTransformActive() { this.showGrid = true; if (this.editModelInner.$resizeLimit) { this.editModelInner.$getResizeLimit = function (self) { var resizeLimit = { minWidth: 2, minHeight: 2, maxWidth: self.editModel.width - self.editModelClip.left, maxHeight: self.editModel.height - self.editModelClip.top }; return function (drag) { if (drag.dir.indexOf('w') > -1) { resizeLimit.maxWidth = self.editModel.width - self.editModelClip.right; } if (drag.dir.indexOf('n') > -1) { resizeLimit.maxHeight = self.editModel.height - self.editModelClip.bottom; } return resizeLimit; }; }(this); } }, 'editor.transform.resizing': function editorTransformResizing(drag, element) { if (element === this.editModelInner) { this.updateInner(); } }, 'editor.transform.inactive': function editorTransformInactive() { var _editModel = this.editModel, width = _editModel.width, height = _editModel.height; this.$events.$emit('imageCroper.resizeEnd', { width: width, height: height }); this.showGrid = false; }, 'editor.drag.customMoving': function editorDragCustomMoving(_ref) { var element = _ref.element, dx = _ref.dx, dy = _ref.dy; var _element$$getDragLimi = element.$getDragLimit(), baseLeft = _element$$getDragLimi.baseLeft, baseTop = _element$$getDragLimi.baseTop; var _ref2 = [baseLeft + dx, baseTop + dy]; this.editModel.left = _ref2[0]; this.editModel.top = _ref2[1]; }, 'editor.drag.active': function editorDragActive(element) { if (element.type !== '$croper') { this.editor.$events.$emit('editor.edit.apply', this.editModel); return; } this.showGrid = true; var editModel = this.editModel, editModelInner = this.editModelInner; var xBound = (editModelInner.width + editModel.width) / 2; var yBound = (editModelInner.height + editModel.height) / 2; var dragLimit = { minLeft: -xBound, maxLeft: xBound, minTop: -yBound, maxTop: yBound, baseLeft: editModel.left, baseTop: editModel.top, centerDeltaX: editModel.left + editModel.width / 2 - (editModelInner.left + editModelInner.width / 2), centerDeltaY: editModel.top + editModel.height / 2 - (editModelInner.top + editModelInner.height / 2) }; editModel.$getDragLimit = editModelInner.$getDragLimit = function () { return dragLimit; }; if (editModelInner) { if (editModelInner.active) { editModelInner.snapBboxList = _utils2.default.getBBox(this.editModel); } else { this.editModel.snapBboxList = _utils2.default.getBBox(editModelInner); } } }, 'editor.drag.moving': function editorDragMoving() { this.updateInner(); }, 'editor.drag.inactive': function editorDragInactive() { this.showGrid = false; }, 'imageCroper.scale': function imageCroperScale(scale) { this.scaling = true; var model = this.model, editModel = this.editModel, editModelClip = this.editModelClip, editModelInner = this.editModelInner; var originWidth = model.$naturalWidth; var originHeight = model.$naturalHeight; var newWidth = originWidth * scale; var newHeight = originHeight * scale; var leftDiff = (editModel.width - newWidth) / 2; var topDiff = (editModel.height - newHeight) / 2; editModel.width = newWidth; editModel.height = newHeight; editModel.left = editModel.left + leftDiff; editModel.top = editModel.top + topDiff; editModelClip.top = editModelClip.top - topDiff; editModelClip.left = editModelClip.left - leftDiff; editModelClip.right = editModel.width - (editModelClip.left + editModelInner.width); editModelClip.bottom = editModel.height - (editModelClip.top + editModelInner.height); }, 'imageCroper.scaleEnd': function imageCroperScaleEnd() { delete this.scaling; }, 'imageCroper.activeInner': function imageCroperActiveInner() { this.editor.focusElement(this.editModelInner); if (!this.editModelInner.active) { this.activeInnerEdit(); } }, 'imageCroper.activeOuter': function imageCroperActiveOuter() { if (this.editModelInner.active) { this.editor.focusElement(this.editModel); } } }, mounted: function mounted() { var _this2 = this; this.editor.focusElement(this.editModel); if (this.options.cropperOptions.defaultTarget === 'inner') { this.$nextTick(function () { _this2.editor.focusElement(_this2.editModelInner); _this2.editModelInner.active = true; }); } } }); module.exports = exports['default'];