alipay-emulator/uni_modules/lime-barcode/components/l-barcode/jsbarcode/help/getRenderProperties.js

103 lines
2.8 KiB
JavaScript

/* global HTMLImageElement */
/* global HTMLCanvasElement */
/* global SVGElement */
import getOptionsFromElement from "./getOptionsFromElement.js";
import renderers from "../renderers";
import { InvalidElementException } from "../exceptions/exceptions.js";
// Takes an element and returns an object with information about how
// it should be rendered
// This could also return an array with these objects
// {
// element: The element that the renderer should draw on
// renderer: The name of the renderer
// afterRender (optional): If something has to done after the renderer
// completed, calls afterRender (function)
// options (optional): Options that can be defined in the element
// }
function getRenderProperties(element) {
// If the element is a string, query select call again
if (typeof element === "string") {
return querySelectedRenderProperties(element);
}
// If element is array. Recursivly call with every object in the array
else if (Array.isArray(element)) {
var returnArray = [];
for (let i = 0; i < element.length; i++) {
returnArray.push(getRenderProperties(element[i]));
}
return returnArray;
}
// If element, render on canvas and set the uri as src
else if (typeof HTMLCanvasElement !== 'undefined' && element instanceof HTMLImageElement) {
return newCanvasRenderProperties(element);
}
// If SVG
else if (
(element && element.nodeName && element.nodeName.toLowerCase() === 'svg') ||
(typeof SVGElement !== 'undefined' && element instanceof SVGElement)
) {
return {
element: element,
options: getOptionsFromElement(element),
renderer: renderers.SVGRenderer
};
}
// If canvas (in browser)
else if (typeof HTMLCanvasElement !== 'undefined' && element instanceof HTMLCanvasElement) {
return {
element: element,
options: getOptionsFromElement(element),
renderer: renderers.CanvasRenderer
};
}
// If canvas (in node)
else if (element && element.getContext) {
return {
element: element,
renderer: renderers.CanvasRenderer
};
}
else if (element && typeof element === 'object' && !element.nodeName) {
return {
element: element,
renderer: renderers.ObjectRenderer
};
}
else {
throw new InvalidElementException();
}
}
function querySelectedRenderProperties(string) {
var selector = document.querySelectorAll(string);
if (selector.length === 0) {
return undefined;
}
else {
let returnArray = [];
for (let i = 0; i < selector.length; i++) {
returnArray.push(getRenderProperties(selector[i]));
}
return returnArray;
}
}
function newCanvasRenderProperties(imgElement) {
var canvas = document.createElement('canvas');
return {
element: canvas,
options: getOptionsFromElement(imgElement),
renderer: renderers.CanvasRenderer,
afterRender: function () {
imgElement.setAttribute("src", canvas.toDataURL());
}
};
}
export default getRenderProperties;