node-ejs-renderer/node_modules/qrcode/lib/browser.js

77 lines
1.8 KiB
JavaScript
Raw Permalink Normal View History

2024-06-09 13:55:01 -04:00
const canPromise = require('./can-promise')
const QRCode = require('./core/qrcode')
const CanvasRenderer = require('./renderer/canvas')
const SvgRenderer = require('./renderer/svg-tag.js')
function renderCanvas (renderFunc, canvas, text, opts, cb) {
const args = [].slice.call(arguments, 1)
const argsNum = args.length
const isLastArgCb = typeof args[argsNum - 1] === 'function'
if (!isLastArgCb && !canPromise()) {
throw new Error('Callback required as last argument')
}
if (isLastArgCb) {
if (argsNum < 2) {
throw new Error('Too few arguments provided')
}
if (argsNum === 2) {
cb = text
text = canvas
canvas = opts = undefined
} else if (argsNum === 3) {
if (canvas.getContext && typeof cb === 'undefined') {
cb = opts
opts = undefined
} else {
cb = opts
opts = text
text = canvas
canvas = undefined
}
}
} else {
if (argsNum < 1) {
throw new Error('Too few arguments provided')
}
if (argsNum === 1) {
text = canvas
canvas = opts = undefined
} else if (argsNum === 2 && !canvas.getContext) {
opts = text
text = canvas
canvas = undefined
}
return new Promise(function (resolve, reject) {
try {
const data = QRCode.create(text, opts)
resolve(renderFunc(data, canvas, opts))
} catch (e) {
reject(e)
}
})
}
try {
const data = QRCode.create(text, opts)
cb(null, renderFunc(data, canvas, opts))
} catch (e) {
cb(e)
}
}
exports.create = QRCode.create
exports.toCanvas = renderCanvas.bind(null, CanvasRenderer.render)
exports.toDataURL = renderCanvas.bind(null, CanvasRenderer.renderToDataURL)
// only svg for now.
exports.toString = renderCanvas.bind(null, function (data, _, opts) {
return SvgRenderer.render(data, opts)
})