{"version":3,"sources":["ng-image-gallery.min.js"],"names":["keys","enter","esc","left","right","angular","module","provider","defOpts","thumbnails","thumbSize","inline","bubbles","bubbleSize","imgBubbles","bgClose","piracy","imgAnim","errorPlaceHolder","setOpts","newOpts","extend","$get","filter","$sce","value","type","trustAs","directive","$parse","restrict","scope","link","element","attrs","bind","event","preventDefault","attributes","image","Image","src","showImageAsync","onload","$apply","asyncKind","css","backgroundImage","empty","onerror","$window","$timeout","pre","autoFitBubbles","scrollerWidth","getBoundingClientRect","width","minMargin","bubbleSpace","rawQuotient","bubblesInView","Math","floor","extraSpace","extraMargin","bubbleMargin","finalBubbleSpace","_bubblesInView","_finalBubbleSpace","_bubbleMargin","_safeApply","noop","$watch","$watchCollection","indexCalc","relativeIndexToBubbleWrapper","_activeImageIndex","outBubbles","images","length","_bubblesContainerMarginLeft","$rootScope","$q","ngImageGalleryOpts","replace","transclude","methods","conf","onOpen","onClose","onDelete","template","elem","attr","_showLoader","imgLoading","_hideLoader","_loadImg","imgObj","reject","deferred","defer","hasOwnProperty","img","url","cached","resolve","promise","_setActiveImg","indexOf","_activeImg","_imgMoveDirection","then","imgError","fn","phase","this","$root","$$phase","_deleteImg","_deleteImgCallback","index","console","log","splice","cb","undefined","imagesFirstWatch","activeImageIndexFirstWatch","newImgIndex","open","imgIndex","opened","document","body","addClass","close","removeClass","next","prev","backgroundClose","e","noCloseClasses","i","target","classList","which","window","Hammer","hammerElem","on","ev","removeClassFromDocumentBody","$on"],"mappings":"CAAC,WACA,YAGA,IAAIA,IACHC,MAAQ,GACRC,IAAQ,GACRC,KAAQ,GACRC,MAAQ,GAGTC,SACCC,OAAO,+BAAgC,cACvCC,SAAS,qBAAsB,WAC/B,GAAIC,IACHC,YAAiB,EACjBC,UAAc,GACdC,QAAiB,EACjBC,SAAiB,EACjBC,WAAe,GACfC,YAAiB,EACjBC,SAAiB,EACjBC,QAAa,EACbC,QAAa,SACbC,iBAAoB,gCAGrB,QACCC,QAAU,SAASC,GAClBf,QAAQgB,OAAOb,EAASY,IAEzBE,KAAO,WACN,MAAOd,OAITe,OAAO,uBAAwB,OAAQ,SAASC,GAC5C,MAAO,UAASC,EAAOC,GAErB,MAAOF,GAAKG,QAAQD,GAAQ,OAAQD,OAGvCG,UAAU,gBAAiB,SAAU,SAASC,GAC9C,OACCC,SAAU,IACbC,OAAQ,EACRC,KAAO,SAASD,EAAOE,EAASC,GAC/BD,EAAQE,KAAK,cAAe,SAASC,GACpC,GAAmB,GAAhBL,EAAMf,OAER,MADAoB,GAAMC,iBACCN,EAAMf,cAMjBY,UAAU,kBAAmB,WAC7B,OACCE,SAAU,IACVC,OAAO,EACPC,KAAM,SAAUD,EAAOE,EAASK,GAC/B,GAAIC,GAAQ,GAAIC,MAChBD,GAAME,IAAMH,EAAWI,eACvBH,EAAMI,OAAS,WACdZ,EAAMa,OAAO,WACe,SAAxBN,EAAWO,WACbZ,EAAQa,KAAMC,gBAAiB,QAAUT,EAAWI,eAAiB,OACrET,EAAQe,SAEuB,UAAxBV,EAAWO,WAClBZ,EAAQa,KAAMC,gBAAiB,QAAUT,EAAWI,eAAiB,UAIxEH,EAAMU,QAAU,WACfhB,EAAQe,cAKXpB,UAAU,iBAAkB,UAAW,WAAY,SAASsB,EAASC,GACrE,OACCrB,SAAU,IACVC,OAAO,EACPC,MACCoB,IAAM,SAAUrB,EAAOE,EAASK,GAC/B,GAAIe,GAAiB,WACpB,GAAIC,GAAgBrB,EAAQ,GAAGsB,wBAAwBC,KACvD,IAAoB,GAAjBF,EAAH,CAEA,GAAIzC,GAAakB,EAAMlB,WACnB4C,EAAY,EACZC,EAAe7C,EAAa4C,EAC5BE,EAAcL,EAAgBI,EAC9BE,EAAgBC,KAAKC,MAAMH,GAC3BI,EAAaT,EAAiBM,EAAgBF,EAC9CM,EAAcD,EAAaH,EAC3BK,EAAeR,EAAYO,EAC3BE,EAAmBD,EAAepD,CAEtCkB,GAAMoC,eAAiBP,EACvB7B,EAAMqC,kBAAoBF,EAC1BnC,EAAMsC,cAAgB,KAAQJ,EAAa,EAAK,KAEhDlC,EAAMuC,WAAWjE,QAAQkE,OAG1BpB,GAASE,GAEThD,QAAQ4B,QAAQiB,GAASf,KAAK,SAAU,WACvCgB,EAASE,KAEVtB,EAAMyC,OAAO,SAAU,WACtBrB,EAASE,KAEVtB,EAAMyC,OAAO,aAAc,WAC1BrB,EAASE,KAEVtB,EAAM0C,iBAAiB,SAAU,WAChCtB,EAASE,WAMbzB,UAAU,oBAAqB,UAAW,WAAY,SAASsB,EAASC,GACxE,OACCrB,SAAU,IACVC,OAAO,EACPC,KAAM,SAAUD,EAAOE,EAASK,GAE/B,GAAIoC,GAAY,WACf,GAAIC,GAA+B5C,EAAMoC,gBAAkBpC,EAAMoC,eAAiBpC,EAAM6C,kBAExFzB,GAAS,WACR,GAAGwB,EAA+B5C,EAAMoC,eAAiB,EAAE,CAC1D,GAAIU,GAAe9C,EAAM6C,kBAAkB,EAAK7C,EAAMoC,eAAkB,CAErEpC,GAAM6C,mBAAsB7C,EAAM+C,OAAOC,OAAS,EACpDhD,EAAMiD,4BAA8B,IAAOjD,EAAMqC,kBAAoBS,EAAc,KAGnF9C,EAAMiD,4BAA8B,IAAOjD,EAAMqC,mBAAqBS,EAAa,GAAM,SAI1F9C,GAAMiD,4BAA8B,QAKvC3E,SAAQ4B,QAAQiB,GAASf,KAAK,SAAU,WACvCgB,EAASuB,KAEV3C,EAAMyC,OAAO,iBAAkB,WAC9BrB,EAASuB,KAEV3C,EAAMyC,OAAO,oBAAqB,WACjCrB,EAASuB,KAEV3C,EAAM0C,iBAAiB,SAAU,WAChCtB,EAASuB,UAKZ9C,UAAU,kBAAmB,aAAc,WAAY,KAAM,qBAC9D,SAASqD,EAAY9B,EAAU+B,EAAIC,GAClC,OACCC,SAAU,EACVC,YAAa,EACbvD,SAAW,KACXC,OACC+C,OAAa,IACbQ,QAAa,KACbC,KAAW,KAEX9E,WAAgB,KAChBC,UAAc,KACdC,OAAa,KACbC,QAAa,KACbC,WAAgB,KAChBC,WAAgB,KAChBC,QAAa,KACbC,OAAY,KACZC,QAAa,KACbC,iBAAmB,KAEnBsE,OAAa,KACbC,QAAa,KACbC,SAAa,MAEdC,SAAY,4qHA+FZ3D,MACCoB,IAAM,SAASrB,EAAO6D,EAAMC,GAO3B9D,EAAM+D,YAAc,WACnB/D,EAAMgE,YAAa,GAIpBhE,EAAMiE,YAAc,WACnBjE,EAAMgE,YAAa,GAIpBhE,EAAMkE,SAAW,SAASC,GAIzB,IAAIA,EAAQ,MAAOhB,GAAGiB,QAEtB,IAAIC,GAAYlB,EAAGmB,OAGfH,GAAOI,eAAe,WAAWvE,EAAM+D,aAG3C,IAAIS,GAAM,GAAI/D,MAiBd,OAhBA+D,GAAI9D,IAAMyD,EAAOM,IACjBD,EAAI5D,OAAS,WAERuD,EAAOI,eAAe,WAAWvE,EAAMiE,cAGvCE,EAAOI,eAAe,YAAWJ,EAAOO,QAAS,GAErDL,EAASM,QAAQR,IAElBK,EAAItD,QAAU,WACTiD,EAAOI,eAAe,WAAWvE,EAAMiE,cAE3CI,EAASD,OAAO,2BAGVC,EAASO,SAGjB5E,EAAM6E,cAAgB,SAASV,GAG7BnE,EAAM+C,OAAO+B,QAAQ9E,EAAM+E,YAAc/E,EAAM+C,OAAO+B,QAAQX,IAAYnE,EAAM+C,OAAOC,OAAS,GAE/FhD,EAAM+C,OAAO+B,QAAQ9E,EAAM+E,YAAc/E,EAAM+C,OAAO+B,QAAQX,IAAW,GACzEnE,EAAM+C,OAAO+B,QAAQ9E,EAAM+E,YAAc/E,EAAM+C,OAAO+B,QAAQX,MAAanE,EAAM+C,OAAOC,OAAS,GAIlGhD,EAAMgF,kBAAoB,UAG1BhF,EAAMgF,kBAAoB,WAI3BhF,EAAMkE,SAASC,GAAQc,KAAK,SAASd,GACpCnE,EAAM+E,WAAaZ,EACnBnE,EAAM6C,kBAAoB7C,EAAM+C,OAAO+B,QAAQX,GAC/CnE,EAAMkF,UAAW,GACf,WACFlF,EAAM+E,WAAa,KACnB/E,EAAM6C,kBAAoB7C,EAAM+C,OAAO+B,QAAQX,GAC/CnE,EAAMkF,UAAW,KAKnBlF,EAAMuC,WAAa,SAAS4C,GAC3B,GAAIC,GAAQC,KAAKC,MAAMC,OACX,WAATH,GAA8B,WAATA,EACpBD,GAAsB,kBAAT,IACfA,IAGDE,KAAKxE,OAAOsE,IAIdnF,EAAMwF,WAAa,SAAShB,GAC3B,GAAIiB,GAAqB,WACxB,GAAIC,GAAQ1F,EAAM+C,OAAO+B,QAAQN,EACjCmB,SAAQC,IAAIF,GACZ1F,EAAM+C,OAAO8C,OAAOH,EAAO,GAC3B1F,EAAM6C,kBAAoB,EAK3B7C,GAAM2D,UAAUa,IAAKA,EAAKsB,GAAIL,KAY/BzF,EAAM+C,OAAiCgD,QAAlB/F,EAAM+C,OAAyB/C,EAAM+C,UAC1D/C,EAAMuD,QAAmCwC,QAAnB/F,EAAMuD,QAA0BvD,EAAMuD,WAC5DvD,EAAMwD,KAA8BuC,QAAhB/F,EAAMwD,KAAuBxD,EAAMwD,QAGvDxD,EAAM0C,iBAAiB,OAAQ,SAASc,GACvCxD,EAAMtB,WAAqCqH,QAApBvC,EAAK9E,WAA4B8E,EAAK9E,WAAqCqH,QAArB/F,EAAMtB,WAA8BsB,EAAMtB,WAAe0E,EAAmB1E,WACzJsB,EAAMrB,UAAmCoH,QAAnBvC,EAAK7E,UAA2B6E,EAAK7E,UAAoCoH,QAApB/F,EAAMrB,UAA6BqB,EAAMrB,UAAcyE,EAAmBzE,UACrJqB,EAAMpB,OAAgCmH,QAAjBvC,EAAK5E,OAAyB4E,EAAK5E,OAAgCmH,QAAlB/F,EAAMpB,OAA2BoB,EAAMpB,OAAYwE,EAAmBxE,OAC5IoB,EAAMnB,QAAkCkH,QAAlBvC,EAAK3E,QAA0B2E,EAAK3E,QAAkCkH,QAAnB/F,EAAMnB,QAA4BmB,EAAMnB,QAAYuE,EAAmBvE,QAChJmB,EAAMlB,WAAqCiH,QAApBvC,EAAK1E,WAA4B0E,EAAK1E,WAAsCiH,QAArB/F,EAAMlB,WAA8BkB,EAAMlB,WAAesE,EAAmBtE,WAC1JkB,EAAMjB,WAAqCgH,QAApBvC,EAAKzE,WAA4ByE,EAAKzE,WAAqCgH,QAArB/F,EAAMjB,WAA8BiB,EAAMjB,WAAeqE,EAAmBrE,WACzJiB,EAAMhB,QAAkC+G,QAAlBvC,EAAKxE,QAA0BwE,EAAKxE,QAAkC+G,QAAnB/F,EAAMhB,QAA4BgB,EAAMhB,QAAYoE,EAAmBpE,QAChJgB,EAAMf,OAAgC8G,QAAjBvC,EAAKvE,OAAyBuE,EAAKvE,OAAgC8G,QAAlB/F,EAAMf,OAA2Be,EAAMf,OAAYmE,EAAmBnE,OAC5Ie,EAAMd,QAAkC6G,QAAlBvC,EAAKtE,QAA0BsE,EAAKtE,QAAkC6G,QAAnB/F,EAAMd,QAA4Bc,EAAMd,QAAYkE,EAAmBlE,QAChJc,EAAMb,iBAA6C4G,QAAzBvC,EAAKrE,iBAAiCqE,EAAKrE,iBAA8C4G,QAA1B/F,EAAMb,iBAAiCa,EAAMb,iBAAmBiE,EAAmBjE,mBAG7Ka,EAAMyD,OAA8BsC,QAAjB/F,EAAMyD,OAAwBzD,EAAMyD,OAAYnF,QAAQkE,KAC3ExC,EAAM0D,QAAgCqC,QAAlB/F,EAAM0D,QAAyB1D,EAAM0D,QAAapF,QAAQkE,KAC9ExC,EAAM2D,SAAiCoC,QAAlB/F,EAAM2D,SAAyB3D,EAAM2D,SAAcrF,QAAQkE,IAGhF,IAAIwD,IAAmB,CACvBhG,GAAM0C,iBAAiB,SAAU,WAC7BsD,EACFA,GAAmB,EAEZhG,EAAM+C,OAAOC,QACpBhD,EAAM6E,cAAc7E,EAAM+C,OAAO/C,EAAM6C,mBAAqB,KAM9D,IAAIoD,IAA6B,CAsIjC,IArIAjG,EAAMyC,OAAO,oBAAqB,SAASyD,GACvCD,EACFA,GAA6B,EAEtBjG,EAAM+C,OAAOC,QACpBhD,EAAM6E,cACL7E,EAAM+C,OAAOmD,MAMhBlG,EAAMyC,OAAO,SAAU,WACtBrB,EAAS,WACLpB,EAAMpB,QAAQoB,EAAMuD,QAAQ4C,WAajCnG,EAAMuD,QAAQ4C,KAAO,SAASC,GAE7BpG,EAAM6C,kBAAoB,EAAauD,EAAW,EAElDpG,EAAMqG,QAAS,EAGXrG,EAAMpB,QAAQN,QAAQ4B,QAAQoG,SAASC,MAAMC,SAAS,wBAG1DpF,EAAS,WACRpB,EAAMyD,UACJ,MAIJzD,EAAMuD,QAAQkD,MAAQ,WACrBzG,EAAMqG,QAAS,EAGf/H,QAAQ4B,QAAQoG,SAASC,MAAMG,YAAY,wBAG3CtF,EAAS,WACRpB,EAAM0D,UACN1D,EAAM6C,kBAAoB,GACxB,MAIJ7C,EAAMuD,QAAQoD,KAAO,WACjB3G,EAAM6C,mBAAsB7C,EAAM+C,OAAOC,OAAS,EACpDhD,EAAM6C,kBAAoB,EAG1B7C,EAAM6C,kBAAoB7C,EAAM6C,kBAAoB,GAKtD7C,EAAMuD,QAAQqD,KAAO,WACU,GAA3B5G,EAAM6C,kBACR7C,EAAM6C,kBAAoB7C,EAAM+C,OAAOC,OAAS,EAGhDhD,EAAM6C,qBAKR7C,EAAM6G,gBAAkB,SAASC,GAChC,GAAI9G,EAAMhB,UAAWgB,EAAMpB,OAc3B,IAAI,GAZAmI,IACH,iBACA,0BACA,UACA,QACA,OACA,OACA,mBAKOC,EAAI,EAAGA,EAAIF,EAAEG,OAAOC,UAAUlE,QAClC+D,EAAejC,QAAQgC,EAAEG,OAAOC,UAAUF,QADAA,IAK5ChH,EAAMuD,QAAQkD,SAcjBnI,QAAQ4B,QAAQoG,UAAUlG,KAAK,QAAS,SAASC,GAE7CL,EAAMpB,SAENyB,EAAM8G,OAASlJ,EAAKI,OAASgC,EAAM8G,OAASlJ,EAAKC,MACnDkD,EAAS,WACRpB,EAAMuD,QAAQoD,SAGRtG,EAAM8G,OAASlJ,EAAKG,KAC3BgD,EAAS,WACRpB,EAAMuD,QAAQqD,SAGRvG,EAAM8G,OAASlJ,EAAKE,KAC3BiD,EAAS,WACRpB,EAAMuD,QAAQkD,aAMdW,OAAOC,OAAO,CAChB,GAAIC,GAAa,GAAID,QAAOxD,EAAK,GACjCyD,GAAWC,GAAG,aAAc,SAASC,GACpCpG,EAAS,WACRpB,EAAMuD,QAAQqD,WAGhBU,EAAWC,GAAG,YAAa,SAASC,GACnCpG,EAAS,WACRpB,EAAMuD,QAAQoD,WAGhBW,EAAWC,GAAG,YAAa,SAASC,GAChCxH,EAAMpB,QAETwC,EAAS,WACRpB,EAAMuD,QAAQkD,YAajB,GAAIgB,GAA8B,WACjCnJ,QAAQ4B,QAAQoG,SAASC,MAAMG,YAAY,wBAG5CxD,GAAWwE,IAAI,sBAAuBD,GACtCvE,EAAWwE,IAAI,sBAAuBD","file":"ng-image-gallery.min.js","sourcesContent":[" (function(){\r\n\t'use strict';\r\n\r\n\t// Key codes\r\n\tvar keys = {\r\n\t\tenter : 13,\r\n\t\tesc : 27,\r\n\t\tleft : 37,\r\n\t\tright : 39\r\n\t};\r\n\r\n\tangular\r\n\t.module('thatisuday.ng-image-gallery', ['ngAnimate'])\r\n\t.provider('ngImageGalleryOpts', function(){\r\n\t\tvar defOpts = {\r\n\t\t\tthumbnails \t: true,\r\n\t\t\tthumbSize\t\t: \t80,\r\n\t\t\tinline \t: false,\r\n\t\t\tbubbles \t: true,\r\n\t\t\tbubbleSize\t\t: \t20,\r\n\t\t\timgBubbles \t: false,\r\n\t\t\tbgClose \t: false,\r\n\t\t\tpiracy \t\t\t: \tfalse,\r\n\t\t\timgAnim \t\t: \t'fadeup',\r\n\t\t\terrorPlaceHolder: 'Error when loading the image!'\r\n\t\t};\r\n\r\n\t\treturn{\r\n\t\t\tsetOpts : function(newOpts){\r\n\t\t\t\tangular.extend(defOpts, newOpts);\r\n\t\t\t},\r\n\t\t\t$get : function(){\r\n\t\t\t\treturn defOpts;\r\n\t\t\t}\r\n\t\t}\r\n\t})\r\n\t.filter('ngImageGalleryTrust', ['$sce', function($sce) {\r\n return function(value, type) {\r\n // Defaults to treating trusted value as `html`\r\n return $sce.trustAs(type || 'html', value);\r\n }\r\n }])\r\n .directive('ngRightClick', ['$parse', function($parse){\r\n\t return {\r\n\t \trestrict: \"A\",\r\n\t\t\tscope : false,\r\n\t\t\tlink : function(scope, element, attrs){\r\n\t\t\t\telement.bind('contextmenu', function(event){\r\n\t\t\t\t\tif(scope.piracy == false){\r\n\t\t\t\t\t\tevent.preventDefault();\r\n\t\t\t\t\t\treturn scope.piracy;\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t };\r\n\t}])\r\n\t.directive(\"showImageAsync\", [function(){\r\n\t\treturn {\r\n\t\t\trestrict: \"A\",\r\n\t\t\tscope: false,\r\n\t\t\tlink: function (scope, element, attributes){\r\n\t\t\t\tvar image = new Image();\r\n\t\t\t\timage.src = attributes.showImageAsync;\r\n\t\t\t\timage.onload = function(){\r\n\t\t\t\t\tscope.$apply(function(){\r\n\t\t\t\t\t\tif(attributes.asyncKind == 'thumb'){\r\n\t\t\t\t\t\t\telement.css({ backgroundImage: 'url(\"' + attributes.showImageAsync + '\")' });\r\n\t\t\t\t\t\t\telement.empty(); // remove loading animation element\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse if(attributes.asyncKind == 'bubble'){\r\n\t\t\t\t\t\t\telement.css({ backgroundImage: 'url(\"' + attributes.showImageAsync + '\")' });\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t};\r\n\t\t\t\timage.onerror = function(){\r\n\t\t\t\t\telement.empty(); // remove loading animation element\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t};\r\n\t}])\r\n\t.directive(\"bubbleAutoFit\", ['$window', '$timeout', function($window, $timeout){\r\n\t\treturn {\r\n\t\t\trestrict: \"A\",\r\n\t\t\tscope: false,\r\n\t\t\tlink: {\r\n\t\t\t\tpre : function (scope, element, attributes){\r\n\t\t\t\t\tvar autoFitBubbles = function(){\r\n\t\t\t\t\t\tvar scrollerWidth = element[0].getBoundingClientRect().width;\r\n\t\t\t\t\t\tif(scrollerWidth == 0) return;\r\n\r\n\t\t\t\t\t\tvar bubbleSize = scope.bubbleSize;\r\n\t\t\t\t\t\tvar minMargin = 4 + 4; // left+right\r\n\t\t\t\t\t\tvar bubbleSpace = (bubbleSize + minMargin);\r\n\t\t\t\t\t\tvar rawQuotient = scrollerWidth / bubbleSpace;\r\n\t\t\t\t\t\tvar bubblesInView = Math.floor(rawQuotient);\r\n\t\t\t\t\t\tvar extraSpace = scrollerWidth - (bubblesInView * bubbleSpace);\r\n\t\t\t\t\t\tvar extraMargin = extraSpace / bubblesInView;\r\n\t\t\t\t\t\tvar bubbleMargin = minMargin + extraMargin;\r\n\t\t\t\t\t\tvar finalBubbleSpace = bubbleMargin + bubbleSize;\r\n\r\n\t\t\t\t\t\tscope._bubblesInView = bubblesInView;\r\n\t\t\t\t\t\tscope._finalBubbleSpace = finalBubbleSpace;\r\n\t\t\t\t\t\tscope._bubbleMargin = '0 ' + (bubbleMargin/2) + 'px';\r\n\r\n\t\t\t\t\t\tscope._safeApply(angular.noop);\r\n\t\t\t\t\t};\r\n\r\n\t\t\t\t\t$timeout(autoFitBubbles);\r\n\r\n\t\t\t\t\tangular.element($window).bind('resize', function(){\r\n\t\t\t\t\t\t$timeout(autoFitBubbles);\r\n\t\t\t\t\t});\r\n\t\t\t\t\tscope.$watch('inline', function(){\r\n\t\t\t\t\t\t$timeout(autoFitBubbles);\r\n\t\t\t\t\t});\r\n\t\t\t\t\tscope.$watch('bubbleSize', function(){\r\n\t\t\t\t\t\t$timeout(autoFitBubbles);\r\n\t\t\t\t\t});\r\n\t\t\t\t\tscope.$watchCollection('images', function(){\r\n\t\t\t\t\t\t$timeout(autoFitBubbles);\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t};\r\n\t}])\r\n\t.directive(\"bubbleAutoScroll\", ['$window', '$timeout', function($window, $timeout){\r\n\t\treturn {\r\n\t\t\trestrict: \"A\",\r\n\t\t\tscope: false,\r\n\t\t\tlink: function (scope, element, attributes){\r\n\r\n\t\t\t\tvar indexCalc = function(){\r\n\t\t\t\t\tvar relativeIndexToBubbleWrapper = scope._bubblesInView - (scope._bubblesInView - scope._activeImageIndex);\r\n\r\n\t\t\t\t\t$timeout(function(){\r\n\t\t\t\t\t\tif(relativeIndexToBubbleWrapper > scope._bubblesInView - 2){\r\n\t\t\t\t\t\t\tvar outBubbles = ((scope._activeImageIndex+1) - scope._bubblesInView) + 1;\r\n\r\n\t\t\t\t\t\t\tif(scope._activeImageIndex != (scope.images.length - 1)){\r\n\t\t\t\t\t\t\t\tscope._bubblesContainerMarginLeft = '-' + (scope._finalBubbleSpace * outBubbles) + 'px';\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\telse{\r\n\t\t\t\t\t\t\t\tscope._bubblesContainerMarginLeft = '-' + (scope._finalBubbleSpace * (outBubbles - 1)) + 'px';\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse{\r\n\t\t\t\t\t\t\tscope._bubblesContainerMarginLeft = '0px';\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\r\n\t\t\t\tangular.element($window).bind('resize', function(){\r\n\t\t\t\t\t$timeout(indexCalc);\r\n\t\t\t\t});\r\n\t\t\t\tscope.$watch('_bubblesInView', function(){\r\n\t\t\t\t\t$timeout(indexCalc);\r\n\t\t\t\t});\r\n\t\t\t\tscope.$watch('_activeImageIndex', function(){\r\n\t\t\t\t\t$timeout(indexCalc);\r\n\t\t\t\t});\r\n\t\t\t\tscope.$watchCollection('images', function(){\r\n\t\t\t\t\t$timeout(indexCalc);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t};\r\n\t}])\r\n\t.directive('ngImageGallery', ['$rootScope', '$timeout', '$q', 'ngImageGalleryOpts',\r\n\tfunction($rootScope, $timeout, $q, ngImageGalleryOpts){\r\n\t\treturn {\r\n\t\t\treplace : true,\r\n\t\t\ttransclude : false,\r\n\t\t\trestrict : 'AE',\r\n\t\t\tscope : {\r\n\t\t\t\timages \t\t\t: \t'=',\t\t// []\r\n\t\t\t\tmethods \t\t: \t'=?',\t\t// {}\r\n\t\t\t\tconf \t\t\t: \t'=?',\t\t// {}\r\n\r\n\t\t\t\tthumbnails \t\t: \t'=?',\t\t// true|false\r\n\t\t\t\tthumbSize\t\t: \t'=?', \t\t// px\r\n\t\t\t\tinline \t\t\t: \t'=?',\t\t// true|false\r\n\t\t\t\tbubbles \t\t: \t'=?',\t\t// true|false\r\n\t\t\t\tbubbleSize \t\t: \t'=?',\t\t// px\r\n\t\t\t\timgBubbles \t\t: \t'=?',\t\t// true|false\r\n\t\t\t\tbgClose \t\t: \t'=?',\t\t// true|false\r\n\t\t\t\tpiracy\t\t\t: \t'=?',\t\t// true|false\r\n\t\t\t\timgAnim \t\t: \t'@?',\t\t// {name}\r\n\t\t\t\terrorPlaceHolder: \t'@?',\t\t// {name}\r\n\r\n\t\t\t\tonOpen \t\t\t: \t'&?',\t\t// function\r\n\t\t\t\tonClose \t\t: \t'&?',\t\t// function,\r\n\t\t\t\tonDelete\t\t: \t'&?'\r\n\t\t\t},\r\n\t\t\ttemplate : \t'',\r\n\r\n\t\t\tlink : {\r\n\t\t\t\tpre : function(scope, elem, attr){\r\n\r\n\t\t\t\t\t/*\r\n\t\t\t\t\t *\tOperational functions\r\n\t\t\t\t\t**/\r\n\r\n\t\t\t\t\t// Show gallery loader\r\n\t\t\t\t\tscope._showLoader = function(){\r\n\t\t\t\t\t\tscope.imgLoading = true;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// Hide gallery loader\r\n\t\t\t\t\tscope._hideLoader = function(){\r\n\t\t\t\t\t\tscope.imgLoading = false;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// Image load complete promise\r\n\t\t\t\t\tscope._loadImg = function(imgObj){\r\n\r\n\t\t\t\t\t\t// Return rejected promise\r\n\t\t\t\t\t\t// if not image object received\r\n\t\t\t\t\t\tif(!imgObj) return $q.reject();\r\n\r\n\t\t\t\t\t\tvar deferred = $q.defer();\r\n\r\n\t\t\t\t\t\t// Show loder\r\n\t\t\t\t\t\tif(!imgObj.hasOwnProperty('cached')) scope._showLoader();\r\n\r\n\t\t\t\t\t\t// Process image\r\n\t\t\t\t\t\tvar img = new Image();\r\n\t\t\t\t\t\timg.src = imgObj.url;\r\n\t\t\t\t\t\timg.onload = function(){\r\n\t\t\t\t\t\t\t// Hide loder\r\n\t\t\t\t\t\t\tif(!imgObj.hasOwnProperty('cached')) scope._hideLoader();\r\n\r\n\t\t\t\t\t\t\t// Cache image\r\n\t\t\t\t\t\t\tif(!imgObj.hasOwnProperty('cached')) imgObj.cached = true;\r\n\r\n\t\t\t\t\t\t\tdeferred.resolve(imgObj);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\timg.onerror = function(){\r\n\t\t\t\t\t\t\tif(!imgObj.hasOwnProperty('cached')) scope._hideLoader();\r\n\r\n\t\t\t\t\t\t\tdeferred.reject('Error when loading img');\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\treturn deferred.promise;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tscope._setActiveImg = function(imgObj){\r\n\t\t\t\t\t\t// Get images move direction\r\n\t\t\t\t\t\tif(\r\n\t\t\t\t\t\t\tscope.images.indexOf(scope._activeImg) - scope.images.indexOf(imgObj) == (scope.images.length - 1) ||\r\n\t\t\t\t\t\t\t(\r\n\t\t\t\t\t\t\t\tscope.images.indexOf(scope._activeImg) - scope.images.indexOf(imgObj) <= 0 &&\r\n\t\t\t\t\t\t\t\tscope.images.indexOf(scope._activeImg) - scope.images.indexOf(imgObj) != -(scope.images.length - 1)\r\n\t\t\t\t\t\t\t)\r\n\r\n\t\t\t\t\t\t){\r\n\t\t\t\t\t\t\tscope._imgMoveDirection = 'forward';\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse{\r\n\t\t\t\t\t\t\tscope._imgMoveDirection = 'backward';\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t// Load image\r\n\t\t\t\t\t\tscope._loadImg(imgObj).then(function(imgObj){\r\n\t\t\t\t\t\t\tscope._activeImg = imgObj;\r\n\t\t\t\t\t\t\tscope._activeImageIndex = scope.images.indexOf(imgObj);\r\n\t\t\t\t\t\t\tscope.imgError = false;\r\n\t\t\t\t\t\t}, function(){\r\n\t\t\t\t\t\t\tscope._activeImg = null;\r\n\t\t\t\t\t\t\tscope._activeImageIndex = scope.images.indexOf(imgObj);\r\n\t\t\t\t\t\t\tscope.imgError = true;\r\n\t\t\t\t\t\t})\r\n\t\t\t\t\t\t;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tscope._safeApply = function(fn){\r\n\t\t\t\t\t\tvar phase = this.$root.$$phase;\r\n\t\t\t\t\t\tif(phase == '$apply' || phase == '$digest'){\r\n\t\t\t\t\t\t\tif(fn && (typeof(fn) === 'function')){\r\n\t\t\t\t\t\t\t\tfn();\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tthis.$apply(fn);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t};\r\n\r\n\t\t\t\t\tscope._deleteImg = function(img){\r\n\t\t\t\t\t\tvar _deleteImgCallback = function(){\r\n\t\t\t\t\t\t\tvar index = scope.images.indexOf(img);\r\n\t\t\t\t\t\t\tconsole.log(index);\r\n\t\t\t\t\t\t\tscope.images.splice(index, 1);\r\n\t\t\t\t\t\t\tscope._activeImageIndex = 0;\r\n\r\n\t\t\t\t\t\t\t/**/\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tscope.onDelete({img: img, cb: _deleteImgCallback});\r\n\t\t\t\t\t}\r\n\r\n\r\n\t\t\t\t\t/***************************************************/\r\n\r\n\r\n\t\t\t\t\t/*\r\n\t\t\t\t\t *\tGallery settings\r\n\t\t\t\t\t**/\r\n\r\n\t\t\t\t\t// Modify scope models\r\n\t\t\t\t\tscope.images \t \t = \t(scope.images \t\t!= undefined) ? scope.images \t : \t[];\r\n\t\t\t\t\tscope.methods \t \t = \t(scope.methods \t\t!= undefined) ? scope.methods \t : \t{};\r\n\t\t\t\t\tscope.conf \t \t\t = \t(scope.conf \t\t!= undefined) ? scope.conf \t\t : \t{};\r\n\r\n\t\t\t\t\t// setting options\r\n\t\t\t\t\tscope.$watchCollection('conf', function(conf){\r\n\t\t\t\t\t\tscope.thumbnails \t = \t(conf.thumbnails \t!= undefined) ? conf.thumbnails \t: \t(scope.thumbnails \t!= undefined) \t? scope.thumbnails\t\t: \tngImageGalleryOpts.thumbnails;\r\n\t\t\t\t\t\tscope.thumbSize \t = \t(conf.thumbSize \t!= undefined) ? conf.thumbSize \t\t: \t(scope.thumbSize \t!= undefined) \t? scope.thumbSize\t\t: \tngImageGalleryOpts.thumbSize;\r\n\t\t\t\t\t\tscope.inline \t \t = \t(conf.inline \t\t!= undefined) ? conf.inline \t \t: \t(scope.inline \t\t!= undefined) \t? scope.inline\t\t\t: \tngImageGalleryOpts.inline;\r\n\t\t\t\t\t\tscope.bubbles \t \t = \t(conf.bubbles \t\t!= undefined) ? conf.bubbles \t \t: \t(scope.bubbles \t\t!= undefined) \t? scope.bubbles\t\t: \tngImageGalleryOpts.bubbles;\r\n\t\t\t\t\t\tscope.bubbleSize \t = \t(conf.bubbleSize \t!= undefined) ? conf.bubbleSize \t : \t(scope.bubbleSize \t!= undefined) \t? scope.bubbleSize\t\t: \tngImageGalleryOpts.bubbleSize;\r\n\t\t\t\t\t\tscope.imgBubbles \t = \t(conf.imgBubbles \t!= undefined) ? conf.imgBubbles \t: \t(scope.imgBubbles \t!= undefined) \t? scope.imgBubbles\t\t: \tngImageGalleryOpts.imgBubbles;\r\n\t\t\t\t\t\tscope.bgClose \t \t = \t(conf.bgClose \t\t!= undefined) ? conf.bgClose \t \t: \t(scope.bgClose \t\t!= undefined) \t? scope.bgClose\t\t: \tngImageGalleryOpts.bgClose;\r\n\t\t\t\t\t\tscope.piracy \t \t = \t(conf.piracy \t\t!= undefined) ? conf.piracy \t \t: \t(scope.piracy \t\t!= undefined) \t? scope.piracy\t\t\t: \tngImageGalleryOpts.piracy;\r\n\t\t\t\t\t\tscope.imgAnim \t \t = \t(conf.imgAnim \t\t!= undefined) ? conf.imgAnim \t \t: \t(scope.imgAnim \t\t!= undefined) \t? scope.imgAnim\t\t: \tngImageGalleryOpts.imgAnim;\r\n\t\t\t\t\t\tscope.errorPlaceHolder = (conf.errorPlaceHolder != undefined) ? conf.errorPlaceHolder : (scope.errorPlaceHolder != undefined) ? scope.errorPlaceHolder : ngImageGalleryOpts.errorPlaceHolder;\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\tscope.onOpen \t = \t(scope.onOpen \t!= undefined) ? scope.onOpen \t : \tangular.noop;\r\n\t\t\t\t\tscope.onClose \t = \t(scope.onClose \t!= undefined) ? scope.onClose \t : \tangular.noop;\r\n\t\t\t\t\tscope.onDelete \t = \t(scope.onDelete != undefined) ? scope.onDelete \t : \tangular.noop;\r\n\r\n\t\t\t\t\t// If images populate dynamically, reset gallery\r\n\t\t\t\t\tvar imagesFirstWatch = true;\r\n\t\t\t\t\tscope.$watchCollection('images', function(){\r\n\t\t\t\t\t\tif(imagesFirstWatch){\r\n\t\t\t\t\t\t\timagesFirstWatch = false;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse if(scope.images.length){\r\n\t\t\t\t\t\t\tscope._setActiveImg(scope.images[scope._activeImageIndex || 0]);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\t// Watch index of visible/active image\r\n\t\t\t\t\t// If index changes, make sure to load/change image\r\n\t\t\t\t\tvar activeImageIndexFirstWatch = true;\r\n\t\t\t\t\tscope.$watch('_activeImageIndex', function(newImgIndex){\r\n\t\t\t\t\t\tif(activeImageIndexFirstWatch){\r\n\t\t\t\t\t\t\tactiveImageIndexFirstWatch = false;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse if(scope.images.length){\r\n\t\t\t\t\t\t\tscope._setActiveImg(\r\n\t\t\t\t\t\t\t\tscope.images[newImgIndex]\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\t// Open modal automatically if inline\r\n\t\t\t\t\tscope.$watch('inline', function(){\r\n\t\t\t\t\t\t$timeout(function(){\r\n\t\t\t\t\t\t\tif(scope.inline) scope.methods.open();\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t});\r\n\r\n\r\n\t\t\t\t\t/***************************************************/\r\n\r\n\r\n\t\t\t\t\t/*\r\n\t\t\t\t\t *\tMethods\r\n\t\t\t\t\t**/\r\n\r\n\t\t\t\t\t// Open gallery modal\r\n\t\t\t\t\tscope.methods.open = function(imgIndex){\r\n\t\t\t\t\t\t// Open modal from an index if one passed\r\n\t\t\t\t\t\tscope._activeImageIndex = (imgIndex) ? imgIndex : 0;\r\n\r\n\t\t\t\t\t\tscope.opened = true;\r\n\r\n\t\t\t\t\t\t// set overflow hidden to body\r\n\t\t\t\t\t\tif(!scope.inline) angular.element(document.body).addClass('body-overflow-hidden');\r\n\r\n\t\t\t\t\t\t// call open event after transition\r\n\t\t\t\t\t\t$timeout(function(){\r\n\t\t\t\t\t\t\tscope.onOpen();\r\n\t\t\t\t\t\t}, 300);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// Close gallery modal\r\n\t\t\t\t\tscope.methods.close = function(){\r\n\t\t\t\t\t\tscope.opened = false; // Model closed\r\n\r\n\t\t\t\t\t\t// set overflow hidden to body\r\n\t\t\t\t\t\tangular.element(document.body).removeClass('body-overflow-hidden');\r\n\r\n\t\t\t\t\t\t// call close event after transition\r\n\t\t\t\t\t\t$timeout(function(){\r\n\t\t\t\t\t\t\tscope.onClose();\r\n\t\t\t\t\t\t\tscope._activeImageIndex = 0; // Reset index\r\n\t\t\t\t\t\t}, 300);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// Change image to next\r\n\t\t\t\t\tscope.methods.next = function(){\r\n\t\t\t\t\t\tif(scope._activeImageIndex == (scope.images.length - 1)){\r\n\t\t\t\t\t\t\tscope._activeImageIndex = 0;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse{\r\n\t\t\t\t\t\t\tscope._activeImageIndex = scope._activeImageIndex + 1;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// Change image to prev\r\n\t\t\t\t\tscope.methods.prev = function(){\r\n\t\t\t\t\t\tif(scope._activeImageIndex == 0){\r\n\t\t\t\t\t\t\tscope._activeImageIndex = scope.images.length - 1;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse{\r\n\t\t\t\t\t\t\tscope._activeImageIndex--;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// Close gallery on background click\r\n\t\t\t\t\tscope.backgroundClose = function(e){\r\n\t\t\t\t\t\tif(!scope.bgClose || scope.inline) return;\r\n\r\n\t\t\t\t\t\tvar noCloseClasses = [\r\n\t\t\t\t\t\t\t'galleria-image',\r\n\t\t\t\t\t\t\t'destroy-icons-container',\r\n\t\t\t\t\t\t\t'ext-url',\r\n\t\t\t\t\t\t\t'close',\r\n\t\t\t\t\t\t\t'next',\r\n\t\t\t\t\t\t\t'prev',\r\n\t\t\t\t\t\t\t'galleria-bubble'\r\n\t\t\t\t\t\t];\r\n\r\n\t\t\t\t\t\t// check if clicked element has a class that\r\n\t\t\t\t\t\t// belongs to `noCloseClasses`\r\n\t\t\t\t\t\tfor(var i = 0; i < e.target.classList.length; i++){\r\n\t\t\t\t\t\t\tif(noCloseClasses.indexOf(e.target.classList[i]) != -1){\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\telse{\r\n\t\t\t\t\t\t\t\tscope.methods.close();\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\r\n\t\t\t\t\t/***************************************************/\r\n\r\n\r\n\t\t\t\t\t/*\r\n\t\t\t\t\t *\tUser interactions\r\n\t\t\t\t\t**/\r\n\r\n\t\t\t\t\t// Key events\r\n\t\t\t\t\tangular.element(document).bind('keyup', function(event){\r\n\t\t\t\t\t\t// If inline modal, do not interact\r\n\t\t\t\t\t\tif(scope.inline) return;\r\n\r\n\t\t\t\t\t\tif(event.which == keys.right || event.which == keys.enter){\r\n\t\t\t\t\t\t\t$timeout(function(){\r\n\t\t\t\t\t\t\t\tscope.methods.next();\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse if(event.which == keys.left){\r\n\t\t\t\t\t\t\t$timeout(function(){\r\n\t\t\t\t\t\t\t\tscope.methods.prev();\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse if(event.which == keys.esc){\r\n\t\t\t\t\t\t\t$timeout(function(){\r\n\t\t\t\t\t\t\t\tscope.methods.close();\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\t// Swipe events\r\n\t\t\t\t\tif(window.Hammer){\r\n\t\t\t\t\t\tvar hammerElem = new Hammer(elem[0]);\r\n\t\t\t\t\t\thammerElem.on('swiperight', function(ev){\r\n\t\t\t\t\t\t\t$timeout(function(){\r\n\t\t\t\t\t\t\t\tscope.methods.prev();\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t\thammerElem.on('swipeleft', function(ev){\r\n\t\t\t\t\t\t\t$timeout(function(){\r\n\t\t\t\t\t\t\t\tscope.methods.next();\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t\thammerElem.on('doubletap', function(ev){\r\n\t\t\t\t\t\t\tif(scope.inline) return;\r\n\r\n\t\t\t\t\t\t\t$timeout(function(){\r\n\t\t\t\t\t\t\t\tscope.methods.close();\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t};\r\n\r\n\r\n\t\t\t\t\t/***********************************************************/\r\n\r\n\r\n\t\t\t\t\t/*\r\n\t\t\t\t\t *\tActions on angular events\r\n\t\t\t\t\t**/\r\n\r\n\t\t\t\t\tvar removeClassFromDocumentBody = function(){\r\n\t\t\t\t\t\tangular.element(document.body).removeClass('body-overflow-hidden');\r\n\t\t\t\t\t};\r\n\r\n\t\t\t\t\t$rootScope.$on('$stateChangeSuccess', removeClassFromDocumentBody);\r\n\t\t\t\t\t$rootScope.$on('$routeChangeSuccess', removeClassFromDocumentBody);\r\n\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}]);\r\n })();"]}