From e82d70328849eef9956ecb571a5f09c032feb963 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Fiedler?= Date: Sun, 4 Mar 2012 19:06:25 +0000 Subject: [PATCH 01/18] "tests: splitted Generate from CSS; if not supported pass test" --- tests/qunit/index.html | 1 + tests/qunit/unit/css.js | 40 ------------------------ tests/qunit/unit/generate.js | 60 ++++++++++++++++++++++++++++++++++++ 3 files changed, 61 insertions(+), 40 deletions(-) create mode 100644 tests/qunit/unit/generate.js diff --git a/tests/qunit/index.html b/tests/qunit/index.html index bd87b61..0c233f4 100644 --- a/tests/qunit/index.html +++ b/tests/qunit/index.html @@ -22,6 +22,7 @@ + @@ -61,6 +93,8 @@
 
 
+
 
+
 
From e479c952f7a7ea2b503118d3d382911622d4ec2c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Fiedler?= Date: Mon, 5 Mar 2012 19:33:52 +0000 Subject: [PATCH 04/18] "added another background gradient to backgrounds.html" --- src/Generate.js | 6 +----- tests/background.html | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/src/Generate.js b/src/Generate.js index f55812b..c6c2a3f 100644 --- a/src/Generate.js +++ b/src/Generate.js @@ -25,9 +25,7 @@ var reGradients = [ // ["-webkit-linear-gradient(left, rgb(206, 219, 233) 0%, rgb(170, 197, 222) 17%, rgb(97, 153, 199) 50%, rgb(58, 132, 195) 51%, rgb(65, 154, 214) 59%, rgb(75, 184, 240) 71%, rgb(58, 139, 194) 84%, rgb(38, 85, 139) 100%)", "-webkit-linear-gradient", "left", ", rgb(206, 219, 233) 0%, rgb(170, 197, 222) 17%, rgb(97, 153, 199) 50%, rgb(58, 132, 195) 51%, rgb(65, 154, 214) 59%, rgb(75, 184, 240) 71%, rgb(58, 139, 194) 84%, rgb(38, 85, 139) 100%"] // ["-webkit-gradient(linear, 0% 0, 0% 100%, from(rgb(252, 252, 252)), to(rgb(232, 232, 232)))", "-webkit-gradient", "linear", "0% 0", "0% 100%", ", from(rgb(252, 252, 252)), to(rgb(232, 232, 232))"] -_html2canvas.Generate.getColorStopsFromGradient = function(css, bounds) { - console.log(css); - +_html2canvas.Generate.getColorStopsFromGradient = function(css, bounds) { var gradient, i, len = reGradients.length, m1, stop, m2, m2Len, step, m3; for(i = 0; i < len; i+=1){ @@ -35,7 +33,6 @@ _html2canvas.Generate.getColorStopsFromGradient = function(css, bounds) { if(m1) break; } - console.log(m1); if(m1) { switch(m1[1]) { case '-webkit-linear-gradient': @@ -94,7 +91,6 @@ _html2canvas.Generate.getColorStopsFromGradient = function(css, bounds) { stop: stop }); } - console.log(gradient); } break; diff --git a/tests/background.html b/tests/background.html index 8b0a184..ce221d9 100644 --- a/tests/background.html +++ b/tests/background.html @@ -86,6 +86,23 @@ /* W3C */ background: linear-gradient(left, #cedbe9 0%, #aac5de 17%, #6199c7 50%, #3a84c3 51%, #419ad6 59%, #4bb8f0 71%, #3a8bc2 84%, #26558b 100%); } + + .linearGradient5 { + /* IE9 SVG */ + background: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjAlIiB5MT0iMCUiIHgyPSIwJSIgeTI9IjEwMCUiPgogICAgPHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2YwYjdhMSIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjUwJSIgc3RvcC1jb2xvcj0iIzhjMzMxMCIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjUxJSIgc3RvcC1jb2xvcj0iIzc1MjIwMSIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiNiZjZlNGUiIHN0b3Atb3BhY2l0eT0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgZmlsbD0idXJsKCNncmFkLXVjZ2ctZ2VuZXJhdGVkKSIgLz4KPC9zdmc+); + /* FF 3.6+ */ + background: -moz-linear-gradient(top, #f0b7a1 0%, #8c3310 50%, #752201 51%, #bf6e4e 100%); + /* Chrome, Safari 4+ */ + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #f0b7a1), color-stop(50%, #8c3310), color-stop(51%, #752201), color-stop(100%, #bf6e4e)); + /* Chrome 10+, Safari 5.1+ */ + background: -webkit-linear-gradient(top, #f0b7a1 0%, #8c3310 50%, #752201 51%, #bf6e4e 100%); + /* Opera 11.10+ */ + background: -o-linear-gradient(top, #f0b7a1 0%, #8c3310 50%, #752201 51%, #bf6e4e 100%); + /* IE 10+ */ + background: -ms-linear-gradient(top, #f0b7a1 0%, #8c3310 50%, #752201 51%, #bf6e4e 100%); + /* W3C */ + background: linear-gradient(top, #f0b7a1 0%, #8c3310 50%, #752201 51%, #bf6e4e 100%); + } @@ -95,6 +112,7 @@
 
 
 
+
 
From ae8d499942e6a2ea2b0d51d11007e677032d73d4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Fiedler?= Date: Mon, 5 Mar 2012 19:37:54 +0000 Subject: [PATCH 05/18] "small bugfix" --- src/Generate.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Generate.js b/src/Generate.js index c6c2a3f..79fedf6 100644 --- a/src/Generate.js +++ b/src/Generate.js @@ -80,7 +80,7 @@ _html2canvas.Generate.getColorStopsFromGradient = function(css, bounds) { m3 = m2[i].match(/((?:rgb|rgba)\(\d{1,3},\s\d{1,3},\s\d{1,3}(?:,\s[0-9\.]+)?\))\s*(\d{1,3})?(%)?/); if(m3[2]){ stop = parseFloat(m3[2]); - if(m3[3]){ //percentage + if(m3[3]){ // percentage stop /= 100; } } else { @@ -115,7 +115,7 @@ _html2canvas.Generate.Gradient = function(src, bounds) { img = new Image(); - if(gradient){ + if(gradient && gradient.type === 'linear'){ lingrad = ctx.createLinearGradient(gradient.x0, gradient.y0, gradient.x1, gradient.y1); for (i = 0, len = gradient.colorStops.length; i < len; i+=1) { From 75ba8679888a1c5df11746e31b39aa54ff41201a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Fiedler?= Date: Mon, 5 Mar 2012 21:04:25 +0000 Subject: [PATCH 06/18] "added tests for getColorStopsFromGradient" --- src/Generate.js | 12 ++--- tests/qunit/unit/generate.js | 98 +++++++++++++++++++++++++++++++++++- 2 files changed, 102 insertions(+), 8 deletions(-) diff --git a/src/Generate.js b/src/Generate.js index 79fedf6..ad7d375 100644 --- a/src/Generate.js +++ b/src/Generate.js @@ -38,12 +38,12 @@ _html2canvas.Generate.getColorStopsFromGradient = function(css, bounds) { case '-webkit-linear-gradient': gradient = { - type: 'linear', - x0: 0, - y0: 0, - x1: 0, - y1: 0, - colorStops: [] + type: 'linear', + x0: 0, + y0: 0, + x1: 0, + y1: 0, + colorStops: [] }; // get coordinates diff --git a/tests/qunit/unit/generate.js b/tests/qunit/unit/generate.js index 78177bf..e11c4f8 100644 --- a/tests/qunit/unit/generate.js +++ b/tests/qunit/unit/generate.js @@ -10,7 +10,101 @@ var test = test || function(){}, $(function() { var propsToTest = {}, - numDivs = {}; + numDivs = {}, + expected = {}; + + propsToTest['Generate.getColorStopsFromGradient'] = ["backgroundImage"]; + numDivs['Generate.getColorStopsFromGradient'] = $('#backgroundGradients div').length; + expected['Generate.getColorStopsFromGradient'] = [ + { + type: 'linear', + x0: 0, + y0: 0, + x1: 50, + y1: 0, + colorStops: [ + { + color: "rgb(255, 0, 0)", + stop: 0 + }, + { + color: "rgb(255, 255, 0)", + stop: 0.5 + }, + { + color: "rgb(0, 255, 0)", + stop: 1 + } + ] + }, + { + type: 'linear', + x0: 0, + y0: 0, + x1: 50, + y1: 0, + colorStops: [ + { + color: "rgb(206, 219, 233)", + stop: 0 + }, + { + color: "rgb(170, 197, 222)", + stop: 0.17 + }, + { + color: "rgb(97, 153, 199)", + stop: 0.5 + }, + { + color: "rgb(58, 132, 195)", + stop: 0.51 + }, + { + color: "rgb(65, 154, 214)", + stop: 0.59 + }, + { + color: "rgb(75, 184, 240)", + stop: 0.71 + }, + { + color: "rgb(58, 139, 194)", + stop: 0.84 + }, + { + color: "rgb(38, 85, 139)", + stop: 1 + } + ] + } + ]; + + test('Generate.getColorStopsFromGradient', propsToTest['Generate.getColorStopsFromGradient'].length * numDivs['Generate.getColorStopsFromGradient'], function() { + + $('#backgroundGradients div').each(function(i, el) { + $.each(propsToTest['Generate.getColorStopsFromGradient'], function(s, prop) { + var src, gradient, exptd; + + src = _html2canvas.Util.getCSS(el, prop); + + if (/^(-webkit|-o|-moz|-ms|linear)-/.test(src)) { + + gradient = _html2canvas.Generate.getColorStopsFromGradient(src, { + width: 50, + height: 50 + }); + + // compare + exptd = expected['Generate.getColorStopsFromGradient'][i]; + + QUnit.deepEqual(gradient, exptd, 'Parsed gradient; got: ' + JSON.stringify(gradient)); + } else { + QUnit.ok(true, 'No CSS Background Gradient support'); + } + }); + }); + }); propsToTest['Generate.Gradient'] = ["backgroundImage"]; @@ -58,5 +152,5 @@ $(function() { } }); }); - }); + }); }); \ No newline at end of file From a4f13de455bac5613c3110acca72181801b1e3fd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Fiedler?= Date: Mon, 5 Mar 2012 22:21:28 +0000 Subject: [PATCH 07/18] "renamed getColorStopsFromGradient to parseGradient" --- src/Generate.js | 4 ++-- tests/qunit/unit/generate.js | 14 +++++++------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/Generate.js b/src/Generate.js index ad7d375..df11a28 100644 --- a/src/Generate.js +++ b/src/Generate.js @@ -25,7 +25,7 @@ var reGradients = [ // ["-webkit-linear-gradient(left, rgb(206, 219, 233) 0%, rgb(170, 197, 222) 17%, rgb(97, 153, 199) 50%, rgb(58, 132, 195) 51%, rgb(65, 154, 214) 59%, rgb(75, 184, 240) 71%, rgb(58, 139, 194) 84%, rgb(38, 85, 139) 100%)", "-webkit-linear-gradient", "left", ", rgb(206, 219, 233) 0%, rgb(170, 197, 222) 17%, rgb(97, 153, 199) 50%, rgb(58, 132, 195) 51%, rgb(65, 154, 214) 59%, rgb(75, 184, 240) 71%, rgb(58, 139, 194) 84%, rgb(38, 85, 139) 100%"] // ["-webkit-gradient(linear, 0% 0, 0% 100%, from(rgb(252, 252, 252)), to(rgb(232, 232, 232)))", "-webkit-gradient", "linear", "0% 0", "0% 100%", ", from(rgb(252, 252, 252)), to(rgb(232, 232, 232))"] -_html2canvas.Generate.getColorStopsFromGradient = function(css, bounds) { +_html2canvas.Generate.parseGradient = function(css, bounds) { var gradient, i, len = reGradients.length, m1, stop, m2, m2Len, step, m3; for(i = 0; i < len; i+=1){ @@ -111,7 +111,7 @@ _html2canvas.Generate.Gradient = function(src, bounds) { canvas.width = bounds.width; canvas.height = bounds.height; - gradient = _html2canvas.Generate.getColorStopsFromGradient(src, bounds); + gradient = _html2canvas.Generate.parseGradient(src, bounds); img = new Image(); diff --git a/tests/qunit/unit/generate.js b/tests/qunit/unit/generate.js index e11c4f8..fce1706 100644 --- a/tests/qunit/unit/generate.js +++ b/tests/qunit/unit/generate.js @@ -13,9 +13,9 @@ $(function() { numDivs = {}, expected = {}; - propsToTest['Generate.getColorStopsFromGradient'] = ["backgroundImage"]; - numDivs['Generate.getColorStopsFromGradient'] = $('#backgroundGradients div').length; - expected['Generate.getColorStopsFromGradient'] = [ + propsToTest['Generate.parseGradient'] = ["backgroundImage"]; + numDivs['Generate.parseGradient'] = $('#backgroundGradients div').length; + expected['Generate.parseGradient'] = [ { type: 'linear', x0: 0, @@ -80,23 +80,23 @@ $(function() { } ]; - test('Generate.getColorStopsFromGradient', propsToTest['Generate.getColorStopsFromGradient'].length * numDivs['Generate.getColorStopsFromGradient'], function() { + test('Generate.parseGradient', propsToTest['Generate.parseGradient'].length * numDivs['Generate.parseGradient'], function() { $('#backgroundGradients div').each(function(i, el) { - $.each(propsToTest['Generate.getColorStopsFromGradient'], function(s, prop) { + $.each(propsToTest['Generate.parseGradient'], function(s, prop) { var src, gradient, exptd; src = _html2canvas.Util.getCSS(el, prop); if (/^(-webkit|-o|-moz|-ms|linear)-/.test(src)) { - gradient = _html2canvas.Generate.getColorStopsFromGradient(src, { + gradient = _html2canvas.Generate.parseGradient(src, { width: 50, height: 50 }); // compare - exptd = expected['Generate.getColorStopsFromGradient'][i]; + exptd = expected['Generate.parseGradient'][i]; QUnit.deepEqual(gradient, exptd, 'Parsed gradient; got: ' + JSON.stringify(gradient)); } else { From 163219b656db84032c1e25fe7a71a7254969f7f9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Fiedler?= Date: Mon, 5 Mar 2012 23:03:36 +0000 Subject: [PATCH 08/18] "added -webkit-gradient parsing + tests" --- src/Generate.js | 39 ++++++++++++++++++++++++++++++++++-- tests/qunit/index.html | 15 ++++++++++++++ tests/qunit/unit/generate.js | 25 +++++++++++++++++++++++ 3 files changed, 77 insertions(+), 2 deletions(-) diff --git a/src/Generate.js b/src/Generate.js index df11a28..e23d1f8 100644 --- a/src/Generate.js +++ b/src/Generate.js @@ -14,16 +14,18 @@ _html2canvas.Generate = {}; // -webkit-linear-gradient(left top, rgb(255, 0, 0), rgb(0, 0, 255), rgb(186, 218, 85), rgba(0, 0, 255, 0.496094)) // -webkit-linear-gradient(left, rgb(206, 219, 233) 0%, rgb(170, 197, 222) 17%, rgb(97, 153, 199) 50%, rgb(58, 132, 195) 51%, rgb(65, 154, 214) 59%, rgb(75, 184, 240) 71%, rgb(58, 139, 194) 84%, rgb(38, 85, 139) 100%) // -webkit-gradient(linear, 0% 0, 0% 100%, from(rgb(252, 252, 252)), to(rgb(232, 232, 232))) +// -webkit-gradient(linear, 0% 0%, 0% 100%, from(rgb(240, 183, 161)), color-stop(0.5, rgb(140, 51, 16)), color-stop(0.51, rgb(117, 34, 1)), to(rgb(191, 110, 78))) // -moz-linear-gradient(100% 0%, rgb(255, 0, 0), rgb(0, 0, 255), rgb(186, 218, 85), rgba(0, 0, 255, 0.5)) var reGradients = [ /^(-webkit-linear-gradient)\(([a-z\s]+)((?:,\s(?:rgb|rgba)\(\d{1,3},\s\d{1,3},\s\d{1,3}(?:,\s[0-9\.]+)?\)(?:\s\d{1,3}%)?)+)\)$/, - /^(-webkit-gradient)\((linear|radial),\s((?:[a-z]+|\d{1,3}%?)\s(?:[a-z]+|\d{1,3}%?)),\s((?:[a-z]+|\d{1,3}%?)\s(?:[a-z]+|\d{1,3}%?))((?:,\s(?:from|to|color-stop)\((?:[0-9\.]+,\s)?(?:rgb|rgba)\(\d{1,3},\s\d{1,3},\s\d{1,3}(?:,\s[0-9\.]+)?\)\))+)\)$/ + /^(-webkit-gradient)\((linear|radial),\s((?:\d{1,3}%?)\s(?:\d{1,3}%?),\s(?:\d{1,3}%?)\s(?:\d{1,3}%?))((?:,\s(?:from|to|color-stop)\((?:[0-9\.]+,\s)?(?:rgb|rgba)\(\d{1,3},\s\d{1,3},\s\d{1,3}(?:,\s[0-9\.]+)?\)\))+)\)$/ ]; // ["-webkit-linear-gradient(left top, rgb(255, 0, 0), rgb(0, 0, 255), rgb(186, 218, 85), rgba(0, 0, 255, 0.496094))", "-webkit-linear-gradient", "left top", ", rgb(255, 0, 0), rgb(0, 0, 255), rgb(186, 218, 85), rgba(0, 0, 255, 0.496094)"] // ["-webkit-linear-gradient(left, rgb(206, 219, 233) 0%, rgb(170, 197, 222) 17%, rgb(97, 153, 199) 50%, rgb(58, 132, 195) 51%, rgb(65, 154, 214) 59%, rgb(75, 184, 240) 71%, rgb(58, 139, 194) 84%, rgb(38, 85, 139) 100%)", "-webkit-linear-gradient", "left", ", rgb(206, 219, 233) 0%, rgb(170, 197, 222) 17%, rgb(97, 153, 199) 50%, rgb(58, 132, 195) 51%, rgb(65, 154, 214) 59%, rgb(75, 184, 240) 71%, rgb(58, 139, 194) 84%, rgb(38, 85, 139) 100%"] // ["-webkit-gradient(linear, 0% 0, 0% 100%, from(rgb(252, 252, 252)), to(rgb(232, 232, 232)))", "-webkit-gradient", "linear", "0% 0", "0% 100%", ", from(rgb(252, 252, 252)), to(rgb(232, 232, 232))"] +// ["-webkit-gradient(linear, 0% 0%, 0% 100%, from(rgb(240, 183, 161)), color-stop(0.5, rgb(140, 51, 16)), color-stop(0.51, rgb(117, 34, 1)), to(rgb(191, 110, 78)))", "-webkit-gradient", "linear", "0% 0%, 0% 100%", ", from(rgb(240, 183, 161)), color-stop(0.5, rgb(140, 51, 16)), color-stop(0.51, rgb(117, 34, 1)), to(rgb(191, 110, 78))"] _html2canvas.Generate.parseGradient = function(css, bounds) { var gradient, i, len = reGradients.length, m1, stop, m2, m2Len, step, m3; @@ -95,7 +97,40 @@ _html2canvas.Generate.parseGradient = function(css, bounds) { break; case '-webkit-gradient': - // stop = m2[1] == 'from' ? 0.0 : 1.0; + + gradient = { + type: m1[2], + x0: 0, + y0: 0, + x1: 0, + y1: 0, + colorStops: [] + }; + + // get coordinates + m2 = m1[3].match(/(\d{1,3})%?\s(\d{1,3})%?,\s(\d{1,3})%?\s(\d{1,3})%?/); + if(m2){ + gradient.x0 = (m2[1] * bounds.width) / 100; + gradient.y0 = (m2[2] * bounds.height) / 100; + gradient.x1 = (m2[3] * bounds.width) / 100; + gradient.y1 = (m2[4] * bounds.height) / 100; + } + + // get colors and stops + m2 = m1[4].match(/((?:from|to|color-stop)\((?:[0-9\.]+,\s)?(?:rgb|rgba)\(\d{1,3},\s\d{1,3},\s\d{1,3}(?:,\s[0-9\.]+)?\)\))+/g); + if(m2){ + m2Len = m2.length; + for(i = 0; i < m2Len; i+=1){ + m3 = m2[i].match(/(from|to|color-stop)\(([0-9\.]+)?(?:,\s)?((?:rgb|rgba)\(\d{1,3},\s\d{1,3},\s\d{1,3}(?:,\s[0-9\.]+)?\))\)/); + stop = parseFloat(m3[2]); + if(m3[1] === 'from') stop = 0.0; + if(m3[1] === 'to') stop = 1.0; + gradient.colorStops.push({ + color: m3[3], + stop: stop + }); + } + } break; } } diff --git a/tests/qunit/index.html b/tests/qunit/index.html index c9a844c..57604e5 100644 --- a/tests/qunit/index.html +++ b/tests/qunit/index.html @@ -121,10 +121,25 @@ /* W3C */ background: linear-gradient(left, #cedbe9 0%, #aac5de 17%, #6199c7 50%, #3a84c3 51%, #419ad6 59%, #4bb8f0 71%, #3a8bc2 84%, #26558b 100%); } + .linearGradient3 { + /* IE9 SVG */ + background: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjAlIiB5MT0iMCUiIHgyPSIwJSIgeTI9IjEwMCUiPgogICAgPHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2YwYjdhMSIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjUwJSIgc3RvcC1jb2xvcj0iIzhjMzMxMCIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjUxJSIgc3RvcC1jb2xvcj0iIzc1MjIwMSIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiNiZjZlNGUiIHN0b3Atb3BhY2l0eT0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgZmlsbD0idXJsKCNncmFkLXVjZ2ctZ2VuZXJhdGVkKSIgLz4KPC9zdmc+); + /* FF 3.6+ */ + background: -moz-linear-gradient(top, #f0b7a1 0%, #8c3310 50%, #752201 51%, #bf6e4e 100%); + /* Chrome, Safari 4+ */ + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #f0b7a1), color-stop(50%, #8c3310), color-stop(51%, #752201), color-stop(100%, #bf6e4e)); + /* Opera 11.10+ */ + background: -o-linear-gradient(top, #f0b7a1 0%, #8c3310 50%, #752201 51%, #bf6e4e 100%); + /* IE 10+ */ + background: -ms-linear-gradient(top, #f0b7a1 0%, #8c3310 50%, #752201 51%, #bf6e4e 100%); + /* W3C */ + background: linear-gradient(top, #f0b7a1 0%, #8c3310 50%, #752201 51%, #bf6e4e 100%); + }
+