52 lines
1.2 KiB
JavaScript
52 lines
1.2 KiB
JavaScript
import { SVG } from "svg-engine";
|
|
import { renderQRCode, renderSwissCross } from "../shared/qr-code.js";
|
|
class SwissQRCode {
|
|
/**
|
|
* Creates a Swiss QR Code.
|
|
*
|
|
* @param data The data to be encoded in the QR code.
|
|
* @param size The size of the QR code in mm.
|
|
* @throws { ValidationError } Throws an error if the data is invalid.
|
|
*/
|
|
constructor(data, size = 46) {
|
|
this.instance = new SVG();
|
|
this.instance.width(`${size}mm`);
|
|
this.instance.height(`${size}mm`);
|
|
renderQRCode(data, size, (xPos, yPos, blockSize) => {
|
|
this.instance.addRect(
|
|
`${xPos}mm`,
|
|
`${yPos}mm`,
|
|
`${blockSize}mm`,
|
|
`${blockSize}mm`
|
|
).fill("black");
|
|
});
|
|
renderSwissCross(size, (xPos, yPos, width, height, fillColor) => {
|
|
this.instance.addRect(
|
|
`${xPos}mm`,
|
|
`${yPos}mm`,
|
|
`${width}mm`,
|
|
`${height}mm`
|
|
).fill(fillColor);
|
|
});
|
|
}
|
|
/**
|
|
* Outputs the SVG as a string.
|
|
*
|
|
* @returns The outerHTML of the SVG element.
|
|
*/
|
|
toString() {
|
|
return this.instance.outerHTML;
|
|
}
|
|
/**
|
|
* Returns the SVG element.
|
|
*
|
|
* @returns The SVG element.
|
|
*/
|
|
get element() {
|
|
return this.instance.element;
|
|
}
|
|
}
|
|
export {
|
|
SwissQRCode
|
|
};
|