|
13 | 13 | parent: null,
|
14 | 14 | };
|
15 | 15 |
|
16 |
| - /* Helper function for detecting remote images. */ |
17 |
| - var isRemoteImageURL = function(url){ |
18 |
| - var parser = document.createElement('a'); |
19 |
| - parser.href = url; |
20 |
| - return !(parser.hostname === location.hostname && parser.protocol === location.protocol && parser.port === location.port); |
21 |
| - }; |
22 |
| - |
23 | 16 | // Include RGBaster - https://github.com/briangonzalez/rgbaster.js
|
24 | 17 | /* jshint ignore:start */
|
25 |
| - (function(n,t){var a=function(){return document.createElement("canvas").getContext("2d")};var e=function(n){var t=new Image;t.src=n.src;var e=a();e.drawImage(n,0,0);var r=e.getImageData(0,0,n.width,n.height);return r.data};var r=function(n){return["rgb(",n,")"].join("")};var o=function(n){return n.map(function(n){return r(n.name)})};var i=5;var u=10;var c={};c.colors=function(n){var t=e(n),a=t.length,c=0,m=-(i-1);var l={},v="",f=[],d={dominant:{name:"",count:0},palette:Array.apply(null,Array(u)).map(Boolean).map(function(n){return{name:"0,0,0",count:0}})};while((m+=i*4)<a){++c;f[0]=t[m];f[1]=t[m+1];f[2]=t[m+2];v=f.join(",");if(v in l){l[v]=l[v]+1}else{l[v]=1}if(v!=="0,0,0"){var p=l[v];if(p>d.dominant.count){d.dominant.name=v;d.dominant.count=p}else{d.palette.some(function(n){if(p>n.count){n.name=v;n.count=p;return true}})}}}return{dominant:r(d.dominant.name),palette:o(d.palette)}};n.RGBaster=n.RGBaster||c})(window); |
| 18 | + (function(n,t){var a=function(){return document.createElement("canvas").getContext("2d")};var e=function(n,t){var e=new Image;e.crossOrigin="Anonymous";e.src=n.src;e.onload=function(){var r=a();r.drawImage(e,0,0);var o=r.getImageData(0,0,n.width,n.height);t&&t(o.data)}};var r=function(n){return["rgb(",n,")"].join("")};var o=function(n){return n.map(function(n){return r(n.name)})};var i=5;var u=10;var c={};c.colors=function(n,t,a){e(n,function(n){var e=n.length,c={},m="",f=[],l={dominant:{name:"",count:0},palette:Array.apply(null,Array(a||u)).map(Boolean).map(function(n){return{name:"0,0,0",count:0}})};var v=0;while(v<e){f[0]=n[v];f[1]=n[v+1];f[2]=n[v+2];m=f.join(",");if(m in c){c[m]=c[m]+1}else{c[m]=1}if(m!=="0,0,0"&&m!=="255,255,255"){var d=c[m];if(d>l.dominant.count){l.dominant.name=m;l.dominant.count=d}else{l.palette.some(function(n){if(d>n.count){n.name=m;n.count=d;return true}})}}v+=i*4}t&&t({dominant:r(l.dominant.name),palette:o(l.palette)})})};n.RGBaster=n.RGBaster||c})(window); |
26 | 19 | /* jshint ignore:end */
|
27 | 20 |
|
28 | 21 | /* Our main function declaration. */
|
|
37 | 30 | $( opts.selector ).each(function(index, el){
|
38 | 31 | var $this = $(this);
|
39 | 32 |
|
40 |
| - if ( isRemoteImageURL( $this.attr('src') ) ){ |
41 |
| - console.log('Not processing remote image: ' + $this.attr('src')); |
42 |
| - return; |
43 |
| - } |
44 |
| - |
45 | 33 | /* Small helper function which applies colors, attrs, and triggers events. */
|
46 | 34 | var handleColors = function(){
|
47 |
| - var colors = RGBaster.colors($this[0]); |
48 |
| - |
49 |
| - $this.attr(DATA_COLOR, colors.dominant); |
50 |
| - $this.trigger(EVENT_CF, { color: colors.dominant, palette: colors.palette }); |
| 35 | + RGBaster.colors($this[0], function(colors){ |
| 36 | + $this.attr(DATA_COLOR, colors.dominant); |
| 37 | + $this.trigger(EVENT_CF, { color: colors.dominant, palette: colors.palette }); |
| 38 | + }, 20); |
51 | 39 | };
|
52 | 40 |
|
53 | 41 | /* Subscribe to our color-found event. */
|
|
66 | 54 | $parent.css({ backgroundColor: data.color });
|
67 | 55 | });
|
68 | 56 |
|
69 |
| - /* Either wait for image to load, or handle the colors now if image is loaded. */ |
70 |
| - $this[0].complete ? handleColors() : $this.load( handleColors ); |
| 57 | + /* Handle the colors. */ |
| 58 | + handleColors(); |
71 | 59 |
|
72 | 60 | });
|
73 | 61 | },
|
|
0 commit comments