[SignalingServer] Optimize dependent modules
[platform/framework/web/wrtjs.git] / device_home / node_modules / qrcode / lib / browser.js
1
2 var canPromise = require('./can-promise')
3
4 var QRCode = require('./core/qrcode')
5 var CanvasRenderer = require('./renderer/canvas')
6 var SvgRenderer = require('./renderer/svg-tag.js')
7
8 function renderCanvas (renderFunc, canvas, text, opts, cb) {
9   var args = [].slice.call(arguments, 1)
10   var argsNum = args.length
11   var isLastArgCb = typeof args[argsNum - 1] === 'function'
12
13   if (!isLastArgCb && !canPromise()) {
14     throw new Error('Callback required as last argument')
15   }
16
17   if (isLastArgCb) {
18     if (argsNum < 2) {
19       throw new Error('Too few arguments provided')
20     }
21
22     if (argsNum === 2) {
23       cb = text
24       text = canvas
25       canvas = opts = undefined
26     } else if (argsNum === 3) {
27       if (canvas.getContext && typeof cb === 'undefined') {
28         cb = opts
29         opts = undefined
30       } else {
31         cb = opts
32         opts = text
33         text = canvas
34         canvas = undefined
35       }
36     }
37   } else {
38     if (argsNum < 1) {
39       throw new Error('Too few arguments provided')
40     }
41
42     if (argsNum === 1) {
43       text = canvas
44       canvas = opts = undefined
45     } else if (argsNum === 2 && !canvas.getContext) {
46       opts = text
47       text = canvas
48       canvas = undefined
49     }
50
51     return new Promise(function (resolve, reject) {
52       try {
53         var data = QRCode.create(text, opts)
54         resolve(renderFunc(data, canvas, opts))
55       } catch (e) {
56         reject(e)
57       }
58     })
59   }
60
61   try {
62     var data = QRCode.create(text, opts)
63     cb(null, renderFunc(data, canvas, opts))
64   } catch (e) {
65     cb(e)
66   }
67 }
68
69 exports.create = QRCode.create
70 exports.toCanvas = renderCanvas.bind(null, CanvasRenderer.render)
71 exports.toDataURL = renderCanvas.bind(null, CanvasRenderer.renderToDataURL)
72
73 // only svg for now.
74 exports.toString = renderCanvas.bind(null, function (data, _, opts) {
75   return SvgRenderer.render(data, opts)
76 })