jquery-qrcode.js 70 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815
  1. /*! jquery-qrcode v0.17.0 - https://larsjung.de/jquery-qrcode/ */
  2. (function webpackUniversalModuleDefinition(root, factory) {
  3. if(typeof exports === 'object' && typeof module === 'object')
  4. module.exports = factory();
  5. else if(typeof define === 'function' && define.amd)
  6. define("jquery-qrcode", [], factory);
  7. else if(typeof exports === 'object')
  8. exports["jquery-qrcode"] = factory();
  9. else
  10. root["jquery-qrcode"] = factory();
  11. })((typeof self !== 'undefined' ? self : this), function() {
  12. return /******/ (function(modules) { // webpackBootstrap
  13. /******/ // The module cache
  14. /******/ var installedModules = {};
  15. /******/
  16. /******/ // The require function
  17. /******/ function __webpack_require__(moduleId) {
  18. /******/
  19. /******/ // Check if module is in cache
  20. /******/ if(installedModules[moduleId]) {
  21. /******/ return installedModules[moduleId].exports;
  22. /******/ }
  23. /******/ // Create a new module (and put it into the cache)
  24. /******/ var module = installedModules[moduleId] = {
  25. /******/ i: moduleId,
  26. /******/ l: false,
  27. /******/ exports: {}
  28. /******/ };
  29. /******/
  30. /******/ // Execute the module function
  31. /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
  32. /******/
  33. /******/ // Flag the module as loaded
  34. /******/ module.l = true;
  35. /******/
  36. /******/ // Return the exports of the module
  37. /******/ return module.exports;
  38. /******/ }
  39. /******/
  40. /******/
  41. /******/ // expose the modules object (__webpack_modules__)
  42. /******/ __webpack_require__.m = modules;
  43. /******/
  44. /******/ // expose the module cache
  45. /******/ __webpack_require__.c = installedModules;
  46. /******/
  47. /******/ // define getter function for harmony exports
  48. /******/ __webpack_require__.d = function(exports, name, getter) {
  49. /******/ if(!__webpack_require__.o(exports, name)) {
  50. /******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
  51. /******/ }
  52. /******/ };
  53. /******/
  54. /******/ // define __esModule on exports
  55. /******/ __webpack_require__.r = function(exports) {
  56. /******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
  57. /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
  58. /******/ }
  59. /******/ Object.defineProperty(exports, '__esModule', { value: true });
  60. /******/ };
  61. /******/
  62. /******/ // create a fake namespace object
  63. /******/ // mode & 1: value is a module id, require it
  64. /******/ // mode & 2: merge all properties of value into the ns
  65. /******/ // mode & 4: return value when already ns object
  66. /******/ // mode & 8|1: behave like require
  67. /******/ __webpack_require__.t = function(value, mode) {
  68. /******/ if(mode & 1) value = __webpack_require__(value);
  69. /******/ if(mode & 8) return value;
  70. /******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
  71. /******/ var ns = Object.create(null);
  72. /******/ __webpack_require__.r(ns);
  73. /******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
  74. /******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
  75. /******/ return ns;
  76. /******/ };
  77. /******/
  78. /******/ // getDefaultExport function for compatibility with non-harmony modules
  79. /******/ __webpack_require__.n = function(module) {
  80. /******/ var getter = module && module.__esModule ?
  81. /******/ function getDefault() { return module['default']; } :
  82. /******/ function getModuleExports() { return module; };
  83. /******/ __webpack_require__.d(getter, 'a', getter);
  84. /******/ return getter;
  85. /******/ };
  86. /******/
  87. /******/ // Object.prototype.hasOwnProperty.call
  88. /******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
  89. /******/
  90. /******/ // __webpack_public_path__
  91. /******/ __webpack_require__.p = "";
  92. /******/
  93. /******/
  94. /******/ // Load entry module and return exports
  95. /******/ return __webpack_require__(__webpack_require__.s = 0);
  96. /******/ })
  97. /************************************************************************/
  98. /******/ ([
  99. /* 0 */
  100. /***/ (function(module, exports, __webpack_require__) {
  101. /* WEBPACK VAR INJECTION */(function(global) {var WIN = global.window;
  102. var JQ = WIN.jQuery; // Check if canvas is available in the browser (as Modernizr does)
  103. var HAS_CANVAS = function () {
  104. var el = WIN.document.createElement('canvas');
  105. return !!(el.getContext && el.getContext('2d'));
  106. }();
  107. var is_img_el = function is_img_el(x) {
  108. return x && typeof x.tagName === 'string' && x.tagName.toUpperCase() === 'IMG';
  109. }; // Wrapper for the original QR code generator.
  110. var create_qrcode = function create_qrcode(text, level, version, quiet) {
  111. var qr = {};
  112. var qr_gen = __webpack_require__(2);
  113. qr_gen.stringToBytes = qr_gen.stringToBytesFuncs['UTF-8'];
  114. var vqr = qr_gen(version, level);
  115. vqr.addData(text);
  116. vqr.make();
  117. quiet = quiet || 0;
  118. var module_count = vqr.getModuleCount();
  119. var quiet_module_count = module_count + 2 * quiet;
  120. var is_dark = function is_dark(row, col) {
  121. row -= quiet;
  122. col -= quiet;
  123. return row >= 0 && row < module_count && col >= 0 && col < module_count && vqr.isDark(row, col);
  124. };
  125. var add_blank = function add_blank(l, t, r, b) {
  126. var prev_is_dark = qr.is_dark;
  127. var module_size = 1 / quiet_module_count;
  128. qr.is_dark = function (row, col) {
  129. var ml = col * module_size;
  130. var mt = row * module_size;
  131. var mr = ml + module_size;
  132. var mb = mt + module_size;
  133. return prev_is_dark(row, col) && (l > mr || ml > r || t > mb || mt > b);
  134. };
  135. };
  136. qr.text = text;
  137. qr.level = level;
  138. qr.version = version;
  139. qr.module_count = quiet_module_count;
  140. qr.is_dark = is_dark;
  141. qr.add_blank = add_blank;
  142. return qr;
  143. }; // Returns a minimal QR code for the given text starting with version `min_ver`.
  144. // Returns `undefined` if `text` is too long to be encoded in `max_ver`.
  145. var create_min_qrcode = function create_min_qrcode(text, level, min_ver, max_ver, quiet) {
  146. min_ver = Math.max(1, min_ver || 1);
  147. max_ver = Math.min(40, max_ver || 40);
  148. for (var ver = min_ver; ver <= max_ver; ver += 1) {
  149. try {
  150. return create_qrcode(text, level, ver, quiet);
  151. } catch (err) {
  152. /* empty */
  153. }
  154. }
  155. return undefined;
  156. };
  157. var draw_background_label = function draw_background_label(qr, context, settings) {
  158. var size = settings.size;
  159. var font = 'bold ' + settings.mSize * size + 'px ' + settings.fontname;
  160. var ctx = JQ('<canvas/>')[0].getContext('2d');
  161. ctx.font = font;
  162. var w = ctx.measureText(settings.label).width;
  163. var sh = settings.mSize;
  164. var sw = w / size;
  165. var sl = (1 - sw) * settings.mPosX;
  166. var st = (1 - sh) * settings.mPosY;
  167. var sr = sl + sw;
  168. var sb = st + sh;
  169. var pad = 0.01;
  170. if (settings.mode === 1) {
  171. // Strip
  172. qr.add_blank(0, st - pad, size, sb + pad);
  173. } else {
  174. // Box
  175. qr.add_blank(sl - pad, st - pad, sr + pad, sb + pad);
  176. }
  177. context.fillStyle = settings.fontcolor;
  178. context.font = font;
  179. context.fillText(settings.label, sl * size, st * size + 0.75 * settings.mSize * size);
  180. };
  181. var draw_background_img = function draw_background_img(qr, context, settings) {
  182. var size = settings.size;
  183. var w = settings.image.naturalWidth || 1;
  184. var h = settings.image.naturalHeight || 1;
  185. var sh = settings.mSize;
  186. var sw = sh * w / h;
  187. var sl = (1 - sw) * settings.mPosX;
  188. var st = (1 - sh) * settings.mPosY;
  189. var sr = sl + sw;
  190. var sb = st + sh;
  191. var pad = 0.01;
  192. if (settings.mode === 3) {
  193. // Strip
  194. qr.add_blank(0, st - pad, size, sb + pad);
  195. } else {
  196. // Box
  197. qr.add_blank(sl - pad, st - pad, sr + pad, sb + pad);
  198. }
  199. context.drawImage(settings.image, sl * size, st * size, sw * size, sh * size);
  200. };
  201. var draw_background = function draw_background(qr, context, settings) {
  202. if (is_img_el(settings.background)) {
  203. context.drawImage(settings.background, 0, 0, settings.size, settings.size);
  204. } else if (settings.background) {
  205. context.fillStyle = settings.background;
  206. context.fillRect(settings.left, settings.top, settings.size, settings.size);
  207. }
  208. var mode = settings.mode;
  209. if (mode === 1 || mode === 2) {
  210. draw_background_label(qr, context, settings);
  211. } else if (is_img_el(settings.image) && (mode === 3 || mode === 4)) {
  212. draw_background_img(qr, context, settings);
  213. }
  214. };
  215. var draw_modules_default = function draw_modules_default(qr, context, settings, left, top, width, row, col) {
  216. if (qr.is_dark(row, col)) {
  217. context.rect(left, top, width, width);
  218. }
  219. };
  220. var draw_modules_rounded_dark = function draw_modules_rounded_dark(ctx, l, t, r, b, rad, nw, ne, se, sw) {
  221. if (nw) {
  222. ctx.moveTo(l + rad, t);
  223. } else {
  224. ctx.moveTo(l, t);
  225. }
  226. if (ne) {
  227. ctx.lineTo(r - rad, t);
  228. ctx.arcTo(r, t, r, b, rad);
  229. } else {
  230. ctx.lineTo(r, t);
  231. }
  232. if (se) {
  233. ctx.lineTo(r, b - rad);
  234. ctx.arcTo(r, b, l, b, rad);
  235. } else {
  236. ctx.lineTo(r, b);
  237. }
  238. if (sw) {
  239. ctx.lineTo(l + rad, b);
  240. ctx.arcTo(l, b, l, t, rad);
  241. } else {
  242. ctx.lineTo(l, b);
  243. }
  244. if (nw) {
  245. ctx.lineTo(l, t + rad);
  246. ctx.arcTo(l, t, r, t, rad);
  247. } else {
  248. ctx.lineTo(l, t);
  249. }
  250. };
  251. var draw_modules_rounded_light = function draw_modules_rounded_light(ctx, l, t, r, b, rad, nw, ne, se, sw) {
  252. if (nw) {
  253. ctx.moveTo(l + rad, t);
  254. ctx.lineTo(l, t);
  255. ctx.lineTo(l, t + rad);
  256. ctx.arcTo(l, t, l + rad, t, rad);
  257. }
  258. if (ne) {
  259. ctx.moveTo(r - rad, t);
  260. ctx.lineTo(r, t);
  261. ctx.lineTo(r, t + rad);
  262. ctx.arcTo(r, t, r - rad, t, rad);
  263. }
  264. if (se) {
  265. ctx.moveTo(r - rad, b);
  266. ctx.lineTo(r, b);
  267. ctx.lineTo(r, b - rad);
  268. ctx.arcTo(r, b, r - rad, b, rad);
  269. }
  270. if (sw) {
  271. ctx.moveTo(l + rad, b);
  272. ctx.lineTo(l, b);
  273. ctx.lineTo(l, b - rad);
  274. ctx.arcTo(l, b, l + rad, b, rad);
  275. }
  276. };
  277. var draw_modules_rounded = function draw_modules_rounded(qr, context, settings, left, top, width, row, col) {
  278. var is_dark = qr.is_dark;
  279. var right = left + width;
  280. var bottom = top + width;
  281. var radius = settings.radius * width;
  282. var rowT = row - 1;
  283. var rowB = row + 1;
  284. var colL = col - 1;
  285. var colR = col + 1;
  286. var center = is_dark(row, col);
  287. var northwest = is_dark(rowT, colL);
  288. var north = is_dark(rowT, col);
  289. var northeast = is_dark(rowT, colR);
  290. var east = is_dark(row, colR);
  291. var southeast = is_dark(rowB, colR);
  292. var south = is_dark(rowB, col);
  293. var southwest = is_dark(rowB, colL);
  294. var west = is_dark(row, colL);
  295. if (center) {
  296. draw_modules_rounded_dark(context, left, top, right, bottom, radius, !north && !west, !north && !east, !south && !east, !south && !west);
  297. } else {
  298. draw_modules_rounded_light(context, left, top, right, bottom, radius, north && west && northwest, north && east && northeast, south && east && southeast, south && west && southwest);
  299. }
  300. };
  301. var draw_modules = function draw_modules(qr, context, settings) {
  302. var module_count = qr.module_count;
  303. var module_size = settings.size / module_count;
  304. var fn = draw_modules_default;
  305. var row;
  306. var col;
  307. if (settings.radius > 0 && settings.radius <= 0.5) {
  308. fn = draw_modules_rounded;
  309. }
  310. context.beginPath();
  311. for (row = 0; row < module_count; row += 1) {
  312. for (col = 0; col < module_count; col += 1) {
  313. var l = settings.left + col * module_size;
  314. var t = settings.top + row * module_size;
  315. var w = module_size;
  316. fn(qr, context, settings, l, t, w, row, col);
  317. }
  318. }
  319. if (is_img_el(settings.fill)) {
  320. context.strokeStyle = 'rgba(0,0,0,0.5)';
  321. context.lineWidth = 2;
  322. context.stroke();
  323. var prev = context.globalCompositeOperation;
  324. context.globalCompositeOperation = 'destination-out';
  325. context.fill();
  326. context.globalCompositeOperation = prev;
  327. context.clip();
  328. context.drawImage(settings.fill, 0, 0, settings.size, settings.size);
  329. context.restore();
  330. } else {
  331. context.fillStyle = settings.fill;
  332. context.fill();
  333. }
  334. }; // Draws QR code to the given `canvas` and returns it.
  335. var draw_on_canvas = function draw_on_canvas(canvas, settings) {
  336. var qr = create_min_qrcode(settings.text, settings.ecLevel, settings.minVersion, settings.maxVersion, settings.quiet);
  337. if (!qr) {
  338. return null;
  339. }
  340. var $canvas = JQ(canvas).data('qrcode', qr);
  341. var context = $canvas[0].getContext('2d');
  342. draw_background(qr, context, settings);
  343. draw_modules(qr, context, settings);
  344. return $canvas;
  345. }; // Returns a `canvas` element representing the QR code for the given settings.
  346. var create_canvas = function create_canvas(settings) {
  347. var $canvas = JQ('<canvas/>').attr('width', settings.size).attr('height', settings.size);
  348. return draw_on_canvas($canvas, settings);
  349. }; // Returns an `image` element representing the QR code for the given settings.
  350. var create_img = function create_img(settings) {
  351. return JQ('<img/>').attr('src', create_canvas(settings)[0].toDataURL('image/png'));
  352. }; // Returns a `div` element representing the QR code for the given settings.
  353. var create_div = function create_div(settings) {
  354. var qr = create_min_qrcode(settings.text, settings.ecLevel, settings.minVersion, settings.maxVersion, settings.quiet);
  355. if (!qr) {
  356. return null;
  357. } // some shortcuts to improve compression
  358. var settings_size = settings.size;
  359. var settings_bgColor = settings.background;
  360. var math_floor = Math.floor;
  361. var module_count = qr.module_count;
  362. var module_size = math_floor(settings_size / module_count);
  363. var offset = math_floor(0.5 * (settings_size - module_size * module_count));
  364. var row;
  365. var col;
  366. var container_css = {
  367. position: 'relative',
  368. left: 0,
  369. top: 0,
  370. padding: 0,
  371. margin: 0,
  372. width: settings_size,
  373. height: settings_size
  374. };
  375. var dark_css = {
  376. position: 'absolute',
  377. padding: 0,
  378. margin: 0,
  379. width: module_size,
  380. height: module_size,
  381. 'background-color': settings.fill
  382. };
  383. var $div = JQ('<div/>').data('qrcode', qr).css(container_css);
  384. if (settings_bgColor) {
  385. $div.css('background-color', settings_bgColor);
  386. }
  387. for (row = 0; row < module_count; row += 1) {
  388. for (col = 0; col < module_count; col += 1) {
  389. if (qr.is_dark(row, col)) {
  390. JQ('<div/>').css(dark_css).css({
  391. left: offset + col * module_size,
  392. top: offset + row * module_size
  393. }).appendTo($div);
  394. }
  395. }
  396. }
  397. return $div;
  398. };
  399. var create_html = function create_html(settings) {
  400. if (HAS_CANVAS && settings.render === 'canvas') {
  401. return create_canvas(settings);
  402. } else if (HAS_CANVAS && settings.render === 'image') {
  403. return create_img(settings);
  404. }
  405. return create_div(settings);
  406. };
  407. var DEFAULTS = {
  408. // render method: `'canvas'`, `'image'` or `'div'`
  409. render: 'canvas',
  410. // version range somewhere in 1 .. 40
  411. minVersion: 1,
  412. maxVersion: 40,
  413. // error correction level: `'L'`, `'M'`, `'Q'` or `'H'`
  414. ecLevel: 'L',
  415. // offset in pixel if drawn onto existing canvas
  416. left: 0,
  417. top: 0,
  418. // size in pixel
  419. size: 200,
  420. // code color or image element
  421. fill: '#000',
  422. // background color or image element, `null` for transparent background
  423. background: '#fff',
  424. // content
  425. text: 'no text',
  426. // corner radius relative to module width: 0.0 .. 0.5
  427. radius: 0,
  428. // quiet zone in modules
  429. quiet: 0,
  430. // modes
  431. // 0: normal
  432. // 1: label strip
  433. // 2: label box
  434. // 3: image strip
  435. // 4: image box
  436. mode: 0,
  437. mSize: 0.1,
  438. mPosX: 0.5,
  439. mPosY: 0.5,
  440. label: 'no label',
  441. fontname: 'sans',
  442. fontcolor: '#000',
  443. image: null
  444. };
  445. JQ.fn.qrcode = module.exports = function main(options) {
  446. var settings = JQ.extend({}, DEFAULTS, options);
  447. return this.each(function (idx, el) {
  448. if (el.nodeName.toLowerCase() === 'canvas') {
  449. draw_on_canvas(el, settings);
  450. } else {
  451. JQ(el).append(create_html(settings));
  452. }
  453. });
  454. };
  455. /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(1)))
  456. /***/ }),
  457. /* 1 */
  458. /***/ (function(module, exports) {
  459. var g;
  460. // This works in non-strict mode
  461. g = (function() {
  462. return this;
  463. })();
  464. try {
  465. // This works if eval is allowed (see CSP)
  466. g = g || new Function("return this")();
  467. } catch (e) {
  468. // This works if the window reference is available
  469. if (typeof window === "object") g = window;
  470. }
  471. // g can still be undefined, but nothing to do about it...
  472. // We return undefined, instead of nothing here, so it's
  473. // easier to handle this case. if(!global) { ...}
  474. module.exports = g;
  475. /***/ }),
  476. /* 2 */
  477. /***/ (function(module, exports, __webpack_require__) {
  478. var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;//---------------------------------------------------------------------
  479. //
  480. // QR Code Generator for JavaScript
  481. //
  482. // Copyright (c) 2009 Kazuhiko Arase
  483. //
  484. // URL: http://www.d-project.com/
  485. //
  486. // Licensed under the MIT license:
  487. // http://www.opensource.org/licenses/mit-license.php
  488. //
  489. // The word 'QR Code' is registered trademark of
  490. // DENSO WAVE INCORPORATED
  491. // http://www.denso-wave.com/qrcode/faqpatent-e.html
  492. //
  493. //---------------------------------------------------------------------
  494. var qrcode = function() {
  495. //---------------------------------------------------------------------
  496. // qrcode
  497. //---------------------------------------------------------------------
  498. /**
  499. * qrcode
  500. * @param typeNumber 1 to 40
  501. * @param errorCorrectionLevel 'L','M','Q','H'
  502. */
  503. var qrcode = function(typeNumber, errorCorrectionLevel) {
  504. var PAD0 = 0xEC;
  505. var PAD1 = 0x11;
  506. var _typeNumber = typeNumber;
  507. var _errorCorrectionLevel = QRErrorCorrectionLevel[errorCorrectionLevel];
  508. var _modules = null;
  509. var _moduleCount = 0;
  510. var _dataCache = null;
  511. var _dataList = [];
  512. var _this = {};
  513. var makeImpl = function(test, maskPattern) {
  514. _moduleCount = _typeNumber * 4 + 17;
  515. _modules = function(moduleCount) {
  516. var modules = new Array(moduleCount);
  517. for (var row = 0; row < moduleCount; row += 1) {
  518. modules[row] = new Array(moduleCount);
  519. for (var col = 0; col < moduleCount; col += 1) {
  520. modules[row][col] = null;
  521. }
  522. }
  523. return modules;
  524. }(_moduleCount);
  525. setupPositionProbePattern(0, 0);
  526. setupPositionProbePattern(_moduleCount - 7, 0);
  527. setupPositionProbePattern(0, _moduleCount - 7);
  528. setupPositionAdjustPattern();
  529. setupTimingPattern();
  530. setupTypeInfo(test, maskPattern);
  531. if (_typeNumber >= 7) {
  532. setupTypeNumber(test);
  533. }
  534. if (_dataCache == null) {
  535. _dataCache = createData(_typeNumber, _errorCorrectionLevel, _dataList);
  536. }
  537. mapData(_dataCache, maskPattern);
  538. };
  539. var setupPositionProbePattern = function(row, col) {
  540. for (var r = -1; r <= 7; r += 1) {
  541. if (row + r <= -1 || _moduleCount <= row + r) continue;
  542. for (var c = -1; c <= 7; c += 1) {
  543. if (col + c <= -1 || _moduleCount <= col + c) continue;
  544. if ( (0 <= r && r <= 6 && (c == 0 || c == 6) )
  545. || (0 <= c && c <= 6 && (r == 0 || r == 6) )
  546. || (2 <= r && r <= 4 && 2 <= c && c <= 4) ) {
  547. _modules[row + r][col + c] = true;
  548. } else {
  549. _modules[row + r][col + c] = false;
  550. }
  551. }
  552. }
  553. };
  554. var getBestMaskPattern = function() {
  555. var minLostPoint = 0;
  556. var pattern = 0;
  557. for (var i = 0; i < 8; i += 1) {
  558. makeImpl(true, i);
  559. var lostPoint = QRUtil.getLostPoint(_this);
  560. if (i == 0 || minLostPoint > lostPoint) {
  561. minLostPoint = lostPoint;
  562. pattern = i;
  563. }
  564. }
  565. return pattern;
  566. };
  567. var setupTimingPattern = function() {
  568. for (var r = 8; r < _moduleCount - 8; r += 1) {
  569. if (_modules[r][6] != null) {
  570. continue;
  571. }
  572. _modules[r][6] = (r % 2 == 0);
  573. }
  574. for (var c = 8; c < _moduleCount - 8; c += 1) {
  575. if (_modules[6][c] != null) {
  576. continue;
  577. }
  578. _modules[6][c] = (c % 2 == 0);
  579. }
  580. };
  581. var setupPositionAdjustPattern = function() {
  582. var pos = QRUtil.getPatternPosition(_typeNumber);
  583. for (var i = 0; i < pos.length; i += 1) {
  584. for (var j = 0; j < pos.length; j += 1) {
  585. var row = pos[i];
  586. var col = pos[j];
  587. if (_modules[row][col] != null) {
  588. continue;
  589. }
  590. for (var r = -2; r <= 2; r += 1) {
  591. for (var c = -2; c <= 2; c += 1) {
  592. if (r == -2 || r == 2 || c == -2 || c == 2
  593. || (r == 0 && c == 0) ) {
  594. _modules[row + r][col + c] = true;
  595. } else {
  596. _modules[row + r][col + c] = false;
  597. }
  598. }
  599. }
  600. }
  601. }
  602. };
  603. var setupTypeNumber = function(test) {
  604. var bits = QRUtil.getBCHTypeNumber(_typeNumber);
  605. for (var i = 0; i < 18; i += 1) {
  606. var mod = (!test && ( (bits >> i) & 1) == 1);
  607. _modules[Math.floor(i / 3)][i % 3 + _moduleCount - 8 - 3] = mod;
  608. }
  609. for (var i = 0; i < 18; i += 1) {
  610. var mod = (!test && ( (bits >> i) & 1) == 1);
  611. _modules[i % 3 + _moduleCount - 8 - 3][Math.floor(i / 3)] = mod;
  612. }
  613. };
  614. var setupTypeInfo = function(test, maskPattern) {
  615. var data = (_errorCorrectionLevel << 3) | maskPattern;
  616. var bits = QRUtil.getBCHTypeInfo(data);
  617. // vertical
  618. for (var i = 0; i < 15; i += 1) {
  619. var mod = (!test && ( (bits >> i) & 1) == 1);
  620. if (i < 6) {
  621. _modules[i][8] = mod;
  622. } else if (i < 8) {
  623. _modules[i + 1][8] = mod;
  624. } else {
  625. _modules[_moduleCount - 15 + i][8] = mod;
  626. }
  627. }
  628. // horizontal
  629. for (var i = 0; i < 15; i += 1) {
  630. var mod = (!test && ( (bits >> i) & 1) == 1);
  631. if (i < 8) {
  632. _modules[8][_moduleCount - i - 1] = mod;
  633. } else if (i < 9) {
  634. _modules[8][15 - i - 1 + 1] = mod;
  635. } else {
  636. _modules[8][15 - i - 1] = mod;
  637. }
  638. }
  639. // fixed module
  640. _modules[_moduleCount - 8][8] = (!test);
  641. };
  642. var mapData = function(data, maskPattern) {
  643. var inc = -1;
  644. var row = _moduleCount - 1;
  645. var bitIndex = 7;
  646. var byteIndex = 0;
  647. var maskFunc = QRUtil.getMaskFunction(maskPattern);
  648. for (var col = _moduleCount - 1; col > 0; col -= 2) {
  649. if (col == 6) col -= 1;
  650. while (true) {
  651. for (var c = 0; c < 2; c += 1) {
  652. if (_modules[row][col - c] == null) {
  653. var dark = false;
  654. if (byteIndex < data.length) {
  655. dark = ( ( (data[byteIndex] >>> bitIndex) & 1) == 1);
  656. }
  657. var mask = maskFunc(row, col - c);
  658. if (mask) {
  659. dark = !dark;
  660. }
  661. _modules[row][col - c] = dark;
  662. bitIndex -= 1;
  663. if (bitIndex == -1) {
  664. byteIndex += 1;
  665. bitIndex = 7;
  666. }
  667. }
  668. }
  669. row += inc;
  670. if (row < 0 || _moduleCount <= row) {
  671. row -= inc;
  672. inc = -inc;
  673. break;
  674. }
  675. }
  676. }
  677. };
  678. var createBytes = function(buffer, rsBlocks) {
  679. var offset = 0;
  680. var maxDcCount = 0;
  681. var maxEcCount = 0;
  682. var dcdata = new Array(rsBlocks.length);
  683. var ecdata = new Array(rsBlocks.length);
  684. for (var r = 0; r < rsBlocks.length; r += 1) {
  685. var dcCount = rsBlocks[r].dataCount;
  686. var ecCount = rsBlocks[r].totalCount - dcCount;
  687. maxDcCount = Math.max(maxDcCount, dcCount);
  688. maxEcCount = Math.max(maxEcCount, ecCount);
  689. dcdata[r] = new Array(dcCount);
  690. for (var i = 0; i < dcdata[r].length; i += 1) {
  691. dcdata[r][i] = 0xff & buffer.getBuffer()[i + offset];
  692. }
  693. offset += dcCount;
  694. var rsPoly = QRUtil.getErrorCorrectPolynomial(ecCount);
  695. var rawPoly = qrPolynomial(dcdata[r], rsPoly.getLength() - 1);
  696. var modPoly = rawPoly.mod(rsPoly);
  697. ecdata[r] = new Array(rsPoly.getLength() - 1);
  698. for (var i = 0; i < ecdata[r].length; i += 1) {
  699. var modIndex = i + modPoly.getLength() - ecdata[r].length;
  700. ecdata[r][i] = (modIndex >= 0)? modPoly.getAt(modIndex) : 0;
  701. }
  702. }
  703. var totalCodeCount = 0;
  704. for (var i = 0; i < rsBlocks.length; i += 1) {
  705. totalCodeCount += rsBlocks[i].totalCount;
  706. }
  707. var data = new Array(totalCodeCount);
  708. var index = 0;
  709. for (var i = 0; i < maxDcCount; i += 1) {
  710. for (var r = 0; r < rsBlocks.length; r += 1) {
  711. if (i < dcdata[r].length) {
  712. data[index] = dcdata[r][i];
  713. index += 1;
  714. }
  715. }
  716. }
  717. for (var i = 0; i < maxEcCount; i += 1) {
  718. for (var r = 0; r < rsBlocks.length; r += 1) {
  719. if (i < ecdata[r].length) {
  720. data[index] = ecdata[r][i];
  721. index += 1;
  722. }
  723. }
  724. }
  725. return data;
  726. };
  727. var createData = function(typeNumber, errorCorrectionLevel, dataList) {
  728. var rsBlocks = QRRSBlock.getRSBlocks(typeNumber, errorCorrectionLevel);
  729. var buffer = qrBitBuffer();
  730. for (var i = 0; i < dataList.length; i += 1) {
  731. var data = dataList[i];
  732. buffer.put(data.getMode(), 4);
  733. buffer.put(data.getLength(), QRUtil.getLengthInBits(data.getMode(), typeNumber) );
  734. data.write(buffer);
  735. }
  736. // calc num max data.
  737. var totalDataCount = 0;
  738. for (var i = 0; i < rsBlocks.length; i += 1) {
  739. totalDataCount += rsBlocks[i].dataCount;
  740. }
  741. if (buffer.getLengthInBits() > totalDataCount * 8) {
  742. throw 'code length overflow. ('
  743. + buffer.getLengthInBits()
  744. + '>'
  745. + totalDataCount * 8
  746. + ')';
  747. }
  748. // end code
  749. if (buffer.getLengthInBits() + 4 <= totalDataCount * 8) {
  750. buffer.put(0, 4);
  751. }
  752. // padding
  753. while (buffer.getLengthInBits() % 8 != 0) {
  754. buffer.putBit(false);
  755. }
  756. // padding
  757. while (true) {
  758. if (buffer.getLengthInBits() >= totalDataCount * 8) {
  759. break;
  760. }
  761. buffer.put(PAD0, 8);
  762. if (buffer.getLengthInBits() >= totalDataCount * 8) {
  763. break;
  764. }
  765. buffer.put(PAD1, 8);
  766. }
  767. return createBytes(buffer, rsBlocks);
  768. };
  769. _this.addData = function(data, mode) {
  770. mode = mode || 'Byte';
  771. var newData = null;
  772. switch(mode) {
  773. case 'Numeric' :
  774. newData = qrNumber(data);
  775. break;
  776. case 'Alphanumeric' :
  777. newData = qrAlphaNum(data);
  778. break;
  779. case 'Byte' :
  780. newData = qr8BitByte(data);
  781. break;
  782. case 'Kanji' :
  783. newData = qrKanji(data);
  784. break;
  785. default :
  786. throw 'mode:' + mode;
  787. }
  788. _dataList.push(newData);
  789. _dataCache = null;
  790. };
  791. _this.isDark = function(row, col) {
  792. if (row < 0 || _moduleCount <= row || col < 0 || _moduleCount <= col) {
  793. throw row + ',' + col;
  794. }
  795. return _modules[row][col];
  796. };
  797. _this.getModuleCount = function() {
  798. return _moduleCount;
  799. };
  800. _this.make = function() {
  801. if (_typeNumber < 1) {
  802. var typeNumber = 1;
  803. for (; typeNumber < 40; typeNumber++) {
  804. var rsBlocks = QRRSBlock.getRSBlocks(typeNumber, _errorCorrectionLevel);
  805. var buffer = qrBitBuffer();
  806. for (var i = 0; i < _dataList.length; i++) {
  807. var data = _dataList[i];
  808. buffer.put(data.getMode(), 4);
  809. buffer.put(data.getLength(), QRUtil.getLengthInBits(data.getMode(), typeNumber) );
  810. data.write(buffer);
  811. }
  812. var totalDataCount = 0;
  813. for (var i = 0; i < rsBlocks.length; i++) {
  814. totalDataCount += rsBlocks[i].dataCount;
  815. }
  816. if (buffer.getLengthInBits() <= totalDataCount * 8) {
  817. break;
  818. }
  819. }
  820. _typeNumber = typeNumber;
  821. }
  822. makeImpl(false, getBestMaskPattern() );
  823. };
  824. _this.createTableTag = function(cellSize, margin) {
  825. cellSize = cellSize || 2;
  826. margin = (typeof margin == 'undefined')? cellSize * 4 : margin;
  827. var qrHtml = '';
  828. qrHtml += '<table style="';
  829. qrHtml += ' border-width: 0px; border-style: none;';
  830. qrHtml += ' border-collapse: collapse;';
  831. qrHtml += ' padding: 0px; margin: ' + margin + 'px;';
  832. qrHtml += '">';
  833. qrHtml += '<tbody>';
  834. for (var r = 0; r < _this.getModuleCount(); r += 1) {
  835. qrHtml += '<tr>';
  836. for (var c = 0; c < _this.getModuleCount(); c += 1) {
  837. qrHtml += '<td style="';
  838. qrHtml += ' border-width: 0px; border-style: none;';
  839. qrHtml += ' border-collapse: collapse;';
  840. qrHtml += ' padding: 0px; margin: 0px;';
  841. qrHtml += ' width: ' + cellSize + 'px;';
  842. qrHtml += ' height: ' + cellSize + 'px;';
  843. qrHtml += ' background-color: ';
  844. qrHtml += _this.isDark(r, c)? '#000000' : '#ffffff';
  845. qrHtml += ';';
  846. qrHtml += '"/>';
  847. }
  848. qrHtml += '</tr>';
  849. }
  850. qrHtml += '</tbody>';
  851. qrHtml += '</table>';
  852. return qrHtml;
  853. };
  854. _this.createSvgTag = function(cellSize, margin) {
  855. var opts = {};
  856. if (typeof arguments[0] == 'object') {
  857. // Called by options.
  858. opts = arguments[0];
  859. // overwrite cellSize and margin.
  860. cellSize = opts.cellSize;
  861. margin = opts.margin;
  862. }
  863. cellSize = cellSize || 2;
  864. margin = (typeof margin == 'undefined')? cellSize * 4 : margin;
  865. var size = _this.getModuleCount() * cellSize + margin * 2;
  866. var c, mc, r, mr, qrSvg='', rect;
  867. rect = 'l' + cellSize + ',0 0,' + cellSize +
  868. ' -' + cellSize + ',0 0,-' + cellSize + 'z ';
  869. qrSvg += '<svg version="1.1" xmlns="http://www.w3.org/2000/svg"';
  870. qrSvg += !opts.scalable ? ' width="' + size + 'px" height="' + size + 'px"' : '';
  871. qrSvg += ' viewBox="0 0 ' + size + ' ' + size + '" ';
  872. qrSvg += ' preserveAspectRatio="xMinYMin meet">';
  873. qrSvg += '<rect width="100%" height="100%" fill="white" cx="0" cy="0"/>';
  874. qrSvg += '<path d="';
  875. for (r = 0; r < _this.getModuleCount(); r += 1) {
  876. mr = r * cellSize + margin;
  877. for (c = 0; c < _this.getModuleCount(); c += 1) {
  878. if (_this.isDark(r, c) ) {
  879. mc = c*cellSize+margin;
  880. qrSvg += 'M' + mc + ',' + mr + rect;
  881. }
  882. }
  883. }
  884. qrSvg += '" stroke="transparent" fill="black"/>';
  885. qrSvg += '</svg>';
  886. return qrSvg;
  887. };
  888. _this.createDataURL = function(cellSize, margin) {
  889. cellSize = cellSize || 2;
  890. margin = (typeof margin == 'undefined')? cellSize * 4 : margin;
  891. var size = _this.getModuleCount() * cellSize + margin * 2;
  892. var min = margin;
  893. var max = size - margin;
  894. return createDataURL(size, size, function(x, y) {
  895. if (min <= x && x < max && min <= y && y < max) {
  896. var c = Math.floor( (x - min) / cellSize);
  897. var r = Math.floor( (y - min) / cellSize);
  898. return _this.isDark(r, c)? 0 : 1;
  899. } else {
  900. return 1;
  901. }
  902. } );
  903. };
  904. _this.createImgTag = function(cellSize, margin, alt) {
  905. cellSize = cellSize || 2;
  906. margin = (typeof margin == 'undefined')? cellSize * 4 : margin;
  907. var size = _this.getModuleCount() * cellSize + margin * 2;
  908. var img = '';
  909. img += '<img';
  910. img += '\u0020src="';
  911. img += _this.createDataURL(cellSize, margin);
  912. img += '"';
  913. img += '\u0020width="';
  914. img += size;
  915. img += '"';
  916. img += '\u0020height="';
  917. img += size;
  918. img += '"';
  919. if (alt) {
  920. img += '\u0020alt="';
  921. img += alt;
  922. img += '"';
  923. }
  924. img += '/>';
  925. return img;
  926. };
  927. var _createHalfASCII = function(margin) {
  928. var cellSize = 1;
  929. margin = (typeof margin == 'undefined')? cellSize * 2 : margin;
  930. var size = _this.getModuleCount() * cellSize + margin * 2;
  931. var min = margin;
  932. var max = size - margin;
  933. var y, x, r1, r2, p;
  934. var blocks = {
  935. '██': '█',
  936. '█ ': '▀',
  937. ' █': '▄',
  938. ' ': ' '
  939. };
  940. var blocksLastLineNoMargin = {
  941. '██': '▀',
  942. '█ ': '▀',
  943. ' █': ' ',
  944. ' ': ' '
  945. };
  946. var ascii = '';
  947. for (y = 0; y < size; y += 2) {
  948. r1 = Math.floor((y - min) / cellSize);
  949. r2 = Math.floor((y + 1 - min) / cellSize);
  950. for (x = 0; x < size; x += 1) {
  951. p = '█';
  952. if (min <= x && x < max && min <= y && y < max && _this.isDark(r1, Math.floor((x - min) / cellSize))) {
  953. p = ' ';
  954. }
  955. if (min <= x && x < max && min <= y+1 && y+1 < max && _this.isDark(r2, Math.floor((x - min) / cellSize))) {
  956. p += ' ';
  957. }
  958. else {
  959. p += '█';
  960. }
  961. // Output 2 characters per pixel, to create full square. 1 character per pixels gives only half width of square.
  962. ascii += (margin < 1 && y+1 >= max) ? blocksLastLineNoMargin[p] : blocks[p];
  963. }
  964. ascii += '\n';
  965. }
  966. if (size % 2 && margin > 0) {
  967. return ascii.substring(0, ascii.length - size - 1) + Array(size+1).join('▀');
  968. }
  969. return ascii.substring(0, ascii.length-1);
  970. };
  971. _this.createASCII = function(cellSize, margin) {
  972. cellSize = cellSize || 1;
  973. if (cellSize < 2) {
  974. return _createHalfASCII(margin);
  975. }
  976. cellSize -= 1;
  977. margin = (typeof margin == 'undefined')? cellSize * 2 : margin;
  978. var size = _this.getModuleCount() * cellSize + margin * 2;
  979. var min = margin;
  980. var max = size - margin;
  981. var y, x, r, p;
  982. var white = Array(cellSize+1).join('██');
  983. var black = Array(cellSize+1).join(' ');
  984. var ascii = '';
  985. var line = '';
  986. for (y = 0; y < size; y += 1) {
  987. r = Math.floor( (y - min) / cellSize);
  988. line = '';
  989. for (x = 0; x < size; x += 1) {
  990. p = 1;
  991. if (min <= x && x < max && min <= y && y < max && _this.isDark(r, Math.floor((x - min) / cellSize))) {
  992. p = 0;
  993. }
  994. // Output 2 characters per pixel, to create full square. 1 character per pixels gives only half width of square.
  995. line += p ? white : black;
  996. }
  997. for (r = 0; r < cellSize; r += 1) {
  998. ascii += line + '\n';
  999. }
  1000. }
  1001. return ascii.substring(0, ascii.length-1);
  1002. };
  1003. _this.renderTo2dContext = function(context, cellSize) {
  1004. cellSize = cellSize || 2;
  1005. var length = _this.getModuleCount();
  1006. for (var row = 0; row < length; row++) {
  1007. for (var col = 0; col < length; col++) {
  1008. context.fillStyle = _this.isDark(row, col) ? 'black' : 'white';
  1009. context.fillRect(row * cellSize, col * cellSize, cellSize, cellSize);
  1010. }
  1011. }
  1012. }
  1013. return _this;
  1014. };
  1015. //---------------------------------------------------------------------
  1016. // qrcode.stringToBytes
  1017. //---------------------------------------------------------------------
  1018. qrcode.stringToBytesFuncs = {
  1019. 'default' : function(s) {
  1020. var bytes = [];
  1021. for (var i = 0; i < s.length; i += 1) {
  1022. var c = s.charCodeAt(i);
  1023. bytes.push(c & 0xff);
  1024. }
  1025. return bytes;
  1026. }
  1027. };
  1028. qrcode.stringToBytes = qrcode.stringToBytesFuncs['default'];
  1029. //---------------------------------------------------------------------
  1030. // qrcode.createStringToBytes
  1031. //---------------------------------------------------------------------
  1032. /**
  1033. * @param unicodeData base64 string of byte array.
  1034. * [16bit Unicode],[16bit Bytes], ...
  1035. * @param numChars
  1036. */
  1037. qrcode.createStringToBytes = function(unicodeData, numChars) {
  1038. // create conversion map.
  1039. var unicodeMap = function() {
  1040. var bin = base64DecodeInputStream(unicodeData);
  1041. var read = function() {
  1042. var b = bin.read();
  1043. if (b == -1) throw 'eof';
  1044. return b;
  1045. };
  1046. var count = 0;
  1047. var unicodeMap = {};
  1048. while (true) {
  1049. var b0 = bin.read();
  1050. if (b0 == -1) break;
  1051. var b1 = read();
  1052. var b2 = read();
  1053. var b3 = read();
  1054. var k = String.fromCharCode( (b0 << 8) | b1);
  1055. var v = (b2 << 8) | b3;
  1056. unicodeMap[k] = v;
  1057. count += 1;
  1058. }
  1059. if (count != numChars) {
  1060. throw count + ' != ' + numChars;
  1061. }
  1062. return unicodeMap;
  1063. }();
  1064. var unknownChar = '?'.charCodeAt(0);
  1065. return function(s) {
  1066. var bytes = [];
  1067. for (var i = 0; i < s.length; i += 1) {
  1068. var c = s.charCodeAt(i);
  1069. if (c < 128) {
  1070. bytes.push(c);
  1071. } else {
  1072. var b = unicodeMap[s.charAt(i)];
  1073. if (typeof b == 'number') {
  1074. if ( (b & 0xff) == b) {
  1075. // 1byte
  1076. bytes.push(b);
  1077. } else {
  1078. // 2bytes
  1079. bytes.push(b >>> 8);
  1080. bytes.push(b & 0xff);
  1081. }
  1082. } else {
  1083. bytes.push(unknownChar);
  1084. }
  1085. }
  1086. }
  1087. return bytes;
  1088. };
  1089. };
  1090. //---------------------------------------------------------------------
  1091. // QRMode
  1092. //---------------------------------------------------------------------
  1093. var QRMode = {
  1094. MODE_NUMBER : 1 << 0,
  1095. MODE_ALPHA_NUM : 1 << 1,
  1096. MODE_8BIT_BYTE : 1 << 2,
  1097. MODE_KANJI : 1 << 3
  1098. };
  1099. //---------------------------------------------------------------------
  1100. // QRErrorCorrectionLevel
  1101. //---------------------------------------------------------------------
  1102. var QRErrorCorrectionLevel = {
  1103. L : 1,
  1104. M : 0,
  1105. Q : 3,
  1106. H : 2
  1107. };
  1108. //---------------------------------------------------------------------
  1109. // QRMaskPattern
  1110. //---------------------------------------------------------------------
  1111. var QRMaskPattern = {
  1112. PATTERN000 : 0,
  1113. PATTERN001 : 1,
  1114. PATTERN010 : 2,
  1115. PATTERN011 : 3,
  1116. PATTERN100 : 4,
  1117. PATTERN101 : 5,
  1118. PATTERN110 : 6,
  1119. PATTERN111 : 7
  1120. };
  1121. //---------------------------------------------------------------------
  1122. // QRUtil
  1123. //---------------------------------------------------------------------
  1124. var QRUtil = function() {
  1125. var PATTERN_POSITION_TABLE = [
  1126. [],
  1127. [6, 18],
  1128. [6, 22],
  1129. [6, 26],
  1130. [6, 30],
  1131. [6, 34],
  1132. [6, 22, 38],
  1133. [6, 24, 42],
  1134. [6, 26, 46],
  1135. [6, 28, 50],
  1136. [6, 30, 54],
  1137. [6, 32, 58],
  1138. [6, 34, 62],
  1139. [6, 26, 46, 66],
  1140. [6, 26, 48, 70],
  1141. [6, 26, 50, 74],
  1142. [6, 30, 54, 78],
  1143. [6, 30, 56, 82],
  1144. [6, 30, 58, 86],
  1145. [6, 34, 62, 90],
  1146. [6, 28, 50, 72, 94],
  1147. [6, 26, 50, 74, 98],
  1148. [6, 30, 54, 78, 102],
  1149. [6, 28, 54, 80, 106],
  1150. [6, 32, 58, 84, 110],
  1151. [6, 30, 58, 86, 114],
  1152. [6, 34, 62, 90, 118],
  1153. [6, 26, 50, 74, 98, 122],
  1154. [6, 30, 54, 78, 102, 126],
  1155. [6, 26, 52, 78, 104, 130],
  1156. [6, 30, 56, 82, 108, 134],
  1157. [6, 34, 60, 86, 112, 138],
  1158. [6, 30, 58, 86, 114, 142],
  1159. [6, 34, 62, 90, 118, 146],
  1160. [6, 30, 54, 78, 102, 126, 150],
  1161. [6, 24, 50, 76, 102, 128, 154],
  1162. [6, 28, 54, 80, 106, 132, 158],
  1163. [6, 32, 58, 84, 110, 136, 162],
  1164. [6, 26, 54, 82, 110, 138, 166],
  1165. [6, 30, 58, 86, 114, 142, 170]
  1166. ];
  1167. var G15 = (1 << 10) | (1 << 8) | (1 << 5) | (1 << 4) | (1 << 2) | (1 << 1) | (1 << 0);
  1168. var G18 = (1 << 12) | (1 << 11) | (1 << 10) | (1 << 9) | (1 << 8) | (1 << 5) | (1 << 2) | (1 << 0);
  1169. var G15_MASK = (1 << 14) | (1 << 12) | (1 << 10) | (1 << 4) | (1 << 1);
  1170. var _this = {};
  1171. var getBCHDigit = function(data) {
  1172. var digit = 0;
  1173. while (data != 0) {
  1174. digit += 1;
  1175. data >>>= 1;
  1176. }
  1177. return digit;
  1178. };
  1179. _this.getBCHTypeInfo = function(data) {
  1180. var d = data << 10;
  1181. while (getBCHDigit(d) - getBCHDigit(G15) >= 0) {
  1182. d ^= (G15 << (getBCHDigit(d) - getBCHDigit(G15) ) );
  1183. }
  1184. return ( (data << 10) | d) ^ G15_MASK;
  1185. };
  1186. _this.getBCHTypeNumber = function(data) {
  1187. var d = data << 12;
  1188. while (getBCHDigit(d) - getBCHDigit(G18) >= 0) {
  1189. d ^= (G18 << (getBCHDigit(d) - getBCHDigit(G18) ) );
  1190. }
  1191. return (data << 12) | d;
  1192. };
  1193. _this.getPatternPosition = function(typeNumber) {
  1194. return PATTERN_POSITION_TABLE[typeNumber - 1];
  1195. };
  1196. _this.getMaskFunction = function(maskPattern) {
  1197. switch (maskPattern) {
  1198. case QRMaskPattern.PATTERN000 :
  1199. return function(i, j) { return (i + j) % 2 == 0; };
  1200. case QRMaskPattern.PATTERN001 :
  1201. return function(i, j) { return i % 2 == 0; };
  1202. case QRMaskPattern.PATTERN010 :
  1203. return function(i, j) { return j % 3 == 0; };
  1204. case QRMaskPattern.PATTERN011 :
  1205. return function(i, j) { return (i + j) % 3 == 0; };
  1206. case QRMaskPattern.PATTERN100 :
  1207. return function(i, j) { return (Math.floor(i / 2) + Math.floor(j / 3) ) % 2 == 0; };
  1208. case QRMaskPattern.PATTERN101 :
  1209. return function(i, j) { return (i * j) % 2 + (i * j) % 3 == 0; };
  1210. case QRMaskPattern.PATTERN110 :
  1211. return function(i, j) { return ( (i * j) % 2 + (i * j) % 3) % 2 == 0; };
  1212. case QRMaskPattern.PATTERN111 :
  1213. return function(i, j) { return ( (i * j) % 3 + (i + j) % 2) % 2 == 0; };
  1214. default :
  1215. throw 'bad maskPattern:' + maskPattern;
  1216. }
  1217. };
  1218. _this.getErrorCorrectPolynomial = function(errorCorrectLength) {
  1219. var a = qrPolynomial([1], 0);
  1220. for (var i = 0; i < errorCorrectLength; i += 1) {
  1221. a = a.multiply(qrPolynomial([1, QRMath.gexp(i)], 0) );
  1222. }
  1223. return a;
  1224. };
  1225. _this.getLengthInBits = function(mode, type) {
  1226. if (1 <= type && type < 10) {
  1227. // 1 - 9
  1228. switch(mode) {
  1229. case QRMode.MODE_NUMBER : return 10;
  1230. case QRMode.MODE_ALPHA_NUM : return 9;
  1231. case QRMode.MODE_8BIT_BYTE : return 8;
  1232. case QRMode.MODE_KANJI : return 8;
  1233. default :
  1234. throw 'mode:' + mode;
  1235. }
  1236. } else if (type < 27) {
  1237. // 10 - 26
  1238. switch(mode) {
  1239. case QRMode.MODE_NUMBER : return 12;
  1240. case QRMode.MODE_ALPHA_NUM : return 11;
  1241. case QRMode.MODE_8BIT_BYTE : return 16;
  1242. case QRMode.MODE_KANJI : return 10;
  1243. default :
  1244. throw 'mode:' + mode;
  1245. }
  1246. } else if (type < 41) {
  1247. // 27 - 40
  1248. switch(mode) {
  1249. case QRMode.MODE_NUMBER : return 14;
  1250. case QRMode.MODE_ALPHA_NUM : return 13;
  1251. case QRMode.MODE_8BIT_BYTE : return 16;
  1252. case QRMode.MODE_KANJI : return 12;
  1253. default :
  1254. throw 'mode:' + mode;
  1255. }
  1256. } else {
  1257. throw 'type:' + type;
  1258. }
  1259. };
  1260. _this.getLostPoint = function(qrcode) {
  1261. var moduleCount = qrcode.getModuleCount();
  1262. var lostPoint = 0;
  1263. // LEVEL1
  1264. for (var row = 0; row < moduleCount; row += 1) {
  1265. for (var col = 0; col < moduleCount; col += 1) {
  1266. var sameCount = 0;
  1267. var dark = qrcode.isDark(row, col);
  1268. for (var r = -1; r <= 1; r += 1) {
  1269. if (row + r < 0 || moduleCount <= row + r) {
  1270. continue;
  1271. }
  1272. for (var c = -1; c <= 1; c += 1) {
  1273. if (col + c < 0 || moduleCount <= col + c) {
  1274. continue;
  1275. }
  1276. if (r == 0 && c == 0) {
  1277. continue;
  1278. }
  1279. if (dark == qrcode.isDark(row + r, col + c) ) {
  1280. sameCount += 1;
  1281. }
  1282. }
  1283. }
  1284. if (sameCount > 5) {
  1285. lostPoint += (3 + sameCount - 5);
  1286. }
  1287. }
  1288. };
  1289. // LEVEL2
  1290. for (var row = 0; row < moduleCount - 1; row += 1) {
  1291. for (var col = 0; col < moduleCount - 1; col += 1) {
  1292. var count = 0;
  1293. if (qrcode.isDark(row, col) ) count += 1;
  1294. if (qrcode.isDark(row + 1, col) ) count += 1;
  1295. if (qrcode.isDark(row, col + 1) ) count += 1;
  1296. if (qrcode.isDark(row + 1, col + 1) ) count += 1;
  1297. if (count == 0 || count == 4) {
  1298. lostPoint += 3;
  1299. }
  1300. }
  1301. }
  1302. // LEVEL3
  1303. for (var row = 0; row < moduleCount; row += 1) {
  1304. for (var col = 0; col < moduleCount - 6; col += 1) {
  1305. if (qrcode.isDark(row, col)
  1306. && !qrcode.isDark(row, col + 1)
  1307. && qrcode.isDark(row, col + 2)
  1308. && qrcode.isDark(row, col + 3)
  1309. && qrcode.isDark(row, col + 4)
  1310. && !qrcode.isDark(row, col + 5)
  1311. && qrcode.isDark(row, col + 6) ) {
  1312. lostPoint += 40;
  1313. }
  1314. }
  1315. }
  1316. for (var col = 0; col < moduleCount; col += 1) {
  1317. for (var row = 0; row < moduleCount - 6; row += 1) {
  1318. if (qrcode.isDark(row, col)
  1319. && !qrcode.isDark(row + 1, col)
  1320. && qrcode.isDark(row + 2, col)
  1321. && qrcode.isDark(row + 3, col)
  1322. && qrcode.isDark(row + 4, col)
  1323. && !qrcode.isDark(row + 5, col)
  1324. && qrcode.isDark(row + 6, col) ) {
  1325. lostPoint += 40;
  1326. }
  1327. }
  1328. }
  1329. // LEVEL4
  1330. var darkCount = 0;
  1331. for (var col = 0; col < moduleCount; col += 1) {
  1332. for (var row = 0; row < moduleCount; row += 1) {
  1333. if (qrcode.isDark(row, col) ) {
  1334. darkCount += 1;
  1335. }
  1336. }
  1337. }
  1338. var ratio = Math.abs(100 * darkCount / moduleCount / moduleCount - 50) / 5;
  1339. lostPoint += ratio * 10;
  1340. return lostPoint;
  1341. };
  1342. return _this;
  1343. }();
  1344. //---------------------------------------------------------------------
  1345. // QRMath
  1346. //---------------------------------------------------------------------
  1347. var QRMath = function() {
  1348. var EXP_TABLE = new Array(256);
  1349. var LOG_TABLE = new Array(256);
  1350. // initialize tables
  1351. for (var i = 0; i < 8; i += 1) {
  1352. EXP_TABLE[i] = 1 << i;
  1353. }
  1354. for (var i = 8; i < 256; i += 1) {
  1355. EXP_TABLE[i] = EXP_TABLE[i - 4]
  1356. ^ EXP_TABLE[i - 5]
  1357. ^ EXP_TABLE[i - 6]
  1358. ^ EXP_TABLE[i - 8];
  1359. }
  1360. for (var i = 0; i < 255; i += 1) {
  1361. LOG_TABLE[EXP_TABLE[i] ] = i;
  1362. }
  1363. var _this = {};
  1364. _this.glog = function(n) {
  1365. if (n < 1) {
  1366. throw 'glog(' + n + ')';
  1367. }
  1368. return LOG_TABLE[n];
  1369. };
  1370. _this.gexp = function(n) {
  1371. while (n < 0) {
  1372. n += 255;
  1373. }
  1374. while (n >= 256) {
  1375. n -= 255;
  1376. }
  1377. return EXP_TABLE[n];
  1378. };
  1379. return _this;
  1380. }();
  1381. //---------------------------------------------------------------------
  1382. // qrPolynomial
  1383. //---------------------------------------------------------------------
  1384. function qrPolynomial(num, shift) {
  1385. if (typeof num.length == 'undefined') {
  1386. throw num.length + '/' + shift;
  1387. }
  1388. var _num = function() {
  1389. var offset = 0;
  1390. while (offset < num.length && num[offset] == 0) {
  1391. offset += 1;
  1392. }
  1393. var _num = new Array(num.length - offset + shift);
  1394. for (var i = 0; i < num.length - offset; i += 1) {
  1395. _num[i] = num[i + offset];
  1396. }
  1397. return _num;
  1398. }();
  1399. var _this = {};
  1400. _this.getAt = function(index) {
  1401. return _num[index];
  1402. };
  1403. _this.getLength = function() {
  1404. return _num.length;
  1405. };
  1406. _this.multiply = function(e) {
  1407. var num = new Array(_this.getLength() + e.getLength() - 1);
  1408. for (var i = 0; i < _this.getLength(); i += 1) {
  1409. for (var j = 0; j < e.getLength(); j += 1) {
  1410. num[i + j] ^= QRMath.gexp(QRMath.glog(_this.getAt(i) ) + QRMath.glog(e.getAt(j) ) );
  1411. }
  1412. }
  1413. return qrPolynomial(num, 0);
  1414. };
  1415. _this.mod = function(e) {
  1416. if (_this.getLength() - e.getLength() < 0) {
  1417. return _this;
  1418. }
  1419. var ratio = QRMath.glog(_this.getAt(0) ) - QRMath.glog(e.getAt(0) );
  1420. var num = new Array(_this.getLength() );
  1421. for (var i = 0; i < _this.getLength(); i += 1) {
  1422. num[i] = _this.getAt(i);
  1423. }
  1424. for (var i = 0; i < e.getLength(); i += 1) {
  1425. num[i] ^= QRMath.gexp(QRMath.glog(e.getAt(i) ) + ratio);
  1426. }
  1427. // recursive call
  1428. return qrPolynomial(num, 0).mod(e);
  1429. };
  1430. return _this;
  1431. };
  1432. //---------------------------------------------------------------------
  1433. // QRRSBlock
  1434. //---------------------------------------------------------------------
  1435. var QRRSBlock = function() {
  1436. var RS_BLOCK_TABLE = [
  1437. // L
  1438. // M
  1439. // Q
  1440. // H
  1441. // 1
  1442. [1, 26, 19],
  1443. [1, 26, 16],
  1444. [1, 26, 13],
  1445. [1, 26, 9],
  1446. // 2
  1447. [1, 44, 34],
  1448. [1, 44, 28],
  1449. [1, 44, 22],
  1450. [1, 44, 16],
  1451. // 3
  1452. [1, 70, 55],
  1453. [1, 70, 44],
  1454. [2, 35, 17],
  1455. [2, 35, 13],
  1456. // 4
  1457. [1, 100, 80],
  1458. [2, 50, 32],
  1459. [2, 50, 24],
  1460. [4, 25, 9],
  1461. // 5
  1462. [1, 134, 108],
  1463. [2, 67, 43],
  1464. [2, 33, 15, 2, 34, 16],
  1465. [2, 33, 11, 2, 34, 12],
  1466. // 6
  1467. [2, 86, 68],
  1468. [4, 43, 27],
  1469. [4, 43, 19],
  1470. [4, 43, 15],
  1471. // 7
  1472. [2, 98, 78],
  1473. [4, 49, 31],
  1474. [2, 32, 14, 4, 33, 15],
  1475. [4, 39, 13, 1, 40, 14],
  1476. // 8
  1477. [2, 121, 97],
  1478. [2, 60, 38, 2, 61, 39],
  1479. [4, 40, 18, 2, 41, 19],
  1480. [4, 40, 14, 2, 41, 15],
  1481. // 9
  1482. [2, 146, 116],
  1483. [3, 58, 36, 2, 59, 37],
  1484. [4, 36, 16, 4, 37, 17],
  1485. [4, 36, 12, 4, 37, 13],
  1486. // 10
  1487. [2, 86, 68, 2, 87, 69],
  1488. [4, 69, 43, 1, 70, 44],
  1489. [6, 43, 19, 2, 44, 20],
  1490. [6, 43, 15, 2, 44, 16],
  1491. // 11
  1492. [4, 101, 81],
  1493. [1, 80, 50, 4, 81, 51],
  1494. [4, 50, 22, 4, 51, 23],
  1495. [3, 36, 12, 8, 37, 13],
  1496. // 12
  1497. [2, 116, 92, 2, 117, 93],
  1498. [6, 58, 36, 2, 59, 37],
  1499. [4, 46, 20, 6, 47, 21],
  1500. [7, 42, 14, 4, 43, 15],
  1501. // 13
  1502. [4, 133, 107],
  1503. [8, 59, 37, 1, 60, 38],
  1504. [8, 44, 20, 4, 45, 21],
  1505. [12, 33, 11, 4, 34, 12],
  1506. // 14
  1507. [3, 145, 115, 1, 146, 116],
  1508. [4, 64, 40, 5, 65, 41],
  1509. [11, 36, 16, 5, 37, 17],
  1510. [11, 36, 12, 5, 37, 13],
  1511. // 15
  1512. [5, 109, 87, 1, 110, 88],
  1513. [5, 65, 41, 5, 66, 42],
  1514. [5, 54, 24, 7, 55, 25],
  1515. [11, 36, 12, 7, 37, 13],
  1516. // 16
  1517. [5, 122, 98, 1, 123, 99],
  1518. [7, 73, 45, 3, 74, 46],
  1519. [15, 43, 19, 2, 44, 20],
  1520. [3, 45, 15, 13, 46, 16],
  1521. // 17
  1522. [1, 135, 107, 5, 136, 108],
  1523. [10, 74, 46, 1, 75, 47],
  1524. [1, 50, 22, 15, 51, 23],
  1525. [2, 42, 14, 17, 43, 15],
  1526. // 18
  1527. [5, 150, 120, 1, 151, 121],
  1528. [9, 69, 43, 4, 70, 44],
  1529. [17, 50, 22, 1, 51, 23],
  1530. [2, 42, 14, 19, 43, 15],
  1531. // 19
  1532. [3, 141, 113, 4, 142, 114],
  1533. [3, 70, 44, 11, 71, 45],
  1534. [17, 47, 21, 4, 48, 22],
  1535. [9, 39, 13, 16, 40, 14],
  1536. // 20
  1537. [3, 135, 107, 5, 136, 108],
  1538. [3, 67, 41, 13, 68, 42],
  1539. [15, 54, 24, 5, 55, 25],
  1540. [15, 43, 15, 10, 44, 16],
  1541. // 21
  1542. [4, 144, 116, 4, 145, 117],
  1543. [17, 68, 42],
  1544. [17, 50, 22, 6, 51, 23],
  1545. [19, 46, 16, 6, 47, 17],
  1546. // 22
  1547. [2, 139, 111, 7, 140, 112],
  1548. [17, 74, 46],
  1549. [7, 54, 24, 16, 55, 25],
  1550. [34, 37, 13],
  1551. // 23
  1552. [4, 151, 121, 5, 152, 122],
  1553. [4, 75, 47, 14, 76, 48],
  1554. [11, 54, 24, 14, 55, 25],
  1555. [16, 45, 15, 14, 46, 16],
  1556. // 24
  1557. [6, 147, 117, 4, 148, 118],
  1558. [6, 73, 45, 14, 74, 46],
  1559. [11, 54, 24, 16, 55, 25],
  1560. [30, 46, 16, 2, 47, 17],
  1561. // 25
  1562. [8, 132, 106, 4, 133, 107],
  1563. [8, 75, 47, 13, 76, 48],
  1564. [7, 54, 24, 22, 55, 25],
  1565. [22, 45, 15, 13, 46, 16],
  1566. // 26
  1567. [10, 142, 114, 2, 143, 115],
  1568. [19, 74, 46, 4, 75, 47],
  1569. [28, 50, 22, 6, 51, 23],
  1570. [33, 46, 16, 4, 47, 17],
  1571. // 27
  1572. [8, 152, 122, 4, 153, 123],
  1573. [22, 73, 45, 3, 74, 46],
  1574. [8, 53, 23, 26, 54, 24],
  1575. [12, 45, 15, 28, 46, 16],
  1576. // 28
  1577. [3, 147, 117, 10, 148, 118],
  1578. [3, 73, 45, 23, 74, 46],
  1579. [4, 54, 24, 31, 55, 25],
  1580. [11, 45, 15, 31, 46, 16],
  1581. // 29
  1582. [7, 146, 116, 7, 147, 117],
  1583. [21, 73, 45, 7, 74, 46],
  1584. [1, 53, 23, 37, 54, 24],
  1585. [19, 45, 15, 26, 46, 16],
  1586. // 30
  1587. [5, 145, 115, 10, 146, 116],
  1588. [19, 75, 47, 10, 76, 48],
  1589. [15, 54, 24, 25, 55, 25],
  1590. [23, 45, 15, 25, 46, 16],
  1591. // 31
  1592. [13, 145, 115, 3, 146, 116],
  1593. [2, 74, 46, 29, 75, 47],
  1594. [42, 54, 24, 1, 55, 25],
  1595. [23, 45, 15, 28, 46, 16],
  1596. // 32
  1597. [17, 145, 115],
  1598. [10, 74, 46, 23, 75, 47],
  1599. [10, 54, 24, 35, 55, 25],
  1600. [19, 45, 15, 35, 46, 16],
  1601. // 33
  1602. [17, 145, 115, 1, 146, 116],
  1603. [14, 74, 46, 21, 75, 47],
  1604. [29, 54, 24, 19, 55, 25],
  1605. [11, 45, 15, 46, 46, 16],
  1606. // 34
  1607. [13, 145, 115, 6, 146, 116],
  1608. [14, 74, 46, 23, 75, 47],
  1609. [44, 54, 24, 7, 55, 25],
  1610. [59, 46, 16, 1, 47, 17],
  1611. // 35
  1612. [12, 151, 121, 7, 152, 122],
  1613. [12, 75, 47, 26, 76, 48],
  1614. [39, 54, 24, 14, 55, 25],
  1615. [22, 45, 15, 41, 46, 16],
  1616. // 36
  1617. [6, 151, 121, 14, 152, 122],
  1618. [6, 75, 47, 34, 76, 48],
  1619. [46, 54, 24, 10, 55, 25],
  1620. [2, 45, 15, 64, 46, 16],
  1621. // 37
  1622. [17, 152, 122, 4, 153, 123],
  1623. [29, 74, 46, 14, 75, 47],
  1624. [49, 54, 24, 10, 55, 25],
  1625. [24, 45, 15, 46, 46, 16],
  1626. // 38
  1627. [4, 152, 122, 18, 153, 123],
  1628. [13, 74, 46, 32, 75, 47],
  1629. [48, 54, 24, 14, 55, 25],
  1630. [42, 45, 15, 32, 46, 16],
  1631. // 39
  1632. [20, 147, 117, 4, 148, 118],
  1633. [40, 75, 47, 7, 76, 48],
  1634. [43, 54, 24, 22, 55, 25],
  1635. [10, 45, 15, 67, 46, 16],
  1636. // 40
  1637. [19, 148, 118, 6, 149, 119],
  1638. [18, 75, 47, 31, 76, 48],
  1639. [34, 54, 24, 34, 55, 25],
  1640. [20, 45, 15, 61, 46, 16]
  1641. ];
  1642. var qrRSBlock = function(totalCount, dataCount) {
  1643. var _this = {};
  1644. _this.totalCount = totalCount;
  1645. _this.dataCount = dataCount;
  1646. return _this;
  1647. };
  1648. var _this = {};
  1649. var getRsBlockTable = function(typeNumber, errorCorrectionLevel) {
  1650. switch(errorCorrectionLevel) {
  1651. case QRErrorCorrectionLevel.L :
  1652. return RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 0];
  1653. case QRErrorCorrectionLevel.M :
  1654. return RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 1];
  1655. case QRErrorCorrectionLevel.Q :
  1656. return RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 2];
  1657. case QRErrorCorrectionLevel.H :
  1658. return RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 3];
  1659. default :
  1660. return undefined;
  1661. }
  1662. };
  1663. _this.getRSBlocks = function(typeNumber, errorCorrectionLevel) {
  1664. var rsBlock = getRsBlockTable(typeNumber, errorCorrectionLevel);
  1665. if (typeof rsBlock == 'undefined') {
  1666. throw 'bad rs block @ typeNumber:' + typeNumber +
  1667. '/errorCorrectionLevel:' + errorCorrectionLevel;
  1668. }
  1669. var length = rsBlock.length / 3;
  1670. var list = [];
  1671. for (var i = 0; i < length; i += 1) {
  1672. var count = rsBlock[i * 3 + 0];
  1673. var totalCount = rsBlock[i * 3 + 1];
  1674. var dataCount = rsBlock[i * 3 + 2];
  1675. for (var j = 0; j < count; j += 1) {
  1676. list.push(qrRSBlock(totalCount, dataCount) );
  1677. }
  1678. }
  1679. return list;
  1680. };
  1681. return _this;
  1682. }();
  1683. //---------------------------------------------------------------------
  1684. // qrBitBuffer
  1685. //---------------------------------------------------------------------
  1686. var qrBitBuffer = function() {
  1687. var _buffer = [];
  1688. var _length = 0;
  1689. var _this = {};
  1690. _this.getBuffer = function() {
  1691. return _buffer;
  1692. };
  1693. _this.getAt = function(index) {
  1694. var bufIndex = Math.floor(index / 8);
  1695. return ( (_buffer[bufIndex] >>> (7 - index % 8) ) & 1) == 1;
  1696. };
  1697. _this.put = function(num, length) {
  1698. for (var i = 0; i < length; i += 1) {
  1699. _this.putBit( ( (num >>> (length - i - 1) ) & 1) == 1);
  1700. }
  1701. };
  1702. _this.getLengthInBits = function() {
  1703. return _length;
  1704. };
  1705. _this.putBit = function(bit) {
  1706. var bufIndex = Math.floor(_length / 8);
  1707. if (_buffer.length <= bufIndex) {
  1708. _buffer.push(0);
  1709. }
  1710. if (bit) {
  1711. _buffer[bufIndex] |= (0x80 >>> (_length % 8) );
  1712. }
  1713. _length += 1;
  1714. };
  1715. return _this;
  1716. };
  1717. //---------------------------------------------------------------------
  1718. // qrNumber
  1719. //---------------------------------------------------------------------
  1720. var qrNumber = function(data) {
  1721. var _mode = QRMode.MODE_NUMBER;
  1722. var _data = data;
  1723. var _this = {};
  1724. _this.getMode = function() {
  1725. return _mode;
  1726. };
  1727. _this.getLength = function(buffer) {
  1728. return _data.length;
  1729. };
  1730. _this.write = function(buffer) {
  1731. var data = _data;
  1732. var i = 0;
  1733. while (i + 2 < data.length) {
  1734. buffer.put(strToNum(data.substring(i, i + 3) ), 10);
  1735. i += 3;
  1736. }
  1737. if (i < data.length) {
  1738. if (data.length - i == 1) {
  1739. buffer.put(strToNum(data.substring(i, i + 1) ), 4);
  1740. } else if (data.length - i == 2) {
  1741. buffer.put(strToNum(data.substring(i, i + 2) ), 7);
  1742. }
  1743. }
  1744. };
  1745. var strToNum = function(s) {
  1746. var num = 0;
  1747. for (var i = 0; i < s.length; i += 1) {
  1748. num = num * 10 + chatToNum(s.charAt(i) );
  1749. }
  1750. return num;
  1751. };
  1752. var chatToNum = function(c) {
  1753. if ('0' <= c && c <= '9') {
  1754. return c.charCodeAt(0) - '0'.charCodeAt(0);
  1755. }
  1756. throw 'illegal char :' + c;
  1757. };
  1758. return _this;
  1759. };
  1760. //---------------------------------------------------------------------
  1761. // qrAlphaNum
  1762. //---------------------------------------------------------------------
  1763. var qrAlphaNum = function(data) {
  1764. var _mode = QRMode.MODE_ALPHA_NUM;
  1765. var _data = data;
  1766. var _this = {};
  1767. _this.getMode = function() {
  1768. return _mode;
  1769. };
  1770. _this.getLength = function(buffer) {
  1771. return _data.length;
  1772. };
  1773. _this.write = function(buffer) {
  1774. var s = _data;
  1775. var i = 0;
  1776. while (i + 1 < s.length) {
  1777. buffer.put(
  1778. getCode(s.charAt(i) ) * 45 +
  1779. getCode(s.charAt(i + 1) ), 11);
  1780. i += 2;
  1781. }
  1782. if (i < s.length) {
  1783. buffer.put(getCode(s.charAt(i) ), 6);
  1784. }
  1785. };
  1786. var getCode = function(c) {
  1787. if ('0' <= c && c <= '9') {
  1788. return c.charCodeAt(0) - '0'.charCodeAt(0);
  1789. } else if ('A' <= c && c <= 'Z') {
  1790. return c.charCodeAt(0) - 'A'.charCodeAt(0) + 10;
  1791. } else {
  1792. switch (c) {
  1793. case ' ' : return 36;
  1794. case '$' : return 37;
  1795. case '%' : return 38;
  1796. case '*' : return 39;
  1797. case '+' : return 40;
  1798. case '-' : return 41;
  1799. case '.' : return 42;
  1800. case '/' : return 43;
  1801. case ':' : return 44;
  1802. default :
  1803. throw 'illegal char :' + c;
  1804. }
  1805. }
  1806. };
  1807. return _this;
  1808. };
  1809. //---------------------------------------------------------------------
  1810. // qr8BitByte
  1811. //---------------------------------------------------------------------
  1812. var qr8BitByte = function(data) {
  1813. var _mode = QRMode.MODE_8BIT_BYTE;
  1814. var _data = data;
  1815. var _bytes = qrcode.stringToBytes(data);
  1816. var _this = {};
  1817. _this.getMode = function() {
  1818. return _mode;
  1819. };
  1820. _this.getLength = function(buffer) {
  1821. return _bytes.length;
  1822. };
  1823. _this.write = function(buffer) {
  1824. for (var i = 0; i < _bytes.length; i += 1) {
  1825. buffer.put(_bytes[i], 8);
  1826. }
  1827. };
  1828. return _this;
  1829. };
  1830. //---------------------------------------------------------------------
  1831. // qrKanji
  1832. //---------------------------------------------------------------------
  1833. var qrKanji = function(data) {
  1834. var _mode = QRMode.MODE_KANJI;
  1835. var _data = data;
  1836. var stringToBytes = qrcode.stringToBytesFuncs['SJIS'];
  1837. if (!stringToBytes) {
  1838. throw 'sjis not supported.';
  1839. }
  1840. !function(c, code) {
  1841. // self test for sjis support.
  1842. var test = stringToBytes(c);
  1843. if (test.length != 2 || ( (test[0] << 8) | test[1]) != code) {
  1844. throw 'sjis not supported.';
  1845. }
  1846. }('\u53cb', 0x9746);
  1847. var _bytes = stringToBytes(data);
  1848. var _this = {};
  1849. _this.getMode = function() {
  1850. return _mode;
  1851. };
  1852. _this.getLength = function(buffer) {
  1853. return ~~(_bytes.length / 2);
  1854. };
  1855. _this.write = function(buffer) {
  1856. var data = _bytes;
  1857. var i = 0;
  1858. while (i + 1 < data.length) {
  1859. var c = ( (0xff & data[i]) << 8) | (0xff & data[i + 1]);
  1860. if (0x8140 <= c && c <= 0x9FFC) {
  1861. c -= 0x8140;
  1862. } else if (0xE040 <= c && c <= 0xEBBF) {
  1863. c -= 0xC140;
  1864. } else {
  1865. throw 'illegal char at ' + (i + 1) + '/' + c;
  1866. }
  1867. c = ( (c >>> 8) & 0xff) * 0xC0 + (c & 0xff);
  1868. buffer.put(c, 13);
  1869. i += 2;
  1870. }
  1871. if (i < data.length) {
  1872. throw 'illegal char at ' + (i + 1);
  1873. }
  1874. };
  1875. return _this;
  1876. };
  1877. //=====================================================================
  1878. // GIF Support etc.
  1879. //
  1880. //---------------------------------------------------------------------
  1881. // byteArrayOutputStream
  1882. //---------------------------------------------------------------------
  1883. var byteArrayOutputStream = function() {
  1884. var _bytes = [];
  1885. var _this = {};
  1886. _this.writeByte = function(b) {
  1887. _bytes.push(b & 0xff);
  1888. };
  1889. _this.writeShort = function(i) {
  1890. _this.writeByte(i);
  1891. _this.writeByte(i >>> 8);
  1892. };
  1893. _this.writeBytes = function(b, off, len) {
  1894. off = off || 0;
  1895. len = len || b.length;
  1896. for (var i = 0; i < len; i += 1) {
  1897. _this.writeByte(b[i + off]);
  1898. }
  1899. };
  1900. _this.writeString = function(s) {
  1901. for (var i = 0; i < s.length; i += 1) {
  1902. _this.writeByte(s.charCodeAt(i) );
  1903. }
  1904. };
  1905. _this.toByteArray = function() {
  1906. return _bytes;
  1907. };
  1908. _this.toString = function() {
  1909. var s = '';
  1910. s += '[';
  1911. for (var i = 0; i < _bytes.length; i += 1) {
  1912. if (i > 0) {
  1913. s += ',';
  1914. }
  1915. s += _bytes[i];
  1916. }
  1917. s += ']';
  1918. return s;
  1919. };
  1920. return _this;
  1921. };
  1922. //---------------------------------------------------------------------
  1923. // base64EncodeOutputStream
  1924. //---------------------------------------------------------------------
  1925. var base64EncodeOutputStream = function() {
  1926. var _buffer = 0;
  1927. var _buflen = 0;
  1928. var _length = 0;
  1929. var _base64 = '';
  1930. var _this = {};
  1931. var writeEncoded = function(b) {
  1932. _base64 += String.fromCharCode(encode(b & 0x3f) );
  1933. };
  1934. var encode = function(n) {
  1935. if (n < 0) {
  1936. // error.
  1937. } else if (n < 26) {
  1938. return 0x41 + n;
  1939. } else if (n < 52) {
  1940. return 0x61 + (n - 26);
  1941. } else if (n < 62) {
  1942. return 0x30 + (n - 52);
  1943. } else if (n == 62) {
  1944. return 0x2b;
  1945. } else if (n == 63) {
  1946. return 0x2f;
  1947. }
  1948. throw 'n:' + n;
  1949. };
  1950. _this.writeByte = function(n) {
  1951. _buffer = (_buffer << 8) | (n & 0xff);
  1952. _buflen += 8;
  1953. _length += 1;
  1954. while (_buflen >= 6) {
  1955. writeEncoded(_buffer >>> (_buflen - 6) );
  1956. _buflen -= 6;
  1957. }
  1958. };
  1959. _this.flush = function() {
  1960. if (_buflen > 0) {
  1961. writeEncoded(_buffer << (6 - _buflen) );
  1962. _buffer = 0;
  1963. _buflen = 0;
  1964. }
  1965. if (_length % 3 != 0) {
  1966. // padding
  1967. var padlen = 3 - _length % 3;
  1968. for (var i = 0; i < padlen; i += 1) {
  1969. _base64 += '=';
  1970. }
  1971. }
  1972. };
  1973. _this.toString = function() {
  1974. return _base64;
  1975. };
  1976. return _this;
  1977. };
  1978. //---------------------------------------------------------------------
  1979. // base64DecodeInputStream
  1980. //---------------------------------------------------------------------
  1981. var base64DecodeInputStream = function(str) {
  1982. var _str = str;
  1983. var _pos = 0;
  1984. var _buffer = 0;
  1985. var _buflen = 0;
  1986. var _this = {};
  1987. _this.read = function() {
  1988. while (_buflen < 8) {
  1989. if (_pos >= _str.length) {
  1990. if (_buflen == 0) {
  1991. return -1;
  1992. }
  1993. throw 'unexpected end of file./' + _buflen;
  1994. }
  1995. var c = _str.charAt(_pos);
  1996. _pos += 1;
  1997. if (c == '=') {
  1998. _buflen = 0;
  1999. return -1;
  2000. } else if (c.match(/^\s$/) ) {
  2001. // ignore if whitespace.
  2002. continue;
  2003. }
  2004. _buffer = (_buffer << 6) | decode(c.charCodeAt(0) );
  2005. _buflen += 6;
  2006. }
  2007. var n = (_buffer >>> (_buflen - 8) ) & 0xff;
  2008. _buflen -= 8;
  2009. return n;
  2010. };
  2011. var decode = function(c) {
  2012. if (0x41 <= c && c <= 0x5a) {
  2013. return c - 0x41;
  2014. } else if (0x61 <= c && c <= 0x7a) {
  2015. return c - 0x61 + 26;
  2016. } else if (0x30 <= c && c <= 0x39) {
  2017. return c - 0x30 + 52;
  2018. } else if (c == 0x2b) {
  2019. return 62;
  2020. } else if (c == 0x2f) {
  2021. return 63;
  2022. } else {
  2023. throw 'c:' + c;
  2024. }
  2025. };
  2026. return _this;
  2027. };
  2028. //---------------------------------------------------------------------
  2029. // gifImage (B/W)
  2030. //---------------------------------------------------------------------
  2031. var gifImage = function(width, height) {
  2032. var _width = width;
  2033. var _height = height;
  2034. var _data = new Array(width * height);
  2035. var _this = {};
  2036. _this.setPixel = function(x, y, pixel) {
  2037. _data[y * _width + x] = pixel;
  2038. };
  2039. _this.write = function(out) {
  2040. //---------------------------------
  2041. // GIF Signature
  2042. out.writeString('GIF87a');
  2043. //---------------------------------
  2044. // Screen Descriptor
  2045. out.writeShort(_width);
  2046. out.writeShort(_height);
  2047. out.writeByte(0x80); // 2bit
  2048. out.writeByte(0);
  2049. out.writeByte(0);
  2050. //---------------------------------
  2051. // Global Color Map
  2052. // black
  2053. out.writeByte(0x00);
  2054. out.writeByte(0x00);
  2055. out.writeByte(0x00);
  2056. // white
  2057. out.writeByte(0xff);
  2058. out.writeByte(0xff);
  2059. out.writeByte(0xff);
  2060. //---------------------------------
  2061. // Image Descriptor
  2062. out.writeString(',');
  2063. out.writeShort(0);
  2064. out.writeShort(0);
  2065. out.writeShort(_width);
  2066. out.writeShort(_height);
  2067. out.writeByte(0);
  2068. //---------------------------------
  2069. // Local Color Map
  2070. //---------------------------------
  2071. // Raster Data
  2072. var lzwMinCodeSize = 2;
  2073. var raster = getLZWRaster(lzwMinCodeSize);
  2074. out.writeByte(lzwMinCodeSize);
  2075. var offset = 0;
  2076. while (raster.length - offset > 255) {
  2077. out.writeByte(255);
  2078. out.writeBytes(raster, offset, 255);
  2079. offset += 255;
  2080. }
  2081. out.writeByte(raster.length - offset);
  2082. out.writeBytes(raster, offset, raster.length - offset);
  2083. out.writeByte(0x00);
  2084. //---------------------------------
  2085. // GIF Terminator
  2086. out.writeString(';');
  2087. };
  2088. var bitOutputStream = function(out) {
  2089. var _out = out;
  2090. var _bitLength = 0;
  2091. var _bitBuffer = 0;
  2092. var _this = {};
  2093. _this.write = function(data, length) {
  2094. if ( (data >>> length) != 0) {
  2095. throw 'length over';
  2096. }
  2097. while (_bitLength + length >= 8) {
  2098. _out.writeByte(0xff & ( (data << _bitLength) | _bitBuffer) );
  2099. length -= (8 - _bitLength);
  2100. data >>>= (8 - _bitLength);
  2101. _bitBuffer = 0;
  2102. _bitLength = 0;
  2103. }
  2104. _bitBuffer = (data << _bitLength) | _bitBuffer;
  2105. _bitLength = _bitLength + length;
  2106. };
  2107. _this.flush = function() {
  2108. if (_bitLength > 0) {
  2109. _out.writeByte(_bitBuffer);
  2110. }
  2111. };
  2112. return _this;
  2113. };
  2114. var getLZWRaster = function(lzwMinCodeSize) {
  2115. var clearCode = 1 << lzwMinCodeSize;
  2116. var endCode = (1 << lzwMinCodeSize) + 1;
  2117. var bitLength = lzwMinCodeSize + 1;
  2118. // Setup LZWTable
  2119. var table = lzwTable();
  2120. for (var i = 0; i < clearCode; i += 1) {
  2121. table.add(String.fromCharCode(i) );
  2122. }
  2123. table.add(String.fromCharCode(clearCode) );
  2124. table.add(String.fromCharCode(endCode) );
  2125. var byteOut = byteArrayOutputStream();
  2126. var bitOut = bitOutputStream(byteOut);
  2127. // clear code
  2128. bitOut.write(clearCode, bitLength);
  2129. var dataIndex = 0;
  2130. var s = String.fromCharCode(_data[dataIndex]);
  2131. dataIndex += 1;
  2132. while (dataIndex < _data.length) {
  2133. var c = String.fromCharCode(_data[dataIndex]);
  2134. dataIndex += 1;
  2135. if (table.contains(s + c) ) {
  2136. s = s + c;
  2137. } else {
  2138. bitOut.write(table.indexOf(s), bitLength);
  2139. if (table.size() < 0xfff) {
  2140. if (table.size() == (1 << bitLength) ) {
  2141. bitLength += 1;
  2142. }
  2143. table.add(s + c);
  2144. }
  2145. s = c;
  2146. }
  2147. }
  2148. bitOut.write(table.indexOf(s), bitLength);
  2149. // end code
  2150. bitOut.write(endCode, bitLength);
  2151. bitOut.flush();
  2152. return byteOut.toByteArray();
  2153. };
  2154. var lzwTable = function() {
  2155. var _map = {};
  2156. var _size = 0;
  2157. var _this = {};
  2158. _this.add = function(key) {
  2159. if (_this.contains(key) ) {
  2160. throw 'dup key:' + key;
  2161. }
  2162. _map[key] = _size;
  2163. _size += 1;
  2164. };
  2165. _this.size = function() {
  2166. return _size;
  2167. };
  2168. _this.indexOf = function(key) {
  2169. return _map[key];
  2170. };
  2171. _this.contains = function(key) {
  2172. return typeof _map[key] != 'undefined';
  2173. };
  2174. return _this;
  2175. };
  2176. return _this;
  2177. };
  2178. var createDataURL = function(width, height, getPixel) {
  2179. var gif = gifImage(width, height);
  2180. for (var y = 0; y < height; y += 1) {
  2181. for (var x = 0; x < width; x += 1) {
  2182. gif.setPixel(x, y, getPixel(x, y) );
  2183. }
  2184. }
  2185. var b = byteArrayOutputStream();
  2186. gif.write(b);
  2187. var base64 = base64EncodeOutputStream();
  2188. var bytes = b.toByteArray();
  2189. for (var i = 0; i < bytes.length; i += 1) {
  2190. base64.writeByte(bytes[i]);
  2191. }
  2192. base64.flush();
  2193. return 'data:image/gif;base64,' + base64;
  2194. };
  2195. //---------------------------------------------------------------------
  2196. // returns qrcode function.
  2197. return qrcode;
  2198. }();
  2199. // multibyte support
  2200. !function() {
  2201. qrcode.stringToBytesFuncs['UTF-8'] = function(s) {
  2202. // http://stackoverflow.com/questions/18729405/how-to-convert-utf8-string-to-byte-array
  2203. function toUTF8Array(str) {
  2204. var utf8 = [];
  2205. for (var i=0; i < str.length; i++) {
  2206. var charcode = str.charCodeAt(i);
  2207. if (charcode < 0x80) utf8.push(charcode);
  2208. else if (charcode < 0x800) {
  2209. utf8.push(0xc0 | (charcode >> 6),
  2210. 0x80 | (charcode & 0x3f));
  2211. }
  2212. else if (charcode < 0xd800 || charcode >= 0xe000) {
  2213. utf8.push(0xe0 | (charcode >> 12),
  2214. 0x80 | ((charcode>>6) & 0x3f),
  2215. 0x80 | (charcode & 0x3f));
  2216. }
  2217. // surrogate pair
  2218. else {
  2219. i++;
  2220. // UTF-16 encodes 0x10000-0x10FFFF by
  2221. // subtracting 0x10000 and splitting the
  2222. // 20 bits of 0x0-0xFFFFF into two halves
  2223. charcode = 0x10000 + (((charcode & 0x3ff)<<10)
  2224. | (str.charCodeAt(i) & 0x3ff));
  2225. utf8.push(0xf0 | (charcode >>18),
  2226. 0x80 | ((charcode>>12) & 0x3f),
  2227. 0x80 | ((charcode>>6) & 0x3f),
  2228. 0x80 | (charcode & 0x3f));
  2229. }
  2230. }
  2231. return utf8;
  2232. }
  2233. return toUTF8Array(s);
  2234. };
  2235. }();
  2236. (function (factory) {
  2237. if (true) {
  2238. !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
  2239. __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
  2240. (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
  2241. __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
  2242. } else {}
  2243. }(function () {
  2244. return qrcode;
  2245. }));
  2246. /***/ })
  2247. /******/ ]);
  2248. });