@megaads/wm
Version:
To install the library, use npm:
179 lines (155 loc) • 5.49 kB
text/typescript
import {
CircularTextInputElement,
DynamicImageElement,
ImagePlaceHolderElement,
TextInputElement,
VectorElement
} from "./types";
export function parseFloatAttr(object: any) {
for (const k in object) {
if (!isNaN(object[k]) && ['string', 'number'].includes(typeof object[k]) && isNumeric(object[k])) {
object[k] = parseFloat(object[k]);
}
}
return object;
}
export function isNumeric(value: any) {
return !isNaN(value - parseFloat(value));
}
export function getRenderConfigTextBoxCircular(element: CircularTextInputElement) {
element.uid = 'E' + element.id + '_' + element.elementId;
element.config = parseFloatAttr(element.config);
try {
let text = ' ';
if (typeof element.config.textConfig != 'undefined' && element.config.textConfig.text) {
text = element.config.textConfig.text;
}
// @ts-ignore
let textConfig = Object.assign({}, element.config.textConfig);
let hideText = false;
if (text == ' ') {
hideText = true;
}
if (textConfig.prefix) {
text = textConfig.prefix + text;
}
if (textConfig.suffix) {
text = text + textConfig.suffix;
}
if (textConfig.caps) {
text = text.toUpperCase();
}
textConfig.text = text;
textConfig.angle = element.config.rotation;
return {
drawType: 'text_circular',
config: {
uid: element.uid,
centerX: element.config.centerX,
centerY: element.config.centerY,
angle: element.config.rotation,
editable: element.config.editable,
breakWords: false,
strokeUniform: true,
textConfig: textConfig,
disabled: hideText
}
};
} catch (e) {}
}
export function getRenderConfigTextBox(element: TextInputElement) {
element.uid = 'E' + element.id + '_' + element.elementId;
element.config = parseFloatAttr(element.config);
try {
let text = ' ';
if (typeof element.config.textConfig != 'undefined' && element.config.textConfig.text) {
text = element.config.textConfig.text;
}
// @ts-ignore
let textConfig = Object.assign({}, element.config.textConfig);
let hideText = false;
if (text == ' ') {
hideText = true;
}
if (textConfig.prefix) {
text = textConfig.prefix + text;
}
if (textConfig.suffix) {
text = text + textConfig.suffix;
}
if (textConfig.caps) {
text = text.toUpperCase();
}
textConfig.text = text;
return {
drawType: 'text',
config: {
uid: element.uid,
centerX: element.config.centerX,
centerY: element.config.centerY,
width: element.config.sWidth,
height: element.config.sHeight,
s_width: element.config.sWidth,
s_height: element.config.sHeight,
angle: element.config.rotation,
editable: element.config.editable,
multiline: element.config.multiline,
breakWords: element.config.breakWords,
strokeUniform: true,
textConfig: textConfig,
disabled: hideText
}
};
} catch (e) {}
}
export function getRenderConfigImage(element: DynamicImageElement | ImagePlaceHolderElement) {
element.uid = 'E' + element.id + '_' + element.elementId;
element.config = parseFloatAttr(element.config);
let imageUrl = element.config.imageUrl;
if (element.config.staticPath) {
imageUrl = element.config.staticPath;
}
if (!imageUrl) {
imageUrl = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII=';
}
return {
drawType: 'image',
config: {
uid: element.uid,
element_id: element.elementId,
src: imageUrl,
s_width: element.config.sWidth,
s_height: element.config.sHeight,
centerX: element.config.centerX,
centerY: element.config.centerY,
angle: element.config.rotation,
locked: element.config.locked,
evented: element.config.evented,
maskPath: element.config.maskPath,
coverMaskArea: element.config.coverMaskArea,
}
}
}
export function getRenderConfigVectorEps(element: VectorElement) {
element.uid = 'E' + element.id + '_' + element.elementId;
element.config = parseFloatAttr(element.config);
let vectorUrl = element.config.imageUrl;
if (!vectorUrl) {
vectorUrl = 'https://upload.wikimedia.org/wikipedia/commons/9/9e/Blank.svg';
}
return {
drawType: 'vector',
config: {
uid: element.uid,
element_id: element.elementId,
src: vectorUrl,
s_width: element.config.sWidth,
s_height: element.config.sHeight,
centerX: element.config.centerX,
centerY: element.config.centerY,
angle: element.config.rotation,
locked: element.config.locked,
evented: element.config.evented
}
}
}