UNPKG

@progress/kendo-ui

Version:

This package is part of the [Kendo UI for jQuery](http://www.telerik.com/kendo-ui) suite.

1,394 lines (1,284 loc) 63.2 kB
import './kendo.dataviz.core.js'; import './html-DIrOxn6k.js'; import { defined, TextBox, Box, getSpacing } from '@progress/kendo-charts'; import { drawing, geometry } from '@progress/kendo-drawing'; import '@progress/kendo-charts/dist/es/core-export.js'; import './kendo.popup.js'; import './kendo.core.js'; import './kendo.licensing.js'; import '@progress/kendo-licensing'; import './kendo.icons.js'; import './kendo.html.icon.js'; import './kendo.html.base.js'; import '@progress/kendo-svg-icons'; import './kendo.color.js'; const __meta__ = { id: "dataviz.barcode", name: "Barcode", category: "dataviz", description: "Barcode widget", depends: [ "dataviz.core", "drawing" ] }; (function($, undefined$1) { window.kendo.dataviz = window.kendo.dataviz || {}; var kendo = window.kendo, Widget = kendo.ui.Widget, extend = $.extend, deepExtend = kendo.deepExtend, inArray = $.inArray, isPlainObject = $.isPlainObject, dataviz = kendo.dataviz, DEFAULT_WIDTH = 300, DEFAULT_HEIGHT = 100, DEFAULT_QUIETZONE_LENGTH = 10, numberRegex = /^\d+$/, alphanumericRegex = /^[a-z0-9]+$/i, InvalidCharacterErrorTemplate = "Character '{0}' is not valid for symbology {1}"; function getNext(value, index, count) { return value.substring(index, index + count); } var Encoding = kendo.Class.extend({ init: function(options) { this.setOptions(options); }, setOptions: function(options) { var that = this; that.options = extend({}, that.options, options); that.quietZoneLength = that.options.addQuietZone ? 2 * that.options.quietZoneLength : 0; }, encode: function(value, width, height) { var that = this; if (defined(value)) { value += ''; } that.initValue(value, width, height); if (that.options.addQuietZone) { that.addQuietZone(); } that.addData(); if (that.options.addQuietZone) { that.addQuietZone(); } return { baseUnit: that.baseUnit, pattern: that.pattern }; }, options: { quietZoneLength: DEFAULT_QUIETZONE_LENGTH, addQuietZone: true, addCheckSum: true }, initValue: function() {}, addQuietZone: function() { this.pattern.push(this.options.quietZoneLength || DEFAULT_QUIETZONE_LENGTH); }, addData: function() { }, invalidCharacterError: function(character) { throw new Error(kendo.format(InvalidCharacterErrorTemplate, character, this.name)); } }); var encodings = {}; var code39Base = Encoding.extend({ minBaseUnitLength: 0.7, addData: function() { var that = this, value = that.value; that.addStart(); for (var idx = 0; idx < value.length; idx++) { that.addCharacter(value.charAt(idx)); } if (that.options.addCheckSum) { that.pushCheckSum(); } that.addStop(); that.prepareValues(); }, addCharacter: function(character) { var that = this, charData = that.characterMap[character]; if (!charData) { that.invalidCharacterError(character); } that.addBase(charData); }, addBase: function() {} }); var code39ExtendedBase = { addCharacter: function(character) { var that = this; if (that.characterMap[character]) { that.addBase(that.characterMap[character]); } else if (character.charCodeAt(0) > 127) { that.invalidCharacterError(character); } else { that.addExtended(character.charCodeAt(0)); } }, addExtended: function(code) { var that = this, patterns; for (var i = 0; i < that.extendedMappings.length; i++) { if ((patterns = that.extendedMappings[i].call(that, code))) { for (var j = 0; j < patterns.length; j++) { that.addBase(patterns[j]); } that.dataLength += patterns.length - 1; return; } } }, extendedMappings: [ function(code) { if (97 <= code && code <= 122) { var that = this; return [that.characterMap[that.shiftCharacters[0]], that.characterMap[String.fromCharCode(code - 32)]]; } }, function(code) { if (33 <= code && code <= 58) { var that = this; return [that.characterMap[that.shiftCharacters[1]], that.characterMap[String.fromCharCode(code + 32)]]; } }, function(code) { if (1 <= code && code <= 26) { var that = this; return [that.characterMap[that.shiftCharacters[2]], that.characterMap[String.fromCharCode(code + 64)]]; } }, function(code) { var that = this, result, dataCharacter; if (!that.specialAsciiCodes[code]) { dataCharacter = Math.floor(code / 32) * 6 + (code - 27) % 32 + 64; result = [that.characterMap[that.shiftCharacters[3]], that.characterMap[String.fromCharCode(dataCharacter)]]; } else { result = []; for (var i = 0; i < that.specialAsciiCodes[code].length; i++) { result.push(that.characterMap[that.shiftCharacters[3]]); result.push(that.characterMap[that.specialAsciiCodes[code][i]]); } } return result; } ], specialAsciiCodes: { "0": ["U"], "64": ["V"], "96": ["W"], "127": ["T","X","Y","Z"] }, shiftValuesAsciiCodes: { "39": 36, "40": 47, "41": 43, "42": 37 }, characterMap: { "+": false, "/": false, "$": false, "%": false }, shiftCharacters: ["SHIFT0", "SHIFT1", "SHIFT2", "SHIFT3"] }; encodings.code39 = code39Base.extend({ name: "Code 39", checkSumMod: 43, minRatio: 2.5, maxRatio: 3, gapWidth: 1, splitCharacter: "|", initValue: function(value, width, height) { var that = this; that.width = width; that.height = height; that.value = value; that.dataLength = value.length; that.pattern = []; that.patternString = ""; }, prepareValues: function() { var that = this, baseUnit, minBaseUnit = that.minBaseUnitLength, ratio = that.maxRatio, minRatio = that.minRatio, minHeight = Math.max(0.15 * that.width, 24); if (that.height < minHeight) { throw new Error("Insufficient Height. The minimum height for value: " + that.value + " is: " + minHeight); } while ((baseUnit = that.getBaseUnit(ratio)) < minBaseUnit && ratio > minRatio) { ratio = parseFloat((ratio - 0.1).toFixed(1)); } if (baseUnit < minBaseUnit) { var minWidth = Math.ceil(that.getBaseWidth(minRatio) * minBaseUnit); throw new Error("Insufficient width. The minimum width for value: " + that.value + " is: " + minWidth); } that.ratio = ratio; that.baseUnit = baseUnit; that.patternString = that.patternString.substring(0, that.patternString.length - 1); that.pattern = that.pattern.concat(that.patternString.replace(/ratio/g, ratio).split(that.splitCharacter)); }, getBaseUnit: function(ratio) { return this.width / this.getBaseWidth(ratio); }, getBaseWidth: function(ratio) { var that = this, characterLength = 3 * (ratio + 2); return that.quietZoneLength + characterLength * (that.dataLength + 2) + that.gapWidth * (that.dataLength + 1); }, addStart: function() { var that = this; that.addPattern(that.characterMap.START.pattern); that.addCharacterGap(); }, addBase: function(character) { this.addPattern(character.pattern); this.addCharacterGap(); }, addStop: function() { this.addPattern(this.characterMap.START.pattern); }, addPattern: function(pattern) { for (var i = 0; i < pattern.length; i++) { this.patternString += this.patternMappings[pattern.charAt(i)]; } }, addCharacterGap: function() { var that = this; that.patternString += that.gapWidth + that.splitCharacter; }, patternMappings: { "b": "1|", "w": "1|", "B": "ratio|", "W": "ratio|" }, characterMap: { "0": { "pattern": "bwbWBwBwb","value": 0 }, "1": { "pattern": "BwbWbwbwB","value": 1 }, "2": { "pattern": "bwBWbwbwB","value": 2 }, "3": { "pattern": "BwBWbwbwb","value": 3 }, "4": { "pattern": "bwbWBwbwB","value": 4 }, "5": { "pattern": "BwbWBwbwb","value": 5 }, "6": { "pattern": "bwBWBwbwb","value": 6 }, "7": { "pattern": "bwbWbwBwB","value": 7 }, "8": { "pattern": "BwbWbwBwb","value": 8 }, "9": { "pattern": "bwBWbwBwb","value": 9 }, "A": { "pattern": "BwbwbWbwB","value": 10 }, "B": { "pattern": "bwBwbWbwB","value": 11 }, "C": { "pattern": "BwBwbWbwb","value": 12 }, "D": { "pattern": "bwbwBWbwB","value": 13 }, "E": { "pattern": "BwbwBWbwb","value": 14 }, "F": { "pattern": "bwBwBWbwb","value": 15 }, "G": { "pattern": "bwbwbWBwB","value": 16 }, "H": { "pattern": "BwbwbWBwb","value": 17 }, "I": { "pattern": "bwBwbWBwb","value": 18 }, "J": { "pattern": "bwbwBWBwb","value": 19 }, "K": { "pattern": "BwbwbwbWB","value": 20 }, "L": { "pattern": "bwBwbwbWB","value": 21 }, "M": { "pattern": "BwBwbwbWb","value": 22 }, "N": { "pattern": "bwbwBwbWB","value": 23 }, "O": { "pattern": "BwbwBwbWb","value": 24 }, "P": { "pattern": "bwBwBwbWb","value": 25 }, "Q": { "pattern": "bwbwbwBWB","value": 26 }, "R": { "pattern": "BwbwbwBWb","value": 27 }, "S": { "pattern": "bwBwbwBWb","value": 28 }, "T": { "pattern": "bwbwBwBWb","value": 29 }, "U": { "pattern": "BWbwbwbwB","value": 30 }, "V": { "pattern": "bWBwbwbwB","value": 31 }, "W": { "pattern": "BWBwbwbwb","value": 32 }, "X": { "pattern": "bWbwBwbwB","value": 33 }, "Y": { "pattern": "BWbwBwbwb","value": 34 }, "Z": { "pattern": "bWBwBwbwb","value": 35 }, "-": { "pattern": "bWbwbwBwB","value": 36 }, ".": { "pattern": "BWbwbwBwb","value": 37 }, " ": { "pattern": "bWBwbwBwb","value": 38 }, "$": { "pattern": "bWbWbWbwb","value": 39 }, "/": { "pattern": "bWbWbwbWb","value": 40 }, "+": { "pattern": "bWbwbWbWb","value": 41 }, "%": { "pattern": "bwbWbWbWb","value": 42 }, START: { pattern: "bWbwBwBwb" } }, options: { addCheckSum: false } }); encodings.code39extended = encodings.code39.extend(deepExtend({}, code39ExtendedBase, { name: "Code 39 extended", characterMap: { SHIFT0: { "pattern": "bWbwbWbWb","value": 41 }, SHIFT1: { "pattern": "bWbWbwbWb","value": 40 }, SHIFT2: { "pattern": "bWbWbWbwb","value": 39 }, SHIFT3: { "pattern": "bwbWbWbWb","value": 42 } } })); encodings.code93 = code39Base.extend({ name: "Code 93", cCheckSumTotal: 20, kCheckSumTotal: 15, checkSumMod: 47, initValue: function(value, width, height) { var that = this; that.value = value; that.width = width; that.height = height; that.pattern = []; that.values = []; that.dataLength = value.length; }, prepareValues: function() { var that = this, minHeight = Math.max(0.15 * that.width, 24); if (that.height < minHeight) { throw new Error("Insufficient Height"); } that.setBaseUnit(); if (that.baseUnit < that.minBaseUnitLength) { throw new Error("Insufficient Width"); } }, setBaseUnit: function() { var that = this, checkSumLength = 2; that.baseUnit = that.width / (9 * (that.dataLength + 2 + checkSumLength) + that.quietZoneLength + 1); }, addStart: function() { var pattern = this.characterMap.START.pattern; this.addPattern(pattern); }, addStop: function() { var that = this; that.addStart(); that.pattern.push(that.characterMap.TERMINATION_BAR); }, addBase: function(charData) { this.addPattern(charData.pattern); this.values.push(charData.value); }, pushCheckSum: function() { var that = this, checkValues = that._getCheckValues(), charData; that.checksum = checkValues.join(""); for (var i = 0; i < checkValues.length; i++) { charData = that.characterMap[that._findCharacterByValue(checkValues[i])]; that.addPattern(charData.pattern); } }, _getCheckValues: function() { var that = this, values = that.values, length = values.length, wightedSum = 0, cValue, kValue, idx; for (idx = length - 1; idx >= 0; idx--) { wightedSum += that.weightedValue(values[idx],length - idx, that.cCheckSumTotal); } cValue = wightedSum % that.checkSumMod; wightedSum = that.weightedValue(cValue, 1, that.kCheckSumTotal); for (idx = length - 1; idx >= 0; idx--) { wightedSum += that.weightedValue(values[idx], length - idx + 1, that.kCheckSumTotal); } kValue = wightedSum % that.checkSumMod; return [cValue, kValue]; }, _findCharacterByValue: function(value) { for (var character in this.characterMap) { if (this.characterMap[character].value === value) { return character; } } }, weightedValue: function(value, index, total) { return (index % total || total) * value; }, addPattern: function(pattern) { var value; for (var i = 0; i < pattern.length; i++) { value = parseInt(pattern.charAt(i),10); this.pattern.push(value); } }, characterMap: { "0": { "pattern": "131112","value": 0 }, "1": { "pattern": "111213","value": 1 }, "2": { "pattern": "111312","value": 2 }, "3": { "pattern": "111411","value": 3 }, "4": { "pattern": "121113","value": 4 }, "5": { "pattern": "121212","value": 5 }, "6": { "pattern": "121311","value": 6 }, "7": { "pattern": "111114","value": 7 }, "8": { "pattern": "131211","value": 8 }, "9": { "pattern": "141111","value": 9 }, "A": { "pattern": "211113","value": 10 }, "B": { "pattern": "211212","value": 11 }, "C": { "pattern": "211311","value": 12 }, "D": { "pattern": "221112","value": 13 }, "E": { "pattern": "221211","value": 14 }, "F": { "pattern": "231111","value": 15 }, "G": { "pattern": "112113","value": 16 }, "H": { "pattern": "112212","value": 17 }, "I": { "pattern": "112311","value": 18 }, "J": { "pattern": "122112","value": 19 }, "K": { "pattern": "132111","value": 20 }, "L": { "pattern": "111123","value": 21 }, "M": { "pattern": "111222","value": 22 }, "N": { "pattern": "111321","value": 23 }, "O": { "pattern": "121122","value": 24 }, "P": { "pattern": "131121","value": 25 }, "Q": { "pattern": "212112","value": 26 }, "R": { "pattern": "212211","value": 27 }, "S": { "pattern": "211122","value": 28 }, "T": { "pattern": "211221","value": 29 }, "U": { "pattern": "221121","value": 30 }, "V": { "pattern": "222111","value": 31 }, "W": { "pattern": "112122","value": 32 }, "X": { "pattern": "112221","value": 33 }, "Y": { "pattern": "122121","value": 34 }, "Z": { "pattern": "123111","value": 35 }, "-": { "pattern": "121131","value": 36 }, ".": { "pattern": "311112","value": 37 }, " ": { "pattern": "311211","value": 38 }, "$": { "pattern": "321111","value": 39 }, "/": { "pattern": "112131","value": 40 }, "+": { "pattern": "113121","value": 41 }, "%": { "pattern": "211131","value": 42 }, SHIFT0: { "pattern": "122211","value": 46 }, SHIFT1: { "pattern": "311121","value": 45 }, SHIFT2: { "pattern": "121221","value": 43 }, SHIFT3: { "pattern": "312111","value": 44 }, START: { "pattern": "111141" }, TERMINATION_BAR: "1" } }); encodings.code93extended = encodings.code93.extend(deepExtend({}, code39ExtendedBase, { name: "Code 93 extended", pushCheckSum: function() { var that = this, checkValues = that._getCheckValues(), value; that.checksum = checkValues.join(""); for (var i = 0; i < checkValues.length; i++) { value = checkValues[i]; if (that.shiftValuesAsciiCodes[value]) { that.addExtended(that.shiftValuesAsciiCodes[value]); } else { that.addPattern(that.characterMap[that._findCharacterByValue(value)].pattern); } } } })); var state128 = kendo.Class.extend({ init: function(encoding) { this.encoding = encoding; }, addStart: function() {}, is: function() {}, move: function() {}, pushState: function() {} }); var state128AB = state128.extend({ FNC4: "FNC4", init: function(encoding, states) { var that = this; that.encoding = encoding; that.states = states; that._initMoves(states); }, addStart: function() { this.encoding.addPattern(this.START); }, is: function(value, index) { var code = value.charCodeAt(index); return this.isCode(code); }, move: function(encodingState) { var that = this, idx = 0; while (!that._moves[idx].call(that, encodingState) && idx < that._moves.length) { idx++; } }, pushState: function(encodingState) { var that = this, states = that.states, value = encodingState.value, maxLength = value.length, code; if (inArray("C", states) >= 0) { var numberMatch = value.substr(encodingState.index).match(/\d{4,}/g); if (numberMatch) { maxLength = value.indexOf(numberMatch[0], encodingState.index); } } while ((code = encodingState.value.charCodeAt(encodingState.index)) >= 0 && that.isCode(code) && encodingState.index < maxLength) { that.encoding.addPattern(that.getValue(code)); encodingState.index++; } }, _initMoves: function(states) { var that = this; that._moves = []; if (inArray(that.FNC4, states) >= 0) { that._moves.push(that._moveFNC); } if (inArray(that.shiftKey, states) >= 0) { that._moves.push(that._shiftState); } that._moves.push(that._moveState); }, _moveFNC: function(encodingState) { if (encodingState.fnc) { encodingState.fnc = false; return encodingState.previousState == this.key; } }, _shiftState: function(encodingState) { var that = this; if (encodingState.previousState == that.shiftKey && (encodingState.index + 1 >= encodingState.value.length || that.encoding[that.shiftKey].is(encodingState.value, encodingState.index + 1))) { that.encoding.addPattern(that.SHIFT); encodingState.shifted = true; return true; } }, _moveState: function() { this.encoding.addPattern(this.MOVE); return true; }, SHIFT: 98 }); var states128 = {}; states128.A = state128AB.extend({ key: "A", shiftKey: "B", isCode: function(code) { return code >= 0 && code < 96; }, getValue: function(code) { if (code < 32) { return code + 64; } return code - 32; }, MOVE: 101, START: 103 }); states128.B = state128AB.extend({ key: "B", shiftKey: "A", isCode: function(code) { return code >= 32 && code < 128; }, getValue: function(code) { return code - 32; }, MOVE: 100, START: 104 }); states128.C = state128.extend({ key: "C", addStart: function() { this.encoding.addPattern(this.START); }, is: function(value, index) { var next4 = getNext(value, index, 4); return (index + 4 <= value.length || value.length == 2) && numberRegex.test(next4); }, move: function() { this.encoding.addPattern(this.MOVE); }, pushState: function(encodingState) { var code; while (( code = getNext(encodingState.value, encodingState.index, 2)) && numberRegex.test(code) && code.length == 2) { this.encoding.addPattern(parseInt(code, 10)); encodingState.index += 2; } }, getValue: function(code) { return code; }, MOVE: 99, START: 105 }); states128.FNC4 = state128.extend({ key: "FNC4", dependentStates: ["A","B"], init: function(encoding, states) { this.encoding = encoding; this._initSubStates(states); }, addStart: function(encodingState) { var code = encodingState.value.charCodeAt(0) - 128, subState = this._getSubState(code); this.encoding[subState].addStart(); }, is: function(value, index) { var code = value.charCodeAt(index); return this.isCode(code); }, isCode: function(code) { return code >= 128 && code < 256; }, pushState: function(encodingState) { var that = this, subState = that._initSubState(encodingState), encoding = that.encoding, length = subState.value.length; encodingState.index += length; if (length < 3) { var code; for (; subState.index < length; subState.index++) { code = subState.value.charCodeAt(subState.index); subState.state = that._getSubState(code); if (subState.previousState != subState.state) { subState.previousState = subState.state; encoding[subState.state].move(subState); } encoding.addPattern(encoding[subState.state].MOVE); encoding.addPattern(encoding[subState.state].getValue(code)); } } else { if (subState.state != subState.previousState) { encoding[subState.state].move(subState); } that._pushStart(subState); encoding.pushData(subState, that.subStates); if (encodingState.index < encodingState.value.length) { that._pushStart(subState); } } encodingState.fnc = true; encodingState.state = subState.state; }, _pushStart: function(subState) { var that = this; that.encoding.addPattern(that.encoding[subState.state].MOVE); that.encoding.addPattern(that.encoding[subState.state].MOVE); }, _initSubState: function(encodingState) { var that = this, subState = { value: that._getAll(encodingState.value, encodingState.index), index: 0 }; subState.state = that._getSubState(subState.value.charCodeAt(0)); subState.previousState = encodingState.previousState == that.key ? subState.state : encodingState.previousState; return subState; }, _initSubStates: function(states) { var that = this; that.subStates = []; for (var i = 0; i < states.length; i++) { if (inArray(states[i], that.dependentStates) >= 0) { that.subStates.push(states[i]); } } }, _getSubState: function(code) { var that = this; for (var i = 0; i < that.subStates.length; i++) { if (that.encoding[that.subStates[i]].isCode(code)) { return that.subStates[i]; } } }, _getAll: function(value, index) { var code, result = ""; while ((code = value.charCodeAt(index++)) && this.isCode(code)) { result += String.fromCharCode(code - 128); } return result; } }); states128.FNC1 = state128.extend({ key: "FNC1", startState: "C", dependentStates: ["C","B"], startAI: "(", endAI: ")", init: function(encoding, states) { this.encoding = encoding; this.states = states; }, addStart: function() { this.encoding[this.startState].addStart(); }, is: function() { return inArray(this.key, this.states) >= 0; }, pushState: function(encodingState) { var that = this, encoding = that.encoding, value = encodingState.value.replace(/\s/g, ""), regexSeparators = new RegExp("[" + that.startAI + that.endAI + "]", "g"), index = encodingState.index, subState = { state: that.startState }, current, nextStart, separatorLength; encoding.addPattern(that.START); while (true) { subState.index = 0; separatorLength = value.charAt(index) === that.startAI ? 2 : 0; current = separatorLength > 0 ? that.getBySeparator(value, index) : that.getByLength(value, index); if (current.ai.length) { nextStart = index + separatorLength + current.id.length + current.ai.length; } else { nextStart = value.indexOf(that.startAI, index + 1); if (nextStart < 0) { if (index + current.ai.max + current.id.length + separatorLength < value.length) { throw new Error("Separators are required after variable length identifiers"); } nextStart = value.length; } } subState.value = value.substring(index, nextStart).replace(regexSeparators, ""); that.validate(current, subState.value); encoding.pushData(subState, that.dependentStates); if (nextStart >= value.length) { break; } index = nextStart; if (subState.state != that.startState) { encoding[that.startState].move(subState); subState.state = that.startState; } if (!current.ai.length) { encoding.addPattern(that.START); } } encodingState.index = encodingState.value.length; }, validate: function(current, value) { var code = value.substr(current.id.length), ai = current.ai; if (!ai.type && !numberRegex.test(code)) { throw new Error("Application identifier " + current.id + " is numeric only but contains non numeric character(s)."); } if (ai.type == "alphanumeric" && !alphanumericRegex.test(code)) { throw new Error("Application identifier " + current.id + " is alphanumeric only but contains non alphanumeric character(s)."); } if (ai.length && ai.length !== code.length) { throw new Error("Application identifier " + current.id + " must be " + ai.length + " characters long."); } if (ai.min && ai.min > code.length) { throw new Error("Application identifier " + current.id + " must be at least " + ai.min + " characters long."); } if (ai.max && ai.max < code.length) { throw new Error("Application identifier " + current.id + " must be at most " + ai.max + " characters long."); } }, getByLength: function(value, index) { var that = this, id, ai; for (var i = 2; i <= 4; i++) { id = getNext(value, index, i); ai = that.getAI(id) || that.getAI(id.substring(0, id.length - 1)); if (ai) { return { id: id, ai: ai }; } } that.unsupportedAIError(id); }, unsupportedAIError: function(id) { throw new Error(kendo.format("'{0}' is not a supported Application Identifier"),id); }, getBySeparator: function(value, index) { var that = this, start = value.indexOf(that.startAI, index), end = value.indexOf(that.endAI, start), id = value.substring(start + 1,end), ai = that.getAI(id) || that.getAI(id.substr(id.length - 1)); if (!ai) { that.unsupportedAIError(id); } return { ai: ai, id: id }; }, getAI: function(id) { var ai = this.applicationIdentifiers, multiKey = ai.multiKey; if (ai[id]) { return ai[id]; } for (var i = 0; i < multiKey.length; i++) { if (multiKey[i].ids && inArray(id, multiKey[i].ids) >= 0) { return multiKey[i].type; } else if (multiKey[i].ranges) { var ranges = multiKey[i].ranges; for (var j = 0; j < ranges.length; j++) { if (ranges[j][0] <= id && id <= ranges[j][1]) { return multiKey[i].type; } } } } }, applicationIdentifiers: { "22": { max: 29, type: "alphanumeric" }, "402": { length: 17 }, "7004": { max: 4, type: "alphanumeric" }, "242": { max: 6, type: "alphanumeric" }, "8020": { max: 25, type: "alphanumeric" }, "703": { min: 3, max: 30, type: "alphanumeric" }, "8008": { min: 8, max: 12, type: "alphanumeric" }, "253": { min: 13, max: 17, type: "alphanumeric" }, "8003": { min: 14, max: 30, type: "alphanumeric" }, multiKey: [{ ids: ["15", "17", "8005", "8100"], ranges: [ [11, 13], [310, 316], [320, 336], [340, 369] ], type: { length: 6 } },{ ids: ["240", "241", "250", "251", "400", "401", "403", "7002", "8004", "8007", "8110"], ranges: [[90 - 99]], type: { max: 30, type: "alphanumeric" } },{ ids: ["7001"], ranges: [[410, 414]], type: { length: 13 } },{ ids: ["10","21", "254", "420", "8002"], type: { max: 20, type: "alphanumeric" } },{ ids: ["00", "8006", "8017", "8018"], type: { length: 18 } },{ ids: ["01", "02", "8001"], type: { length: 14 } },{ ids: ["422"], ranges: [ [424, 426] ], type: { length: 3 } },{ ids: ["20", "8102"], type: { length: 2 } },{ ids: ["30","37"], type: { max: 8, type: "alphanumeric" } },{ ids: ["390","392"], type: { max: 15, type: "alphanumeric" } },{ ids: ["421", "423"], type: { min: 3, max: 15, type: "alphanumeric" } }, { ids: ["391", "393"], type: { min: 3, max: 18, type: "alphanumeric" } },{ ids: ["7003", "8101"], type: { length: 10 } }] }, START: 102 }); var code128Base = Encoding.extend({ init: function(options) { Encoding.fn.init.call(this, options); this._initStates(); }, _initStates: function() { var that = this; for (var i = 0; i < that.states.length; i++) { that[that.states[i]] = new states128[that.states[i]](that, that.states); } }, initValue: function(value, width, height) { var that = this; that.pattern = []; that.value = value; that.width = width; that.height = height; that.checkSum = 0; that.totalUnits = 0; that.index = 0; that.position = 1; }, addData: function() { var that = this, encodingState = { value: that.value, index: 0, state: "" }; if (that.value.length === 0) { return; } encodingState.state = encodingState.previousState = that.getNextState(encodingState, that.states); that.addStart(encodingState); that.pushData(encodingState, that.states); that.addCheckSum(); that.addStop(); that.setBaseUnit(); }, pushData: function(encodingState, states) { var that = this; while (true) { that[encodingState.state].pushState(encodingState); if (encodingState.index >= encodingState.value.length) { break; } if (!encodingState.shifted) { encodingState.previousState = encodingState.state; encodingState.state = that.getNextState(encodingState, states); that[encodingState.state].move(encodingState); } else { var temp = encodingState.state; encodingState.state = encodingState.previousState; encodingState.previousState = temp; encodingState.shifted = false; } } }, addStart: function(encodingState) { this[encodingState.state].addStart(encodingState); this.position = 1; }, addCheckSum: function() { var that = this; that.checksum = that.checkSum % 103; that.addPattern(that.checksum); }, addStop: function() { this.addPattern(this.STOP); }, setBaseUnit: function() { var that = this; that.baseUnit = that.width / (that.totalUnits + that.quietZoneLength); }, addPattern: function(code) { var that = this, pattern = that.characterMap[code].toString(), value; for (var i = 0; i < pattern.length; i++) { value = parseInt(pattern.charAt(i),10); that.pattern.push(value); that.totalUnits += value; } that.checkSum += code * that.position++; }, getNextState: function(encodingState, states) { for (var i = 0; i < states.length; i++) { if (this[states[i]].is(encodingState.value, encodingState.index)) { return states[i]; } } this.invalidCharacterError(encodingState.value.charAt(encodingState.index)); }, characterMap: [ 212222,222122,222221,121223,121322,131222,122213,122312,132212,221213, 221312,231212,112232,122132,122231,113222,123122,123221,223211,221132, 221231,213212,223112,312131,311222,321122,321221,312212,322112,322211, 212123,212321,232121,111323,131123,131321,112313,132113,132311,211313, 231113,231311,112133,112331,132131,113123,113321,133121,313121,211331, 231131,213113,213311,213131,311123,311321,331121,312113,312311,332111, 314111,221411,431111,111224,111422,121124,121421,141122,141221,112214, 112412,122114,122411,142112,142211,241211,221114,413111,241112,134111, 111242,121142,121241,114212,124112,124211,411212,421112,421211,212141, 214121,412121,111143,111341,131141,114113,114311,411113,411311,113141, 114131,311141,411131,211412,211214,211232,2331112 ], STOP: 106 }); encodings.code128a = code128Base.extend({ name: "Code 128 A", states: ["A"] }); encodings.code128b = code128Base.extend({ name: "Code 128 B", states: ["B"] }); encodings.code128c = code128Base.extend({ name: "Code 128 C", states: ["C"] }); encodings.code128 = code128Base.extend({ name: "Code 128", states: ["C", "B", "A", "FNC4"] }); encodings["gs1-128"] = code128Base.extend({ name: "Code GS1-128", states: ["FNC1", "C", "B"] }); var msiBase = Encoding.extend({ initValue: function(value, width) { var that = this; that.pattern = []; that.value = value; that.checkSumLength = 0; that.width = width; }, setBaseUnit: function() { var that = this, startStopLength = 7; that.baseUnit = that.width / ( 12 * (that.value.length + that.checkSumLength) + that.quietZoneLength + startStopLength); }, addData: function() { var that = this, value = that.value; that.addPattern(that.START); for (var i = 0; i < value.length; i++) { that.addCharacter(value.charAt(i)); } if (that.options.addCheckSum) { that.addCheckSum(); } that.addPattern(that.STOP); that.setBaseUnit(); }, addCharacter: function(character) { var that = this, pattern = that.characterMap[character]; if (!pattern) { that.invalidCharacterError(character); } that.addPattern(pattern); }, addPattern: function(pattern) { for (var i = 0; i < pattern.length; i++) { this.pattern.push(parseInt(pattern.charAt(i),10)); } }, addCheckSum: function() { var that = this, checkSumFunction = that.checkSums[that.checkSumType], checkValues; checkValues = checkSumFunction.call(that.checkSums, that.value); that.checksum = checkValues.join(""); for (var i = 0; i < checkValues.length; i++) { that.checkSumLength++; that.addPattern(that.characterMap[checkValues[i]]); } }, checkSums: { Modulo10: function(value) { var checkValues = [0, ""], odd = value.length % 2, idx, evenSum, oddSum; for (idx = 0; idx < value.length; idx++) { checkValues[(idx + odd) % 2] += parseInt(value.charAt(idx),10); } oddSum = checkValues[0]; evenSum = (checkValues[1] * 2).toString(); for (idx = 0; idx < evenSum.length; idx++) { oddSum += parseInt(evenSum.charAt(idx),10); } return [(10 - (oddSum % 10)) % 10]; }, Modulo11: function(value) { var weightedSum = 0, mod = 11, length = value.length, weight, checkValue; for (var i = 0; i < length; i++) { weight = ((length - i) % 6 || 6) + 1; weightedSum += weight * value.charAt(i); } checkValue = (mod - weightedSum % mod) % mod; if (checkValue != 10) { return [checkValue]; } return [1, 0]; }, Modulo11Modulo10: function(value) { var checkValues = this.Modulo11(value), mod11Value; mod11Value = value + checkValues[0]; return checkValues.concat(this.Modulo10(mod11Value)); }, Modulo10Modulo10: function(value) { var checkValues = this.Modulo10(value), mod10Value; mod10Value = value + checkValues[0]; return checkValues.concat(this.Modulo10(mod10Value)); } }, characterMap: ["12121212", "12121221","12122112", "12122121", "12211212", "12211221", "12212112", "12212121", "21121212", "21121221"], START: "21", STOP: "121", checkSumType: "" }); encodings.msimod10 = msiBase.extend({ name: "MSI Modulo10", checkSumType: "Modulo10" }); encodings.msimod11 = msiBase.extend({ name: "MSI Modulo11", checkSumType: "Modulo11" }); encodings.msimod1110 = msiBase.extend({ name: "MSI Modulo11 Modulo10", checkSumType: "Modulo11Modulo10" }); encodings.msimod1010 = msiBase.extend({ name: "MSI Modulo10 Modulo10", checkSumType: "Modulo10Modulo10" }); encodings.code11 = Encoding.extend({ name: "Code 11", cCheckSumTotal: 10, kCheckSumTotal: 9, kCheckSumMinLength: 10, checkSumMod: 11, DASH_VALUE: 10, DASH: "-", START: "112211", STOP: "11221", initValue: function(value, width) { var that = this; that.pattern = []; that.value = value; that.width = width; that.totalUnits = 0; }, addData: function() { var that = this; var value = that.value; that.addPattern(that.START); for (var i = 0; i < value.length; i++) { that.addCharacter(value.charAt(i)); } if (that.options.addCheckSum) { that.addCheckSum(); } that.addPattern(that.STOP); that.setBaseUnit(); }, setBaseUnit: function() { var that = this; that.baseUnit = that.width / (that.totalUnits + that.quietZoneLength); }, addCheckSum: function() { var that = this, value = that.value, length = value.length, cValue; cValue = that.getWeightedSum(value, length, that.cCheckSumTotal) % that.checkSumMod; that.checksum = cValue + ""; that.addPattern(that.characterMap[cValue]); length++; if (length >= that.kCheckSumMinLength) { var kValue = (cValue + that.getWeightedSum(value, length, that.kCheckSumTotal)) % that.checkSumMod; that.checksum += kValue; that.addPattern(that.characterMap[kValue]); } }, getWeightedSum: function(value, length, total) { var weightedSum = 0; for (var i = 0; i < value.length; i++) { weightedSum += this.weightedValue(this.getValue(value.charAt(i)), length, i, total); } return weightedSum; }, weightedValue: function(value, length, index, total) { var weight = (length - index) % total || total; return weight * value; }, getValue: function(character) { var that = this; if (!isNaN(character)) { return parseInt(character,10); } else if (character !== that.DASH) { that.invalidCharacterError(character); } return that.DASH_VALUE; }, addCharacter: function(character) { var that = this, value = that.getValue(character), pattern = that.characterMap[value]; that.addPattern(pattern); }, addPattern: function(pattern) { var value; for (var i = 0; i < pattern.length; i++) { value = parseInt(pattern.charAt(i),10); this.pattern.push(value); this.totalUnits += value; } }, characterMap: ["111121", "211121", "121121", "221111", "112121", "212111", "122111", "111221", "211211", "211111", "112111"], options: { addCheckSum: true } }); encodings.postnet = Encoding.extend({ name: "Postnet", START: "2", VALID_CODE_LENGTHS: [5,9, 11], DIGIT_SEPARATOR: "-", initValue: function(value, width, height) { var that = this; that.height = height; that.width = width; that.baseHeight = height / 2; that.value = value.replace(new RegExp(that.DIGIT_SEPARATOR,"g"), ""); that.pattern = []; that.validate(that.value); that.checkSum = 0; that.setBaseUnit(); }, addData: function() { var that = this, value = that.value; that.addPattern(that.START); for (var i = 0; i < value.length; i++) { that.addCharacter(value.charAt(i)); } if (that.options.addCheckSum) { that.addCheckSum(); } that.addPattern(that.START); that.pattern.pop(); }, addCharacter: function(character) { var that = this, pattern = that.characterMap[character]; that.checkSum += parseInt(character,10); that.addPattern(pattern); }, addCheckSum: function() { var that = this; that.checks