/* jshint debug: true, expr: true */ ; (function ($) { /* Constants & defaults. */ var DATA_COLOR = 'data-ab-color'; var DATA_PARENT = 'data-ab-parent'; var DATA_CSS_BG = 'data-ab-css-background'; var EVENT_CF = 'ab-color-found'; var BLEND = 'blend'; var DEFAULTS = { selector: '[data-adaptive-background]', parent: null, exclude: ['rgb(0,0,0)', 'rgb(255,255,255)'], shadeVariation: false, shadePercentage: 0, shadeColors: { light: 'rgb(255,255,255)', dark: 'rgb(0,0,0)' }, normalizeTextColor: false, normalizedTextColors: { light: "#fff", dark: "#000" }, lumaClasses: { light: "ab-light", dark: "ab-dark" }, transparent: null }; // Include RGBaster - https://github.com/briangonzalez/rgbaster.js /* jshint ignore:start */ !function(n,t){"use strict";var e=function(n,t){var e=document.createElement("canvas");return e.setAttribute("width",n),e.setAttribute("height",t),e.getContext("2d")},r=function(n,t){var r=new Image,i=n.src||n;"data:"!==i.substring(0,5)&&(r.crossOrigin="Anonymous"),r.onload=function(){var n=e(r.width,r.height);n.drawImage(r,0,0);var i=n.getImageData(0,0,r.width,r.height);t&&t(i.data)},r.src=i},i=function(n){return["rgb(",n,")"].join("")},a=function(n){var t=[];for(var e in n)t.push(o(e,n[e]));return t.sort(function(n,t){return t.count-n.count}),t},u=function(n,t){if(n.length>t)return n.slice(0,t);for(var e=n.length-1;t-1>e;e++)n.push(o("0,0,0",0));return n},o=function(n,t){return{name:i(n),count:t}},c=10,s={};s.colors=function(n,e){e=e||{};var o=e.exclude||[],s=e.paletteSize||c;r(n,function(n){for(var r={},c="",f=[],d=0;d= 128 ? blendRGBColors(color, opts.shadeColors.dark, opts.shadePercentage) : blendRGBColors(color, opts.shadeColors.light, opts.shadePercentage); } }; /* Subscribe to our color-found event. */ $this.on(EVENT_CF, function (ev, data) { // Try to find the parent. var $parent; if (opts.parent && $this.parents(opts.parent).length) { $parent = $this.parents(opts.parent); } else if ($this.attr(DATA_PARENT) && $this.parents($this.attr(DATA_PARENT)).length) { $parent = $this.parents($this.attr(DATA_PARENT)); } else if (useCSSBackground()) { $parent = $this; } else if (opts.parent) { $parent = $this.parents(opts.parent); } else { $parent = $this.parent(); } if (!!opts.shadeVariation) data.color = getShadeAdjustment(data.color); if ($.isNumeric(opts.transparent) && opts.transparent != null && opts.transparent >= 0.01 && opts.transparent <= 0.99) { var dominantColor = data.color; var rgbToRgba = dominantColor.replace("rgb", "rgba"); var transparentColor = rgbToRgba.replace(")", ", " + opts.transparent + ")"); $parent.css({ backgroundColor: transparentColor }); } else { $parent.css({ backgroundColor: data.color }); } var getNormalizedTextColor = function (color) { return getYIQ(color) >= 128 ? opts.normalizedTextColors.dark : opts.normalizedTextColors.light; }; var getLumaClass = function (color) { return getYIQ(color) <= 128 ? opts.lumaClasses.dark : opts.lumaClasses.light; }; // Normalize the text color based on luminance. if (opts.normalizeTextColor) $parent.css({ color: getNormalizedTextColor(data.color) }); // Add a class based on luminance. $parent.addClass(getLumaClass(data.color)) .attr('data-ab-yaq', getYIQ(data.color)); opts.success && opts.success($this, data); }); /* Handle the colors. */ handleColors(); }); } }; })(jQuery);