|
1 |
| -/*! jquery-qrcode v0.13.4 - https://larsjung.de/jquery-qrcode/ */ |
| 1 | +/*! jquery-qrcode v0.14.0 - https://larsjung.de/jquery-qrcode/ */ |
2 | 2 | (function (vendor_qrcode) {
|
3 | 3 | 'use strict';
|
4 | 4 |
|
5 |
| - var $ = jQuery; // eslint-disable-line no-undef |
| 5 | + var jq = window.jQuery; |
| 6 | + |
| 7 | + // Check if canvas is available in the browser (as Modernizr does) |
| 8 | + var hasCanvas = (function () { |
| 9 | + var elem = document.createElement('canvas'); |
| 10 | + return !!(elem.getContext && elem.getContext('2d')); |
| 11 | + }()); |
6 | 12 |
|
7 | 13 | // Wrapper for the original QR code generator.
|
8 |
| - function QRCode(text, level, version, quiet) { |
9 |
| - var qr = vendor_qrcode(version, level); |
10 |
| - qr.addData(text); |
11 |
| - qr.make(); |
| 14 | + function createQRCode(text, level, version, quiet) { |
| 15 | + var qr = {}; |
| 16 | + |
| 17 | + var vqr = vendor_qrcode(version, level); |
| 18 | + vqr.addData(text); |
| 19 | + vqr.make(); |
12 | 20 |
|
13 | 21 | quiet = quiet || 0;
|
14 | 22 |
|
15 |
| - var qrModuleCount = qr.getModuleCount(); |
16 |
| - var quietModuleCount = qr.getModuleCount() + 2 * quiet; |
| 23 | + var qrModuleCount = vqr.getModuleCount(); |
| 24 | + var quietModuleCount = vqr.getModuleCount() + 2 * quiet; |
17 | 25 |
|
18 | 26 | function isDark(row, col) {
|
19 | 27 | row -= quiet;
|
|
22 | 30 | if (row < 0 || row >= qrModuleCount || col < 0 || col >= qrModuleCount) {
|
23 | 31 | return false;
|
24 | 32 | }
|
25 |
| - |
26 |
| - return qr.isDark(row, col); |
| 33 | + return vqr.isDark(row, col); |
27 | 34 | }
|
28 | 35 |
|
29 |
| - var addBlank = function (l, t, r, b) { |
30 |
| - var prevIsDark = this.isDark; // eslint-disable-line no-invalid-this |
| 36 | + function addBlank(l, t, r, b) { |
| 37 | + var prevIsDark = qr.isDark; |
31 | 38 | var moduleSize = 1 / quietModuleCount;
|
32 | 39 |
|
33 |
| - this.isDark = function (row, col) { // eslint-disable-line no-invalid-this |
| 40 | + qr.isDark = function (row, col) { |
34 | 41 | var ml = col * moduleSize;
|
35 | 42 | var mt = row * moduleSize;
|
36 | 43 | var mr = ml + moduleSize;
|
37 | 44 | var mb = mt + moduleSize;
|
38 | 45 |
|
39 | 46 | return prevIsDark(row, col) && (l > mr || ml > r || t > mb || mt > b);
|
40 | 47 | };
|
41 |
| - }; |
| 48 | + } |
42 | 49 |
|
43 |
| - this.text = text; |
44 |
| - this.level = level; |
45 |
| - this.version = version; |
46 |
| - this.moduleCount = quietModuleCount; |
47 |
| - this.isDark = isDark; |
48 |
| - this.addBlank = addBlank; |
49 |
| - } |
| 50 | + qr.text = text; |
| 51 | + qr.level = level; |
| 52 | + qr.version = version; |
| 53 | + qr.moduleCount = quietModuleCount; |
| 54 | + qr.isDark = isDark; |
| 55 | + qr.addBlank = addBlank; |
50 | 56 |
|
51 |
| - // Check if canvas is available in the browser (as Modernizr does) |
52 |
| - var hasCanvas = (function () { |
53 |
| - var elem = document.createElement('canvas'); |
54 |
| - return Boolean(elem.getContext && elem.getContext('2d')); |
55 |
| - }()); |
| 57 | + return qr; |
| 58 | + } |
56 | 59 |
|
57 | 60 | // Returns a minimal QR code for the given text starting with version `minVersion`.
|
58 | 61 | // Returns `undefined` if `text` is too long to be encoded in `maxVersion`.
|
59 |
| - function createQRCode(text, level, minVersion, maxVersion, quiet) { |
| 62 | + function createMinQRCode(text, level, minVersion, maxVersion, quiet) { |
60 | 63 | minVersion = Math.max(1, minVersion || 1);
|
61 | 64 | maxVersion = Math.min(40, maxVersion || 40);
|
62 | 65 | for (var version = minVersion; version <= maxVersion; version += 1) {
|
63 | 66 | try {
|
64 |
| - return new QRCode(text, level, version, quiet); |
| 67 | + return createQRCode(text, level, version, quiet); |
65 | 68 | } catch (err) {/* empty */}
|
66 | 69 | }
|
67 |
| - return null; |
| 70 | + return undefined; |
68 | 71 | }
|
69 | 72 |
|
70 | 73 | function drawBackgroundLabel(qr, context, settings) {
|
71 | 74 | var size = settings.size;
|
72 |
| - var font = 'bold ' + (settings.mSize * size) + 'px ' + settings.fontname; |
73 |
| - var ctx = $('<canvas/>')[0].getContext('2d'); |
| 75 | + var font = 'bold ' + settings.mSize * size + 'px ' + settings.fontname; |
| 76 | + var ctx = jq('<canvas/>')[0].getContext('2d'); |
74 | 77 |
|
75 | 78 | ctx.font = font;
|
76 | 79 |
|
|
120 | 123 | }
|
121 | 124 |
|
122 | 125 | function drawBackground(qr, context, settings) {
|
123 |
| - if ($(settings.background).is('img')) { |
| 126 | + if (jq(settings.background).is('img')) { |
124 | 127 | context.drawImage(settings.background, 0, 0, settings.size, settings.size);
|
125 | 128 | } else if (settings.background) {
|
126 | 129 | context.fillStyle = settings.background;
|
|
254 | 257 | fn(qr, context, settings, l, t, w, row, col);
|
255 | 258 | }
|
256 | 259 | }
|
257 |
| - if ($(settings.fill).is('img')) { |
| 260 | + if (jq(settings.fill).is('img')) { |
258 | 261 | context.strokeStyle = 'rgba(0,0,0,0.5)';
|
259 | 262 | context.lineWidth = 2;
|
260 | 263 | context.stroke();
|
|
274 | 277 |
|
275 | 278 | // Draws QR code to the given `canvas` and returns it.
|
276 | 279 | function drawOnCanvas(canvas, settings) {
|
277 |
| - var qr = createQRCode(settings.text, settings.ecLevel, settings.minVersion, settings.maxVersion, settings.quiet); |
| 280 | + var qr = createMinQRCode(settings.text, settings.ecLevel, settings.minVersion, settings.maxVersion, settings.quiet); |
278 | 281 | if (!qr) {
|
279 | 282 | return null;
|
280 | 283 | }
|
281 | 284 |
|
282 |
| - var $canvas = $(canvas).data('qrcode', qr); |
| 285 | + var $canvas = jq(canvas).data('qrcode', qr); |
283 | 286 | var context = $canvas[0].getContext('2d');
|
284 | 287 |
|
285 | 288 | drawBackground(qr, context, settings);
|
|
290 | 293 |
|
291 | 294 | // Returns a `canvas` element representing the QR code for the given settings.
|
292 | 295 | function createCanvas(settings) {
|
293 |
| - var $canvas = $('<canvas/>').attr('width', settings.size).attr('height', settings.size); |
| 296 | + var $canvas = jq('<canvas/>').attr('width', settings.size).attr('height', settings.size); |
294 | 297 | return drawOnCanvas($canvas, settings);
|
295 | 298 | }
|
296 | 299 |
|
297 | 300 | // Returns an `image` element representing the QR code for the given settings.
|
298 | 301 | function createImage(settings) {
|
299 |
| - return $('<img/>').attr('src', createCanvas(settings)[0].toDataURL('image/png')); |
| 302 | + return jq('<img/>').attr('src', createCanvas(settings)[0].toDataURL('image/png')); |
300 | 303 | }
|
301 | 304 |
|
302 | 305 | // Returns a `div` element representing the QR code for the given settings.
|
303 | 306 | function createDiv(settings) {
|
304 |
| - var qr = createQRCode(settings.text, settings.ecLevel, settings.minVersion, settings.maxVersion, settings.quiet); |
| 307 | + var qr = createMinQRCode(settings.text, settings.ecLevel, settings.minVersion, settings.maxVersion, settings.quiet); |
305 | 308 | if (!qr) {
|
306 | 309 | return null;
|
307 | 310 | }
|
|
336 | 339 | 'background-color': settings.fill
|
337 | 340 | };
|
338 | 341 |
|
339 |
| - var $div = $('<div/>').data('qrcode', qr).css(containerCSS); |
| 342 | + var $div = jq('<div/>').data('qrcode', qr).css(containerCSS); |
340 | 343 |
|
341 | 344 | if (settings_bgColor) {
|
342 | 345 | $div.css('background-color', settings_bgColor);
|
|
345 | 348 | for (row = 0; row < moduleCount; row += 1) {
|
346 | 349 | for (col = 0; col < moduleCount; col += 1) {
|
347 | 350 | if (qr.isDark(row, col)) {
|
348 |
| - $('<div/>') |
| 351 | + jq('<div/>') |
349 | 352 | .css(darkCSS)
|
350 | 353 | .css({
|
351 | 354 | left: offset + col * moduleSize,
|
|
428 | 431 |
|
429 | 432 | // Register the plugin
|
430 | 433 | // -------------------
|
431 |
| - $.fn.qrcode = function (options) { |
432 |
| - var settings = $.extend({}, defaults, options); |
| 434 | + jq.fn.qrcode = function (options) { |
| 435 | + var settings = jq.extend({}, defaults, options); |
433 | 436 |
|
434 |
| - return this.each(function () { |
435 |
| - if (this.nodeName.toLowerCase() === 'canvas') { // eslint-disable-line no-invalid-this |
436 |
| - drawOnCanvas(this, settings); // eslint-disable-line no-invalid-this |
| 437 | + return this.each(function (idx, el) { |
| 438 | + if (el.nodeName.toLowerCase() === 'canvas') { |
| 439 | + drawOnCanvas(el, settings); |
437 | 440 | } else {
|
438 |
| - $(this).append(createHTML(settings)); // eslint-disable-line no-invalid-this |
| 441 | + jq(el).append(createHTML(settings)); |
439 | 442 | }
|
440 | 443 | });
|
441 | 444 | };
|
|
0 commit comments