qrcode
Version:
QRCode / 2d Barcode api with both server side and client side support using canvas
75 lines (65 loc) • 1.86 kB
JavaScript
var canPromise = require('can-promise')
var QRCode = require('./core/qrcode')
var CanvasRenderer = require('./renderer/canvas')
var SvgRenderer = require('./renderer/svg-tag.js')
function renderCanvas (renderFunc, canvas, text, opts, cb) {
var args = [].slice.call(arguments, 1)
var argsNum = args.length
var 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 {
var data = QRCode.create(text, opts)
resolve(renderFunc(data, canvas, opts))
} catch (e) {
reject(e)
}
})
}
try {
var 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)
})