|
6 | 6 | /* Constants & defaults. */
|
7 | 7 | var DATA_COLOR = 'data-ab-color';
|
8 | 8 | var DATA_PARENT = 'data-ab-parent';
|
| 9 | + var DATA_CSS_BG = 'data-ab-css-background'; |
9 | 10 | var EVENT_CF = 'ab-color-found';
|
10 | 11 |
|
11 | 12 | var DEFAULTS = {
|
12 |
| - selector: 'img[data-adaptive-background="1"]', |
| 13 | + selector: '[data-adaptive-background="1"]', |
13 | 14 | parent: null,
|
14 | 15 | normalizeTextColor: false,
|
15 | 16 | normalizedTextColors: {
|
|
20 | 21 |
|
21 | 22 | // Include RGBaster - https://github.com/briangonzalez/rgbaster.js
|
22 | 23 | /* jshint ignore:start */
|
23 |
| - !function(a){"use strict";var b=function(){return document.createElement("canvas").getContext("2d")},c=function(a,c){var d=new Image;"data:"!==a.src.substring(0,5)&&(d.crossOrigin="Anonymous"),d.src=a.src,d.onload=function(){var e=b();e.drawImage(d,0,0);var f=e.getImageData(0,0,a.width,a.height);c&&c(f.data)}},d=function(a){return["rgb(",a,")"].join("")},e=function(a){return a.map(function(a){return d(a.name)})},f=5,g=10,h={};h.colors=function(a,b,h){c(a,function(a){for(var c=a.length,i={},j="",k=[],l={dominant:{name:"",count:0},palette:Array.apply(null,Array(h||g)).map(Boolean).map(function(){return{name:"0,0,0",count:0}})},m=0;c>m;){if(k[0]=a[m],k[1]=a[m+1],k[2]=a[m+2],j=k.join(","),i[j]=j in i?i[j]+1:1,"0,0,0"!==j&&"255,255,255"!==j){var n=i[j];n>l.dominant.count?(l.dominant.name=j,l.dominant.count=n):l.palette.some(function(a){return n>a.count?(a.name=j,a.count=n,!0):void 0})}m+=4*f}b&&b({dominant:d(l.dominant.name),palette:e(l.palette)})})},a.RGBaster=a.RGBaster||h}(window); |
| 24 | + !function(a){"use strict";var b=function(){return document.createElement("canvas").getContext("2d")},c=function(a,c){var d=new Image,e=a.src||a;"data:"!==e.substring(0,5)&&(d.crossOrigin="Anonymous"),d.onload=function(){var a=b();a.drawImage(d,0,0);var e=a.getImageData(0,0,d.width,d.height);c&&c(e.data)},d.src=e},d=function(a){return["rgb(",a,")"].join("")},e=function(a){return a.map(function(a){return d(a.name)})},f=5,g=10,h={};h.colors=function(a,b,h){c(a,function(a){for(var c=a.length,i={},j="",k=[],l={dominant:{name:"",count:0},palette:Array.apply(null,Array(h||g)).map(Boolean).map(function(){return{name:"0,0,0",count:0}})},m=0;c>m;){if(k[0]=a[m],k[1]=a[m+1],k[2]=a[m+2],j=k.join(","),i[j]=j in i?i[j]+1:1,"0,0,0"!==j&&"255,255,255"!==j){var n=i[j];n>l.dominant.count?(l.dominant.name=j,l.dominant.count=n):l.palette.some(function(a){return n>a.count?(a.name=j,a.count=n,!0):void 0})}m+=4*f}b&&b({dominant:d(l.dominant.name),palette:e(l.palette)})})},a.RGBaster=a.RGBaster||h}(window); |
24 | 25 | /* jshint ignore:end */
|
25 | 26 |
|
26 | 27 | /* Our main function declaration. */
|
|
35 | 36 | $( opts.selector ).each(function(index, el){
|
36 | 37 | var $this = $(this);
|
37 | 38 |
|
38 |
| - /* Small helper function which applies colors, attrs, and triggers events. */ |
| 39 | + /* Small helper functions which applie |
| 40 | + colors, attrs, triggers events, and check for css |
| 41 | + */ |
39 | 42 | var handleColors = function(){
|
40 |
| - RGBaster.colors($this[0], function(colors){ |
| 43 | + var img = useCSSBackground() ? CSSBackground() : $this[0]; |
| 44 | + |
| 45 | + RGBaster.colors(img, function(colors){ |
41 | 46 | $this.attr(DATA_COLOR, colors.dominant);
|
42 | 47 | $this.trigger(EVENT_CF, { color: colors.dominant, palette: colors.palette });
|
43 | 48 | }, 20);
|
44 | 49 | };
|
45 | 50 |
|
| 51 | + var useCSSBackground = function(){ |
| 52 | + return $this.attr( DATA_CSS_BG ); |
| 53 | + }; |
| 54 | + |
| 55 | + var CSSBackground = function(){ |
| 56 | + return $this.css('background-image') |
| 57 | + .replace('url(https://github.com/'%3C/span%3E%3Cspan%20class=pl-kos%3E,%3C/span%3E%3Cspan%20class=pl-s%3E''%3C/span%3E%3Cspan%20class=pl-kos%3E).replace(')',''); |
| 58 | + }; |
| 59 | + |
46 | 60 | /* Subscribe to our color-found event. */
|
47 | 61 | $this.on( EVENT_CF, function(ev, data){
|
48 | 62 | var $data = data;
|
49 | 63 | var $parent;
|
50 |
| - if ( $this.attr( DATA_PARENT ) ){ |
| 64 | + |
| 65 | + if ( useCSSBackground() ){ |
| 66 | + $parent = $this; |
| 67 | + } |
| 68 | + else if ( $this.attr( DATA_PARENT ) ){ |
51 | 69 | $parent = $this.parents( $this.attr( DATA_PARENT ) );
|
52 | 70 | }
|
53 | 71 | else if (opts.parent) {
|
|
0 commit comments