'use strict';
|
|
var _barcodes = require('./barcodes/');
|
|
var _barcodes2 = _interopRequireDefault(_barcodes);
|
|
var _merge = require('./help/merge.js');
|
|
var _merge2 = _interopRequireDefault(_merge);
|
|
var _linearizeEncodings = require('./help/linearizeEncodings.js');
|
|
var _linearizeEncodings2 = _interopRequireDefault(_linearizeEncodings);
|
|
var _fixOptions = require('./help/fixOptions.js');
|
|
var _fixOptions2 = _interopRequireDefault(_fixOptions);
|
|
var _getRenderProperties = require('./help/getRenderProperties.js');
|
|
var _getRenderProperties2 = _interopRequireDefault(_getRenderProperties);
|
|
var _optionsFromStrings = require('./help/optionsFromStrings.js');
|
|
var _optionsFromStrings2 = _interopRequireDefault(_optionsFromStrings);
|
|
var _ErrorHandler = require('./exceptions/ErrorHandler.js');
|
|
var _ErrorHandler2 = _interopRequireDefault(_ErrorHandler);
|
|
var _exceptions = require('./exceptions/exceptions.js');
|
|
var _defaults = require('./options/defaults.js');
|
|
var _defaults2 = _interopRequireDefault(_defaults);
|
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
// The protype of the object returned from the JsBarcode() call
|
|
|
// Help functions
|
var API = function API() {};
|
|
// The first call of the library API
|
// Will return an object with all barcodes calls and the data that is used
|
// by the renderers
|
|
|
// Default values
|
|
|
// Exceptions
|
// Import all the barcodes
|
var JsBarcode = function JsBarcode(element, text, options) {
|
var api = new API();
|
|
if (typeof element === "undefined") {
|
throw Error("No element to render on was provided.");
|
}
|
|
// Variables that will be pased through the API calls
|
api._renderProperties = (0, _getRenderProperties2.default)(element);
|
api._encodings = [];
|
api._options = _defaults2.default;
|
api._errorHandler = new _ErrorHandler2.default(api);
|
|
// If text is set, use the simple syntax (render the barcode directly)
|
if (typeof text !== "undefined") {
|
options = options || {};
|
|
if (!options.format) {
|
options.format = autoSelectBarcode();
|
}
|
|
api.options(options)[options.format](text, options).render();
|
}
|
|
return api;
|
};
|
|
// To make tests work TODO: remove
|
JsBarcode.getModule = function (name) {
|
return _barcodes2.default[name];
|
};
|
|
// Register all barcodes
|
for (var name in _barcodes2.default) {
|
if (_barcodes2.default.hasOwnProperty(name)) {
|
// Security check if the propery is a prototype property
|
registerBarcode(_barcodes2.default, name);
|
}
|
}
|
function registerBarcode(barcodes, name) {
|
API.prototype[name] = API.prototype[name.toUpperCase()] = API.prototype[name.toLowerCase()] = function (text, options) {
|
var api = this;
|
return api._errorHandler.wrapBarcodeCall(function () {
|
// Ensure text is options.text
|
options.text = typeof options.text === 'undefined' ? undefined : '' + options.text;
|
|
var newOptions = (0, _merge2.default)(api._options, options);
|
newOptions = (0, _optionsFromStrings2.default)(newOptions);
|
var Encoder = barcodes[name];
|
var encoded = encode(text, Encoder, newOptions);
|
api._encodings.push(encoded);
|
|
return api;
|
});
|
};
|
}
|
|
// encode() handles the Encoder call and builds the binary string to be rendered
|
function encode(text, Encoder, options) {
|
// Ensure that text is a string
|
text = "" + text;
|
|
var encoder = new Encoder(text, options);
|
|
// If the input is not valid for the encoder, throw error.
|
// If the valid callback option is set, call it instead of throwing error
|
if (!encoder.valid()) {
|
throw new _exceptions.InvalidInputException(encoder.constructor.name, text);
|
}
|
|
// Make a request for the binary data (and other infromation) that should be rendered
|
var encoded = encoder.encode();
|
|
// Encodings can be nestled like [[1-1, 1-2], 2, [3-1, 3-2]
|
// Convert to [1-1, 1-2, 2, 3-1, 3-2]
|
encoded = (0, _linearizeEncodings2.default)(encoded);
|
|
// Merge
|
for (var i = 0; i < encoded.length; i++) {
|
encoded[i].options = (0, _merge2.default)(options, encoded[i].options);
|
}
|
|
return encoded;
|
}
|
|
function autoSelectBarcode() {
|
// If CODE128 exists. Use it
|
if (_barcodes2.default["CODE128"]) {
|
return "CODE128";
|
}
|
|
// Else, take the first (probably only) barcode
|
return Object.keys(_barcodes2.default)[0];
|
}
|
|
// Sets global encoder options
|
// Added to the api by the JsBarcode function
|
API.prototype.options = function (options) {
|
this._options = (0, _merge2.default)(this._options, options);
|
return this;
|
};
|
|
// Will create a blank space (usually in between barcodes)
|
API.prototype.blank = function (size) {
|
var zeroes = new Array(size + 1).join("0");
|
this._encodings.push({ data: zeroes });
|
return this;
|
};
|
|
// Initialize JsBarcode on all HTML elements defined.
|
API.prototype.init = function () {
|
// Should do nothing if no elements where found
|
if (!this._renderProperties) {
|
return;
|
}
|
|
// Make sure renderProperies is an array
|
if (!Array.isArray(this._renderProperties)) {
|
this._renderProperties = [this._renderProperties];
|
}
|
|
var renderProperty;
|
for (var i in this._renderProperties) {
|
renderProperty = this._renderProperties[i];
|
var options = (0, _merge2.default)(this._options, renderProperty.options);
|
|
if (options.format == "auto") {
|
options.format = autoSelectBarcode();
|
}
|
|
this._errorHandler.wrapBarcodeCall(function () {
|
var text = options.value;
|
var Encoder = _barcodes2.default[options.format.toUpperCase()];
|
var encoded = encode(text, Encoder, options);
|
|
render(renderProperty, encoded, options);
|
});
|
}
|
};
|
|
// The render API call. Calls the real render function.
|
API.prototype.render = function () {
|
if (!this._renderProperties) {
|
throw new _exceptions.NoElementException();
|
}
|
|
if (Array.isArray(this._renderProperties)) {
|
for (var i = 0; i < this._renderProperties.length; i++) {
|
render(this._renderProperties[i], this._encodings, this._options);
|
}
|
} else {
|
render(this._renderProperties, this._encodings, this._options);
|
}
|
|
return this;
|
};
|
|
API.prototype._defaults = _defaults2.default;
|
|
// Prepares the encodings and calls the renderer
|
function render(renderProperties, encodings, options) {
|
encodings = (0, _linearizeEncodings2.default)(encodings);
|
|
for (var i = 0; i < encodings.length; i++) {
|
encodings[i].options = (0, _merge2.default)(options, encodings[i].options);
|
(0, _fixOptions2.default)(encodings[i].options);
|
}
|
|
(0, _fixOptions2.default)(options);
|
|
var Renderer = renderProperties.renderer;
|
var renderer = new Renderer(renderProperties.element, encodings, options);
|
renderer.render();
|
|
if (renderProperties.afterRender) {
|
renderProperties.afterRender();
|
}
|
}
|
|
// Export to browser
|
if (typeof window !== "undefined") {
|
window.JsBarcode = JsBarcode;
|
}
|
|
// Export to jQuery
|
/*global jQuery */
|
if (typeof jQuery !== 'undefined') {
|
jQuery.fn.JsBarcode = function (content, options) {
|
var elementArray = [];
|
jQuery(this).each(function () {
|
elementArray.push(this);
|
});
|
return JsBarcode(elementArray, content, options);
|
};
|
}
|
|
// Export to commonJS
|
module.exports = JsBarcode;
|