diff --git a/src/util/misc.js b/src/util/misc.js index 15766eed..08a1ad83 100644 --- a/src/util/misc.js +++ b/src/util/misc.js @@ -1,4 +1,4 @@ -(function() { +(function(global) { var sqrt = Math.sqrt, atan2 = Math.atan2; @@ -112,7 +112,9 @@ * @return {Object} klass "Class" */ function getKlass(type, namespace) { - return resolveNamespace(namespace)[fabric.util.string.camelize(fabric.util.string.capitalize(type))]; + // capitalize first letter only + type = fabric.util.string.camelize(type.charAt(0).toUpperCase() + type.slice(1)); + return resolveNamespace(namespace)[type]; } /** @@ -126,7 +128,7 @@ var parts = namespace.split('.'), len = parts.length, - obj = fabric.window; + obj = global || fabric.window; for (var i = 0; i < len; ++i) { obj = obj[parts[i]]; @@ -533,4 +535,4 @@ fabric.util.getFunctionBody = getFunctionBody; fabric.util.drawArc = drawArc; -})(); +})(typeof exports !== 'undefined' ? exports : this); diff --git a/test/unit/util.js b/test/unit/util.js index afd41d75..913e14f5 100644 --- a/test/unit/util.js +++ b/test/unit/util.js @@ -745,4 +745,17 @@ '\n if (1) { alert(12345) } '); }); + test('getKlass', function() { + equal(fabric.util.getKlass('circle'), fabric.Circle); + equal(fabric.util.getKlass('rect'), fabric.Rect); + equal(fabric.util.getKlass('RemoveWhite', 'fabric.Image.filters'), fabric.Image.filters.RemoveWhite); + equal(fabric.util.getKlass('Sepia2', 'fabric.Image.filters'), fabric.Image.filters.Sepia2); + }); + + test('resolveNamespace', function() { + equal(fabric.util.resolveNamespace('fabric'), fabric); + equal(fabric.util.resolveNamespace('fabric.Image'), fabric.Image); + equal(fabric.util.resolveNamespace('fabric.Image.filters'), fabric.Image.filters); + }); + })();