/** * * Version: 0.2.8 * Author: Gianluca Guarini * Contact: gianluca.guarini@gmail.com * Website: http://www.gianlucaguarini.com/ * Twitter: @gianlucaguarini * * Copyright (c) 2013 Gianluca Guarini */ !function(a){a.fn.extend({BlackAndWhite:function(b){"use strict";var c=this,d={hoverEffect:!0,webworkerPath:!1,responsive:!0,invertHoverEffect:!1,speed:500,onImageReady:null,intensity:1};b=a.extend(d,b);var e=b.hoverEffect,f=b.webworkerPath,g=b.invertHoverEffect,h=b.responsive,i="number"==typeof b.intensity&&b.intensity<1&&b.intensity>0?b.intensity:1,j=a.isPlainObject(b.speed)?b.speed.fadeIn:b.speed,k=a.isPlainObject(b.speed)?b.speed.fadeOut:b.speed,l=document.all&&!window.opera&&window.XMLHttpRequest?!0:!1,m=" -webkit- -moz- -o- -ms- ".split(" "),n={},o=function(a){if(n[a]||""===n[a])return n[a]+a;var b=document.createElement("div"),c=["","Moz","Webkit","O","ms","Khtml"];for(var d in c)if("undefined"!=typeof b.style[c[d]+a])return n[a]=c[d],c[d]+a;return a.toLowerCase()},p=function(){var a=document.createElement("div");return a.style.cssText=m.join("filter:blur(2px); "),!!a.style.length&&(void 0===document.documentMode||document.documentMode>9)}(),q=!!document.createElement("canvas").getContext,r=a(window),s=function(){return"undefined"!=typeof Worker?!0:!1}(),u=(o("Filter"),[]),v=s&&f?new Worker(f+"BnWWorker.js"):!1,w=function(b){a(b.currentTarget).find(".BWfade").stop(!0,!0)[g?"fadeOut":"fadeIn"](k)},x=function(b){a(b.currentTarget).find(".BWfade").stop(!0,!0)[g?"fadeIn":"fadeOut"](j)},y=function(a){"function"==typeof b.onImageReady&&b.onImageReady(a)},z=function(){return u.length?(v.postMessage({imgData:u[0].imageData,intensity:i}),v.onmessage=function(a){u[0].ctx.putImageData(a.data,0,0),y(u[0].img),u.splice(0,1),z()},void 0):(v.terminate&&v.terminate(),v.close&&v.close(),void 0)},A=function(a,b,c,d){var e=b.getContext("2d"),g=0;e.drawImage(a,0,0,c,d);var j=e.getImageData(0,0,c,d),k=j.data,l=k.length;if(v)u.push({imageData:j,ctx:e,img:a});else{for(;l>g;g+=4){var m=.3*k[g]+.59*k[g+1]+.11*k[g+2];k[g]=~~(m*i+k[g]*(1-i)),k[g+1]=~~(m*i+k[g+1]*(1-i)),k[g+2]=~~(m*i+k[g+2]*(1-i))}e.putImageData(j,0,0),y(a)}},B=function(b,c){var d=b[0],e=d.src,f=b.width(),h=b.height(),j=b.position(),k={position:"absolute",top:j.top,left:j.left,display:g?"none":"block"};if(q&&!p){var l=d.width,m=d.height;a('').prependTo(c);var n=c.find("canvas");n.css(k),A(d,n[0],l,m)}else k[o("Filter")]="grayscale("+100*i+"%)",a(" ').prependTo(c),a(".BWFilter").css(a.extend(k,{filter:"progid:DXImageTransform.Microsoft.BasicImage(grayscale=1)"})),y(d)};return this.init=function(){c.each(function(b,c){var d=a(c),e=d.find("img");e.width()?B(e,d):e.on("load",function(){B(e,d)})}),v&&z(),e&&(c.on("mouseleave",w),c.on("mouseenter",x)),h&&r.on("resize orientationchange",c.resizeImages)},this.resizeImages=function(){c.each(function(b,c){var d=a(c).find("img:not(.BWFilter)"),e=l?a(d).prop("width"):a(d).width(),f=l?a(d).prop("height"):a(d).height();a(this).find(".BWFilter, canvas").css({width:e,height:f})})},this.init(b)}})}(jQuery);