diff --git a/Gruntfile.js b/Gruntfile.js index f833fc6..83162e1 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -21,7 +21,7 @@ module.exports = function (grunt) { uglify: { options: { preserveComments: 'some' - }, + }, dist: { src: '<%= pkg.name %>.js', dest: '<%= pkg.name %>.min.js' diff --git a/README.md b/README.md index a08c2bc..cdc7cfe 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# angular-qr v0.1.0 [![Build Status](https://travis-ci.org/janantala/angular-qr.png?branch=master)](https://travis-ci.org/janantala/angular-qr) +# angular-qr v0.1.1 [![Build Status](https://travis-ci.org/janantala/angular-qr.png?branch=master)](https://travis-ci.org/janantala/angular-qr) QR code generator for AngularJS @@ -52,13 +52,13 @@ Your text to encode #### type-number - 1-40 -- default value: minimal required version +- default value: `0` = minimal required version #### correction-level -- L -- M (default) -- Q -- H +- `L` - Low +- `M` - Medium (default) +- `Q` - Quartile +- `H` - High #### size Size in pixels diff --git a/angular-qr.js b/angular-qr.js index e9edc71..9c29780 100644 --- a/angular-qr.js +++ b/angular-qr.js @@ -1,3 +1,9 @@ +/*! + * angular-qr v0.1.1 + * (c) 2013 Jan Antala http://janantala.com + * License: MIT + */ + (function (QRCode) { 'use strict'; angular.module('ja.qr', []).controller('QrCtrl', [ @@ -23,11 +29,11 @@ return $scope.size || 250; }; $scope.isNUMBER = function (text) { - var ALLOWEDCHARS = /^[0123456789]*$/; + var ALLOWEDCHARS = /^[0-9]*$/; return ALLOWEDCHARS.test(text); }; $scope.isALPHA_NUM = function (text) { - var ALLOWEDCHARS = /^[0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:]*$/; + var ALLOWEDCHARS = /^[0-9A-Z $%*+\-./:]*$/; return ALLOWEDCHARS.test(text); }; $scope.is8bit = function (text) { diff --git a/angular-qr.min.js b/angular-qr.min.js index df54508..752f5c0 100644 --- a/angular-qr.min.js +++ b/angular-qr.min.js @@ -1 +1,7 @@ -!function(a){"use strict";angular.module("ja.qr",[]).controller("QrCtrl",["$scope",function(a){a.getTypeNumeber=function(){return a.typeNumber||0},a.getCorrection=function(){var b={L:1,M:0,Q:3,H:2},c=a.correctionLevel||0;return b[c]||0},a.getText=function(){return a.text||""},a.getSize=function(){return a.size||250},a.isNUMBER=function(a){var b=/^[0123456789]*$/;return b.test(a)},a.isALPHA_NUM=function(a){var b=/^[0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:]*$/;return b.test(a)},a.is8bit=function(a){for(var b=0;b256)return!1}return!0},a.checkInputMode=function(b,c){if("NUMBER"===b&&!a.isNUMBER(c))throw new Error("The `NUMBER` input mode is invalid for text.");if("ALPHA_NUM"===b&&!a.isALPHA_NUM(c))throw new Error("The `ALPHA_NUM` input mode is invalid for text.");if("8bit"===b&&!a.is8bit(c))throw new Error("The `8bit` input mode is invalid for text.");if(!a.is8bit(c))throw new Error("Input mode is invalid for text.");return!0},a.getInputMode=function(b){var c=a.inputMode;return c=c||(a.isNUMBER(b)?"NUMBER":void 0),c=c||(a.isALPHA_NUM(b)?"ALPHA_NUM":void 0),c=c||(a.is8bit(b)?"8bit":""),a.checkInputMode(c,b)?c:""}}]).directive("qr",["$timeout","$window",function(b,c){return{restrict:"E",template:"",scope:{typeNumber:"=",correctionLevel:"=",inputMode:"=",size:"=",text:"="},controller:"QrCtrl",link:function(d,e){if(void 0===d.text)throw new Error("The `text` attribute is required.");var f=e.find("canvas")[0],g=!!c.CanvasRenderingContext2D;d.TYPE_NUMBER=d.getTypeNumeber(),d.TEXT=d.getText(),d.CORRECTION=d.getCorrection(),d.SIZE=d.getSize(),d.INPUT_MODE=d.getInputMode(d.TEXT);var h=function(a,b,c,d){for(var e=0;c>e;e++)for(var f=0;c>f;f++){var g=Math.ceil((f+1)*d)-Math.floor(f*d),h=Math.ceil((e+1)*d)-Math.floor(e*d);a.fillStyle=b.isDark(e,f)?"#000":"#fff",a.fillRect(Math.round(f*d),Math.round(e*d),g,h)}},i=function(b,c,d,e,f,i){var j=/^\s+|\s+$/g,k=c.replace(j,""),l=new a(d,e,i);l.addData(k),l.make();var m=b.getContext("2d"),n=l.getModuleCount(),o=f/n;b.width=b.height=f,g&&h(m,l,n,o)};i(f,d.TEXT,d.TYPE_NUMBER,d.CORRECTION,d.SIZE,d.INPUT_MODE),b(function(){d.$watch("text",function(a,b){a!==b&&(d.TEXT=d.getText(),d.INPUT_MODE=d.getInputMode(d.TEXT),i(f,d.TEXT,d.TYPE_NUMBER,d.CORRECTION,d.SIZE,d.INPUT_MODE))}),d.$watch("correctionLevel",function(a,b){a!==b&&(d.CORRECTION=d.getCorrection(),i(f,d.TEXT,d.TYPE_NUMBER,d.CORRECTION,d.SIZE,d.INPUT_MODE))}),d.$watch("typeNumber",function(a,b){a!==b&&(d.TYPE_NUMBER=d.getTypeNumeber(),i(f,d.TEXT,d.TYPE_NUMBER,d.CORRECTION,d.SIZE,d.INPUT_MODE))}),d.$watch("size",function(a,b){a!==b&&(d.SIZE=d.getSize(),i(f,d.TEXT,d.TYPE_NUMBER,d.CORRECTION,d.SIZE,d.INPUT_MODE))}),d.$watch("inputMode",function(a,b){a!==b&&(d.INPUT_MODE=d.getInputMode(d.TEXT),i(f,d.TEXT,d.TYPE_NUMBER,d.CORRECTION,d.SIZE,d.INPUT_MODE))})})}}}])}(window.QRCode); \ No newline at end of file +/*! + * angular-qr v0.1.1 + * (c) 2013 Jan Antala http://janantala.com + * License: MIT + */ + +!function(a){"use strict";angular.module("ja.qr",[]).controller("QrCtrl",["$scope",function(a){a.getTypeNumeber=function(){return a.typeNumber||0},a.getCorrection=function(){var b={L:1,M:0,Q:3,H:2},c=a.correctionLevel||0;return b[c]||0},a.getText=function(){return a.text||""},a.getSize=function(){return a.size||250},a.isNUMBER=function(a){var b=/^[0-9]*$/;return b.test(a)},a.isALPHA_NUM=function(a){var b=/^[0-9A-Z $%*+\-./:]*$/;return b.test(a)},a.is8bit=function(a){for(var b=0;b256)return!1}return!0},a.checkInputMode=function(b,c){if("NUMBER"===b&&!a.isNUMBER(c))throw new Error("The `NUMBER` input mode is invalid for text.");if("ALPHA_NUM"===b&&!a.isALPHA_NUM(c))throw new Error("The `ALPHA_NUM` input mode is invalid for text.");if("8bit"===b&&!a.is8bit(c))throw new Error("The `8bit` input mode is invalid for text.");if(!a.is8bit(c))throw new Error("Input mode is invalid for text.");return!0},a.getInputMode=function(b){var c=a.inputMode;return c=c||(a.isNUMBER(b)?"NUMBER":void 0),c=c||(a.isALPHA_NUM(b)?"ALPHA_NUM":void 0),c=c||(a.is8bit(b)?"8bit":""),a.checkInputMode(c,b)?c:""}}]).directive("qr",["$timeout","$window",function(b,c){return{restrict:"E",template:"",scope:{typeNumber:"=",correctionLevel:"=",inputMode:"=",size:"=",text:"="},controller:"QrCtrl",link:function(d,e){if(void 0===d.text)throw new Error("The `text` attribute is required.");var f=e.find("canvas")[0],g=!!c.CanvasRenderingContext2D;d.TYPE_NUMBER=d.getTypeNumeber(),d.TEXT=d.getText(),d.CORRECTION=d.getCorrection(),d.SIZE=d.getSize(),d.INPUT_MODE=d.getInputMode(d.TEXT);var h=function(a,b,c,d){for(var e=0;c>e;e++)for(var f=0;c>f;f++){var g=Math.ceil((f+1)*d)-Math.floor(f*d),h=Math.ceil((e+1)*d)-Math.floor(e*d);a.fillStyle=b.isDark(e,f)?"#000":"#fff",a.fillRect(Math.round(f*d),Math.round(e*d),g,h)}},i=function(b,c,d,e,f,i){var j=/^\s+|\s+$/g,k=c.replace(j,""),l=new a(d,e,i);l.addData(k),l.make();var m=b.getContext("2d"),n=l.getModuleCount(),o=f/n;b.width=b.height=f,g&&h(m,l,n,o)};i(f,d.TEXT,d.TYPE_NUMBER,d.CORRECTION,d.SIZE,d.INPUT_MODE),b(function(){d.$watch("text",function(a,b){a!==b&&(d.TEXT=d.getText(),d.INPUT_MODE=d.getInputMode(d.TEXT),i(f,d.TEXT,d.TYPE_NUMBER,d.CORRECTION,d.SIZE,d.INPUT_MODE))}),d.$watch("correctionLevel",function(a,b){a!==b&&(d.CORRECTION=d.getCorrection(),i(f,d.TEXT,d.TYPE_NUMBER,d.CORRECTION,d.SIZE,d.INPUT_MODE))}),d.$watch("typeNumber",function(a,b){a!==b&&(d.TYPE_NUMBER=d.getTypeNumeber(),i(f,d.TEXT,d.TYPE_NUMBER,d.CORRECTION,d.SIZE,d.INPUT_MODE))}),d.$watch("size",function(a,b){a!==b&&(d.SIZE=d.getSize(),i(f,d.TEXT,d.TYPE_NUMBER,d.CORRECTION,d.SIZE,d.INPUT_MODE))}),d.$watch("inputMode",function(a,b){a!==b&&(d.INPUT_MODE=d.getInputMode(d.TEXT),i(f,d.TEXT,d.TYPE_NUMBER,d.CORRECTION,d.SIZE,d.INPUT_MODE))})})}}}])}(window.QRCode); \ No newline at end of file diff --git a/bower.json b/bower.json index c363c78..c723df8 100644 --- a/bower.json +++ b/bower.json @@ -1,6 +1,6 @@ { "name": "angular-qr", - "version": "0.1.0", + "version": "0.1.1", "description": "QR code generator for AngularJS", "author": "https://github.com/janantala/angular-qr/graphs/contributors", "license": "MIT", diff --git a/package.json b/package.json index b19959b..2d00060 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "angular-qr", - "version": "0.1.0", + "version": "0.1.1", "description": "QR code generator for AngularJS", "author": "https://github.com/janantala/angular-qr/graphs/contributors", "license": "MIT", diff --git a/src/angular-qr.js b/src/angular-qr.js index 6252cdf..f01aa92 100644 --- a/src/angular-qr.js +++ b/src/angular-qr.js @@ -1,5 +1,5 @@ -/* - * angular-qr v0.1.0 +/*! + * angular-qr v0.1.1 * (c) 2013 Jan Antala http://janantala.com * License: MIT */ @@ -34,12 +34,12 @@ }; $scope.isNUMBER = function(text){ - var ALLOWEDCHARS = /^[0123456789]*$/; + var ALLOWEDCHARS = /^[0-9]*$/; return ALLOWEDCHARS.test(text); }; $scope.isALPHA_NUM = function(text){ - var ALLOWEDCHARS = /^[0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:]*$/; + var ALLOWEDCHARS = /^[0-9A-Z $%*+\-./:]*$/; return ALLOWEDCHARS.test(text); }; diff --git a/test/unit.spec.js b/test/unit.spec.js index dc19ae1..953e88e 100644 --- a/test/unit.spec.js +++ b/test/unit.spec.js @@ -67,6 +67,10 @@ describe('ja.qr', function() { expect(scope.getInputMode('aA123')).not.toBe('NUMBER'); expect(scope.getInputMode('aA123')).not.toBe('ALPHA_NUM'); expect(scope.getInputMode('aA123')).toBe('8bit'); + + expect(scope.getInputMode('A,123')).not.toBe('NUMBER'); + expect(scope.getInputMode('A,123')).not.toBe('ALPHA_NUM'); + expect(scope.getInputMode('A,123')).toBe('8bit'); }); });