diff --git a/src/Core.js b/src/Core.js index 7c432d2..3f269cd 100644 --- a/src/Core.js +++ b/src/Core.js @@ -37,16 +37,24 @@ _html2canvas.Util.parseBackgroundImage = function (value) { 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], '' ); + var def = match[2], + method = match[1], + prefix = '', i; + if(def.substr( 0, 1 ) === '"') { + def = def.substr( 1, def.length-2 ); + } + if(method.substr( 0, 1 ) === '-' && + (i = method.indexOf( '-', 1 ) + 1) > 0) { + prefix = method.substr( 0, i); + method = method.substr( i ); + } + results.push({ + prefix: prefix, + method: method, + definition: def, + value: match[0] + }); + value = value.replace( match[0], '' ); } return results; }; diff --git a/tests/qunit/unit/css.js b/tests/qunit/unit/css.js index 17ad3b6..2ada42b 100644 --- a/tests/qunit/unit/css.js +++ b/tests/qunit/unit/css.js @@ -148,20 +148,20 @@ $(function() { test('background-image', function () { test_parse_background_image( 'url(test)', - { method: 'url', definition: 'test', value: 'url(test)' }, + { prefix: '', method: 'url', definition: 'test', value: 'url(test)' }, 'basic url' ); test_parse_background_image( 'url("test")', - { method: 'url', definition: 'test', value: 'url("test")' }, + { prefix: '', method: 'url', definition: 'test', value: 'url("test")' }, 'quoted url' ); test_parse_background_image( 'url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)', { - method: 'url', + prefix: '', method: 'url', definition: 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7', value: 'url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)' }, @@ -170,15 +170,21 @@ $(function() { test_parse_background_image( 'linear-gradient(red,black)', - { method: 'linear-gradient', definition: 'red,black', value: 'linear-gradient(red,black)' }, + { prefix: '', method: 'linear-gradient', definition: 'red,black', value: 'linear-gradient(red,black)' }, + 'linear-gradient' + ); + + test_parse_background_image( + '-webkit-linear-gradient(red,black)', + { prefix: '-webkit-', method: 'linear-gradient', definition: 'red,black', value: '-webkit-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")' } + { prefix: '', method: 'linear-gradient', definition: 'red,black', value: 'linear-gradient(red,black)' }, + { prefix: '', method: 'url', definition: 'test', value: 'url(test)' }, + { prefix: '', method: 'url', definition: 'test', value: 'url("test")' } ], 'multiple backgrounds' );