{"version":3,"sources":["kendo.dataviz.qrcode.js"],"names":["f","define","$","normalizeText","text","String","replace","REPLACE_REGEX","SPACE","objectKey","object","key","parts","push","sort","join","hashKey","str","i","hash","length","charCodeAt","zeroSize","width","height","baseline","measureText","style","measureBox","TextMetrics","current","measure","LRUCache","DEFAULT_OPTIONS","defaultMeasureBox","window","kendo","util","Class","extend","init","size","this","_size","_length","_map","put","value","map","entry","_head","_tail","newer","older","get","baselineMarkerSize","document","createElement","cssText","options","_cache","styleKey","cacheKey","cachedResult","baselineMarker","textStr","box","_baselineMarker","cloneNode","textContent","appendChild","body","offsetWidth","offsetHeight","offsetTop","parentNode","removeChild","marker","deepExtend","jQuery","amd","a1","a2","a3","undefined","toDecimal","parseInt","toBitsString","result","toString","Array","splitInto","n","idx","substring","fillFunctionCell","matrices","bit","x","y","fillDataCell","maskPatternConditions","generatePowersOfTwo","power","powersOfTwoResult","powersOfTwo","generateGeneratorPolynomials","firstPolynomial","secondPolynomial","maxErrorCorrectionCodeWordsCount","generatorPolynomials","multiplyPolynomials","multiplyByConstant","polynomial","getNumberAt","charAt","scoreFinderPatternOccurance","patterns","scores","rowColumn","finderPatternValue","scoreAdjacentSameBits","previousBits","adjacentBits","calculateDarkModulesRatioScore","darkModules","total","percent","Math","floor","mod5","previous","abs","next","score","min","modeInstances","mode","FreeCellVisitor","fillData","padDataString","xorPolynomials","generateErrorCodewords","getBlocks","chooseMode","getModes","getDataCodewordsCount","getVersion","getDataString","encodeFormatInformation","encodeBCH","dividePolynomials","initMatrices","addFormatInformation","encodeVersionInformation","addVersionInformation","addCentricPattern","addFinderSeparator","addFinderPatterns","addAlignmentPatterns","addTimingFunctions","scoreMaskMatrixes","EncodingResult","IsoEncoder","UTF8Encoder","QRCodeDataEncoder","encodeData","QRCodeDefaults","QRCode","draw","drawing","dataviz","Widget","ui","Box2D","terminator","NUMERIC","ALPHA_NUMERIC","BYTE","1","0","irregularAlignmentPatternsStartDistance","15","16","18","19","22","24","26","28","30","31","32","33","36","37","39","40","versionsCodewordsInformation","L","groups","totalDataCodewords","errorCodewordsPerBlock","M","Q","H","finderPattern","alignmentPattern","errorCorrectionPatterns","formatMaskPattern","formatGeneratorPolynomial","versionGeneratorPolynomial","paddingCodewords","row","column","numberRegex","alphaPattern","alphaExclusiveSet","alphaRegex","RegExp","alphaNumericRegex","byteRegex","initMinNumericBeforeAlpha","initMinNumericBeforeByte","initMinAlphaBeforeByte","minNumericBeforeAlpha","minNumericBeforeByte","minAlphaBeforeByte","round","IMAGE","SWISS_QR","crossPattern","squarePattern","DEFAULT_LOGO_SIZE","QRDataMode","getVersionIndex","version","getBitsCharacterCount","bitsInCharacterCount","getModeCountString","modeIndicator","encode","getStringBitsLength","getValue","modes","character","inputLength","mod3","characters","2","3","4","5","6","7","8","9","A","B","C","D","E","F","G","I","J","K","N","O","P","R","S","T","U","V","W","X","Y","Z"," ","%","*","+","-",".","/",":","code","Error","matrix","that","startColumn","dir","c","move","getNextCell","getNextRemainderCell","blocks","block","codewordIdx","cell","blockIdx","j","cellVisitor","splice","dataString","dataBitsCount","terminatorIndex","paddingCodewordIndex","data","errorCodewordsCount","divisor","generator","concat","generatorPolynomial","steps","errorCodewords","dataStream","versionCodewordsInformation","dataBlock","blockCodewordsCount","groupBlocksCount","messagePolynomial","codeword","groupIdx","codewordStart","dataBlocks","errorBlocks","versionGroups","previousMode","modeString","numeric","exec","numericMatch","alpha","alphaMatch","alphaNumeric","alphaNumericMatch","test","nextMode","substr","ceil","dataCodewordsCount","errorCorrectionLevel","format","encodedString","formatNumber","codeLength","generatorNumber","polynomialLength","valueNumber","valueString","numberX","numberY","yLength","xLength","modules","formatString","quotient","mod","x1","y1","x2","y2","pattern","direction","nextX","nextY","pointsCount","points","startDistance","distance","k","minIdx","adjacentSameBits","Number","MAX_VALUE","getEncodingResult","inputString","encodingMode","fn","prototype","utfBOM","initialModeCountStringLength","dataLength","encodeCharacter","significantOnes","bytesCount","getBytesCount","bc","ranges","encoding","toLowerCase","indexOf","optimalMatrix","encoder","encodingResult","versionInformation","DEFAULT_SIZE","QUIET_ZONE_LENGTH","DEFAULT_ERROR_CORRECTION_LEVEL","DEFAULT_BACKGROUND","DEFAULT_DARK_MODULE_COLOR","MIN_BASE_UNIT_SIZE","element","call","wrapper","addClass","surfaceWrap","css","appendTo","surface","Surface","create","type","renderAs","setOptions","redraw","_getSize","clear","resize","createVisual","visual","getSize","dimensions","_resize","_render","exportVisual","baseUnit","quietZoneSize","dataSize","contentSize","_value","border","padding","borderWidth","Group","errorCorrection","_calculateBaseUnit","append","_renderBackground","_renderMatrix","_hasCustomLogo","_renderLogo","_isSwiss","_renderSwissCode","qrSize","center","logoSize","_getLogoSize","logoUrl","overlay","imageUrl","position","imageRect","geometry","Rect","Point","Size","image","Image","crossSize","crossOffset","start","max","_renderShape","color","step","path","MultiPath","fill","stroke","moveTo","lineTo","close","matrixSize","unpad","Path","fromRect","toRect","background","name","defautLogoSize","ExportMixin","plugin","QRCodeFunctions","QRCodeFields"],"mappings":"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","file":"kendo.dataviz.qrcode.min.js","sourcesContent":["/*!\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n*/\n(function (f, define) {\n define('util/text-metrics', ['kendo.core'], f);\n}(function () {\n (function ($) {\n window.kendo.util = window.kendo.util || {};\n var LRUCache = kendo.Class.extend({\n init: function (size) {\n this._size = size;\n this._length = 0;\n this._map = {};\n },\n put: function (key, value) {\n var map = this._map;\n var entry = {\n key: key,\n value: value\n };\n map[key] = entry;\n if (!this._head) {\n this._head = this._tail = entry;\n } else {\n this._tail.newer = entry;\n entry.older = this._tail;\n this._tail = entry;\n }\n if (this._length >= this._size) {\n map[this._head.key] = null;\n this._head = this._head.newer;\n this._head.older = null;\n } else {\n this._length++;\n }\n },\n get: function (key) {\n var entry = this._map[key];\n if (entry) {\n if (entry === this._head && entry !== this._tail) {\n this._head = entry.newer;\n this._head.older = null;\n }\n if (entry !== this._tail) {\n if (entry.older) {\n entry.older.newer = entry.newer;\n entry.newer.older = entry.older;\n }\n entry.older = this._tail;\n entry.newer = null;\n this._tail.newer = entry;\n this._tail = entry;\n }\n return entry.value;\n }\n }\n });\n var REPLACE_REGEX = /\\r?\\n|\\r|\\t/g;\n var SPACE = ' ';\n function normalizeText(text) {\n return String(text).replace(REPLACE_REGEX, SPACE);\n }\n function objectKey(object) {\n var parts = [];\n for (var key in object) {\n parts.push(key + object[key]);\n }\n return parts.sort().join('');\n }\n function hashKey(str) {\n var hash = 2166136261;\n for (var i = 0; i < str.length; ++i) {\n hash += (hash << 1) + (hash << 4) + (hash << 7) + (hash << 8) + (hash << 24);\n hash ^= str.charCodeAt(i);\n }\n return hash >>> 0;\n }\n function zeroSize() {\n return {\n width: 0,\n height: 0,\n baseline: 0\n };\n }\n var DEFAULT_OPTIONS = { baselineMarkerSize: 1 };\n var defaultMeasureBox;\n if (typeof document !== 'undefined') {\n defaultMeasureBox = document.createElement('div');\n defaultMeasureBox.style.cssText = 'position: absolute !important; top: -4000px !important; width: auto !important; height: auto !important;' + 'padding: 0 !important; margin: 0 !important; border: 0 !important;' + 'line-height: normal !important; visibility: hidden !important; white-space: pre!important;';\n }\n var TextMetrics = kendo.Class.extend({\n init: function (options) {\n this._cache = new LRUCache(1000);\n this.options = $.extend({}, DEFAULT_OPTIONS, options);\n },\n measure: function (text, style, options) {\n if (options === void 0) {\n options = {};\n }\n if (typeof text === 'undefined' || text === null) {\n return zeroSize();\n }\n var styleKey = objectKey(style);\n var cacheKey = hashKey(text + styleKey);\n var cachedResult = this._cache.get(cacheKey);\n if (cachedResult) {\n return cachedResult;\n }\n var size = zeroSize();\n var measureBox = options.box || defaultMeasureBox;\n var baselineMarker = this._baselineMarker().cloneNode(false);\n for (var key in style) {\n var value = style[key];\n if (typeof value !== 'undefined') {\n measureBox.style[key] = value;\n }\n }\n var textStr = options.normalizeText !== false ? normalizeText(text) : String(text);\n measureBox.textContent = textStr;\n measureBox.appendChild(baselineMarker);\n document.body.appendChild(measureBox);\n if (textStr.length) {\n size.width = measureBox.offsetWidth - this.options.baselineMarkerSize;\n size.height = measureBox.offsetHeight;\n size.baseline = baselineMarker.offsetTop + this.options.baselineMarkerSize;\n }\n if (size.width > 0 && size.height > 0) {\n this._cache.put(cacheKey, size);\n }\n measureBox.parentNode.removeChild(measureBox);\n return size;\n },\n _baselineMarker: function () {\n var marker = document.createElement('div');\n marker.style.cssText = 'display: inline-block; vertical-align: baseline;width: ' + this.options.baselineMarkerSize + 'px; height: ' + this.options.baselineMarkerSize + 'px;overflow: hidden;';\n return marker;\n }\n });\n TextMetrics.current = new TextMetrics();\n function measureText(text, style, measureBox) {\n return TextMetrics.current.measure(text, style, measureBox);\n }\n kendo.deepExtend(kendo.util, {\n LRUCache: LRUCache,\n TextMetrics: TextMetrics,\n measureText: measureText,\n objectKey: objectKey,\n hashKey: hashKey,\n normalizeText: normalizeText\n });\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.dataviz.qrcode', [\n 'kendo.dataviz.core',\n 'kendo.drawing'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'dataviz.qrcode',\n name: 'QRCode',\n category: 'dataviz',\n description: 'QRCode widget.',\n depends: [\n 'dataviz.core',\n 'drawing'\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, extend = $.extend, draw = kendo.drawing, dataviz = kendo.dataviz, Widget = kendo.ui.Widget, Box2D = dataviz.Box2D, terminator = '0000', NUMERIC = 'numeric', ALPHA_NUMERIC = 'alphanumeric', BYTE = 'byte', powersOfTwo = { '1': 0 }, powersOfTwoResult = { '0': 1 }, generatorPolynomials = [\n [\n 1,\n 0\n ],\n [\n 1,\n 25,\n 0\n ]\n ], irregularAlignmentPatternsStartDistance = {\n 15: 20,\n 16: 20,\n 18: 24,\n 19: 24,\n 22: 20,\n 24: 22,\n 26: 24,\n 28: 20,\n 30: 20,\n 31: 24,\n 32: 28,\n 33: 24,\n 36: 18,\n 37: 22,\n 39: 20,\n 40: 24\n }, versionsCodewordsInformation = [\n {\n L: {\n groups: [[\n 1,\n 19\n ]],\n totalDataCodewords: 19,\n errorCodewordsPerBlock: 7\n },\n M: {\n groups: [[\n 1,\n 16\n ]],\n totalDataCodewords: 16,\n errorCodewordsPerBlock: 10\n },\n Q: {\n groups: [[\n 1,\n 13\n ]],\n totalDataCodewords: 13,\n errorCodewordsPerBlock: 13\n },\n H: {\n groups: [[\n 1,\n 9\n ]],\n totalDataCodewords: 9,\n errorCodewordsPerBlock: 17\n }\n },\n {\n L: {\n groups: [[\n 1,\n 34\n ]],\n totalDataCodewords: 34,\n errorCodewordsPerBlock: 10\n },\n M: {\n groups: [[\n 1,\n 28\n ]],\n totalDataCodewords: 28,\n errorCodewordsPerBlock: 16\n },\n Q: {\n groups: [[\n 1,\n 22\n ]],\n totalDataCodewords: 22,\n errorCodewordsPerBlock: 22\n },\n H: {\n groups: [[\n 1,\n 16\n ]],\n totalDataCodewords: 16,\n errorCodewordsPerBlock: 28\n }\n },\n {\n L: {\n groups: [[\n 1,\n 55\n ]],\n totalDataCodewords: 55,\n errorCodewordsPerBlock: 15\n },\n M: {\n groups: [[\n 1,\n 44\n ]],\n totalDataCodewords: 44,\n errorCodewordsPerBlock: 26\n },\n Q: {\n groups: [[\n 2,\n 17\n ]],\n totalDataCodewords: 34,\n errorCodewordsPerBlock: 18\n },\n H: {\n groups: [[\n 2,\n 13\n ]],\n totalDataCodewords: 26,\n errorCodewordsPerBlock: 22\n }\n },\n {\n L: {\n groups: [[\n 1,\n 80\n ]],\n totalDataCodewords: 80,\n errorCodewordsPerBlock: 20\n },\n M: {\n groups: [[\n 2,\n 32\n ]],\n totalDataCodewords: 64,\n errorCodewordsPerBlock: 18\n },\n Q: {\n groups: [[\n 2,\n 24\n ]],\n totalDataCodewords: 48,\n errorCodewordsPerBlock: 26\n },\n H: {\n groups: [[\n 4,\n 9\n ]],\n totalDataCodewords: 36,\n errorCodewordsPerBlock: 16\n }\n },\n {\n L: {\n groups: [[\n 1,\n 108\n ]],\n totalDataCodewords: 108,\n errorCodewordsPerBlock: 26\n },\n M: {\n groups: [[\n 2,\n 43\n ]],\n totalDataCodewords: 86,\n errorCodewordsPerBlock: 24\n },\n Q: {\n groups: [\n [\n 2,\n 15\n ],\n [\n 2,\n 16\n ]\n ],\n totalDataCodewords: 62,\n errorCodewordsPerBlock: 18\n },\n H: {\n groups: [\n [\n 2,\n 11\n ],\n [\n 2,\n 12\n ]\n ],\n totalDataCodewords: 46,\n errorCodewordsPerBlock: 22\n }\n },\n {\n L: {\n groups: [[\n 2,\n 68\n ]],\n totalDataCodewords: 136,\n errorCodewordsPerBlock: 18\n },\n M: {\n groups: [[\n 4,\n 27\n ]],\n totalDataCodewords: 108,\n errorCodewordsPerBlock: 16\n },\n Q: {\n groups: [[\n 4,\n 19\n ]],\n totalDataCodewords: 76,\n errorCodewordsPerBlock: 24\n },\n H: {\n groups: [[\n 4,\n 15\n ]],\n totalDataCodewords: 60,\n errorCodewordsPerBlock: 28\n }\n },\n {\n L: {\n groups: [[\n 2,\n 78\n ]],\n totalDataCodewords: 156,\n errorCodewordsPerBlock: 20\n },\n M: {\n groups: [[\n 4,\n 31\n ]],\n totalDataCodewords: 124,\n errorCodewordsPerBlock: 18\n },\n Q: {\n groups: [\n [\n 2,\n 14\n ],\n [\n 4,\n 15\n ]\n ],\n totalDataCodewords: 88,\n errorCodewordsPerBlock: 18\n },\n H: {\n groups: [\n [\n 4,\n 13\n ],\n [\n 1,\n 14\n ]\n ],\n totalDataCodewords: 66,\n errorCodewordsPerBlock: 26\n }\n },\n {\n L: {\n groups: [[\n 2,\n 97\n ]],\n totalDataCodewords: 194,\n errorCodewordsPerBlock: 24\n },\n M: {\n groups: [\n [\n 2,\n 38\n ],\n [\n 2,\n 39\n ]\n ],\n totalDataCodewords: 154,\n errorCodewordsPerBlock: 22\n },\n Q: {\n groups: [\n [\n 4,\n 18\n ],\n [\n 2,\n 19\n ]\n ],\n totalDataCodewords: 110,\n errorCodewordsPerBlock: 22\n },\n H: {\n groups: [\n [\n 4,\n 14\n ],\n [\n 2,\n 15\n ]\n ],\n totalDataCodewords: 86,\n errorCodewordsPerBlock: 26\n }\n },\n {\n L: {\n groups: [[\n 2,\n 116\n ]],\n totalDataCodewords: 232,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [\n 3,\n 36\n ],\n [\n 2,\n 37\n ]\n ],\n totalDataCodewords: 182,\n errorCodewordsPerBlock: 22\n },\n Q: {\n groups: [\n [\n 4,\n 16\n ],\n [\n 4,\n 17\n ]\n ],\n totalDataCodewords: 132,\n errorCodewordsPerBlock: 20\n },\n H: {\n groups: [\n [\n 4,\n 12\n ],\n [\n 4,\n 13\n ]\n ],\n totalDataCodewords: 100,\n errorCodewordsPerBlock: 24\n }\n },\n {\n L: {\n groups: [\n [\n 2,\n 68\n ],\n [\n 2,\n 69\n ]\n ],\n totalDataCodewords: 274,\n errorCodewordsPerBlock: 18\n },\n M: {\n groups: [\n [\n 4,\n 43\n ],\n [\n 1,\n 44\n ]\n ],\n totalDataCodewords: 216,\n errorCodewordsPerBlock: 26\n },\n Q: {\n groups: [\n [\n 6,\n 19\n ],\n [\n 2,\n 20\n ]\n ],\n totalDataCodewords: 154,\n errorCodewordsPerBlock: 24\n },\n H: {\n groups: [\n [\n 6,\n 15\n ],\n [\n 2,\n 16\n ]\n ],\n totalDataCodewords: 122,\n errorCodewordsPerBlock: 28\n }\n },\n {\n L: {\n groups: [[\n 4,\n 81\n ]],\n totalDataCodewords: 324,\n errorCodewordsPerBlock: 20\n },\n M: {\n groups: [\n [\n 1,\n 50\n ],\n [\n 4,\n 51\n ]\n ],\n totalDataCodewords: 254,\n errorCodewordsPerBlock: 30\n },\n Q: {\n groups: [\n [\n 4,\n 22\n ],\n [\n 4,\n 23\n ]\n ],\n totalDataCodewords: 180,\n errorCodewordsPerBlock: 28\n },\n H: {\n groups: [\n [\n 3,\n 12\n ],\n [\n 8,\n 13\n ]\n ],\n totalDataCodewords: 140,\n errorCodewordsPerBlock: 24\n }\n },\n {\n L: {\n groups: [\n [\n 2,\n 92\n ],\n [\n 2,\n 93\n ]\n ],\n totalDataCodewords: 370,\n errorCodewordsPerBlock: 24\n },\n M: {\n groups: [\n [\n 6,\n 36\n ],\n [\n 2,\n 37\n ]\n ],\n totalDataCodewords: 290,\n errorCodewordsPerBlock: 22\n },\n Q: {\n groups: [\n [\n 4,\n 20\n ],\n [\n 6,\n 21\n ]\n ],\n totalDataCodewords: 206,\n errorCodewordsPerBlock: 26\n },\n H: {\n groups: [\n [\n 7,\n 14\n ],\n [\n 4,\n 15\n ]\n ],\n totalDataCodewords: 158,\n errorCodewordsPerBlock: 28\n }\n },\n {\n L: {\n groups: [[\n 4,\n 107\n ]],\n totalDataCodewords: 428,\n errorCodewordsPerBlock: 26\n },\n M: {\n groups: [\n [\n 8,\n 37\n ],\n [\n 1,\n 38\n ]\n ],\n totalDataCodewords: 334,\n errorCodewordsPerBlock: 22\n },\n Q: {\n groups: [\n [\n 8,\n 20\n ],\n [\n 4,\n 21\n ]\n ],\n totalDataCodewords: 244,\n errorCodewordsPerBlock: 24\n },\n H: {\n groups: [\n [\n 12,\n 11\n ],\n [\n 4,\n 12\n ]\n ],\n totalDataCodewords: 180,\n errorCodewordsPerBlock: 22\n }\n },\n {\n L: {\n groups: [\n [\n 3,\n 115\n ],\n [\n 1,\n 116\n ]\n ],\n totalDataCodewords: 461,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [\n 4,\n 40\n ],\n [\n 5,\n 41\n ]\n ],\n totalDataCodewords: 365,\n errorCodewordsPerBlock: 24\n },\n Q: {\n groups: [\n [\n 11,\n 16\n ],\n [\n 5,\n 17\n ]\n ],\n totalDataCodewords: 261,\n errorCodewordsPerBlock: 20\n },\n H: {\n groups: [\n [\n 11,\n 12\n ],\n [\n 5,\n 13\n ]\n ],\n totalDataCodewords: 197,\n errorCodewordsPerBlock: 24\n }\n },\n {\n L: {\n groups: [\n [\n 5,\n 87\n ],\n [\n 1,\n 88\n ]\n ],\n totalDataCodewords: 523,\n errorCodewordsPerBlock: 22\n },\n M: {\n groups: [\n [\n 5,\n 41\n ],\n [\n 5,\n 42\n ]\n ],\n totalDataCodewords: 415,\n errorCodewordsPerBlock: 24\n },\n Q: {\n groups: [\n [\n 5,\n 24\n ],\n [\n 7,\n 25\n ]\n ],\n totalDataCodewords: 295,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [\n 11,\n 12\n ],\n [\n 7,\n 13\n ]\n ],\n totalDataCodewords: 223,\n errorCodewordsPerBlock: 24\n }\n },\n {\n L: {\n groups: [\n [\n 5,\n 98\n ],\n [\n 1,\n 99\n ]\n ],\n totalDataCodewords: 589,\n errorCodewordsPerBlock: 24\n },\n M: {\n groups: [\n [\n 7,\n 45\n ],\n [\n 3,\n 46\n ]\n ],\n totalDataCodewords: 453,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [\n 15,\n 19\n ],\n [\n 2,\n 20\n ]\n ],\n totalDataCodewords: 325,\n errorCodewordsPerBlock: 24\n },\n H: {\n groups: [\n [\n 3,\n 15\n ],\n [\n 13,\n 16\n ]\n ],\n totalDataCodewords: 253,\n errorCodewordsPerBlock: 30\n }\n },\n {\n L: {\n groups: [\n [\n 1,\n 107\n ],\n [\n 5,\n 108\n ]\n ],\n totalDataCodewords: 647,\n errorCodewordsPerBlock: 28\n },\n M: {\n groups: [\n [\n 10,\n 46\n ],\n [\n 1,\n 47\n ]\n ],\n totalDataCodewords: 507,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [\n 1,\n 22\n ],\n [\n 15,\n 23\n ]\n ],\n totalDataCodewords: 367,\n errorCodewordsPerBlock: 28\n },\n H: {\n groups: [\n [\n 2,\n 14\n ],\n [\n 17,\n 15\n ]\n ],\n totalDataCodewords: 283,\n errorCodewordsPerBlock: 28\n }\n },\n {\n L: {\n groups: [\n [\n 5,\n 120\n ],\n [\n 1,\n 121\n ]\n ],\n totalDataCodewords: 721,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [\n 9,\n 43\n ],\n [\n 4,\n 44\n ]\n ],\n totalDataCodewords: 563,\n errorCodewordsPerBlock: 26\n },\n Q: {\n groups: [\n [\n 17,\n 22\n ],\n [\n 1,\n 23\n ]\n ],\n totalDataCodewords: 397,\n errorCodewordsPerBlock: 28\n },\n H: {\n groups: [\n [\n 2,\n 14\n ],\n [\n 19,\n 15\n ]\n ],\n totalDataCodewords: 313,\n errorCodewordsPerBlock: 28\n }\n },\n {\n L: {\n groups: [\n [\n 3,\n 113\n ],\n [\n 4,\n 114\n ]\n ],\n totalDataCodewords: 795,\n errorCodewordsPerBlock: 28\n },\n M: {\n groups: [\n [\n 3,\n 44\n ],\n [\n 11,\n 45\n ]\n ],\n totalDataCodewords: 627,\n errorCodewordsPerBlock: 26\n },\n Q: {\n groups: [\n [\n 17,\n 21\n ],\n [\n 4,\n 22\n ]\n ],\n totalDataCodewords: 445,\n errorCodewordsPerBlock: 26\n },\n H: {\n groups: [\n [\n 9,\n 13\n ],\n [\n 16,\n 14\n ]\n ],\n totalDataCodewords: 341,\n errorCodewordsPerBlock: 26\n }\n },\n {\n L: {\n groups: [\n [\n 3,\n 107\n ],\n [\n 5,\n 108\n ]\n ],\n totalDataCodewords: 861,\n errorCodewordsPerBlock: 28\n },\n M: {\n groups: [\n [\n 3,\n 41\n ],\n [\n 13,\n 42\n ]\n ],\n totalDataCodewords: 669,\n errorCodewordsPerBlock: 26\n },\n Q: {\n groups: [\n [\n 15,\n 24\n ],\n [\n 5,\n 25\n ]\n ],\n totalDataCodewords: 485,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [\n 15,\n 15\n ],\n [\n 10,\n 16\n ]\n ],\n totalDataCodewords: 385,\n errorCodewordsPerBlock: 28\n }\n },\n {\n L: {\n groups: [\n [\n 4,\n 116\n ],\n [\n 4,\n 117\n ]\n ],\n totalDataCodewords: 932,\n errorCodewordsPerBlock: 28\n },\n M: {\n groups: [[\n 17,\n 42\n ]],\n totalDataCodewords: 714,\n errorCodewordsPerBlock: 26\n },\n Q: {\n groups: [\n [\n 17,\n 22\n ],\n [\n 6,\n 23\n ]\n ],\n totalDataCodewords: 512,\n errorCodewordsPerBlock: 28\n },\n H: {\n groups: [\n [\n 19,\n 16\n ],\n [\n 6,\n 17\n ]\n ],\n totalDataCodewords: 406,\n errorCodewordsPerBlock: 30\n }\n },\n {\n L: {\n groups: [\n [\n 2,\n 111\n ],\n [\n 7,\n 112\n ]\n ],\n totalDataCodewords: 1006,\n errorCodewordsPerBlock: 28\n },\n M: {\n groups: [[\n 17,\n 46\n ]],\n totalDataCodewords: 782,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [\n 7,\n 24\n ],\n [\n 16,\n 25\n ]\n ],\n totalDataCodewords: 568,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [[\n 34,\n 13\n ]],\n totalDataCodewords: 442,\n errorCodewordsPerBlock: 24\n }\n },\n {\n L: {\n groups: [\n [\n 4,\n 121\n ],\n [\n 5,\n 122\n ]\n ],\n totalDataCodewords: 1094,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [\n 4,\n 47\n ],\n [\n 14,\n 48\n ]\n ],\n totalDataCodewords: 860,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [\n 11,\n 24\n ],\n [\n 14,\n 25\n ]\n ],\n totalDataCodewords: 614,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [\n 16,\n 15\n ],\n [\n 14,\n 16\n ]\n ],\n totalDataCodewords: 464,\n errorCodewordsPerBlock: 30\n }\n },\n {\n L: {\n groups: [\n [\n 6,\n 117\n ],\n [\n 4,\n 118\n ]\n ],\n totalDataCodewords: 1174,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [\n 6,\n 45\n ],\n [\n 14,\n 46\n ]\n ],\n totalDataCodewords: 914,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [\n 11,\n 24\n ],\n [\n 16,\n 25\n ]\n ],\n totalDataCodewords: 664,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [\n 30,\n 16\n ],\n [\n 2,\n 17\n ]\n ],\n totalDataCodewords: 514,\n errorCodewordsPerBlock: 30\n }\n },\n {\n L: {\n groups: [\n [\n 8,\n 106\n ],\n [\n 4,\n 107\n ]\n ],\n totalDataCodewords: 1276,\n errorCodewordsPerBlock: 26\n },\n M: {\n groups: [\n [\n 8,\n 47\n ],\n [\n 13,\n 48\n ]\n ],\n totalDataCodewords: 1000,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [\n 7,\n 24\n ],\n [\n 22,\n 25\n ]\n ],\n totalDataCodewords: 718,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [\n 22,\n 15\n ],\n [\n 13,\n 16\n ]\n ],\n totalDataCodewords: 538,\n errorCodewordsPerBlock: 30\n }\n },\n {\n L: {\n groups: [\n [\n 10,\n 114\n ],\n [\n 2,\n 115\n ]\n ],\n totalDataCodewords: 1370,\n errorCodewordsPerBlock: 28\n },\n M: {\n groups: [\n [\n 19,\n 46\n ],\n [\n 4,\n 47\n ]\n ],\n totalDataCodewords: 1062,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [\n 28,\n 22\n ],\n [\n 6,\n 23\n ]\n ],\n totalDataCodewords: 754,\n errorCodewordsPerBlock: 28\n },\n H: {\n groups: [\n [\n 33,\n 16\n ],\n [\n 4,\n 17\n ]\n ],\n totalDataCodewords: 596,\n errorCodewordsPerBlock: 30\n }\n },\n {\n L: {\n groups: [\n [\n 8,\n 122\n ],\n [\n 4,\n 123\n ]\n ],\n totalDataCodewords: 1468,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [\n 22,\n 45\n ],\n [\n 3,\n 46\n ]\n ],\n totalDataCodewords: 1128,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [\n 8,\n 23\n ],\n [\n 26,\n 24\n ]\n ],\n totalDataCodewords: 808,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [\n 12,\n 15\n ],\n [\n 28,\n 16\n ]\n ],\n totalDataCodewords: 628,\n errorCodewordsPerBlock: 30\n }\n },\n {\n L: {\n groups: [\n [\n 3,\n 117\n ],\n [\n 10,\n 118\n ]\n ],\n totalDataCodewords: 1531,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [\n 3,\n 45\n ],\n [\n 23,\n 46\n ]\n ],\n totalDataCodewords: 1193,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [\n 4,\n 24\n ],\n [\n 31,\n 25\n ]\n ],\n totalDataCodewords: 871,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [\n 11,\n 15\n ],\n [\n 31,\n 16\n ]\n ],\n totalDataCodewords: 661,\n errorCodewordsPerBlock: 30\n }\n },\n {\n L: {\n groups: [\n [\n 7,\n 116\n ],\n [\n 7,\n 117\n ]\n ],\n totalDataCodewords: 1631,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [\n 21,\n 45\n ],\n [\n 7,\n 46\n ]\n ],\n totalDataCodewords: 1267,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [\n 1,\n 23\n ],\n [\n 37,\n 24\n ]\n ],\n totalDataCodewords: 911,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [\n 19,\n 15\n ],\n [\n 26,\n 16\n ]\n ],\n totalDataCodewords: 701,\n errorCodewordsPerBlock: 30\n }\n },\n {\n L: {\n groups: [\n [\n 5,\n 115\n ],\n [\n 10,\n 116\n ]\n ],\n totalDataCodewords: 1735,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [\n 19,\n 47\n ],\n [\n 10,\n 48\n ]\n ],\n totalDataCodewords: 1373,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [\n 15,\n 24\n ],\n [\n 25,\n 25\n ]\n ],\n totalDataCodewords: 985,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [\n 23,\n 15\n ],\n [\n 25,\n 16\n ]\n ],\n totalDataCodewords: 745,\n errorCodewordsPerBlock: 30\n }\n },\n {\n L: {\n groups: [\n [\n 13,\n 115\n ],\n [\n 3,\n 116\n ]\n ],\n totalDataCodewords: 1843,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [\n 2,\n 46\n ],\n [\n 29,\n 47\n ]\n ],\n totalDataCodewords: 1455,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [\n 42,\n 24\n ],\n [\n 1,\n 25\n ]\n ],\n totalDataCodewords: 1033,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [\n 23,\n 15\n ],\n [\n 28,\n 16\n ]\n ],\n totalDataCodewords: 793,\n errorCodewordsPerBlock: 30\n }\n },\n {\n L: {\n groups: [[\n 17,\n 115\n ]],\n totalDataCodewords: 1955,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [\n 10,\n 46\n ],\n [\n 23,\n 47\n ]\n ],\n totalDataCodewords: 1541,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [\n 10,\n 24\n ],\n [\n 35,\n 25\n ]\n ],\n totalDataCodewords: 1115,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [\n 19,\n 15\n ],\n [\n 35,\n 16\n ]\n ],\n totalDataCodewords: 845,\n errorCodewordsPerBlock: 30\n }\n },\n {\n L: {\n groups: [\n [\n 17,\n 115\n ],\n [\n 1,\n 116\n ]\n ],\n totalDataCodewords: 2071,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [\n 14,\n 46\n ],\n [\n 21,\n 47\n ]\n ],\n totalDataCodewords: 1631,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [\n 29,\n 24\n ],\n [\n 19,\n 25\n ]\n ],\n totalDataCodewords: 1171,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [\n 11,\n 15\n ],\n [\n 46,\n 16\n ]\n ],\n totalDataCodewords: 901,\n errorCodewordsPerBlock: 30\n }\n },\n {\n L: {\n groups: [\n [\n 13,\n 115\n ],\n [\n 6,\n 116\n ]\n ],\n totalDataCodewords: 2191,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [\n 14,\n 46\n ],\n [\n 23,\n 47\n ]\n ],\n totalDataCodewords: 1725,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [\n 44,\n 24\n ],\n [\n 7,\n 25\n ]\n ],\n totalDataCodewords: 1231,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [\n 59,\n 16\n ],\n [\n 1,\n 17\n ]\n ],\n totalDataCodewords: 961,\n errorCodewordsPerBlock: 30\n }\n },\n {\n L: {\n groups: [\n [\n 12,\n 121\n ],\n [\n 7,\n 122\n ]\n ],\n totalDataCodewords: 2306,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [\n 12,\n 47\n ],\n [\n 26,\n 48\n ]\n ],\n totalDataCodewords: 1812,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [\n 39,\n 24\n ],\n [\n 14,\n 25\n ]\n ],\n totalDataCodewords: 1286,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [\n 22,\n 15\n ],\n [\n 41,\n 16\n ]\n ],\n totalDataCodewords: 986,\n errorCodewordsPerBlock: 30\n }\n },\n {\n L: {\n groups: [\n [\n 6,\n 121\n ],\n [\n 14,\n 122\n ]\n ],\n totalDataCodewords: 2434,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [\n 6,\n 47\n ],\n [\n 34,\n 48\n ]\n ],\n totalDataCodewords: 1914,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [\n 46,\n 24\n ],\n [\n 10,\n 25\n ]\n ],\n totalDataCodewords: 1354,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [\n 2,\n 15\n ],\n [\n 64,\n 16\n ]\n ],\n totalDataCodewords: 1054,\n errorCodewordsPerBlock: 30\n }\n },\n {\n L: {\n groups: [\n [\n 17,\n 122\n ],\n [\n 4,\n 123\n ]\n ],\n totalDataCodewords: 2566,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [\n 29,\n 46\n ],\n [\n 14,\n 47\n ]\n ],\n totalDataCodewords: 1992,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [\n 49,\n 24\n ],\n [\n 10,\n 25\n ]\n ],\n totalDataCodewords: 1426,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [\n 24,\n 15\n ],\n [\n 46,\n 16\n ]\n ],\n totalDataCodewords: 1096,\n errorCodewordsPerBlock: 30\n }\n },\n {\n L: {\n groups: [\n [\n 4,\n 122\n ],\n [\n 18,\n 123\n ]\n ],\n totalDataCodewords: 2702,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [\n 13,\n 46\n ],\n [\n 32,\n 47\n ]\n ],\n totalDataCodewords: 2102,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [\n 48,\n 24\n ],\n [\n 14,\n 25\n ]\n ],\n totalDataCodewords: 1502,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [\n 42,\n 15\n ],\n [\n 32,\n 16\n ]\n ],\n totalDataCodewords: 1142,\n errorCodewordsPerBlock: 30\n }\n },\n {\n L: {\n groups: [\n [\n 20,\n 117\n ],\n [\n 4,\n 118\n ]\n ],\n totalDataCodewords: 2812,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [\n 40,\n 47\n ],\n [\n 7,\n 48\n ]\n ],\n totalDataCodewords: 2216,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [\n 43,\n 24\n ],\n [\n 22,\n 25\n ]\n ],\n totalDataCodewords: 1582,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [\n 10,\n 15\n ],\n [\n 67,\n 16\n ]\n ],\n totalDataCodewords: 1222,\n errorCodewordsPerBlock: 30\n }\n },\n {\n L: {\n groups: [\n [\n 19,\n 118\n ],\n [\n 6,\n 119\n ]\n ],\n totalDataCodewords: 2956,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [\n 18,\n 47\n ],\n [\n 31,\n 48\n ]\n ],\n totalDataCodewords: 2334,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [\n 34,\n 24\n ],\n [\n 34,\n 25\n ]\n ],\n totalDataCodewords: 1666,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [\n 20,\n 15\n ],\n [\n 61,\n 16\n ]\n ],\n totalDataCodewords: 1276,\n errorCodewordsPerBlock: 30\n }\n }\n ], finderPattern = [\n 1,\n 0,\n 1,\n 1,\n 1\n ], alignmentPattern = [\n 1,\n 0,\n 1\n ], errorCorrectionPatterns = {\n L: '01',\n M: '00',\n Q: '11',\n H: '10'\n }, formatMaskPattern = '101010000010010', formatGeneratorPolynomial = '10100110111', versionGeneratorPolynomial = '1111100100101', paddingCodewords = [\n '11101100',\n '00010001'\n ], finderPatternValue = 93, maskPatternConditions = [\n function (row, column) {\n return (row + column) % 2 === 0;\n },\n function (row) {\n return row % 2 === 0;\n },\n function (row, column) {\n return column % 3 === 0;\n },\n function (row, column) {\n return (row + column) % 3 === 0;\n },\n function (row, column) {\n return (Math.floor(row / 2) + Math.floor(column / 3)) % 2 === 0;\n },\n function (row, column) {\n return row * column % 2 + row * column % 3 === 0;\n },\n function (row, column) {\n return (row * column % 2 + row * column % 3) % 2 === 0;\n },\n function (row, column) {\n return ((row + column) % 2 + row * column % 3) % 2 === 0;\n }\n ], numberRegex = /^\\d+/, alphaPattern = 'A-Z0-9 $%*+./:-', alphaExclusiveSet = 'A-Z $%*+./:-', alphaRegex = new RegExp('^[' + alphaExclusiveSet + ']+'), alphaNumericRegex = new RegExp('^[' + alphaPattern + ']+'), byteRegex = new RegExp('^[^' + alphaPattern + ']+'), initMinNumericBeforeAlpha = 8, initMinNumericBeforeByte = 5, initMinAlphaBeforeByte = 8, minNumericBeforeAlpha = 17, minNumericBeforeByte = 9, minAlphaBeforeByte = 16, round = Math.round, IMAGE = 'image', SWISS_QR = 'swiss', crossPattern = [\n [\n 0,\n 1\n ],\n [\n 1,\n 1\n ],\n [\n 1,\n 2\n ],\n [\n 2,\n 2\n ],\n [\n 2,\n 1\n ],\n [\n 3,\n 1\n ],\n [\n 3,\n 0\n ],\n [\n 2,\n 0\n ],\n [\n 2,\n -1\n ],\n [\n 1,\n -1\n ],\n [\n 1,\n 0\n ]\n ], squarePattern = [\n [\n 0,\n 1\n ],\n [\n 1,\n 1\n ],\n [\n 1,\n 0\n ]\n ], DEFAULT_LOGO_SIZE = 7;\n function toDecimal(value) {\n return parseInt(value, 2);\n }\n function toBitsString(value, length) {\n var result = Number(value).toString(2);\n if (result.length < length) {\n result = new Array(length - result.length + 1).join(0) + result;\n }\n return result;\n }\n function splitInto(str, n) {\n var result = [], idx = 0;\n while (idx < str.length) {\n result.push(str.substring(idx, idx + n));\n idx += n;\n }\n return result;\n }\n var QRDataMode = kendo.Class.extend({\n getVersionIndex: function (version) {\n if (version < 10) {\n return 0;\n } else if (version > 26) {\n return 2;\n }\n return 1;\n },\n getBitsCharacterCount: function (version) {\n var mode = this;\n return mode.bitsInCharacterCount[mode.getVersionIndex(version || 40)];\n },\n getModeCountString: function (length, version) {\n var mode = this;\n return mode.modeIndicator + toBitsString(length, mode.getBitsCharacterCount(version));\n },\n encode: function () {\n },\n getStringBitsLength: function () {\n },\n getValue: function () {\n },\n modeIndicator: '',\n bitsInCharacterCount: []\n });\n var modes = {};\n modes[NUMERIC] = QRDataMode.extend({\n bitsInCharacterCount: [\n 10,\n 12,\n 14\n ],\n modeIndicator: '0001',\n getValue: function (character) {\n return parseInt(character, 10);\n },\n encode: function (str, version) {\n var mode = this, parts = splitInto(str, 3), result = mode.getModeCountString(str.length, version);\n for (var i = 0; i < parts.length - 1; i++) {\n result += toBitsString(parts[i], 10);\n }\n return result + toBitsString(parts[i], 1 + 3 * parts[i].length);\n },\n getStringBitsLength: function (inputLength, version) {\n var mod3 = inputLength % 3;\n return 4 + this.getBitsCharacterCount(version) + 10 * Math.floor(inputLength / 3) + 3 * mod3 + (mod3 === 0 ? 0 : 1);\n }\n });\n modes[ALPHA_NUMERIC] = QRDataMode.extend({\n characters: {\n '0': 0,\n '1': 1,\n '2': 2,\n '3': 3,\n '4': 4,\n '5': 5,\n '6': 6,\n '7': 7,\n '8': 8,\n '9': 9,\n 'A': 10,\n 'B': 11,\n 'C': 12,\n 'D': 13,\n 'E': 14,\n 'F': 15,\n 'G': 16,\n 'H': 17,\n 'I': 18,\n 'J': 19,\n 'K': 20,\n 'L': 21,\n 'M': 22,\n 'N': 23,\n 'O': 24,\n 'P': 25,\n 'Q': 26,\n 'R': 27,\n 'S': 28,\n 'T': 29,\n 'U': 30,\n 'V': 31,\n 'W': 32,\n 'X': 33,\n 'Y': 34,\n 'Z': 35,\n ' ': 36,\n '$': 37,\n '%': 38,\n '*': 39,\n '+': 40,\n '-': 41,\n '.': 42,\n '/': 43,\n ':': 44\n },\n bitsInCharacterCount: [\n 9,\n 11,\n 13\n ],\n modeIndicator: '0010',\n getValue: function (character) {\n return this.characters[character];\n },\n encode: function (str, version) {\n var mode = this, parts = splitInto(str, 2), result = mode.getModeCountString(str.length, version), value;\n for (var i = 0; i < parts.length - 1; i++) {\n value = 45 * mode.getValue(parts[i].charAt(0)) + mode.getValue(parts[i].charAt(1));\n result += toBitsString(value, 11);\n }\n value = parts[i].length == 2 ? 45 * mode.getValue(parts[i].charAt(0)) + mode.getValue(parts[i].charAt(1)) : mode.getValue(parts[i].charAt(0));\n return result + toBitsString(value, 1 + 5 * parts[i].length);\n },\n getStringBitsLength: function (inputLength, version) {\n return 4 + this.getBitsCharacterCount(version) + 11 * Math.floor(inputLength / 2) + 6 * (inputLength % 2);\n }\n });\n modes[BYTE] = QRDataMode.extend({\n bitsInCharacterCount: [\n 8,\n 16,\n 16\n ],\n modeIndicator: '0100',\n getValue: function (character) {\n var code = character.charCodeAt(0);\n if (code <= 127 || 160 <= code && code <= 255) {\n return code;\n } else {\n throw new Error('Unsupported character: ' + character);\n }\n },\n encode: function (str, version) {\n var mode = this, result = mode.getModeCountString(str.length, version);\n for (var i = 0; i < str.length; i++) {\n result += toBitsString(mode.getValue(str.charAt(i)), 8);\n }\n return result;\n },\n getStringBitsLength: function (inputLength, version) {\n return 4 + this.getBitsCharacterCount(version) + 8 * inputLength;\n }\n });\n var modeInstances = {};\n for (var mode in modes) {\n modeInstances[mode] = new modes[mode]();\n }\n var FreeCellVisitor = function (matrix) {\n var that = this, row = matrix.length - 1, column = matrix.length - 1, startColumn = column, dir = -1, c = 0;\n that.move = function () {\n row += dir * c;\n c ^= 1;\n column = startColumn - c;\n };\n that.getNextCell = function () {\n while (matrix[row][column] !== undefined) {\n that.move();\n if (row < 0 || row >= matrix.length) {\n dir = -dir;\n startColumn -= startColumn != 8 ? 2 : 3;\n column = startColumn;\n row = dir < 0 ? matrix.length - 1 : 0;\n }\n }\n return {\n row: row,\n column: column\n };\n };\n that.getNextRemainderCell = function () {\n that.move();\n if (matrix[row][column] === undefined) {\n return {\n row: row,\n column: column\n };\n }\n };\n };\n function fillFunctionCell(matrices, bit, x, y) {\n for (var i = 0; i < matrices.length; i++) {\n matrices[i][x][y] = bit;\n }\n }\n function fillDataCell(matrices, bit, x, y) {\n for (var i = 0; i < maskPatternConditions.length; i++) {\n matrices[i][x][y] = maskPatternConditions[i](x, y) ? bit ^ 1 : parseInt(bit, 10);\n }\n }\n var fillData = function (matrices, blocks) {\n var cellVisitor = new FreeCellVisitor(matrices[0]), block, codewordIdx, cell;\n for (var blockIdx = 0; blockIdx < blocks.length; blockIdx++) {\n block = blocks[blockIdx];\n codewordIdx = 0;\n while (block.length > 0) {\n for (var i = 0; i < block.length; i++) {\n for (var j = 0; j < 8; j++) {\n cell = cellVisitor.getNextCell();\n fillDataCell(matrices, block[i][codewordIdx].charAt(j), cell.row, cell.column);\n }\n }\n codewordIdx++;\n while (block[0] && codewordIdx == block[0].length) {\n block.splice(0, 1);\n }\n }\n }\n while (cell = cellVisitor.getNextRemainderCell()) {\n fillDataCell(matrices, 0, cell.row, cell.column);\n }\n };\n var padDataString = function (dataString, totalDataCodewords) {\n var dataBitsCount = totalDataCodewords * 8, terminatorIndex = 0, paddingCodewordIndex = 0;\n while (dataString.length < dataBitsCount && terminatorIndex < terminator.length) {\n dataString += terminator.charAt(terminatorIndex++);\n }\n if (dataString.length % 8 !== 0) {\n dataString += new Array(9 - dataString.length % 8).join('0');\n }\n while (dataString.length < dataBitsCount) {\n dataString += paddingCodewords[paddingCodewordIndex];\n paddingCodewordIndex ^= 1;\n }\n return dataString;\n };\n function generatePowersOfTwo() {\n var result;\n for (var power = 1; power < 255; power++) {\n result = powersOfTwoResult[power - 1] * 2;\n if (result > 255) {\n result = result ^ 285;\n }\n powersOfTwoResult[power] = result;\n powersOfTwo[result] = power;\n }\n result = powersOfTwoResult[power - 1] * 2 ^ 285;\n powersOfTwoResult[power] = result;\n powersOfTwoResult[-1] = 0;\n }\n var xorPolynomials = function (x, y) {\n var result = [], idx = x.length - 2;\n for (var i = idx; i >= 0; i--) {\n result[i] = x[i] ^ y[i];\n }\n return result;\n };\n var multiplyPolynomials = function (x, y) {\n var result = [];\n for (var i = 0; i < x.length; i++) {\n for (var j = 0; j < y.length; j++) {\n if (result[i + j] === undefined) {\n result[i + j] = (x[i] + (y[j] >= 0 ? y[j] : 0)) % 255;\n } else {\n result[i + j] = powersOfTwo[powersOfTwoResult[result[i + j]] ^ powersOfTwoResult[(x[i] + y[j]) % 255]];\n }\n }\n }\n return result;\n };\n function generateGeneratorPolynomials() {\n var maxErrorCorrectionCodeWordsCount = 68;\n for (var idx = 2; idx <= maxErrorCorrectionCodeWordsCount; idx++) {\n var firstPolynomial = generatorPolynomials[idx - 1], secondPolynomial = [\n idx,\n 0\n ];\n generatorPolynomials[idx] = multiplyPolynomials(firstPolynomial, secondPolynomial);\n }\n }\n generatePowersOfTwo();\n generateGeneratorPolynomials();\n function multiplyByConstant(polynomial, power) {\n var result = [], idx = polynomial.length - 1;\n do {\n result[idx] = powersOfTwoResult[(polynomial[idx] + power) % 255];\n idx--;\n } while (polynomial[idx] !== undefined);\n return result;\n }\n var generateErrorCodewords = function (data, errorCodewordsCount) {\n var generator = generatorPolynomials[errorCodewordsCount - 1], result = new Array(errorCodewordsCount).concat(data), generatorPolynomial = new Array(result.length - generator.length).concat(generator), steps = data.length, errorCodewords = [], divisor, idx;\n for (idx = 0; idx < steps; idx++) {\n divisor = multiplyByConstant(generatorPolynomial, powersOfTwo[result[result.length - 1]]);\n generatorPolynomial.splice(0, 1);\n result = xorPolynomials(divisor, result);\n }\n for (idx = result.length - 1; idx >= 0; idx--) {\n errorCodewords[errorCodewordsCount - 1 - idx] = toBitsString(result[idx], 8);\n }\n return errorCodewords;\n };\n var getBlocks = function (dataStream, versionCodewordsInformation) {\n var codewordStart = 0, dataBlocks = [], errorBlocks = [], dataBlock, versionGroups = versionCodewordsInformation.groups, blockCodewordsCount, groupBlocksCount, messagePolynomial, codeword;\n for (var groupIdx = 0; groupIdx < versionGroups.length; groupIdx++) {\n groupBlocksCount = versionGroups[groupIdx][0];\n for (var blockIdx = 0; blockIdx < groupBlocksCount; blockIdx++) {\n blockCodewordsCount = versionGroups[groupIdx][1];\n dataBlock = [];\n messagePolynomial = [];\n for (var codewordIdx = 1; codewordIdx <= blockCodewordsCount; codewordIdx++) {\n codeword = dataStream.substring(codewordStart, codewordStart + 8);\n dataBlock.push(codeword);\n messagePolynomial[blockCodewordsCount - codewordIdx] = toDecimal(codeword);\n codewordStart += 8;\n }\n dataBlocks.push(dataBlock);\n errorBlocks.push(generateErrorCodewords(messagePolynomial, versionCodewordsInformation.errorCodewordsPerBlock));\n }\n }\n return [\n dataBlocks,\n errorBlocks\n ];\n };\n var chooseMode = function (str, minNumericBeforeAlpha, minNumericBeforeByte, minAlphaBeforeByte, previousMode) {\n var numeric = numberRegex.exec(str), numericMatch = numeric ? numeric[0] : '', alpha = alphaRegex.exec(str), alphaMatch = alpha ? alpha[0] : '', alphaNumeric = alphaNumericRegex.exec(str), alphaNumericMatch = alphaNumeric ? alphaNumeric[0] : '', mode, modeString;\n if (numericMatch && (numericMatch.length >= minNumericBeforeAlpha || str.length == numericMatch.length || numericMatch.length >= minNumericBeforeByte && !alphaNumericRegex.test(str.charAt(numericMatch.length)))) {\n mode = NUMERIC;\n modeString = numericMatch;\n } else if (alphaNumericMatch && (str.length == alphaNumericMatch.length || alphaNumericMatch.length >= minAlphaBeforeByte || previousMode == ALPHA_NUMERIC)) {\n mode = ALPHA_NUMERIC;\n modeString = numericMatch || alphaMatch;\n } else {\n mode = BYTE;\n if (alphaNumericMatch) {\n modeString = alphaNumericMatch + byteRegex.exec(str.substring(alphaNumericMatch.length))[0];\n } else {\n modeString = byteRegex.exec(str)[0];\n }\n }\n return {\n mode: mode,\n modeString: modeString\n };\n };\n var getModes = function (str) {\n var modes = [], previousMode, idx = 0;\n modes.push(chooseMode(str, initMinNumericBeforeAlpha, initMinNumericBeforeByte, initMinAlphaBeforeByte, previousMode));\n previousMode = modes[0].mode;\n str = str.substr(modes[0].modeString.length);\n while (str.length > 0) {\n var nextMode = chooseMode(str, minNumericBeforeAlpha, minNumericBeforeByte, minAlphaBeforeByte, previousMode);\n if (nextMode.mode != previousMode) {\n previousMode = nextMode.mode;\n modes.push(nextMode);\n idx++;\n } else {\n modes[idx].modeString += nextMode.modeString;\n }\n str = str.substr(nextMode.modeString.length);\n }\n return modes;\n };\n var getDataCodewordsCount = function (modes) {\n var length = 0, mode;\n for (var i = 0; i < modes.length; i++) {\n mode = modeInstances[modes[i].mode];\n length += mode.getStringBitsLength(modes[i].modeString.length);\n }\n return Math.ceil(length / 8);\n };\n var getVersion = function (dataCodewordsCount, errorCorrectionLevel) {\n var x = 0, y = versionsCodewordsInformation.length - 1, version = Math.floor(versionsCodewordsInformation.length / 2);\n do {\n if (dataCodewordsCount < versionsCodewordsInformation[version][errorCorrectionLevel].totalDataCodewords) {\n y = version;\n } else {\n x = version;\n }\n version = x + Math.floor((y - x) / 2);\n } while (y - x > 1);\n if (dataCodewordsCount <= versionsCodewordsInformation[x][errorCorrectionLevel].totalDataCodewords) {\n return version + 1;\n }\n return y + 1;\n };\n var getDataString = function (modes, version) {\n var dataString = '', mode;\n for (var i = 0; i < modes.length; i++) {\n mode = modeInstances[modes[i].mode];\n dataString += mode.encode(modes[i].modeString, version);\n }\n return dataString;\n };\n var encodeFormatInformation = function (format) {\n var formatNumber = toDecimal(format), encodedString, result = '';\n if (formatNumber === 0) {\n return '101010000010010';\n } else {\n encodedString = encodeBCH(toDecimal(format), formatGeneratorPolynomial, 15);\n }\n for (var i = 0; i < encodedString.length; i++) {\n result += encodedString.charAt(i) ^ formatMaskPattern.charAt(i);\n }\n return result;\n };\n var encodeBCH = function (value, generatorPolynomial, codeLength) {\n var generatorNumber = toDecimal(generatorPolynomial), polynomialLength = generatorPolynomial.length - 1, valueNumber = value << polynomialLength, length = codeLength - polynomialLength, valueString = toBitsString(value, length), result = dividePolynomials(valueNumber, generatorNumber);\n result = valueString + toBitsString(result, polynomialLength);\n return result;\n };\n var dividePolynomials = function (numberX, numberY) {\n var yLength = numberY.toString(2).length, xLength = numberX.toString(2).length;\n do {\n numberX ^= numberY << xLength - yLength;\n xLength = numberX.toString(2).length;\n } while (xLength >= yLength);\n return numberX;\n };\n function getNumberAt(str, idx) {\n return parseInt(str.charAt(idx), 10);\n }\n var initMatrices = function (version) {\n var matrices = [], modules = 17 + 4 * version;\n for (var i = 0; i < maskPatternConditions.length; i++) {\n matrices[i] = new Array(modules);\n for (var j = 0; j < modules; j++) {\n matrices[i][j] = new Array(modules);\n }\n }\n return matrices;\n };\n var addFormatInformation = function (matrices, formatString) {\n var matrix = matrices[0], x, y, idx = 0, length = formatString.length;\n for (x = 0, y = 8; x <= 8; x++) {\n if (x !== 6) {\n fillFunctionCell(matrices, getNumberAt(formatString, length - 1 - idx++), x, y);\n }\n }\n for (x = 8, y = 7; y >= 0; y--) {\n if (y !== 6) {\n fillFunctionCell(matrices, getNumberAt(formatString, length - 1 - idx++), x, y);\n }\n }\n idx = 0;\n for (y = matrix.length - 1, x = 8; y >= matrix.length - 8; y--) {\n fillFunctionCell(matrices, getNumberAt(formatString, length - 1 - idx++), x, y);\n }\n fillFunctionCell(matrices, 1, matrix.length - 8, 8);\n for (x = matrix.length - 7, y = 8; x < matrix.length; x++) {\n fillFunctionCell(matrices, getNumberAt(formatString, length - 1 - idx++), x, y);\n }\n };\n var encodeVersionInformation = function (version) {\n return encodeBCH(version, versionGeneratorPolynomial, 18);\n };\n var addVersionInformation = function (matrices, dataString) {\n var matrix = matrices[0], modules = matrix.length, x1 = 0, y1 = modules - 11, x2 = modules - 11, y2 = 0, quotient, mod, value;\n for (var idx = 0; idx < dataString.length; idx++) {\n quotient = Math.floor(idx / 3);\n mod = idx % 3;\n value = getNumberAt(dataString, dataString.length - idx - 1);\n fillFunctionCell(matrices, value, x1 + quotient, y1 + mod);\n fillFunctionCell(matrices, value, x2 + mod, y2 + quotient);\n }\n };\n var addCentricPattern = function (matrices, pattern, x, y) {\n var size = pattern.length + 2, length = pattern.length + 1, value;\n for (var i = 0; i < pattern.length; i++) {\n for (var j = i; j < size - i; j++) {\n value = pattern[i];\n fillFunctionCell(matrices, value, x + j, y + i);\n fillFunctionCell(matrices, value, x + i, y + j);\n fillFunctionCell(matrices, value, x + length - j, y + length - i);\n fillFunctionCell(matrices, value, x + length - i, y + length - j);\n }\n }\n };\n var addFinderSeparator = function (matrices, direction, x, y) {\n var nextX = x, nextY = y, matrix = matrices[0];\n do {\n fillFunctionCell(matrices, 0, nextX, y);\n fillFunctionCell(matrices, 0, x, nextY);\n nextX += direction[0];\n nextY += direction[1];\n } while (nextX >= 0 && nextX < matrix.length);\n };\n var addFinderPatterns = function (matrices) {\n var modules = matrices[0].length;\n addCentricPattern(matrices, finderPattern, 0, 0);\n addFinderSeparator(matrices, [\n -1,\n -1\n ], 7, 7);\n addCentricPattern(matrices, finderPattern, modules - 7, 0);\n addFinderSeparator(matrices, [\n 1,\n -1\n ], modules - 8, 7);\n addCentricPattern(matrices, finderPattern, 0, modules - 7);\n addFinderSeparator(matrices, [\n -1,\n 1\n ], 7, modules - 8);\n };\n var addAlignmentPatterns = function (matrices, version) {\n if (version < 2) {\n return;\n }\n var matrix = matrices[0], modules = matrix.length, pointsCount = Math.floor(version / 7), points = [6], startDistance, distance, idx = 0;\n if (startDistance = irregularAlignmentPatternsStartDistance[version]) {\n distance = (modules - 13 - startDistance) / pointsCount;\n } else {\n startDistance = distance = (modules - 13) / (pointsCount + 1);\n }\n points.push(points[idx++] + startDistance);\n while (points[idx] + distance < modules) {\n points.push(points[idx++] + distance);\n }\n for (var i = 0; i < points.length; i++) {\n for (var j = 0; j < points.length; j++) {\n if (matrix[points[i]][points[j]] === undefined) {\n addCentricPattern(matrices, alignmentPattern, points[i] - 2, points[j] - 2);\n }\n }\n }\n };\n var addTimingFunctions = function (matrices) {\n var row = 6, column = 6, value = 1, modules = matrices[0].length;\n for (var i = 8; i < modules - 8; i++) {\n fillFunctionCell(matrices, value, row, i);\n fillFunctionCell(matrices, value, i, column);\n value ^= 1;\n }\n };\n var scoreMaskMatrixes = function (matrices) {\n var scores = [], previousBits = [], darkModules = [], patterns = [], adjacentSameBits = [], matrix, i, row = 0, column = 1, modules = matrices[0].length;\n for (i = 0; i < matrices.length; i++) {\n scores[i] = 0;\n darkModules[i] = 0;\n adjacentSameBits[i] = [\n 0,\n 0\n ];\n patterns[i] = [\n 0,\n 0\n ];\n previousBits[i] = [];\n }\n for (i = 0; i < modules; i++) {\n for (var j = 0; j < modules; j++) {\n for (var k = 0; k < matrices.length; k++) {\n matrix = matrices[k];\n darkModules[k] += parseInt(matrix[i][j], 10);\n if (previousBits[k][row] === matrix[i][j] && i + 1 < modules && j - 1 >= 0 && matrix[i + 1][j] == previousBits[k][row] && matrix[i + 1][j - 1] == previousBits[k][row]) {\n scores[k] += 3;\n }\n scoreFinderPatternOccurance(k, patterns, scores, row, matrix[i][j]);\n scoreFinderPatternOccurance(k, patterns, scores, column, matrix[j][i]);\n scoreAdjacentSameBits(k, scores, previousBits, matrix[i][j], adjacentSameBits, row);\n scoreAdjacentSameBits(k, scores, previousBits, matrix[j][i], adjacentSameBits, column);\n }\n }\n }\n var total = modules * modules, minIdx, min = Number.MAX_VALUE;\n for (i = 0; i < scores.length; i++) {\n scores[i] += calculateDarkModulesRatioScore(darkModules[i], total);\n if (scores[i] < min) {\n min = scores[i];\n minIdx = i;\n }\n }\n return minIdx;\n };\n function scoreFinderPatternOccurance(idx, patterns, scores, rowColumn, bit) {\n patterns[idx][rowColumn] = (patterns[idx][rowColumn] << 1 ^ bit) % 128;\n if (patterns[idx][rowColumn] == finderPatternValue) {\n scores[idx] += 40;\n }\n }\n function scoreAdjacentSameBits(idx, scores, previousBits, bit, adjacentBits, rowColumn) {\n if (previousBits[idx][rowColumn] == bit) {\n adjacentBits[idx][rowColumn]++;\n } else {\n previousBits[idx][rowColumn] = bit;\n if (adjacentBits[idx][rowColumn] >= 5) {\n scores[idx] += 3 + adjacentBits[idx][rowColumn] - 5;\n }\n adjacentBits[idx][rowColumn] = 1;\n }\n }\n function calculateDarkModulesRatioScore(darkModules, total) {\n var percent = Math.floor(darkModules / total * 100), mod5 = percent % 5, previous = Math.abs(percent - mod5 - 50), next = Math.abs(percent + 5 - mod5 - 50), score = 10 * Math.min(previous / 5, next / 5);\n return score;\n }\n var EncodingResult = function (dataString, version) {\n this.dataString = dataString;\n this.version = version;\n };\n var IsoEncoder = function () {\n this.getEncodingResult = function (inputString, errorCorrectionLevel) {\n var modes = getModes(inputString), dataCodewordsCount = getDataCodewordsCount(modes), version = getVersion(dataCodewordsCount, errorCorrectionLevel), dataString = getDataString(modes, version);\n return new EncodingResult(dataString, version);\n };\n };\n var UTF8Encoder = function () {\n this.mode = modeInstances[this.encodingMode];\n };\n UTF8Encoder.fn = UTF8Encoder.prototype = {\n encodingMode: BYTE,\n utfBOM: '111011111011101110111111',\n initialModeCountStringLength: 20,\n getEncodingResult: function (inputString, errorCorrectionLevel) {\n var that = this, data = that.encode(inputString), dataCodewordsCount = that.getDataCodewordsCount(data), version = getVersion(dataCodewordsCount, errorCorrectionLevel), dataString = that.mode.getModeCountString(data.length / 8, version) + data;\n return new EncodingResult(dataString, version);\n },\n getDataCodewordsCount: function (data) {\n var that = this, dataLength = data.length, dataCodewordsCount = Math.ceil((that.initialModeCountStringLength + dataLength) / 8);\n return dataCodewordsCount;\n },\n encode: function (str) {\n var that = this, result = that.utfBOM;\n for (var i = 0; i < str.length; i++) {\n result += that.encodeCharacter(str.charCodeAt(i));\n }\n return result;\n },\n encodeCharacter: function (code) {\n var bytesCount = this.getBytesCount(code), bc = bytesCount - 1, result = '';\n if (bytesCount == 1) {\n result = toBitsString(code, 8);\n } else {\n var significantOnes = 8 - bytesCount;\n for (var i = 0; i < bc; i++) {\n result = toBitsString(code >> i * 6 & 63 | 128, 8) + result;\n }\n result = (code >> bc * 6 | 255 >> significantOnes << significantOnes).toString(2) + result;\n }\n return result;\n },\n getBytesCount: function (code) {\n var ranges = this.ranges;\n for (var i = 0; i < ranges.length; i++) {\n if (code < ranges[i]) {\n return i + 1;\n }\n }\n },\n ranges: [\n 128,\n 2048,\n 65536,\n 2097152,\n 67108864\n ]\n };\n var QRCodeDataEncoder = function (encoding) {\n if (encoding && encoding.toLowerCase().indexOf('utf_8') >= 0) {\n return new UTF8Encoder();\n } else {\n return new IsoEncoder();\n }\n };\n var encodeData = function (inputString, errorCorrectionLevel, encoding) {\n var encoder = new QRCodeDataEncoder(encoding), encodingResult = encoder.getEncodingResult(inputString, errorCorrectionLevel), version = encodingResult.version, versionInformation = versionsCodewordsInformation[version - 1][errorCorrectionLevel], dataString = padDataString(encodingResult.dataString, versionInformation.totalDataCodewords), blocks = getBlocks(dataString, versionInformation), matrices = initMatrices(version);\n addFinderPatterns(matrices);\n addAlignmentPatterns(matrices, version);\n addTimingFunctions(matrices);\n if (version >= 7) {\n addVersionInformation(matrices, toBitsString(0, 18));\n }\n addFormatInformation(matrices, toBitsString(0, 15));\n fillData(matrices, blocks);\n var minIdx = scoreMaskMatrixes(matrices), optimalMatrix = matrices[minIdx];\n if (version >= 7) {\n addVersionInformation([optimalMatrix], encodeVersionInformation(version));\n }\n var formatString = errorCorrectionPatterns[errorCorrectionLevel] + toBitsString(minIdx, 3);\n addFormatInformation([optimalMatrix], encodeFormatInformation(formatString));\n return optimalMatrix;\n };\n var QRCodeDefaults = {\n DEFAULT_SIZE: 200,\n QUIET_ZONE_LENGTH: 4,\n DEFAULT_ERROR_CORRECTION_LEVEL: 'L',\n DEFAULT_BACKGROUND: '#fff',\n DEFAULT_DARK_MODULE_COLOR: '#000',\n MIN_BASE_UNIT_SIZE: 1\n };\n var QRCode = Widget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n that.element = $(element);\n that.wrapper = that.element;\n that.element.addClass('k-qrcode');\n that.surfaceWrap = $('
').css('position', 'relative').appendTo(this.element);\n that.surface = draw.Surface.create(that.surfaceWrap, { type: that.options.renderAs });\n that.setOptions(options);\n },\n redraw: function () {\n var size = this._getSize();\n this.surfaceWrap.css({\n width: size,\n height: size\n });\n this.surface.clear();\n this.surface.resize();\n this.createVisual();\n this.surface.draw(this.visual);\n },\n getSize: function () {\n return kendo.dimensions(this.element);\n },\n _resize: function () {\n this.redraw();\n },\n createVisual: function () {\n this.visual = this._render();\n },\n exportVisual: function () {\n return this._render();\n },\n _render: function () {\n var that = this, value = that._value, baseUnit, border = that.options.border || {}, padding = that.options.padding || 0, borderWidth = border.width || 0, quietZoneSize, matrix, size, dataSize, contentSize;\n border.width = borderWidth;\n var visual = new draw.Group();\n if (value) {\n matrix = encodeData(value, that.options.errorCorrection, that.options.encoding);\n size = that._getSize();\n contentSize = size - 2 * (borderWidth + padding);\n baseUnit = that._calculateBaseUnit(contentSize, matrix.length);\n dataSize = matrix.length * baseUnit;\n quietZoneSize = borderWidth + padding + (contentSize - dataSize) / 2;\n visual.append(that._renderBackground(size, border));\n visual.append(that._renderMatrix(matrix, baseUnit, quietZoneSize));\n if (that._hasCustomLogo()) {\n visual.append(that._renderLogo(size, baseUnit));\n } else if (that._isSwiss()) {\n visual.append(that._renderSwissCode(size, baseUnit));\n }\n }\n return visual;\n },\n _renderLogo: function name(qrSize, baseUnit) {\n var image;\n var imageRect;\n var center = round(qrSize / 2);\n var logoSize = this._getLogoSize(baseUnit * DEFAULT_LOGO_SIZE);\n var logoUrl = this.options.overlay.imageUrl;\n var position = {\n x: center - logoSize.width / 2,\n y: center - logoSize.height / 2\n };\n imageRect = new kendo.geometry.Rect(new kendo.geometry.Point(position.x, position.y), new kendo.geometry.Size(logoSize.width, logoSize.height));\n image = new draw.Image(logoUrl, imageRect);\n return image;\n },\n _renderSwissCode: function (qrSize, baseUnit) {\n var logoSize = this._getLogoSize(baseUnit * DEFAULT_LOGO_SIZE);\n logoSize = Math.max(logoSize.width, logoSize.height);\n var crossSize = logoSize / 4;\n var crossOffset = crossSize / 2;\n var center = qrSize / 2;\n var start = {};\n var visual = new draw.Group();\n start.x = start.y = Math.ceil(center - baseUnit - logoSize / 2);\n visual.append(this._renderShape(start, Math.ceil(logoSize + baseUnit * 2), squarePattern, '#fff'));\n start.x = start.y = center - logoSize / 2;\n visual.append(this._renderShape(start, logoSize, squarePattern, this.options.color));\n start.x = center + crossOffset - logoSize / 2;\n start.y = center + crossOffset + crossSize - logoSize / 2;\n visual.append(this._renderShape(start, crossSize, crossPattern, '#fff'));\n return visual;\n },\n _renderShape: function (start, step, pattern, color) {\n var path = new draw.MultiPath({\n fill: { color: color },\n stroke: null\n });\n path.moveTo(start.x, start.y);\n for (var i = 0; i < pattern.length; i++) {\n path.lineTo(start.x + step * pattern[i][0], start.y + step * pattern[i][1]);\n }\n path.close();\n return path;\n },\n _getSize: function () {\n var that = this, size;\n if (that.options.size) {\n size = parseInt(that.options.size, 10);\n } else {\n var element = that.element, min = Math.min(element.width(), element.height());\n if (min > 0) {\n size = min;\n } else {\n size = QRCodeDefaults.DEFAULT_SIZE;\n }\n }\n return size;\n },\n _calculateBaseUnit: function (size, matrixSize) {\n var baseUnit = Math.floor(size / matrixSize);\n if (baseUnit < QRCodeDefaults.MIN_BASE_UNIT_SIZE) {\n throw new Error('Insufficient size.');\n }\n if (baseUnit * matrixSize >= size && baseUnit - 1 >= QRCodeDefaults.MIN_BASE_UNIT_SIZE) {\n baseUnit--;\n }\n return baseUnit;\n },\n _renderMatrix: function (matrix, baseUnit, quietZoneSize) {\n var path = new draw.MultiPath({\n fill: { color: this.options.color },\n stroke: null\n });\n for (var row = 0; row < matrix.length; row++) {\n var y = quietZoneSize + row * baseUnit;\n var column = 0;\n while (column < matrix.length) {\n while (matrix[row][column] === 0 && column < matrix.length) {\n column++;\n }\n if (column < matrix.length) {\n var x = column;\n while (matrix[row][column] == 1) {\n column++;\n }\n var x1 = round(quietZoneSize + x * baseUnit);\n var y1 = round(y);\n var x2 = round(quietZoneSize + column * baseUnit);\n var y2 = round(y + baseUnit);\n path.moveTo(x1, y1).lineTo(x1, y2).lineTo(x2, y2).lineTo(x2, y1).close();\n }\n }\n }\n return path;\n },\n _renderBackground: function (size, border) {\n var box = new Box2D(0, 0, size, size).unpad(border.width / 2);\n return draw.Path.fromRect(box.toRect(), {\n fill: { color: this.options.background },\n stroke: {\n color: border.color,\n width: border.width\n }\n });\n },\n setOptions: function (options) {\n var that = this;\n options = options || {};\n that.options = extend(that.options, options);\n if (options.value !== undefined) {\n that._value = that.options.value + '';\n }\n that.redraw();\n },\n value: function (value) {\n var that = this;\n if (value === undefined) {\n return that._value;\n }\n that._value = value + '';\n that.redraw();\n },\n options: {\n name: 'QRCode',\n renderAs: 'svg',\n encoding: 'ISO_8859_1',\n value: '',\n errorCorrection: QRCodeDefaults.DEFAULT_ERROR_CORRECTION_LEVEL,\n background: QRCodeDefaults.DEFAULT_BACKGROUND,\n color: QRCodeDefaults.DEFAULT_DARK_MODULE_COLOR,\n size: '',\n padding: 0,\n border: {\n color: '',\n width: 0\n },\n overlay: {\n type: IMAGE,\n imageUrl: '',\n width: 0,\n height: 0\n }\n },\n _hasCustomLogo: function () {\n return !!this.options.overlay.imageUrl;\n },\n _isSwiss: function () {\n return this.options.overlay.type === SWISS_QR;\n },\n _getLogoSize: function (defautLogoSize) {\n var width = this.options.overlay.width;\n var height = this.options.overlay.height;\n if (!width && !height) {\n width = height = defautLogoSize;\n } else if (width && !height) {\n height = width;\n } else if (!width && height) {\n width = height;\n }\n return {\n width: width,\n height: height\n };\n }\n });\n dataviz.ExportMixin.extend(QRCode.fn);\n dataviz.ui.plugin(QRCode);\n kendo.deepExtend(dataviz, {\n QRCode: QRCode,\n QRCodeDefaults: QRCodeDefaults,\n QRCodeFunctions: {\n FreeCellVisitor: FreeCellVisitor,\n fillData: fillData,\n padDataString: padDataString,\n generateErrorCodewords: generateErrorCodewords,\n xorPolynomials: xorPolynomials,\n getBlocks: getBlocks,\n multiplyPolynomials: multiplyPolynomials,\n chooseMode: chooseMode,\n getModes: getModes,\n getDataCodewordsCount: getDataCodewordsCount,\n getVersion: getVersion,\n getDataString: getDataString,\n encodeFormatInformation: encodeFormatInformation,\n encodeBCH: encodeBCH,\n dividePolynomials: dividePolynomials,\n initMatrices: initMatrices,\n addFormatInformation: addFormatInformation,\n encodeVersionInformation: encodeVersionInformation,\n addVersionInformation: addVersionInformation,\n addCentricPattern: addCentricPattern,\n addFinderSeparator: addFinderSeparator,\n addFinderPatterns: addFinderPatterns,\n addAlignmentPatterns: addAlignmentPatterns,\n addTimingFunctions: addTimingFunctions,\n scoreMaskMatrixes: scoreMaskMatrixes,\n encodeData: encodeData,\n UTF8Encoder: UTF8Encoder\n },\n QRCodeFields: {\n modes: modeInstances,\n powersOfTwo: powersOfTwo,\n powersOfTwoResult: powersOfTwoResult,\n generatorPolynomials: generatorPolynomials\n }\n });\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));"]}