react-image-markup
Version:
Markup Image with ReactJS (customizable)
139 lines (114 loc) • 15.7 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
var _fabric = require("fabric");
var _canvasHistory = _interopRequireDefault(require("./canvasHistory.js"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
var _default = function () {
var activeObject = false;
var drag, textColor, textFontFamily, textFontSize, customText, color;
function Text(canvas) {
var draggable = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
var params = arguments.length > 2 ? arguments[2] : undefined;
this.canvas = canvas;
this.className = "text";
this.isDrawing = false;
this.origX = 0;
this.origY = 0;
this.selectedFont = 32;
this.bindEvents();
drag = draggable;
if (color && color !== params.fill) {
color = params.fill;
return Text;
}
if (params) {
textColor = params.fill;
textFontFamily = params.fontFamily;
textFontSize = params.fontSize;
customText = params.placeholder;
}
}
;
Text.prototype.bindEvents = function () {
var inst = this;
inst.selectable = true;
inst.canvas.on("mouse:down", function (o) {
inst.onMouseDown(o);
});
inst.canvas.on("mouse:move", function (o) {
inst.onMouseMove(o);
});
inst.canvas.on("mouse:up", function (o) {
inst.onMouseUp(o);
});
Text.prototype.onMouseUp = function () {
return Text;
};
Text.prototype.onMouseMove = function () {
var inst = this;
if (!inst.isEnable()) {
return;
}
if (inst.canvas.getActiveObject()) {
activeObject = true;
} else {
activeObject = false;
}
inst.canvas.renderAll();
};
Text.prototype.onMouseDown = function (o) {
var inst = this;
if (drag) {
inst.enable();
if (inst.canvas.getActiveObject() && !inst.canvas.getActiveObject().text) {
inst.canvas.getActiveObject().selectable = false;
inst.canvas.getActiveObject().evented = false;
}
if (!inst.canvas.getActiveObject() && !activeObject || inst.canvas.getActiveObject() && !inst.canvas.getActiveObject().text) {
var pointer = inst.canvas.getPointer(o.e);
this.origX = pointer.x;
this.origY = pointer.y;
var text = new _fabric.fabric.IText(customText, {
fill: textColor,
fontFamily: textFontFamily,
left: this.origX,
top: this.origY,
fontSize: textFontSize,
hasBorders: false,
hasControls: false
});
text.selectionStart = 0;
text.selectionEnd = text.text.length;
inst.canvas.add(text).setActiveObject(text);
text.enterEditing();
text.hiddenTextarea.focus();
inst.canvas.requestRenderAll();
new _canvasHistory["default"](inst.canvas);
}
if (inst.canvas.getActiveObject() && activeObject && inst.canvas.getActiveObject().hiddenTextarea) {
inst.canvas.getActiveObject().hasControls = true;
inst.canvas.getActiveObject().hasBorders = true;
inst.canvas.getActiveObject().lockMovementX = true;
inst.canvas.getActiveObject().lockMovementY = true;
inst.canvas.getActiveObject().lockUniScaling = true;
inst.canvas.renderAll();
}
}
};
};
Text.prototype.isEnable = function () {
return this.isDrawing;
};
Text.prototype.enable = function () {
this.isDrawing = true;
};
Text.prototype.disable = function () {
this.isDrawing = false;
};
return Text;
}();
exports["default"] = _default;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hc3NldHMvanMvdGV4dC5qcyJdLCJuYW1lcyI6WyJhY3RpdmVPYmplY3QiLCJkcmFnIiwidGV4dENvbG9yIiwidGV4dEZvbnRGYW1pbHkiLCJ0ZXh0Rm9udFNpemUiLCJjdXN0b21UZXh0IiwiY29sb3IiLCJUZXh0IiwiY2FudmFzIiwiZHJhZ2dhYmxlIiwicGFyYW1zIiwiY2xhc3NOYW1lIiwiaXNEcmF3aW5nIiwib3JpZ1giLCJvcmlnWSIsInNlbGVjdGVkRm9udCIsImJpbmRFdmVudHMiLCJmaWxsIiwiZm9udEZhbWlseSIsImZvbnRTaXplIiwicGxhY2Vob2xkZXIiLCJwcm90b3R5cGUiLCJpbnN0Iiwic2VsZWN0YWJsZSIsIm9uIiwibyIsIm9uTW91c2VEb3duIiwib25Nb3VzZU1vdmUiLCJvbk1vdXNlVXAiLCJpc0VuYWJsZSIsImdldEFjdGl2ZU9iamVjdCIsInJlbmRlckFsbCIsImVuYWJsZSIsInRleHQiLCJldmVudGVkIiwicG9pbnRlciIsImdldFBvaW50ZXIiLCJlIiwieCIsInkiLCJmYWJyaWMiLCJJVGV4dCIsImxlZnQiLCJ0b3AiLCJoYXNCb3JkZXJzIiwiaGFzQ29udHJvbHMiLCJzZWxlY3Rpb25TdGFydCIsInNlbGVjdGlvbkVuZCIsImxlbmd0aCIsImFkZCIsInNldEFjdGl2ZU9iamVjdCIsImVudGVyRWRpdGluZyIsImhpZGRlblRleHRhcmVhIiwiZm9jdXMiLCJyZXF1ZXN0UmVuZGVyQWxsIiwiQ2FudmFzSGlzdG9yeSIsImxvY2tNb3ZlbWVudFgiLCJsb2NrTW92ZW1lbnRZIiwibG9ja1VuaVNjYWxpbmciLCJkaXNhYmxlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7O0FBQ0E7Ozs7ZUFDZ0IsWUFBWTtBQUN4QixNQUFJQSxZQUFZLEdBQUcsS0FBbkI7QUFDQSxNQUFJQyxJQUFKLEVBQVNDLFNBQVQsRUFBbUJDLGNBQW5CLEVBQWtDQyxZQUFsQyxFQUErQ0MsVUFBL0MsRUFBMERDLEtBQTFEOztBQUNB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Q0gsR0FGRDs7QUFHQSxTQUFPTCxJQUFQO0FBQ0gsQ0F2R2UsRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7ZmFicmljfSBmcm9tIFwiZmFicmljXCI7XHJcbmltcG9ydCBDYW52YXNIaXN0b3J5IGZyb20gXCIuL2NhbnZhc0hpc3RvcnkuanNcIjtcclxuZXhwb3J0IGRlZmF1bHQgKGZ1bmN0aW9uICgpIHtcclxuICAgIGxldCBhY3RpdmVPYmplY3QgPSBmYWxzZTtcclxuICAgIGxldCBkcmFnLHRleHRDb2xvcix0ZXh0Rm9udEZhbWlseSx0ZXh0Rm9udFNpemUsY3VzdG9tVGV4dCxjb2xvcjtcclxuICAgIGZ1bmN0aW9uIFRleHQoY2FudmFzLGRyYWdnYWJsZSA9IGZhbHNlLHBhcmFtcykge1xyXG4gICAgICAgIHRoaXMuY2FudmFzID0gY2FudmFzO1xyXG4gICAgICAgIHRoaXMuY2xhc3NOYW1lID0gXCJ0ZXh0XCI7XHJcbiAgICAgICAgdGhpcy5pc0RyYXdpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLm9yaWdYID0gMDtcclxuICAgICAgICB0aGlzLm9yaWdZID0gMDtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkRm9udCA9IDMyO1xyXG4gICAgICAgIHRoaXMuYmluZEV2ZW50cygpO1xyXG4gICAgICAgIGRyYWcgPSBkcmFnZ2FibGU7XHJcbiAgICAgICAgaWYoY29sb3IgJiYgY29sb3IgIT09IHBhcmFtcy5maWxsKXtcclxuICAgICAgICAgICAgY29sb3IgPSBwYXJhbXMuZmlsbDtcclxuICAgICAgICAgICAgcmV0dXJuIFRleHQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKHBhcmFtcyl7XHJcbiAgICAgICAgICAgIHRleHRDb2xvciA9IHBhcmFtcy5maWxsO1xyXG4gICAgICAgICAgICB0ZXh0Rm9udEZhbWlseSA9IHBhcmFtcy5mb250RmFtaWx5O1xyXG4gICAgICAgICAgICB0ZXh0Rm9udFNpemUgPSBwYXJhbXMuZm9udFNpemU7XHJcbiAgICAgICAgICAgIGN1c3RvbVRleHQgPSBwYXJhbXMucGxhY2Vob2xkZXI7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIFRleHQucHJvdG90eXBlLmJpbmRFdmVudHMgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgbGV0IGluc3QgPSB0aGlzO1xyXG4gICAgICAgIGluc3Quc2VsZWN0YWJsZSA9IHRydWU7XHJcbiAgICAgICAgaW5zdC5jYW52YXMub24oXCJtb3VzZTpkb3duXCIsIGZ1bmN0aW9uIChvKSB7XHJcbiAgICAgICAgICAgIGluc3Qub25Nb3VzZURvd24obyk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaW5zdC5jYW52YXMub24oXCJtb3VzZTptb3ZlXCIsIGZ1bmN0aW9uIChvKSB7XHJcbiAgICAgICAgICAgIGluc3Qub25Nb3VzZU1vdmUobyk7XHJcblxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGluc3QuY2FudmFzLm9uKFwibW91c2U6dXBcIiwgZnVuY3Rpb24gKG8pIHtcclxuICAgICAgICAgICAgaW5zdC5vbk1vdXNlVXAobyk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgVGV4dC5wcm90b3R5cGUub25Nb3VzZVVwID0gZnVuY3Rpb24gKCkgeyAgICAgICAgICBcclxuICAgICAgICAgICAgcmV0dXJuIFRleHQ7XHJcbiAgICAgICAgfTtcclxuICAgICAgICBUZXh0LnByb3RvdHlwZS5vbk1vdXNlTW92ZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgbGV0IGluc3QgPSB0aGlzO1xyXG4gICAgICAgICAgICBpZiAoIWluc3QuaXNFbmFibGUoKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmKGluc3QuY2FudmFzLmdldEFjdGl2ZU9iamVjdCgpKXtcclxuICAgICAgICAgICAgICAgIGFjdGl2ZU9iamVjdCA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZXtcclxuICAgICAgICAgICAgICAgIGFjdGl2ZU9iamVjdCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGluc3QuY2FudmFzLnJlbmRlckFsbCgpO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgVGV4dC5wcm90b3R5cGUub25Nb3VzZURvd24gPSBmdW5jdGlvbiAobykge1xyXG4gICAgICAgICAgICBsZXQgaW5zdCA9IHRoaXM7ICAgICAgICAgICBcclxuICAgICAgICAgICAgaWYoZHJhZyl7ICAgXHJcbiAgICAgICAgICAgICAgICBpbnN0LmVuYWJsZSgpOyAgIFxyXG4gICAgICAgICAgICAgICAgaWYoaW5zdC5jYW52YXMuZ2V0QWN0aXZlT2JqZWN0KCkgJiYgIWluc3QuY2FudmFzLmdldEFjdGl2ZU9iamVjdCgpLnRleHQpe1xyXG4gICAgICAgICAgICAgICAgICAgIGluc3QuY2FudmFzLmdldEFjdGl2ZU9iamVjdCgpLnNlbGVjdGFibGUgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICBpbnN0LmNhbnZhcy5nZXRBY3RpdmVPYmplY3QoKS5ldmVudGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9ICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIGlmKCghaW5zdC5jYW52YXMuZ2V0QWN0aXZlT2JqZWN0KCkgJiYgIWFjdGl2ZU9iamVjdCkgfHwgKGluc3QuY2FudmFzLmdldEFjdGl2ZU9iamVjdCgpICYmICFpbnN0LmNhbnZhcy5nZXRBY3RpdmVPYmplY3QoKS50ZXh0KSl7ICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICBsZXQgcG9pbnRlciA9IGluc3QuY2FudmFzLmdldFBvaW50ZXIoby5lKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm9yaWdYID0gcG9pbnRlci54O1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3JpZ1kgPSBwb2ludGVyLnk7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHRleHQgPSBuZXcgZmFicmljLklUZXh0KGN1c3RvbVRleHQsIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsbDp0ZXh0Q29sb3IsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRGYW1pbHk6IHRleHRGb250RmFtaWx5LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZWZ0OiB0aGlzLm9yaWdYLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0b3A6IHRoaXMub3JpZ1ksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRTaXplOiB0ZXh0Rm9udFNpemUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGhhc0JvcmRlcnM6ZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGhhc0NvbnRyb2xzOmZhbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHRleHQuc2VsZWN0aW9uU3RhcnQgPSAwO1xyXG4gICAgICAgICAgICAgICAgICAgIHRleHQuc2VsZWN0aW9uRW5kID0gdGV4dC50ZXh0Lmxlbmd0aDtcclxuICAgICAgICAgICAgICAgICAgICBpbnN0LmNhbnZhcy5hZGQodGV4dCkuc2V0QWN0aXZlT2JqZWN0KHRleHQpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRleHQuZW50ZXJFZGl0aW5nKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGV4dC5oaWRkZW5UZXh0YXJlYS5mb2N1cygpO1xyXG4gICAgICAgICAgICAgICAgICAgIGluc3QuY2FudmFzLnJlcXVlc3RSZW5kZXJBbGwoKTtcclxuICAgICAgICAgICAgICAgICAgICBuZXcgQ2FudmFzSGlzdG9yeShpbnN0LmNhbnZhcylcclxuICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgaWYoaW5zdC5jYW52YXMuZ2V0QWN0aXZlT2JqZWN0KCkgJiYgYWN0aXZlT2JqZWN0ICYmIGluc3QuY2FudmFzLmdldEFjdGl2ZU9iamVjdCgpLmhpZGRlblRleHRhcmVhKXsgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIGluc3QuY2FudmFzLmdldEFjdGl2ZU9iamVjdCgpLmhhc0NvbnRyb2xzID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICBpbnN0LmNhbnZhcy5nZXRBY3RpdmVPYmplY3QoKS5oYXNCb3JkZXJzID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICBpbnN0LmNhbnZhcy5nZXRBY3RpdmVPYmplY3QoKS5sb2NrTW92ZW1lbnRYID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICBpbnN0LmNhbnZhcy5nZXRBY3RpdmVPYmplY3QoKS5sb2NrTW92ZW1lbnRZID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICBpbnN0LmNhbnZhcy5nZXRBY3RpdmVPYmplY3QoKS5sb2NrVW5pU2NhbGluZyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgaW5zdC5jYW52YXMucmVuZGVyQWxsKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgfTtcclxuICAgIFRleHQucHJvdG90eXBlLmlzRW5hYmxlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmlzRHJhd2luZztcclxuICAgIH07XHJcbiAgICBUZXh0LnByb3RvdHlwZS5lbmFibGUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdGhpcy5pc0RyYXdpbmcgPSB0cnVlO1xyXG4gICAgfTtcclxuICAgIFRleHQucHJvdG90eXBlLmRpc2FibGUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdGhpcy5pc0RyYXdpbmcgPSBmYWxzZTtcclxuICAgIH07XHJcbiAgICByZXR1cm4gVGV4dDtcclxufSgpKTtcclxuIl19