From a4b7d04e8094c54403a99866800621607ddfc80a Mon Sep 17 00:00:00 2001 From: Andy Edinborough Date: Fri, 28 Dec 2012 12:33:57 -0600 Subject: [PATCH] move parseBackgroundImage to Util; add tests --- src/Core.js | 20 +++++++++++++++++ src/Preload.js | 21 +----------------- tests/qunit/unit/css.js | 48 +++++++++++++++++++++++++++++++++++++++++ 3 files changed, 69 insertions(+), 20 deletions(-) diff --git a/src/Core.js b/src/Core.js index a5b4356..7c432d2 100644 --- a/src/Core.js +++ b/src/Core.js @@ -31,6 +31,26 @@ _html2canvas.Util.backgroundImage = function (src) { return src; }; +_html2canvas.Util.parseBackgroundImage = function (value) { + var rxBackgroundImage = /([a-z\-]+)\((("[^"]+)|([^)]+))\)/i, + match, results = [], n = 0; + if(!value) { return results; } + + while( n++ < 100 && !!(match = value.match(rxBackgroundImage)) ) { + var def = match[2]; + if(def.substr( 0, 1 ) === '"') { + def = def.substr(1, def.length-2); + } + results.push({ + method: match[1], + definition: def, + value: match[0] + }); + value = value.replace( match[0], '' ); + } + return results; +}; + _html2canvas.Util.Bounds = function getBounds (el) { var clientRect, bounds = {}; diff --git a/src/Preload.js b/src/Preload.js index 5335387..ab63085 100644 --- a/src/Preload.js +++ b/src/Preload.js @@ -124,7 +124,7 @@ _html2canvas.Preload = function( options ) { h2clog("html2canvas: failed to get background-image - Exception: " + e.message); } - background_images = parseBackgroundImage(background_image); + background_images = _html2canvas.Util.parseBackgroundImage(background_image); while(!!(background_image = background_images.shift())) { if ( background_image.value && background_image.value !== "1" && background_image.value !== "none" ) { @@ -153,25 +153,6 @@ _html2canvas.Preload = function( options ) { } } - function parseBackgroundImage(value) { - var rxBackgroundImage = /([a-z\-]+)\((("[^"]+)|([^)]+))\)/i, - match, results = [], n = 0; - if(!value) { return results; } - while(n++ < 100 && !!(match = value.match(rxBackgroundImage))) { - var def = match[2]; - if(def.substr( 0, 1 ) === '"') { - def = def.substr(1, def.length-2); - } - results.push( { - method: match[1], - definition: def, - value: match[0] - } ); - value = value.replace( match[0], '' ); - } - return results; - } - function setImageLoadHandlers(img, imageObj) { img.onload = function() { if ( imageObj.timer !== undefined ) { diff --git a/tests/qunit/unit/css.js b/tests/qunit/unit/css.js index a146bb4..17ad3b6 100644 --- a/tests/qunit/unit/css.js +++ b/tests/qunit/unit/css.js @@ -145,6 +145,54 @@ $(function() { }); }); + test('background-image', function () { + test_parse_background_image( + 'url(test)', + { method: 'url', definition: 'test', value: 'url(test)' }, + 'basic url' + ); + + test_parse_background_image( + 'url("test")', + { method: 'url', definition: 'test', value: 'url("test")' }, + 'quoted url' + ); + + test_parse_background_image( + 'url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)', + { + method: 'url', + definition: 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7', + value: 'url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)' + }, + 'data url' + ); + + test_parse_background_image( + 'linear-gradient(red,black)', + { method: 'linear-gradient', definition: 'red,black', value: 'linear-gradient(red,black)' }, + 'linear-gradient' + ); + + test_parse_background_image( + 'linear-gradient(red,black), url(test), url("test")', [ + { method: 'linear-gradient', definition: 'red,black', value: 'linear-gradient(red,black)' }, + { method: 'url', definition: 'test', value: 'url(test)' }, + { method: 'url', definition: 'test', value: 'url("test")' } + ], + 'multiple backgrounds' + ); + + }); + + function test_parse_background_image(value, expected, name) { + deepEqual( + _html2canvas.Util.parseBackgroundImage(value), + Array.isArray(expected) ? expected : [expected], + name + ); + } + // TODO add backgroundPosition % tests }); \ No newline at end of file