UNPKG

ng-zorro-antd

Version:

An enterprise-class UI components based on Ant Design and Angular

87 lines 15.2 kB
/** * Use of this source code is governed by an MIT-style license that can be * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE */ import qrcodegen from './qrcodegen'; export const ERROR_LEVEL_MAP = { L: qrcodegen.QrCode.Ecc.LOW, M: qrcodegen.QrCode.Ecc.MEDIUM, Q: qrcodegen.QrCode.Ecc.QUARTILE, H: qrcodegen.QrCode.Ecc.HIGH }; const DEFAULT_SIZE = 160; const DEFAULT_SCALE = 10; const DEFAULT_PADDING = 10; const DEFAULT_COLOR = '#000000'; const DEFAULT_BACKGROUND_COLOR = '#FFFFFF'; const DEFAULT_ICONSIZE = 40; const DEFAULT_LEVEL = 'M'; export const plotQRCodeData = (value, level = DEFAULT_LEVEL) => { if (!value) { return null; } return qrcodegen.QrCode.encodeText(value, ERROR_LEVEL_MAP[level]); }; export function drawCanvas(canvas, value, size = DEFAULT_SIZE, scale = DEFAULT_SCALE, padding = DEFAULT_PADDING, color = DEFAULT_COLOR, backgroundColor = DEFAULT_BACKGROUND_COLOR, iconSize = DEFAULT_ICONSIZE, icon) { const ctx = canvas.getContext('2d'); const formattedPadding = formatPadding(padding); canvas.style.width = `${size}px`; canvas.style.height = `${size}px`; if (!value) { ctx.fillStyle = 'rgba(0, 0, 0, 0)'; ctx.fillRect(0, 0, canvas.width, canvas.height); return; } canvas.width = value.size * scale + formattedPadding[1] + formattedPadding[3]; canvas.height = value.size * scale + formattedPadding[0] + formattedPadding[2]; if (!icon) { drawCanvasBackground(ctx, canvas.width, canvas.height, scale, backgroundColor); drawCanvasColor(ctx, value, scale, formattedPadding, backgroundColor, color); } else { const iconImg = new Image(); iconImg.src = icon; iconImg.crossOrigin = 'anonymous'; iconImg.width = iconSize * (canvas.width / size); iconImg.height = iconSize * (canvas.width / size); iconImg.onload = () => { drawCanvasBackground(ctx, canvas.width, canvas.height, scale, backgroundColor); drawCanvasColor(ctx, value, scale, formattedPadding, backgroundColor, color); const iconCoordinate = canvas.width / 2 - (iconSize * (canvas.width / size)) / 2; ctx.fillRect(iconCoordinate, iconCoordinate, iconSize * (canvas.width / size), iconSize * (canvas.width / size)); ctx.drawImage(iconImg, iconCoordinate, iconCoordinate, iconSize * (canvas.width / size), iconSize * (canvas.width / size)); }; iconImg.onerror = () => { drawCanvasBackground(ctx, canvas.width, canvas.height, scale, backgroundColor); drawCanvasColor(ctx, value, scale, formattedPadding, backgroundColor, color); }; } } export function drawCanvasColor(ctx, value, scale, padding, backgroundColor, color) { for (let y = 0; y < value.size; y++) { for (let x = 0; x < value.size; x++) { ctx.fillStyle = value.getModule(x, y) ? color : backgroundColor; ctx.fillRect(padding[3] + x * scale, padding[0] + y * scale, scale, scale); } } } export function drawCanvasBackground(ctx, width, height, scale, backgroundColor) { for (let y = 0; y < height; y++) { for (let x = 0; x < width; x++) { ctx.fillStyle = backgroundColor; ctx.fillRect(x * scale, y * scale, scale, scale); } } } export function formatPadding(padding) { if (Array.isArray(padding)) { // Build an array of 4 elements and repeat values from padding as necessary to set the value of the array return Array(4) .fill(0) .map((_, index) => padding[index % padding.length]); } else { return [padding, padding, padding, padding]; } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXJjb2RlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vY29tcG9uZW50cy9xci1jb2RlL3FyY29kZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFFSCxPQUFPLFNBQVMsTUFBTSxhQUFhLENBQUM7QUFFcEMsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUErRDtJQUN6RixDQUFDLEVBQUUsU0FBUyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRztJQUMzQixDQUFDLEVBQUUsU0FBUyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTTtJQUM5QixDQUFDLEVBQUUsU0FBUyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsUUFBUTtJQUNoQyxDQUFDLEVBQUUsU0FBUyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSTtDQUNwQixDQUFDO0FBRVgsTUFBTSxZQUFZLEdBQUcsR0FBRyxDQUFDO0FBQ3pCLE1BQU0sYUFBYSxHQUFHLEVBQUUsQ0FBQztBQUN6QixNQUFNLGVBQWUsR0FBRyxFQUFFLENBQUM7QUFDM0IsTUFBTSxhQUFhLEdBQUcsU0FBUyxDQUFDO0FBQ2hDLE1BQU0sd0JBQXdCLEdBQUcsU0FBUyxDQUFDO0FBQzNDLE1BQU0sZ0JBQWdCLEdBQUcsRUFBRSxDQUFDO0FBQzVCLE1BQU0sYUFBYSxHQUFpQyxHQUFHLENBQUM7QUFFeEQsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLENBQzVCLEtBQWEsRUFDYixRQUFzQyxhQUFhLEVBQzFCLEVBQUU7SUFDM0IsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ1gsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBQ0QsT0FBTyxTQUFTLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDcEUsQ0FBQyxDQUFDO0FBRUYsTUFBTSxVQUFVLFVBQVUsQ0FDeEIsTUFBeUIsRUFDekIsS0FB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RUQsTUFBTSxVQUFVLG9CQUFvQixDQUNsQyxHQUE2QixFQUM3QixLQUFhLEVBQ2IsTUFBYyxFQUNkLEtBQWEsRUFDYixlQUF1QjtJQUV2QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDaEMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQy9CLEdBQUcsQ0FBQyxTQUFTLEdBQUcsZUFBZSxDQUFDO1lBQ2hDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLEtBQUssRUFBRSxDQUFDLEdBQUcsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNuRCxDQUFDO0lBQ0gsQ0FBQztBQUNILENBQUM7QUFFRCxNQUFNLFVBQVUsYUFBYSxDQUFDLE9BQTBCO0lBQ3RELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQzNCLHlHQUF5RztRQUN6RyxPQUFPLEtBQUssQ0FBQyxDQUFDLENBQUM7YUFDWixJQUFJLENBQUMsQ0FBQyxDQUFDO2FBQ1AsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUN4RCxDQUFDO1NBQU0sQ0FBQztRQUNOLE9BQU8sQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztJQUM5QyxDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9naXRodWIuY29tL05HLVpPUlJPL25nLXpvcnJvLWFudGQvYmxvYi9tYXN0ZXIvTElDRU5TRVxuICovXG5cbmltcG9ydCBxcmNvZGVnZW4gZnJvbSAnLi9xcmNvZGVnZW4nO1xuXG5leHBvcnQgY29uc3QgRVJST1JfTEVWRUxfTUFQOiB7IFtpbmRleCBpbiAnTCcgfCAnTScgfCAnUScgfCAnSCddOiBxcmNvZGVnZW4uUXJDb2RlLkVjYyB9ID0ge1xuICBMOiBxcmNvZGVnZW4uUXJDb2RlLkVjYy5MT1csXG4gIE06IHFyY29kZWdlbi5RckNvZGUuRWNjLk1FRElVTSxcbiAgUTogcXJjb2RlZ2VuLlFyQ29kZS5FY2MuUVVBUlRJTEUsXG4gIEg6IHFyY29kZWdlbi5RckNvZGUuRWNjLkhJR0hcbn0gYXMgY29uc3Q7XG5cbmNvbnN0IERFRkFVTFRfU0laRSA9IDE2MDtcbmNvbnN0IERFRkFVTFRfU0NBTEUgPSAxMDtcbmNvbnN0IERFRkFVTFRfUEFERElORyA9IDEwO1xuY29uc3QgREVGQVVMVF9DT0xPUiA9ICcjMDAwMDAwJztcbmNvbnN0IERFRkFVTFRfQkFDS0dST1VORF9DT0xPUiA9ICcjRkZGRkZGJztcbmNvbnN0IERFRkFVTFRfSUNPTlNJWkUgPSA0MDtcbmNvbnN0IERFRkFVTFRfTEVWRUw6IGtleW9mIHR5cGVvZiBFUlJPUl9MRVZFTF9NQVAgPSAnTSc7XG5cbmV4cG9ydCBjb25zdCBwbG90UVJDb2RlRGF0YSA9IChcbiAgdmFsdWU6IHN0cmluZyxcbiAgbGV2ZWw6IGtleW9mIHR5cGVvZiBFUlJPUl9MRVZFTF9NQVAgPSBERUZBVUxUX0xFVkVMXG4pOiBxcmNvZGVnZW4uUXJDb2RlIHwgbnVsbCA9PiB7XG4gIGlmICghdmFsdWUpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICByZXR1cm4gcXJjb2RlZ2VuLlFyQ29kZS5lbmNvZGVUZXh0KHZhbHVlLCBFUlJPUl9MRVZFTF9NQVBbbGV2ZWxdKTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBkcmF3Q2FudmFzKFxuICBjYW52YXM6IEhUTUxDYW52YXNFbGVtZW50LFxuICB2YWx1ZTogcXJjb2RlZ2VuLlFyQ29kZSB8IG51bGwsXG4gIHNpemUgPSBERUZBVUxUX1NJWkUsXG4gIHNjYWxlID0gREVGQVVMVF9TQ0FMRSxcbiAgcGFkZGluZzogbnVtYmVyIHwgbnVtYmVyW10gPSBERUZBVUxUX1BBRERJTkcsXG4gIGNvbG9yID0gREVGQVVMVF9DT0xPUixcbiAgYmFja2dyb3VuZENvbG9yID0gREVGQVVMVF9CQUNLR1JPVU5EX0NPTE9SLFxuICBpY29uU2l6ZSA9IERFRkFVTFRfSUNPTlNJWkUsXG4gIGljb24/OiBzdHJpbmdcbik6IHZvaWQge1xuICBjb25zdCBjdHggPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKSBhcyBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ7XG4gIGNvbnN0IGZvcm1hdHRlZFBhZGRpbmcgPSBmb3JtYXRQYWRkaW5nKHBhZGRpbmcpO1xuICBjYW52YXMuc3R5bGUud2lkdGggPSBgJHtzaXplfXB4YDtcbiAgY2FudmFzLnN0eWxlLmhlaWdodCA9IGAke3NpemV9cHhgO1xuICBpZiAoIXZhbHVlKSB7XG4gICAgY3R4LmZpbGxTdHlsZSA9ICdyZ2JhKDAsIDAsIDAsIDApJztcbiAgICBjdHguZmlsbFJlY3QoMCwgMCwgY2FudmFzLndpZHRoLCBjYW52YXMuaGVpZ2h0KTtcbiAgICByZXR1cm47XG4gIH1cbiAgY2FudmFzLndpZHRoID0gdmFsdWUuc2l6ZSAqIHNjYWxlICsgZm9ybWF0dGVkUGFkZGluZ1sxXSArIGZvcm1hdHRlZFBhZGRpbmdbM107XG4gIGNhbnZhcy5oZWlnaHQgPSB2YWx1ZS5zaXplICogc2NhbGUgKyBmb3JtYXR0ZWRQYWRkaW5nWzBdICsgZm9ybWF0dGVkUGFkZGluZ1syXTtcbiAgaWYgKCFpY29uKSB7XG4gICAgZHJhd0NhbnZhc0JhY2tncm91bmQoY3R4LCBjYW52YXMud2lkdGgsIGNhbnZhcy5oZWlnaHQsIHNjYWxlLCBiYWNrZ3JvdW5kQ29sb3IpO1xuICAgIGRyYXdDYW52YXNDb2xvcihjdHgsIHZhbHVlLCBzY2FsZSwgZm9ybWF0dGVkUGFkZGluZywgYmFja2dyb3VuZENvbG9yLCBjb2xvcik7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgaWNvbkltZyA9IG5ldyBJbWFnZSgpO1xuICAgIGljb25JbWcuc3JjID0gaWNvbjtcbiAgICBpY29uSW1nLmNyb3NzT3JpZ2luID0gJ2Fub255bW91cyc7XG4gICAgaWNvbkltZy53aWR0aCA9IGljb25TaXplICogKGNhbnZhcy53aWR0aCAvIHNpemUpO1xuICAgIGljb25JbWcuaGVpZ2h0ID0gaWNvblNpemUgKiAoY2FudmFzLndpZHRoIC8gc2l6ZSk7XG4gICAgaWNvbkltZy5vbmxvYWQgPSAoKSA9PiB7XG4gICAgICBkcmF3Q2FudmFzQmFja2dyb3VuZChjdHgsIGNhbnZhcy53aWR0aCwgY2FudmFzLmhlaWdodCwgc2NhbGUsIGJhY2tncm91bmRDb2xvcik7XG4gICAgICBkcmF3Q2FudmFzQ29sb3IoY3R4LCB2YWx1ZSwgc2NhbGUsIGZvcm1hdHRlZFBhZGRpbmcsIGJhY2tncm91bmRDb2xvciwgY29sb3IpO1xuICAgICAgY29uc3QgaWNvbkNvb3JkaW5hdGUgPSBjYW52YXMud2lkdGggLyAyIC0gKGljb25TaXplICogKGNhbnZhcy53aWR0aCAvIHNpemUpKSAvIDI7XG5cbiAgICAgIGN0eC5maWxsUmVjdChpY29uQ29vcmRpbmF0ZSwgaWNvbkNvb3JkaW5hdGUsIGljb25TaXplICogKGNhbnZhcy53aWR0aCAvIHNpemUpLCBpY29uU2l6ZSAqIChjYW52YXMud2lkdGggLyBzaXplKSk7XG4gICAgICBjdHguZHJhd0ltYWdlKFxuICAgICAgICBpY29uSW1nLFxuICAgICAgICBpY29uQ29vcmRpbmF0ZSxcbiAgICAgICAgaWNvbkNvb3JkaW5hdGUsXG4gICAgICAgIGljb25TaXplICogKGNhbnZhcy53aWR0aCAvIHNpemUpLFxuICAgICAgICBpY29uU2l6ZSAqIChjYW52YXMud2lkdGggLyBzaXplKVxuICAgICAgKTtcbiAgICB9O1xuICAgIGljb25JbWcub25lcnJvciA9ICgpID0+IHtcbiAgICAgIGRyYXdDYW52YXNCYWNrZ3JvdW5kKGN0eCwgY2FudmFzLndpZHRoLCBjYW52YXMuaGVpZ2h0LCBzY2FsZSwgYmFja2dyb3VuZENvbG9yKTtcbiAgICAgIGRyYXdDYW52YXNDb2xvcihjdHgsIHZhbHVlLCBzY2FsZSwgZm9ybWF0dGVkUGFkZGluZywgYmFja2dyb3VuZENvbG9yLCBjb2xvcik7XG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZHJhd0NhbnZhc0NvbG9yKFxuICBjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCxcbiAgdmFsdWU6IHFyY29kZWdlbi5RckNvZGUsXG4gIHNjYWxlOiBudW1iZXIsXG4gIHBhZGRpbmc6IG51bWJlcltdLFxuICBiYWNrZ3JvdW5kQ29sb3I6IHN0cmluZyxcbiAgY29sb3I6IHN0cmluZ1xuKTogdm9pZCB7XG4gIGZvciAobGV0IHkgPSAwOyB5IDwgdmFsdWUuc2l6ZTsgeSsrKSB7XG4gICAgZm9yIChsZXQgeCA9IDA7IHggPCB2YWx1ZS5zaXplOyB4KyspIHtcbiAgICAgIGN0eC5maWxsU3R5bGUgPSB2YWx1ZS5nZXRNb2R1bGUoeCwgeSkgPyBjb2xvciA6IGJhY2tncm91bmRDb2xvcjtcbiAgICAgIGN0eC5maWxsUmVjdChwYWRkaW5nWzNdICsgeCAqIHNjYWxlLCBwYWRkaW5nWzBdICsgeSAqIHNjYWxlLCBzY2FsZSwgc2NhbGUpO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZHJhd0NhbnZhc0JhY2tncm91bmQoXG4gIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELFxuICB3aWR0aDogbnVtYmVyLFxuICBoZWlnaHQ6IG51bWJlcixcbiAgc2NhbGU6IG51bWJlcixcbiAgYmFja2dyb3VuZENvbG9yOiBzdHJpbmdcbik6IHZvaWQge1xuICBmb3IgKGxldCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKSB7XG4gICAgZm9yIChsZXQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKSB7XG4gICAgICBjdHguZmlsbFN0eWxlID0gYmFja2dyb3VuZENvbG9yO1xuICAgICAgY3R4LmZpbGxSZWN0KHggKiBzY2FsZSwgeSAqIHNjYWxlLCBzY2FsZSwgc2NhbGUpO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0UGFkZGluZyhwYWRkaW5nOiBudW1iZXIgfCBudW1iZXJbXSk6IG51bWJlcltdIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkocGFkZGluZykpIHtcbiAgICAvLyBCdWlsZCBhbiBhcnJheSBvZiA0IGVsZW1lbnRzIGFuZCByZXBlYXQgdmFsdWVzIGZyb20gcGFkZGluZyBhcyBuZWNlc3NhcnkgdG8gc2V0IHRoZSB2YWx1ZSBvZiB0aGUgYXJyYXlcbiAgICByZXR1cm4gQXJyYXkoNClcbiAgICAgIC5maWxsKDApXG4gICAgICAubWFwKChfLCBpbmRleCkgPT4gcGFkZGluZ1tpbmRleCAlIHBhZGRpbmcubGVuZ3RoXSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIFtwYWRkaW5nLCBwYWRkaW5nLCBwYWRkaW5nLCBwYWRkaW5nXTtcbiAgfVxufVxuIl19