{"version":3,"sources":["App/js/plugins/ie10fix.js","App/js/plugins/format.js","App/js/plugins/hoverintent.min.js","App/js/plugins/pointer_events_polyfill.js","App/js/plugins/jquery.equal-heights.js","App/js/plugins/jquery.zoom.js","App/js/plugins/lodash.custom.min.js","App/js/plugins/md5.min.js","App/js/plugins/owl.carousel.js","App/js/plugins/spin.js","App/js/lib/angular/angular-animate.js","App/js/lib/angular/angular-route.js","App/gulp/gulp-routes.js","App/gulp/gulp-dependencies.js","App/gulp/gulp-templates.js","App/gulp/gulp-client.js","App/js/app.js","App/js/components/component.addtocart-quantity.js","App/js/components/component.addtocart.js","App/js/components/component.delete-cart-item.js","App/js/components/component.input-quantity.js","App/js/components/component.modify-cart-item.js","App/js/directives/directive.back-top-top.js","App/js/directives/directive.bootstrap-select.js","App/js/directives/directive.bxslider.js","App/js/directives/directive.cdn.js","App/js/directives/directive.clear-uib-tab.js","App/js/directives/directive.collapse-menu.js","App/js/directives/directive.contentonly.js","App/js/directives/directive.cookies-info.js","App/js/directives/directive.debug.js","App/js/directives/directive.fix-ie.js","App/js/directives/directive.flip.js","App/js/directives/directive.mini-cart.js","App/js/directives/directive.page-head.js","App/js/directives/directive.sticky.js","App/js/directives/directive.truncate.js","App/js/directives/directive.video-player.js","App/js/directives/directives.breadcrumb.js","App/js/directives/directives.form.js","App/js/filters/filter.discount.js","App/js/filters/filter.format.js","App/js/filters/filter.phone.js","App/js/filters/filter.price.js","App/js/filters/filter.truncate-date.js","App/js/lib/angular-dropzone.js","App/js/lib/angular-gm.js","App/js/lib/angular-smooth-scroll.js","App/js/lib/angular-toastr/angular-toastr.js","App/js/lib/angular/angular-cookies.js","App/js/lib/angular/angular-locale_fr.js","App/js/lib/angular/angular-sanitize.js","App/js/lib/bootstrap-angular-validation/app.js","App/js/lib/bootstrap-angular-validation/app.provider.js","App/js/lib/bootstrap-angular-validation/directives/form.directive.js","App/js/lib/bootstrap-angular-validation/directives/validation.directive.js","App/js/lib/bootstrap-angular-validation/services/simple.message.service.js","App/js/lib/bootstrap-angular-validation/services/tooltip.message.service.js","App/js/lib/bootstrap-angular-validation/services/validation.service.js","App/js/lib/bootstrap-angular-validation/utils.js","App/js/lib/directive.infinite-scroll.js","App/js/lib/module.lazy-img.js","App/js/lib/module.spinner.js","App/js/lib/rzslider.js","App/js/lib/ui-bootstrap-custom-tpls-2.5.0.js","App/js/modules/controllers.modal.js","App/js/modules/module.gtm.js","App/js/modules/module.modal.js","App/js/modules/module.owl-carousel.js","App/js/modules/module.products-grid.js","App/js/routing-listeners.js","App/js/routing.js","App/js/services/service.account.js","App/js/services/service.app.js","App/js/services/service.cdn.js","App/js/services/service.date.js","App/js/services/service.gmap.js","App/js/services/service.http.js","App/js/services/service.load.js","App/js/services/service.responsive.js","App/js/services/service.window-events.js","App/Modules/Authentication/js/account-create.js","App/Modules/Authentication/js/authentication.js","App/Modules/Authentication/js/mini-login.js","App/Modules/Authentication/js/modal-account-update.js","App/Modules/Authentication/js/service.authentication.js","App/Modules/Autocomplete/js/autocomplete.js","App/Modules/Autocomplete/js/searchfinder.js","App/Modules/Category/js/directive.category-background.js","App/Modules/Category/js/directive.filters.js","App/Modules/Category/js/module.category.js","App/Modules/Category/js/service.category.js","App/Modules/Form/js/form.js","App/Modules/Home/js/home.js","App/Modules/PasswordRecovery/js/account-password-recovery.js","App/Modules/Payment/js/payment-error.js","App/Modules/Product/js/component.customization.js","App/Modules/Product/js/directive.inspirations.js","App/Modules/Product/js/directive.kit.js","App/Modules/Product/js/directive.price.js","App/Modules/Product/js/directive.product-attributes.js","App/Modules/Product/js/directive.product-gallery.js","App/Modules/Product/js/directive.share.js","App/Modules/Product/js/module.product.js","App/Modules/Product/js/service.product.js","App/Modules/Reviews/js/module.reviews.js","App/Modules/Shared/Comparator/js/component.comparator.js","App/Modules/Shared/Comparator/js/directive.compare.checkbox.js","App/Modules/Shared/Comparator/js/service.compare.js","App/Modules/Shared/Footer/js/footer.js","App/Modules/Shared/Footer/js/newsletter.js","App/Modules/Shared/Header/js/directive.top-promos.js","App/Modules/Shared/Header/js/switch.directive.js","App/Modules/Shared/Menu/js/nav.directive.js","App/Modules/Static/js/directive.club-gourmand.js","App/Modules/Stores/js/controller.modal-store-choice.js","App/Modules/Stores/js/controller.modal-store-map.js","App/Modules/Stores/js/directive.infos-store.js","App/Modules/Stores/js/store-detail.js","App/Modules/Stores/js/stores-service.js","App/Modules/Stores/js/stores.js"],"names":["root","factory","define","amd","module","exports","format","this","mask","value","isNaN","isNegative","result","decimal","group","posLeadZero","posTrailZero","posSeparator","part","szSep","integer","len","length","start","search","prefix","substring","str","split","reverse","join","end","offset","substr","indx","suffix","charAt","match","toFixed","lastIndexOf","indexOf","e","window","global","self","hoverintent","t","n","o","r","u","f","s","require","i","c","Error","code","a","call","1","clientX","clientY","p","clearTimeout","v","l","addEventListener","m","setTimeout","Math","abs","y","sensitivity","interval","removeEventListener","timeout","d","options","remove","xtend","2","arguments","Object","prototype","hasOwnProperty","navigator","userAgent","msViewportStyle","document","createElement","appendChild","createTextNode","getElementsByTagName","PointerEventsPolyfill","selector","mouseEvents","usePolyfillIf","appName","parseFloat","RegExp","$1","obj","$","each","k","register_mouse_events","fn","equalHeights","h","$elems","css","max","outerHeight","jQuery","defaults","url","callback","target","duration","scale","on","touch","onStartZoom","onZoomIn","onZoomOut","magnify","zoom","source","img","targetHeight","targetWidth","sourceHeight","sourceWidth","xRatio","yRatio","$target","position","$source","style","test","overflow","width","height","addClass","top","left","opacity","border","maxWidth","maxHeight","appendTo","init","outerWidth","move","pageX","pageY","min","settings","extend","$img","touched","srcElement","querySelector","getAttribute","currentSrc","src","one","off","onload","bind","isFunction","data","stop","fadeTo","support","preventDefault","originalEvent","touches","changedTouches","setAttribute","set","add","Array","g","Xr","b","x","E","ti","S","size","forEach","T","L","U","Xu","lastIndex","C","bi","N","F","clear","G","K","en","__data__","cn","pn","mo","wo","Oo","Ao","j","String","Ai","Dt","push","vn","br","jn","gn","yn","bn","fo","Pi","configurable","enumerable","writable","xn","ie","oe","ce","Ar","constructor","index","input","st","po","we","me","tt","Ee","ye","$t","ht","Nr","ho","Dr","so","ui","Re","rt","_e","je","De","buffer","byteOffset","byteLength","Ne","Fe","Pe","Be","Ze","Me","We","Ge","qe","ft","Oe","Ae","ke","Te","eu","exec","Le","Ue","io","Ct","get","zt","At","wn","An","Xn","Kt","zn","En","$e","ze","Fi","Ei","Lt","In","Tn","zr","Ln","be","wt","ki","xe","name","message","fe","ae","delete","mt","Ot","kn","$n","zi","wr","Si","ou","Qt","Rn","Hr","Ft","Mt","Wt","Cr","Rr","St","Un","Jr","Dn","Zt","Mi","Nn","qt","Fn","dr","Zn","ao","_r","Er","Ur","Mn","Wn","Et","sort","_","at","lt","qn","Di","Hn","vo","Wi","apply","Yn","Jn","Kn","Sr","oo","he","go","$r","nt","slice","Ui","copy","jt","qr","Zr","replace","Ku","has","iteratee","Yr","It","map","Tt","co","$i","Rt","Ni","pe","fu","Nt","Je","Ye","wi","Oi","Xt","Lr","nr","tr","ir","hr","xo","Gi","TypeError","re","kr","leading","maxWait","trailing","cancel","flush","pr","cache","Cache","vr","Or","de","Se","Ii","Ir","Tr","ve","ge","valueOf","nu","iu","cu","ci","uu","kt","Fr","Br","So","toLowerCase","au","di","Qu","ri","ni","tu","Vr","Kr","Qr","ee","NaN","Ie","Ce","Ve","He","Ke","Qe","ru","lu","vu","su","gu","yu","xu","wu","mu","bu","Ou","Au","zu","Eu","Iu","Su","Tu","Lu","ku","$u","Cu","Ru","Du","Nu","Fu","Pu","Bu","Zu","Mu","Wu","Hu","Yu","Ju","ei","parseInt","fi","ai","li","Function","si","nodeType","hi","pi","vi","process","gi","binding","yi","isTypedArray","À","Á","Â","Ã","Ä","Å","à","á","â","ã","ä","å","Ç","ç","Ð","ð","È","É","Ê","Ë","è","é","ê","ë","Ì","Í","Î","Ï","ì","í","î","ï","Ñ","ñ","Ò","Ó","Ô","Õ","Ö","Ø","ò","ó","ô","õ","ö","ø","Ù","Ú","Û","Ü","ù","ú","û","ü","Ý","ý","ÿ","Æ","æ","Þ","þ","ß","Ā","Ă","Ą","ā","ă","ą","Ć","Ĉ","Ċ","Č","ć","ĉ","ċ","č","Ď","Đ","ď","đ","Ē","Ĕ","Ė","Ę","Ě","ē","ĕ","ė","ę","ě","Ĝ","Ğ","Ġ","Ģ","ĝ","ğ","ġ","ģ","Ĥ","Ħ","ĥ","ħ","Ĩ","Ī","Ĭ","Į","İ","ĩ","ī","ĭ","į","ı","Ĵ","ĵ","Ķ","ķ","ĸ","Ĺ","Ļ","Ľ","Ŀ","Ł","ĺ","ļ","ľ","ŀ","ł","Ń","Ņ","Ň","Ŋ","ń","ņ","ň","ŋ","Ō","Ŏ","Ő","ō","ŏ","ő","Ŕ","Ŗ","Ř","ŕ","ŗ","ř","Ś","Ŝ","Ş","Š","ś","ŝ","ş","š","Ţ","Ť","Ŧ","ţ","ť","ŧ","Ũ","Ū","Ŭ","Ů","Ű","Ų","ũ","ū","ŭ","ů","ű","ų","Ŵ","ŵ","Ŷ","ŷ","Ÿ","Ź","Ż","Ž","ź","ż","ž","IJ","ij","Œ","œ","ʼn","ſ","_i","&","<",">",""","'","ji","xi","mi","toString","keys","IE_PROTO","Ti","Buffer","Li","Symbol","Uint8Array","allocUnsafe","getPrototypeOf","Ci","create","Ri","propertyIsEnumerable","splice","isConcatSpreadable","toStringTag","Bi","getOwnPropertySymbols","Zi","isBuffer","qi","Date","now","Vi","Hi","Yi","Ji","Ki","Qi","Xi","no","to","ro","eo","uo","pop","hash","string","te","lo","ArrayBuffer","resolve","yo","bo","_o","jo","mn","isArray","zo","Eo","Io","constant","debounce","filter","keyBy","keysIn","memoize","merge","negate","property","pull","pullAll","pullAllBy","reject","Vn","sortBy","throttle","toPlainObject","values","words","camelCase","capitalize","cloneDeep","deburr","eq","find","findIndex","hasIn","identity","includes","inRange","isArguments","isArrayLike","isArrayLikeObject","isEmpty","isEqual","isInteger","isLength","isObject","isObjectLike","isPlainObject","isString","isSymbol","kebabCase","last","stubArray","stubFalse","reduce","some","toFinite","toInteger","toNumber","trim","O","A","unescape","upperFirst","VERSION","charCodeAt","w","Int32Array","I","md5","fromCharCode","undefined","Owl","element","Defaults","$element","_handlers","_plugins","_supress","_current","_speed","_coordinates","_breakpoint","_width","_items","_clones","_mergers","_widths","_invalidated","_pipe","_drag","time","pointer","stage","current","direction","_states","tags","initializing","animating","dragging","proxy","handler","Plugins","key","plugin","Workers","priority","worker","run","setup","initialize","items","loop","center","rewind","mouseDrag","touchDrag","pullDrag","freeDrag","margin","stagePadding","mergeFit","autoWidth","startPosition","rtl","smartSpeed","fluidSpeed","dragEndSpeed","responsive","responsiveRefreshRate","responsiveBaseElement","fallbackEasing","info","nestedItemSelector","itemElement","stageElement","refreshClass","loadedClass","loadingClass","rtlClass","responsiveClass","dragClass","itemClass","stageClass","stageOuterClass","grabClass","Width","Default","Inner","Outer","Type","Event","State","relative","$stage","children","grid","margin-left","margin-right","iterator","widths","clones","view","ceil","repeat","append","prepend","normalize","outerHTML","prependTo","previous","coordinates","padding","padding-left","padding-right","removeAttr","minimum","maximum","reset","animate","inner","outer","begin","matches","op","removeClass","imgs","nestedSelector","enter","trigger","toggleClass","is","preloadAutoWidthImages","wrap","parent","not","refresh","invalidate","registerEventHandlers","leave","viewport","overwrites","breakpoint","Number","attr","optionsLogic","prepare","item","event","content","update","all","grep","dimension","onThrottledResize","resizeTimer","onResize","isDefaultPrevented","transition","onTransitionEnd","onDragStart","onDragEnd","which","transform","type","speed","getTime","delta","difference","onDragMove","closest","coordinate","transform3d","state","suppress","release","isNumeric","reciprocalItemsWidth","elementWidth","mergers","odd","even","multiplier","newPosition","from","factor","revert","distance","next","prev","stopPropagation","originalTarget","innerWidth","documentElement","clientWidth","empty","addBack","after","before","images","Image","destroy","unwrap","contents","removeData","listener","capture","attachEvent","detachEvent","namespace","status","count","relatedTarget","onTrigger","register","concat","object","special","owl","_default","tag","inArray","events","number","first","second","owlCarousel","option","args","$this","Constructor","Zepto","AutoRefresh","carousel","_core","_interval","_visible","initialized.owl.carousel","autoRefresh","watch","autoRefreshInterval","setInterval","clearInterval","getOwnPropertyNames","Lazy","_loaded","initialized.owl.carousel change.owl.carousel resized.owl.carousel","lazyLoad","positions","load","lazyPrefetch","backward","page","prefetch","unshift","$item","$elements","image","devicePixelRatio","background-image","handlers","AutoHeight","initialized.owl.carousel refreshed.owl.carousel","autoHeight","changed.owl.carousel","loaded.owl.lazy","autoHeightClass","maxheight","visible","toArray","heights","Video","_videos","_playing","resize.owl.carousel","video","isInFullScreen","refreshed.owl.carousel","prepared.owl.carousel","fetch","play","videoHeight","videoWidth","id","thumbnail","tnLink","path","dimensions","customTn","srcType","lazyClass","ajax","jsonp","dataType","success","thumbnail_large","framegrab_url","html","insertAfter","fullscreenElement","mozFullScreenElement","webkitFullscreenElement","hasClass","Animate","scope","core","swapping","change.owl.carousel","drag.owl.carousel dragged.owl.carousel translated.owl.carousel","translate.owl.carousel","animateOut","animateIn","swap","animation","incoming","outgoing","Autoplay","_timeout","_paused","autoplay","_setAutoPlayInterval","play.owl.autoplay","stop.owl.autoplay","mouseover.owl.autoplay","autoplayHoverPause","pause","mouseleave.owl.autoplay","touchstart.owl.core","touchend.owl.core","autoplayTimeout","autoplaySpeed","_getNextTimeout","hidden","Navigation","_initialized","_pages","_controls","_templates","_overrides","dotsData","dotClass","added.owl.carousel","remove.owl.carousel","draw","nav","navText","navSpeed","navElement","navContainer","navContainerClass","navClass","slideBy","dotsClass","dots","dotsEach","dotsSpeed","dotsContainer","override","$relative","$previous","$next","prop","$absolute","control","overides","lower","upper","disabled","getPosition","successor","standard","prefixes","WebkitTransition","MozTransition","OTransition","WebkitAnimation","MozAnimation","OAnimation","tests","prefixed","toUpperCase","singleton","origDisplayAttribute","underneathElem","elementFromPoint","Spinner","useCssAnimations","sheet","animations","createEl","el","ins","vendor","pp","def","getColor","color","idx","lines","radius","corners","rotate","trail","fps","zIndex","className","shadow","hwaccel","opts","spin","insertBefore","firstChild","alpha","ostep","astep","anim","parentNode","removeChild","seg","z","pre","fill","background","boxShadow","transformOrigin","borderRadius","insertRule","cssRules","val","childNodes","head","styleSheet","probe","behavior","adj","vml","addRule","grp","coordsize","coordorigin","dx","rotation","arcsize","initVML","angular","TRANSITION_PROP","TRANSITIONEND_EVENT","ANIMATION_PROP","ANIMATIONEND_EVENT","ELEMENT_NODE","ADD_CLASS_SUFFIX","REMOVE_CLASS_SUFFIX","EVENT_CLASS_PREFIX","NG_ANIMATE_CLASSNAME","NG_ANIMATE_CHILDREN_DATA","ontransitionend","onwebkittransitionend","onanimationend","onwebkitanimationend","DURATION_KEY","PROPERTY_KEY","TIMING_KEY","ANIMATION_PLAYSTATE_KEY","ANIMATION_DELAY_PROP","ANIMATION_DURATION_PROP","TRANSITION_DELAY_PROP","TRANSITION_DURATION_PROP","ngMinErr","$$minErr","assertArg","arg","reason","mergeClasses","pendClasses","classes","fix","isPrefix","klass","stripCommentsFromElement","jqLite","extractElementNode","elm","applyAnimationClassesFactory","$$jqLite","prepareAnimationOptions","$$prepared","domOperation","noop","$$domOperationFired","applyAnimationStyles","applyAnimationFromStyles","applyAnimationToStyles","mergeAnimationDetails","oldAnimation","newAnimation","newOptions","toAdd","toRemove","existing","flags","splitClassesToLookup","allow","resolveElementClasses","preparationClasses","concatWithSpace","realDomOperation","getDomNode","blockTransitions","node","applyInlineStyle","blockKeyframeAnimations","applyBlock","styleTuple","$$AnimateChildrenDirective","$interpolate","link","attrs","ngAnimateChildren","setData","$observe","ANIMATE_TIMER_KEY","DETECT_CSS_PROPERTIES","transitionDuration","transitionDelay","transitionProperty","animationDuration","animationDelay","animationIterationCount","DETECT_STAGGER_CSS_PROPERTIES","getCssDelayStyle","delay","isKeyframeAnimation","computeCssStyles","$window","properties","styles","detectedStyles","getComputedStyle","formalStyleName","actualStyleName","maxValue","truthyTimingValue","getCssTransitionDurationStyle","applyOnlyDuration","registerRestorableStyles","backup","isDefined","getPropertyValue","isElement","isUndefined","$AnimateCssProvider","$animateProvider","$get","$$AnimateRunner","$timeout","$$animateCache","$$forceReflow","$sniffer","$$rAFScheduler","$$animateQueue","applyAnimationClasses","rafWaitQueue","waitUntilQuiet","pageWidth","computeTimings","cacheKey","allowNoDuration","timings","hasDuration","put","computeCachedCssStyles","aD","tD","maxDelay","maxDuration","initialOptions","restoreStyles","enabled","closeAndReturnNoopAnimator","animationClosed","animationPaused","animationCompleted","runner","runnerHost","maxDelayTime","maxDurationTime","startTime","temporaryStyles","transitions","method","isStructural","structural","structuralClassName","addRemoveClassName","applyClassesEarly","hasToStyles","keyframeStyle","stagger","containsCachedAnimationWithoutDuration","staggerVal","staggerCacheKey","staggerClassName","computeCachedCssStaggerStyles","$$skipPreparationClasses","transitionStyle","durationStyle","itemIndex","staggerIndex","isFirst","skipBlocking","fullClassName","relativeDelay","hasTransitions","hasAnimations","hasTransitionAll","applyTransitionDuration","applyAnimationDuration","applyTransitionDelay","applyAnimationDelay","recalculateTimingStyles","delayStyle","activeClasses","blockTransition","blockKeyframeAnimation","cleanupStyles","applyBlocking","$$willAnimate","endFn","cancelFn","resume","close","rejected","entry","setProperty","removeProperty","onDone","onAnimationProgress","animationTimerData","timer","complete","ev","timeStamp","$manualTimeStamp","elapsedTime","playPause","playAnimation","arr","maxStagger","triggerAnimationStart","floor","easing","easeProp","easeVal","timerTime","endTime","animationsData","setupFallbackTimer","currentTimerData","expectedEndTime","onAnimationExpired","$$AnimateCssDriverProvider","$$animationProvider","drivers","NG_ANIMATE_SHIM_CLASS_NAME","NG_OUT_ANCHOR_CLASS_NAME","$animateCss","$rootScope","$rootElement","$document","bodyNode","body","rootNode","rootBodyElement","contains","animationDetails","anchors","fromAnimation","prepareRegularAnimation","toAnimation","anchorAnimations","anchor","animator","outAnchor","inAnchor","clone","cloneNode","startingClasses","filterCssClasses","getClassVal","animatorIn","animatorOut","calculateAnchorStyles","prepareInAnimation","startingAnimator","currentAnimation","done","coords","getBoundingClientRect","scrollTop","scrollLeft","endingClasses","getUniqueValues","NG_IN_ANCHOR_CLASS_NAME","prepareAnchoredAnimation","animationRunners","prepareFromToAnchorAnimation","$$AnimateJsProvider","$injector","afterFn","beforeFn","classesToAdd","classesToRemove","flagMap","animationFactory","$$registeredAnimations","lookupAnimations","packageAnimations","closeActiveAnimations","chain","applyOptions","setHost","endAnimations","onComplete","cancelled","groupEventedAnimations","fnName","operations","ani","endProgressCb","resolved","onAnimationComplete","executeAnimationFn","runners","animateFn","$$AnimateJsDriverProvider","$$animateJs","prepareAnimation","endFnFactory","NG_ANIMATE_ATTR_NAME","NG_ANIMATE_PIN_DATA","$$AnimateQueueProvider","ONE_SPACE","rules","skip","getEventData","hasMatchingClasses","newClassString","currentClassString","currentClassMap","classString","makeTruthyCssClassMap","isAllowed","ruleType","previousAnimation","hasAnimationClasses","and","nA","nR","cA","cR","$$rAF","$$Map","$$animation","$templateRequest","$$isDocumentHidden","activeAnimationsLookup","disabledElementsLookup","animationsEnabled","removeFromDisabledElementsLookup","evt","deregisterWatch","$watch","totalPendingRequests","$$postDigest","callbackRegistry","customFilter","classNameFilter","returnTrue","isAnimatableByFilter","isAnimatableClassName","normalizeAnimationDetails","Node","compareDocumentPosition","filterFromRegistry","list","matchContainer","matchCallback","containerNode","cleanupEventListeners","phase","$animate","container","entries","eventType","pin","parentElement","originalElement","runInNextPostDigestOrNow","postDigestCalled","documentHidden","skipAnimations","existingAnimation","hasExistingAnimation","animateChildren","bodyNodeDetected","nodeName","rootNodeDetected","parentAnimationDetected","elementDisabled","parentHost","details","parentNodeDisabled","areAnimationsAllowed","notifyProgress","querySelectorAll","child","skipAnimationFlag","cancelAnimationFlag","joinAnimationFlag","isValidAnimation","clearElementAnimationState","counter","markElementAnimationState","animationCancelled","realRunner","targetParentNode","targetNode","callbacks","progress","queueAnimation","bool","argCount","removeAttribute","oldValue","newValue","$$AnimationProvider","NG_ANIMATE_REF_ATTR","RUNNER_STORAGE_KEY","PREPARE_CLASSES_KEY","getRunner","animationQueue","tempClasses","beforeStart","prepareClassName","handleDestroyedElement","groupedAnimations","preparedAnimations","refLookup","enterOrMove","anchorNodes","hasAttribute","animationID","usedIndicesLookup","anchorGroups","lookupKey","aa","cssClassesIntersection","out","in","indexKey","groupAnimations","toBeSortedAnimations","animationEntry","extraClasses","domNode","startAnimationFn","closeFn","operation","driverName","driver","invokeFirstDriver","animationRunner","newRunner","updateAnimationRunners","finalAnimations","tree","lookup","processNode","queue","remainingLevelEntries","nextLevelEntries","row","childEntry","flatten","processed","parentEntry","elementNode","sortAnimations","innerArray","angularVersion","directive","restrict","transclude","terminal","ctrl","$transclude","previousElement","previousScope","$watchCollection","ngAnimateSwap","$destroy","childScope","scheduler","tasks","nextTick","shift","provider","KEY","parentCounter","parts","isValid","total","routeToRegExp","pattern","slash","optional","star","ignoreTrailingSlashes","regexp","caseInsensitiveMatch","isEagerInstantiationEnabled","ngRouteModule","inherit","extra","routes","when","route","routeCopy","dst","ii","shallowCopy","reloadOnUrl","reloadOnSearch","originalPath","redirectPath","redirectTo","otherwise","params","eagerInstantiationEnabled","$location","$routeParams","$q","$sce","$browser","preparedRoute","preparedRouteIsUpdateOnly","forceReload","$route","reload","fakeLocationEvent","defaultPrevented","$evalAsync","prepareRoute","commitRoute","updateParams","newParams","$$route","$routeMinErr","interpolate","$on","$locationEvent","newRoute","oldRoute","lastRoute","switchRouteMatcher","pathParams","equals","$broadcast","nextRoute","nextRoutePromise","$$incOutstandingRequestCount","then","getRedirectionData","handlePossibleRedirection","keepProcessingRoute","resolveLocals","locals","catch","error","finally","$$completeOutstandingRequest","hasRedirection","oldPath","oldSearch","newUrl","resolveRedirectTo","invoke","oldUrl","template","templateUrl","loadedTemplateUrl","getTemplateFor","segment","segmentMatch","instantiateRoute","ngViewFactory","$anchorScroll","currentScope","currentElement","previousLeaveAnimation","autoScrollExp","autoscroll","onloadExp","cleanupLastView","response","$template","newScope","$new","$eval","$emit","ngViewFillContentFactory","$compile","$controller","controller","$scope","controllerAs","resolveAs","$inject","Name","Controller","Action","fr","URL","NGRoute","ng","$templateCache","DeviceService","HttpService","checkout","contentonly","showPageLoader","device","getSize","xxs","onChange","xs","sm","md","lg","desktop","mobile","isTouch","isIe","isIE","ieVersion","version","isWebp","webp","config","$compileProvider","Environment","commentDirectivesEnabled","cssClassDirectivesEnabled","debugInfoEnabled","lazyImgConfigProvider","setOptions","errorClass","successClass","inViewFunction","inView","$elem","usSpinnerConfigProvider","setDefaults","setTheme","setDelay","toastrConfig","timeOut","closeButton","closeHtml","iconClasses","warning","templates","toast","progressbar","bsValidationConfigProvider","setValidateFieldsOn","setDisplayErrorsAs","tooltipAppendToBody","errorMessagePrefix","dropzoneOpsProvider","uploadMultiple","parallelUploads","maxFilesize","addRemoveLinks","renameFilename","dictRemoveFile","AppService","bsValidationConfig","getParams","getTranslate","translate","forms","setMessages","onunload","bootstrap","strictDi","component","productCtrl","bindings","isProductButton","isCartButton","isModalButton","modalItem","action","btnClass","idLine","commentLine","clickAndCollectInfo","isPrimary","addToCartActive","allowAddToCart","productQuantity","price","designation","titleAdd","titleAlert","titleDetail","titleStore","titleDeleteOk","titleResultOk","titleModifyOk","tooltip","modalCtrl","infosStoreCtrl","storeOnlyMessage","storeUnavailable","gtmCategory","toastr","ModalService","RoutesService","GtmService","addTimeout","blurTimeout","storeSelected","showTTCPrice","unwatch","getItemQuantityInCart","itemQuantityInCart","setItemQuantity","cartQuantity","quantity","isInCart","showLoader","ready","setInputQuantity","setValue","watchValue","isChanged","changedValue","qty","old","active","prices","Price","getProductPrice","inc","addToCart","Comment","idProduct","costTTC","costHT","products","posLoader","getUrlByName","mess","allowHtml","extraData","show","cartLink","removeFromCart","results","Cart","Products","errors","TryLater","ErrorHasOccurred","$onInit","defaultTooltip","Visitor","CardType","ShowTTCPrice","addActive","IsAvailableShipping","IsAvailableInAtLeastOneStorePickUp","alertActive","quickViewActive","quickViewStoreActive","tooltipActive","customDisabled","customDisabledTooltip","Store","Availability","ClickAndCollectAvailability","KeyPickUp","$onDestroy","openQuickView","tempUrl","selectAvailableStore","deleteLine","minus","plus","changed","blurred","fromClassicBtn","comparatorCtrl","btnTooltip","quantities","titleBtn","line","IDLine","IDProduct","step","fieldTabindex","keyEnter","groupClass","getWidth","keypress","blur","newval","getProductsToAdd","sc","pageYOffset","$apply","innerHeight","_mobile","selectpicker","SelectpickerService","ngModel","WindowEventsService","bxSlider","initBxSlider","slider","destroySlider","hide","nb","mode","minSlides","slideMargin","slideWidth","pager","prevSelector","nextSelector","prevText","nextText","moveSlides","infiniteLoop","preventDefaultSwipeX","preventDefaultSwipeY","hideControlOnEnd","onSliderLoad","listen","BxsliderService","CdnService","cdnResponsiveSize","cdnSizes","cdnId","cdnSize","cdnDesignation","cdnExtension","cdnQuality","cdnAbsolute","deregister","res","lazyImg","$set","err","$parent","removeParentIfEmpty","onBodyClick","isOpen","clickMenu","scroll","showMenu","hideMenu","title","$cookies","DateService","setCookiesOK","expires","tomorrow","clickCookiesOK","nextYear","ctrlKey","altKey","isMenuCollapse","toggleMenuCollapse","keyCode","level","resize","fixIeHeight","flip","flipped","toggle","direct","inter","ntime","tplTranslate","getCart","withRefresh","hasCart","HasCart","Quantity","emptyCart","Product","Designation","IDPicture","submit","cartLines","post","messages","ClearCartOK","IntersectionObserver","_sentinel","_element","observer","records","record","targetInfo","boundingClientRect","rootBoundsInfo","rootBounds","bottom","threshold","enable","stick","unobserve","classList","div","observe","dotdotdot","TruncateService","isBot","pPlayer","youtubeUrl","getYouTubeIdFromUrl","youtubeVideoId","adapter","showinfo","features","resizeVideo","afterInit","$mainVideo","VideoPlayerService","$items","menu","noZoomDirective","changeViewport","theme","label","icon","ngRequired","$wrapper","optRequired","inputClass","$label","onInputChange","required","noStar","placeholder","$parse","ngModelInit","text","assign","discountFilter","loc","Localization","DiscountHTMLFormat","DiscountFormat","DiscountDecimalSeparator","DiscountThousandSeparator","getDiscountFilter","$stateful","reg","num","priceFilter","ttc","PriceHTMLFormatVATincluded","PriceHTMLFormatVATexcluded","TTCAmount","HTAmount","TTCDiscountedPrice","HTDiscountedPrice","TTCTotalPrice","HTTotalPrice","TTCPrice","HTPrice","strMontant","PriceFormat","separatorIndex","PriceDecimalSeparator","PriceThousandSeparator","Currency","ISOCode","getPriceFilter","defOps","newOps","Dropzone","dropzone","methods","getDropzone","getAllFiles","files","methodName","$$phase","$root","file","removedfile","loadImage","parseMetaData","exif","orientation","emit","toDataURL","createThumbnail","dropzoneOps","DropzoneService","acceptedFiles","dictFileTooBig","maxFiles","removeAllFiles","addFile","precision","markerConstructor","google","maps","Marker","polylineConstructor","Polyline","circleConstructor","Circle","mapOptions","lat","lng","mapTypeId","MapTypeId","ROADMAP","angulargmUtils","getEventHandlers","gmInfoWindowOptions","model","gmInfoWindow","infoWindow","InfoWindow","addListener","validateLatLng","latLngLiteralEqual","gmCenter","gmZoom","gmBounds","gmMapTypeId","gmMapOptions","gmMapId","bounds","hasCenter","hasZoom","hasBounds","hasMapTypeId","updateScope","addMapListener","getMap","mapTrigger","addMapListenerOnce","$log","angulargmShape","gmObjects","gmId","gmPosition","gmMarkerOptions","gmEvents","createShapeDirective","latLngObj","markerOptions","defers","markers","mapId","getMarkers","addMap","Map","getMaps","getMapPromise","defer","promise","setMarker","newMarker","clearMarkers","setMap","removeMap","_formatEventName","uppercasePluralType","elementOptions","checkRequiredAttributes","updateElements","objects","objectCache","optionsFn","orphaned","getElement","$id","updateElement","addElement","context","major","minor","forEachElementInScope","removeElement","eventObj","ids","objectsName","floatEqual","f1","f2","latLngEqual","l1","l2","LatLng","boundsEqual","b1","b2","LatLngBounds","sw1","getSouthWest","sw2","ne1","getNorthEast","ne2","latLngToObj","latLng","objToLatLng","hasNaN","isNull","isNotaN","assertDefined","func","wait","immediate","callNow","angulargmDefaults","angulargmContainer","_getConfig","_createMap","getDiv","replaceWith","_map","_initDragListeners","_destroy","_listeners","removeListener","types","_elements","scopeIds","_getElements","scopeId","streetView","getStreetView","getVisible","setVisible","addListenerOnce","_newElement","hasElement","elements","removed","forEachElement","allElements","accumulator","mapDiv","defineProperties","writeable","getCenter","panTo","getZoom","setZoom","getBounds","fitBounds","getMapTypeId","setMapTypeId","smoothScroll","callbackBefore","callbackAfter","getElementById","containerId","containerPresent","getScrollLocation","percentage","scrollHeight","internalHeight","currentLocation","startLocation","endLocation","location","offsetParent","offsetTop","getEndLocation","timeLapsed","runAnimation","getEasingPattern","scrollTo","clientHeight","scrollheight","$attrs","scrollIf","exprHandler","targetElement","toasts","previousToastMessage","openToasts","containerDefer","toastId","optionsOverride","_getOptions","_buildNotification","refreshTimer","newTime","isOpened","wasClicked","findToast","deleting","onHidden","maxOpened","open","isDuplicateOfLast","preventDuplicates","isDuplicateOpen","preventOpenDuplicates","shouldExit","newToast","iconClass","cleanOptionsOverride","typeClass","generateEvent","trustAsHtml","toastType","toastIcon","extendedTimeOut","messageClass","onShown","onTap","progressBar","tapToDismiss","titleClass","toastClass","createScope","angularDomEl","badOptions","createToast","autoDismiss","oldToasts","positionClass","pointer-events","_createOrGetContainer","newestOnTop","sibling","lastChild","_notify","toastCtrl","intervalId","currentTimeOut","hideTime","updateProgress","startProgressBar","stopProgressBar","$interval","button","createTimeout","tapToast","$event","$$CookieWriter","cookiePath","baseHref","rawDocument","cookie","encodeURIComponent","domain","toUTCString","secure","cookieLength","samesite","warn","buildCookieString","calcOptions","$$cookieReader","$$cookieWriter","getObject","fromJson","getAll","putObject","toJson","$provide","PLURAL_CATEGORY","DATETIME_FORMATS","AMPMS","DAY","ERANAMES","ERAS","FIRSTDAYOFWEEK","MONTH","SHORTDAY","SHORTMONTH","STANDALONEMONTH","WEEKENDRANGE","fullDate","longDate","medium","mediumDate","mediumTime","short","shortDate","shortTime","NUMBER_FORMATS","CURRENCY_SYM","DECIMAL_SEP","GROUP_SEP","PATTERNS","gSize","lgSize","maxFrac","minFrac","minInt","negPre","negSuf","posPre","posSuf","localeID","pluralCat","opt_precision","lowercase","nodeContains","htmlParser","htmlSanitizeWriter","$sanitizeMinErr","hasBeenInstantiated","svgEnabled","$$sanitizeUri","validElements","svgElements","buf","uri","isImage","enableSvg","addValidElements","htmlElements","addElementsTo","voidElements","htmlVoidElements","addValidAttrs","validAttrs","arrayToMap","$$lowercase","inertBodyElement","getInertBodyElement","mXSSAttempts","innerHTML","attrToMap","attributes","chars","textContent","nextNode","getNonDescendant","uriValidator","ignoreCurrentElement","blockedElements","lkey","uriAttrs","encodeEntities","SURROGATE_PAIR_REGEXP","NON_ALPHANUMERIC_REGEXP","stringToMap","optionalEndTagBlockElements","optionalEndTagInlineElements","optionalEndTagElements","blockElements","inlineElements","htmlAttrs","svgAttrs","lowercaseKeys","elementsMap","newElements","inertDocument","implementation","createHTMLDocument","getDocumentElement","DOMParser","parseFromString","documentMode","stripCustomNsAttrs","attrNode","attrName","removeAttributeNode","encodeURI","xhr","XMLHttpRequest","responseType","send","propName","outerText","$sanitize","LINKY_URL_REGEXP","MAILTO_REGEXP","linkyMinErr","attributesFn","raw","addText","addLink","linkAttributes","validateFieldsOn","displayErrorsAs","messageFilters","shouldValidateOn","_this","addSuccessClass","tooltipPlacement","suppressWarnings","useMessageFilters","filters","getDisplayErrorsAs","getErrorMessagePrefix","getMessageFilters","getTooltipPlacement","shouldAddSuccessClass","validationService","compile","$formElement","$formAttributes","isValidationDisabled","addDirective","ngSubmit","formElement","$attr","formController","$showValidation","$setSubmitted","showValidationState","$hideValidation","$setPristine","$resetValidation","markPristineAfterSubmit","$invalid","focus","submitHandler","$commitViewValue","stopImmediatePropagation","controllers","ngModelController","ngFormController","$formGroupElement","getFormGroupElement","displayValidationState","shouldValidateOnBlur","shouldValidateOnDisplay","shouldValidateOnSubmit","displayErrorAs","displayErrorPreference","validationMessageService","getValidationMessageService","getValidators","validator","attrValue","addValidator","watchBlur","$submitted","submitted","displayOrHideValidationState","showValidation","$valid","$$attr","hideSuccess","hideError","$setUntouched","destroyMessage","displayError","addErrorClass","showErrorMessage","hideErrorMessage","displaySuccess","removeSuccessClass","toggleErrorKeyClasses","$error","dewatcher","$touched","lostFocus","errorElementClass","getErrorContainer","$errorContainer","groupElement","errorContainerHTML","removeErrorClass","getErrorMessage","validationConfig","getErrorTooltip","tooltipID","random","tooltipElement","$errorTooltip","placement","attributeName","parentForm","parents","appendToBody","$position","ttPosition","positionElements","positionArrow","$filter","_genericValidators","validateFn","equalto","getTrigger","triggerEvent","selectors","meta","getMetaInformation","metaInformation","camelCaseToDash","validateableElements","$validators","modelValue","viewValue","$isEmpty","addGenericValidator","genericValidationObject","$parentForm","firstErrorKey","resolveMessage","formGroupElement","displayType","attribute","matchers","validValue","regx","THROTTLE_MILLISECONDS","elem","windowElement","scrollDistance","scrollEnabled","checkWhenEnabled","immediateCheck","useDocumentBottom","unregisterEventListener","checkInterval","offsetHeight","ownerDocument","defaultView","defaultHandler","containerBottom","elementBottom","containerTopOffset","remaining","shouldScroll","infiniteScroll","later","throttled","handleInfiniteScrollDistance","handleInfiniteScrollDisabled","handleInfiniteScrollUseDocumentBottom","changeContainer","newContainer","infiniteScrollDistance","infiniteScrollDisabled","infiniteScrollUseDocumentBottom","infiniteScrollListenForEvent","handleInfiniteScrollContainer","newerContainer","infiniteScrollContainer","infiniteScrollParent","infiniteScrollImmediateCheck","lazyImgConfig","lazyImgHelpers","winDimensions","$win","isListening","checkImagesT","saveWinOffsetT","containers","checkImages","_isInView","isElementInView","stopListening","param","startListening","photo","loaded","onerror","onError","addClassToParent","onSuccess","onLoading","Photo","getOptions","getWinDimensions","setAddClassToParent","setInViewFunction","setSource","removeImage","addContainer","removeContainer","rect","bottomline","right","threshhold","deferTimer","LazyImgMagic","usSpinnerConfig","lazyIf","lazyImage","parentLoadedClass","newSource","_config","_themes","_delay","themes","SpinJSSpinner","spinner","spinnerTheme","spinnerOn","defaultOptions","minRange","maxRange","pushRange","minLimit","maxLimit","getLegend","stepsArray","bindIndexForStepsArray","draggableRange","draggableRangeOnly","showSelectionBar","showSelectionBarEnd","showSelectionBarFromValue","hidePointerLabels","hideLimitLabels","autoHideLimitLabels","readOnly","showTicks","showTicksValues","ticksArray","ticksTooltip","ticksValuesTooltip","vertical","getTickColor","keyboardSupport","enforceStep","enforceRange","noSwitching","onlyBindHandles","onStart","onEnd","rightToLeft","boundPointerLabels","mergeRangeLabelsIfSame","customTemplateScope","logScale","customValueToPosition","customPositionToValue","ariaLabel","ariaLabelledBy","ariaLabelHigh","ariaLabelledByHigh","globalOptions","RzSliderOptions","rzThrottle","Slider","sliderElem","lowValue","highValue","range","rzSliderModel","rzSliderHigh","lowLimit","highLimit","positionProperty","dimensionProperty","handleHalfDim","maxPos","tracking","minValue","valueRange","intermediateTicks","initHasRun","firstKeyDown","internalChange","cmbLabelShown","currentFocusElement","fullBar","selBar","minH","maxH","flrLab","ceilLab","minLab","maxLab","cmbLab","ticks","thrLow","thrHigh","calcDimFn","calcViewDimensions","syncLowValue","syncHighValue","initElemHandles","manageElementsStyle","setDisabledState","setMinAndMax","addAccessibility","updateCeilLab","updateFloorLab","initHandles","manageEventsBindings","onLowHandleChange","onHighHandleChange","resetLabelsValue","resetSlider","unbindEvents","findStepIndex","isDate","getStepValue","sliderValue","applyLowValue","applyHighValue","updateLowHandle","valueToPosition","updateSelectionBar","updateTicksScale","updateAriaAttributes","updateCmbLabel","updateHighHandle","sliderOptions","rzSliderOptions","isNumber","parseStepsArray","customTrFn","custom","legend","refocusPointerIfNeeded","onPointerFocus","ref","focusElement","jElem","rzsp","alwaysHide","hideLabelsForTicks","rzAlwaysHide","hideEl","showEl","bindEvents","rzsv","translateFn","useCustomTr","valStr","getDimension","noLabelInjection","rzsd","roundStep","sanitizeValue","aria-valuenow","aria-valuetext","aria-valuemin","aria-valuemax","handleWidth","barDimension","getTicksArray","translation","round","tick","selected","isTickSelected","-webkit-transform","-moz-transform","-o-transform","-ms-transform","getDisplayValue","valueTooltip","valueTooltipPlacement","setPosition","updateHandles","newPos","getHandleLabelPos","labelName","labelRzsd","nearHandlePos","endOfBarPos","shFloorCeil","flHidden","clHidden","isMinLabAtFloor","isLabelBelowFloorLab","isMinLabAtCeil","isLabelAboveCeilLab","isMaxLabAtCeil","isCmbLabAtFloor","isCmbLabAtCeil","hideCeil","hideFloor","isRTL","pos","dim","floorPos","floorDim","ceilPos","ceilDim","isSelectionBarFromRight","positionForRange","centerPosition","setDimension","lowTr","highTr","labelVal","customStep","steppedDifference","toPrecision","visibility","linearValueToPosition","logValueToPosition","percent","minVal","maxVal","log","positionToValue","linearPositionToValue","logPositionToValue","exp","getEventXY","clientXY","getEventPosition","sliderPos","getEventNames","eventNames","moveEvent","endEvent","getNearestHandle","distanceMin","distanceMax","barTracking","barStart","barMove","onMove","onTickClick","ehMove","ehEnd","callOnStart","fromTick","ceilValue","flrValue","positionTrackingHandle","moveEventName","callOnEnd","onPointerBlur","onKeyboardEvent","onKeyUp","getKeyActions","currentValue","increaseStep","decreaseStep","actions","UP","DOWN","LEFT","RIGHT","PAGEUP","PAGEDOWN","HOME","END","38","40","37","39","33","34","36","35","newMinValue","newMaxValue","positionTrackingBar","getValue","outOfBounds","isAbove","ceilLimit","flrLimit","isUnderFlrLimit","isOverCeilLimit","flrH","ceilH","applyModel","valueChanged","applyMinMaxLimit","applyPushRange","applyMinMaxRange","oppositeValue","callOnChange","pointerType","RzSlider","rzSliderTplUrl","expandingExpr","expanding","expandedExpr","expanded","collapsingExpr","collapsing","collapsedExpr","collapsed","horizontal","cssTo","getScrollFromElement","scrollWidth","display","expandDone","collapseDone","uibCollapse","shouldCollapse","collapse","closeOthers","accordionConfig","groups","openGroup","addGroup","groupScope","that","removeGroup","heading","panelClass","isDisabled","setHeading","accordionCtrl","openClass","toggleOpen","headingId","panelId","accordionGroupCtrl","uibAccordionTransclude","closeable","dismissOnTimeout","activeClass","toggleEvent","buttonConfig","ctrls","buttonsCtrl","ngModelCtrl","uncheckableExpr","uibUncheckable","$render","$modelValue","uibBtnRadio","isActive","uncheckable","$setViewValue","getTrueValue","getCheckboxValue","btnCheckboxTrue","defaultValue","btnCheckboxFalse","service","$locale","dateFilter","orderByFilter","filterFilter","localeId","formatCodeToRegex","SPECIAL_CHARACTERS_REGEXP","getFormatCodeToRegex","constructLiteralFormatter","literalIdx","endIdx","constructFormatterFromIdx","currentPosStr","parser","formatter","toInt","timezoneToOffset","timezone","fallback","requestedTimezoneOffset","parse","addDateMinutes","date","minutes","setMinutes","getMinutes","convertTimezoneToLocal","dateTimezoneOffset","getTimezoneOffset","parsers","formatters","regex","year","_date","setFullYear","getFullYear","month","getMonth","getDate","hours","milliseconds","seconds","sign","getParser","overrideParser","createFormatter","baseDate","quoteIndex","inLiteral","matcher","createParser","tzOffset","fields","dt","getHours","getSeconds","getMilliseconds","mapper","datesetter","setUTCFullYear","timesetter","setUTCHours","setHours","toTimezone","fromTimezone","datepickerMode","formatDay","formatMonth","formatYear","formatDayHeader","formatDayTitle","formatMonthTitle","maxDate","maxMode","minDate","minMode","monthColumns","ngModelOptions","shortcutPropagation","showWeeks","yearColumns","yearRows","datepickerConfig","$datepickerLiteralWarning","$datepickerSuppressError","dateParser","watchListeners","datepickerOptions","modes","startingDay","getOption","refreshView","uniqueId","ngDisabled","dateObject","compare","activeDate","activeDateId","uid","ngModelCtrl_","$options","createChild","extractOptions","initDate","render","$viewValue","selectedDt","_refreshView","activeDt","$setValidity","createDateObject","today","past","future","customClass","dateDisabled","arrays","select","setMode","years","months","toggleMode","13","32","keydown","shiftKey","handleKeyDown","DAYS_IN_MONTH","getDaysInMonth","getISO8601WeekNumber","checkDate","setDate","getDay","setMonth","getDates","startDate","dates","firstDayOfMonth","numDisplayedFromPreviousMonth","firstDate","days","secondary","labels","abbr","full","rows","weekNumbers","thursdayIndex","numWeeks","curWeek","date1","date2","_date1","_date2","yearHeaderColspan","columns","getStartingYear","yearpickerInit","datepickerCtrl","ON_REGEXP","IS_REGEXP","tElement","tAttrs","linkedScopes","instances","expToData","onExpMatches","uibIsClass","onExp","exps","clazz","compareWithExp","watchFn","compareWithVal","newActivated","instance","thisVal","lastActivated","watcher","addForExp","removeScope","removedScope","targetScope","newWatchScope","SCROLLBAR_WIDTH","BODY_SCROLLBAR_WIDTH","OVERFLOW_REGEX","normal","PLACEMENT_REGEX","auto","primary","BODY_REGEX","getRawNode","parseStyle","isFinite","scrollbarWidth","isBody","bodyElem","scrollElem","offsetWidth","scrollbarPadding","elemStyle","paddingRight","paddingBottom","scrollParent","tagName","widthOverflow","originalRight","heightOverflow","originalBottom","isScrollable","includeHidden","overflowRegex","overflowY","overflowX","includeSelf","documentEl","excludeStatic","spStyle","includeMagins","elemOffset","marginTop","marginLeft","parentOffset","clientTop","clientLeft","elemBCR","pageXOffset","viewportOffset","useDocument","includePadding","offsetBCR","offsetParentBCR","offsetParentStyle","paddingTop","paddingLeft","parsePlacement","autoPlace","hostElem","targetElem","hostElemPos","targetElemPos","targetElemStyle","adjustedSize","marginRight","marginBottom","xOverflow","yOverflow","adjustTop","placementClasses","containerPosition","initialHeight","currentHeight","innerElem","isTooltip","arrowElem","arrowCss","borderProp","borderWidth","borderRadiusProp","createNew","hasKey","resolver","setResolver","invocables","promises","resolves","resolveObj","resolveIter","$modalStack","backdropClass","linkFn","modalInClass","NOW_CLOSING_EVENT","setIsAsync","modalOptions","windowTopClass","modal","getTop","backdrop","currentTarget","dismiss","$isRendered","modalRenderDeferObj","animationPromise","modalRendered","activeElement","inputWithAutofocus","modalAnimation","uibModalAnimationClass","$$multiMap","$$stackedMap","$uibPosition","backdropDomEl","backdropScope","OPENED_MODAL_CLASS","openedWindows","openedClasses","topModalIndex","previousTopOpenedModal","ARIA_HIDDEN_ATTRIBUTE_NAME","SNAKE_CASE_REGEXP","backdropIndex","topBackdropIndex","opened","removeModalWindow","modalInstance","elementToReceiveFocus","modalWindow","appendToElement","modalDomEl","removeAfterAnimate","modalScope","modalBodyClass","openedClass","areAnyOpen","toggleTopWindowClass","closedDeferred","checkRemoveBackdrop","toggleSwitch","domEl","asyncDeferred","asyncPromise","afterAnimating","keydownListener","keyboard","loadFocusElementList","focusChanged","isFocusInFirstItem","isModalFocused","focusLastFocusableElement","isFocusInLastItem","focusFirstFocusableElement","broadcastClosing","resultOrReason","closing","unhideBackgroundElements","hiddenEl","newHiddenCount","newBackdropIndex","modalOpener","deferred","renderDeferred","currBackdropIndex","class","ng-style","uib-modal-animation-class","modal-in-class","letter","modal-instance","template-url","windowTemplateUrl","window-top-class","role","aria-labelledby","aria-describedby","ariaDescribedBy","tabindex","windowClass","$$topModalIndex","applyAriaHidden","getSiblings","elemIsAlreadyHidden","ariaHiddenCount","$$uibDestructionScheduled","dismissAll","topModal","modalDomE1","getClientRects","$modalProvider","$uibResolve","$modal","promiseChain","getPromiseChain","templateAndResolvePromise","samePromise","modalResultDeferred","modalOpenedDeferred","modalClosedDeferred","modalRenderDeferred","closed","rendered","resolveWithTemplate","tplAndVars","providedScope","$close","$dismiss","ctrlInstance","ctrlInstantiate","ctrlLocals","constructLocals","instanceOnScope","injectable","$resolve","$uibModalInstance","bindToController","stack","removeTop","setNumPages","numPages","_watchers","itemsPerPage","totalPages","calculateTotalPages","updatePage","newTotal","oldTotal","totalItems","selectPage","getText","noPrevious","noNext","uibPaging","uibPaginationConfig","maxSize","forceEllipses","boundaryLinkNumbers","pageLabel","$page","makePage","boundaryLinks","directionLinks","originalRender","pages","currentPage","startPage","endPage","isMaxSized","previousPageSet","secondPageLink","firstPageLink","nextPageSet","secondToLastPageLink","lastPageLink","getPages","firstText","previousText","lastText","paginationCtrl","placementClassPrefix","popupDelay","popupCloseDelay","useContentExp","triggerMap","mouseenter","click","outsideClick","none","setTriggers","triggers","openedTooltips","keypressListener","ttType","defaultTriggerShow","getTriggers","directiveName","startSym","startSymbol","endSym","endSymbol","tElem","tooltipLinker","tooltipCtrl","tooltipLinkedScope","transitionTimeout","showTimeout","hideTimeout","positionTimeout","adjustmentTimeout","lastPlacement","hasEnableExp","ttScope","repositionScheduled","isOpenParse","contentParse","observers","positionTooltip","elementPos","adjustment","toggleTooltipBind","hideTooltipBind","showTooltipBind","cancelHide","popupClass","closeDelay","prepareTooltip","cancelShow","prepObservers","createTooltip","assignIsOpen","removeTooltip","bodyHideTooltipBind","hideOnEscapeKey","origScope","contentExp","showTriggers","hideTriggers","unregisterTriggers","appendToBodyVal","appendKey","tooltipTemplateTranscludeScope","changeCounter","cleanupLastIncludeContent","parseAsResourceUrl","uibTooltipTemplateTransclude","thisChangeId","tooltipAnimationClass","$uibTooltip","originScope","uibTitle","oldIndex","destroyed","findTabIndex","tabs","previousIndex","previousSelected","tab","onDeselect","$selectedIndex","onSelect","addTab","t1","t2","newActiveIndex","removeTab","newActiveTabIndex","justified","centered","tabsetCtrl","disable","$transcludeFn","uibTabContentTransclude","headingElement","stateOn","stateOff","enableReset","titles","ratingConfig","$formatters","tmpTitles","ratingStates","buildTemplateObjects","states","getTitle","rate","readonly","newViewValue","onHover","onLeave","onKeydown","ratingCtrl","appendToOpenClass","openScope","openedContainers","isOnlyOpen","dropdownScope","openedDropdowns","toClose","dropdown","closeDropdown","keybindFilter","dropdownToClose","getAutoClose","toggleElement","getToggleElement","dropdownElement","getDropdownElement","focusToggleElement","dropdownElementTargeted","toggleElementTargeted","isKeynavEnabled","focusDropdownEntry","dropdownConfig","uibDropdownService","templateScope","getIsOpen","setIsOpen","toggleInvoker","onToggle","keynavEnabled","removeDropdownMenu","dropdownMenu","keyboardNav","autoClose","elems","selectedOption","wasOpen","dropdownAppendTo","appendToEl","dropdownAppendToBody","rightalign","appendOffset","openContainer","dropdownOpenClass","hasOpenClass","dropdownMenuTemplateUrl","tplContent","newEl","dropdownCtrl","dropdownNested","tplUrl","toggleDropdown","aria-haspopup","aria-expanded","altInputFormats","clearText","closeOnDateSelection","closeText","currentText","datepickerPopup","datepickerPopupTemplateUrl","datepickerTemplateUrl","html5Types","datetime-local","onOpenFocus","showButtonBar","datepickerPopupConfig","$datepickerPopupLiteralWarning","dateFormat","popupEl","datepickerEl","scrollParentEl","$popup","isHtml5DateInput","parseDateString","parseDate","documentClickBind","popup","dpContainsTarget","popupContainsTarget","inputKeydownBind","positionPopup","dpElement","popupPlacement","_ngModel_","datepickerAppendToBody","uibDatepickerPopup","newDateFormat","ng-model","ng-change","$$parserName","$parsers","$viewChangeListeners","dateSelection","onLoad","Message","Recipients","modalTitle","addRecipient","removeRecipient","IsLogged","Email","FirstName","LastName","loading","resultMessage","suggestionsUrl","gtmId","inject","script","dataLayerPush","tmp_DataLayer","newData","google_tag_manager","dataLayer","tmpPush","gtmPush","searchResults","eventLabel","QueryFullText","eventAction","searchPage","searchNbresults","eventCategory","FacetsSelected","facet","filterType","filterName","Values","category","ecommerce","Reference","productId","productBrand","Brand","productName","productUnitPriceAti","productUnitPriceTf","productDiscountAti","HasDiscount","productDiscountTf","productInstock","CentralStock","StoreStock","envChannel","userDevice","gtmClickEvent","$uibModal","ctrlAs","onClosed","onOpened","openModal","openCmsModal","autoScroll","modalAutoScroll","$modalDialog","$scrollContainer","overflow-x","overflow-y","max-height","CarouselService","thisScope","onInitialize","onInitialized","owlLoaded","$tab","onRefreshed","eval","onResized","lazy","onLoadLazy","lazyId","onLoadedLazy","resizeProductsCarousels","$targ","resizeProductGallery","productsGridService","tmpId","getId","resizeGrid","elemId","$divs","col","targ","RoutingService","isCache","yOffset","query","noreplace","routeToKeep","unsubscribe","router","cart","_routes","stepTo","stepFrom","ex","rejection","UseLogs","Key","href","routing","scrollCache","getPath","ngRouter","ngRoute","categoryId","q","backToStore","newLocation","popstate","windowScroll","initRouter","getScrollPos","routingService","$routeProvider","$locationProvider","$httpProvider","Routes","DefaultLocalization","useApplyAsync","headers","common","interceptors","authorize","authService","LoadService","AccountService","getReturnFolders","getShippingAddresses","getLocation","html5Mode","requireBase","rewriteLinks","routesService","getRoute","pathname","origin","isCart","responseError","CartIdentification","CartShipping","CartPayment","CartValidation","CartOnePageCheckout","getLinks","links","initAccount","logout","setManagement","userIcon","pageLoaded","Account","hasServices","IsManagementGiftCards","IsManagementCredits","IsManagementLoyaltyPoints","hasOrders","IsManagementOrderTracking","IsManagementInvoicesAndCreditsTracking","IsManagementWebCartTracking","IsManagementReturns","IsManagementComplaint","IsManagementNumericProducts","getOrders","getOrder","getEligibleReturnFolders","getInvoiceToken","idFolder","$http","appPromise","cartRequests","Content-type","X-Requested-With","VisitorContext","isPro","WebsiteVisitorContext","VisitorIsPro","noevent","productsToCart","product","Elements","Customization","fromCart","checkAvailability","priceObj","Discount","DegressivePrice","updateStore","visitorContext","$$state","updateKey","extension","quality","absolute","split1","UrlImages","split2","URLSite","stringToDate","dateDay","$cacheFactory","addressCache","gpsCache","getDefer","getClustererDefer","GMAP","GMAPOAuthClient","GMAPOAuthChannel","GMAPKey","gMapsInit","getClusterer","MarkerClusterer","getGeoCode","address","Geocoder","geocode","country","address_components","long_name","Latitude","geometry","Longitude","Country","getGeoCodeByGps","gps","strGps","CountryCode","short_name","formatted_address","rel","loadNewModules","insertBeforeElem","nextSibling","useCssLoadPatch","ua","platform","appVersion","versionMatch","tries","DocumentTouch","rule","ret","docOverflow","docElement","fake","getBody","cssText","testStyles","touchevents","_el","isOpera","isIE9","isIE10","isIE11","isIEEdge","safeApply","assureList","getCurrentMatch","currentStyle","fontFamily","listenerFunc","currentMatch","previousMatch","wasPreviousMatch","doesCurrentMatch","feature","lossy","api","throttleTime","isOn","debounceTime","listenerType","LogService","openStoreChoice","isAccountCreate","targetCtrl","postalCode","formData","PostCode","setStore","RememberMe","returnUrl","Address","AddressApartment","AddressBuilding","AddressLocality","Phone","MobilePhone","ConfirmEmail","IDSign","IDCard","privateArea","redirect","Errors","ErrorMessage","activitiesJson","refreshSelects","initActivity","IDActivity","activities","Activities","IDActivityDomain","domainSelected","elt","modelCtrl","std","spe","spePhoneMessages","accountPhone","$validate","phone","speMobileMessage","accountMobile","spePostCodeMessage","accountPostcode","postCode","newClient","templateCreate","createOpen","loadedAccountCreate","toggleAccountCreate","back","history","activeIn","cartRecovery","recover","Recover","IDFolder","CartRecovered","loginOK","AccountHome","Global","login","CartRecovery","lastCart","openForgotPassword","email","Login","mailRecognized","linkCreate","authCtrl","showCreate","restore","titleLogin","titleLogout","$body","isLogged","visitor","FullName","AccountUpdate","searchFinderService","goSearch","searchStr","Search","inputChangeHandler","fromBtn","setCtrl","canceler","getCtrl","nbPerPage","categories","facets","brands","reviews","FieldName","FieldValue","IDCategory","NbFrom","NbSize","FiltersSelected","BrandsSelected","ReviewsSelected","ProductTypesSelected","PriceRangeSelected","Sort","setGTMFilters","busy","PriceRange","CategoriesSelected","getSearch","nextPage","maxPage","esURL","Id","setDataFilters","setSelectedFilters","searchCtrl","searching","updateSearchApi","Themes","th","KeyTheme","themeClass","themeName","productData","datalayer","Selected","sel","itemValue","Value","selectPrices","selectedMinPrice","minPrice","selectedMaxPrice","maxPrice","Gte","Lte","rangeText","startMin","startMax","pricesActive","sliderId","facetsSpe","checkValue","selectedValue","isColor","colorImg","No","Yes","Colon","trustAsResourceUrl","SearchFinderApi","clearResults","selectFilter","byName","updateSearch","elementHeader","elementMainNav","setCategory","setFacet","setBrand","setReview","setType","tmp","word","idPictureLg","idPictureSm","pictureSizeLg","pictureSizeSm","getPictures","setPictures","srcLg","srcSm","idCategory","searchQuery","CategoryFiltersCacheService","CategoryService","CategoryCacheService","submitSearch","addWord","removeWord","updateUrl","openDropdown","$button","$menu","siblings","initCheck","selectId","removeFilter","removeFilters","isReview","isPrices","fs","categoryName","sortType","gridCtrl","getGridCtrl","filtered","noScroll","setFilters","getFilters","updateFilters","updateFilterData","filteredActive","noresult","nbProducts","paginationEnabled","totalSelectedCount","selectedCount","locSearch","queries","removeAllEnabled","totalProducts","getProducts","choiceFilter","resultDeleteBadItemFilter","breadcrumb","preProcess","iScrollMaxPages","postProcess","listProducts","productPosition","getUrl","pageView","list_products","setGTMProducts","nextSearchPage","routeUrl","decodeURI","sortTitle","InfiniteScrollApi","loadCache","setGridCtrl","iScrollPage","iScrollNbPerPage","iScrollPageEnabled","setSort","innerText","gotoPage","gotoSearchPage","showPagination","removeAll","setProducts","sortParam","SortType","MainPicture","ReviewsInfo","Count","Average","HTMLShortDescription","IsGroupingProduct","IsCustomizable","AllowAddToCart","htmlReduction","htmlPrice","Properties","KeyProperty","ClickAndCollectInfo","ThemesLabel","Pictos","isComparable","IDCardType","Text1","ThemeGroup","array","bg","reductionClass","emailChanged","form","fieldName","FormService","Attachments","dzOptions","paramName","dzCallbacks","successmultiple","ServerName","serverName","messageSent","messageSentOK","infos","ville","dep","formOpened","specific","contactPhone","contactMobile","z-index","socialsBg","lazyBg","inspiration","inspirIsInView","GMaps","StoresService","initAutocomplete","autocomplete","places","Autocomplete","componentRestrictions","submitStore","setAddress","token","isTokenValid","Token","PasswordModified","backLink","customizationController","productService","currentModel","getProductCustomisation","idGroup","Items","Group","Field","CustomizationType","Code","reqPlaceholder","Required","AdditionalCostTTC","AdditionalCostHT","Fields","field","dateOptions","successfile","setCustomization","initAside","showAside","idKit","updateComponent","setKitElement","getProduct","Components","customGroups","groupTitle","groupFirstElement","productDefault","IDProductDefault","selectCustomComponent","KitQuantity","SelectedProduct","Attributes","initComponent","changeAttribute","jsonPrice","txtFirstRange","txtRange","txtLastRange","caption","setPricesData","EcoContribution","sliders","steps","lastValue","$main","$sub","$video","openLightGallery","dynamicEl","thumb","lightGallery","nextHtml","prevHtml","fullscreenHtml","dynamic","startClass","galleryImgLoader","zoomId","zoomSize","zoomDesignation","socialshare","socialshareUrl","socialshareText","socialshareMedia","socialshareHashtags","socialshareEmail","appId","urlString","facebookShare","ViewEmail","Url","zoomLoaded","productsData","setProduct","getActive","updateFromCart","showEcoContribution","nbReviews","eco","setPrice","setProductPrice","initZoom","galleryZoomInit","IDCustomizationListItem","setProductCustomization","setQuantity","setProductQuantity","getProductsData","readMore","openModalReviews","linkForm","messageTitle","successMessage","MessageSent","messageText","customization","idKitComponent","IDKitComponent","reviewsCache","capacity","addReview","getReviews","note","setRelevance","positive","clearReviewsCache","ReviewsService","ReviewsConfig","cookies","Reviews","CurrentPageReviews","review","Response","IDReview","inactive","setPage","CurrentSort","CurrentFilter","getAveragePercent","clip","getGradePercent","setFilter","openReview","messageOK","formAdd","CompareService","updateProductsData","resized","tmpProducts","len2","len1","props","IsInTable","PropertyType","TextValue","resizeProducts","wItem","getNbProducts","titleRemove","unwatchEvent","getChecked","checked","updateCookie","cancelPromises","canceller","clickGTMFooter","openAccountLink","clickGTM","NewsletterOK","newsletterConnect","NewsletterDejaOK","startAnimate","stopAnimate","cookiesTopPromos","switchWebSite","keySiteInstance","keyWebInstanceSite","$nav","origSize","menuStyle","resizeMenus","font-size","psOpen","psClose","closeDone","openDone","mainNavCtrl","expandMenu","reduceMenu","initMenu","openMenu","backMenu","closeMenu","memberYet","updateCtrl","afterLogin","isNotMember","idCard","setMember","unevent","check","selectStore","idStore","isAccountUpdate","IDStore","IsAccountCreate","ClickAndCollect","daysModel","strOneTime","strTwoTimes","strClosed","initStore","getOpeningHours","store","Coordinate","stylers","saturation","lightness","showMap","getMarkerOpts","marker","labelOrigin","Point","fontWeight","isAvailabilityStore","setStoreData","IsAvailabilityStore","IsAvailableInStorePickUp","PickUpKey","PickUpDate","getDateAvailability","dmy","restoreQuickView","CurrentDayIndex","productOpenStoreChoice","availableFilter","latitude","longitude","featureType","OpeningHours","activeTab","dispatchEvent","CustomEvent","getAddress","point","day","amStart","amEnd","pmStart","pmEnd","IsOpen","Date1Start","Date1End","Date2Start","Date2End","Exception","stores","mapListerner","markerClusterer","initStores","linkStore","getSearchGps","City","showMapResults","city","searchLocation","addSearchLocation","nearPoint","minDist","Distance","spherical","computeDistanceBetween","km","DistanceKm","gestureHandling","gridSize","maxZoom","textColor","addressSearch","newSearch","showStore","ShowPointsList","ShowProductStock","productStock","setShowPointsList","closePointInfo","pointInfos","openDetail","StoresDetail","$list","$point","dif","panBy","navigateToStore"],"mappings":"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,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,KACAC,IAAA,KAAAC,IAAA,KAAAC,IAAA,KAAAC,IAAA,KAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IACAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IACAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,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A,CAAA,WAAA,SAAA26E,GACA,IAAAC,EAAA,MAAAA,EAAA,QACAD,EAAAt6E,MAAA,UAAA,CACAw6E,iBAAA,CACAC,MAAA,CACA,KACA,MAEAC,IAAA,CACA,WACA,QACA,QACA,WACA,QACA,WACA,UAEAC,SAAA,CACA,qBACA,sBAEAC,KAAA,CACA,YACA,aAEAC,eAAA,EACAC,MAAA,CACA,UACA,UACA,OACA,QACA,MACA,OACA,UACA,OACA,YACA,UACA,WACA,YAEAC,SAAA,CACA,OACA,OACA,OACA,OACA,OACA,OACA,QAEAC,WAAA,CACA,QACA,QACA,OACA,OACA,MACA,OACA,QACA,OACA,QACA,OACA,OACA,QAEAC,gBAAA,CACA,UACA,UACA,OACA,QACA,MACA,OACA,UACA,OACA,YACA,UACA,WACA,YAEAC,aAAA,CACA,EACA,GAEAC,SAAA,gBACAC,SAAA,WACAC,OAAA,mBACAC,WAAA,UACAC,WAAA,WACAC,MAAA,gBACAC,UAAA,UACAC,UAAA,SAEAC,eAAA,CACAC,aAAA,IACAC,YAAA,IACAC,UAAA,IACAC,SAAA,CACA,CACAC,MAAA,EACAC,OAAA,EACAC,QAAA,EACAC,QAAA,EACAC,OAAA,EACAC,OAAA,IACAC,OAAA,GACAC,OAAA,GACAC,OAAA,IAEA,CACAR,MAAA,EACAC,OAAA,EACAC,QAAA,EACAC,QAAA,EACAC,OAAA,EACAC,OAAA,IACAC,OAAA,KACAC,OAAA,GACAC,OAAA,QAIA75C,GAAA,KACA85C,SAAA,KACAC,UAAA,SAAAp6E,EAAAq6E,GAAA,IAAA95E,EAAA,EAAAP,EAAA,OAAA,GAAAO,GAAA,GAAAA,EAAA03E,EAAAA,QCrHA,SAAAt4E,EAAA2qC,GAAA,aAaA,IACA3iC,EACAX,EACAiC,EACAgiB,EACA2lB,EACA0pC,EACArtC,EACAstC,EACAC,EACAC,EAVAC,EAAApwC,EAAAwB,SAAA,aAqrBAxB,EAAAjtC,OAAA,aAAA,IACA+pD,SAAA,YAjjBA,WACA,IAAAuzB,GAAA,EACAC,GAAA,EAEAp9E,KAAA0zC,KAAA,CAAA,gBAAA,S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","file":"master.min.js","sourcesContent":["//Windows Phone 8 and Internet Explorer 10 FIX\r\nif (navigator.userAgent.match(/IEMobile\\/10\\.0/)) {\r\n var msViewportStyle = document.createElement('style');\r\n msViewportStyle.appendChild(\r\n document.createTextNode('@-ms-viewport{width:auto!important}')\r\n );\r\n document.getElementsByTagName('head')[0].appendChild(msViewportStyle);\r\n}","/* eslint-disable */\r\n/* global define, module */\r\n(function (root, factory) {\r\n\tif (typeof define === 'function' && define.amd) {\r\n\t\tdefine( [], factory );\r\n\t} else if (typeof module === 'object') {\r\n\t\tmodule.exports = factory();\r\n\t} else {\r\n\t\troot.format = factory();\r\n\t}\r\n}(this, function () {\r\n\r\n\treturn function (mask, value) {\r\n\t\t'use strict';\r\n\t\tif ( !mask || isNaN( +value ) ) {\r\n\t\t\treturn value; // return as it is.\r\n\t\t}\r\n\r\n\t\tvar isNegative, result, decimal, group, posLeadZero, posTrailZero, posSeparator,\r\n\t\t\tpart, szSep, integer,\r\n\r\n\t\t\t// find prefix/suffix\r\n\t\t\tlen = mask.length,\r\n\t\t\tstart = mask.search( /[0-9\\-\\+#]/ ),\r\n\t\t\tprefix = start > 0 ? mask.substring( 0, start ) : '',\r\n\t\t\t// reverse string: not an ideal method if there are surrogate pairs\r\n\t\t\tstr = mask.split( '' ).reverse().join( '' ),\r\n\t\t\tend = str.search( /[0-9\\-\\+#]/ ),\r\n\t\t\toffset = len - end,\r\n\t\t\tsubstr = mask.substring( offset, offset + 1 ),\r\n\t\t\tindx = offset + ( ( substr === '.' || ( substr === ',' )) ? 1 : 0 ),\r\n\t\t\tsuffix = end > 0 ? mask.substring( indx, len ) : '';\r\n\r\n\t\t// mask with prefix & suffix removed\r\n\t\tmask = mask.substring( start, indx );\r\n\r\n\t\t// convert any string to number according to formation sign.\r\n\t\tvalue = mask.charAt( 0 ) === '-' ? -value : +value;\r\n\t\tisNegative = value < 0 ? value = -value : 0; // process only abs(), and turn on flag.\r\n\r\n\t\t// search for separator for grp & decimal, anything not digit, not +/- sign, not #.\r\n\t\tresult = mask.match( /[^\\d\\-\\+#]/g );\r\n\t\tdecimal = ( result && result[ result.length - 1 ] ) || '.'; // treat the right most symbol as decimal\r\n\t\tgroup = ( result && result[ 1 ] && result[ 0 ] ) || ','; // treat the left most symbol as group separator\r\n\r\n\t\t// split the decimal for the format string if any.\r\n\t\tmask = mask.split( decimal );\r\n\t\t// Fix the decimal first, toFixed will auto fill trailing zero.\r\n\t\tvalue = value.toFixed( mask[ 1 ] && mask[ 1 ].length );\r\n\t\tvalue = +( value ) + ''; // convert number to string to trim off *all* trailing decimal zero(es)\r\n\r\n\t\t// fill back any trailing zero according to format\r\n\t\tposTrailZero = mask[ 1 ] && mask[ 1 ].lastIndexOf( '0' ); // look for last zero in format\r\n\t\tpart = value.split( '.' );\r\n\t\t// integer will get !part[1]\r\n\t\tif ( !part[ 1 ] || ( part[ 1 ] && part[ 1 ].length <= posTrailZero ) ) {\r\n\t\t\tvalue = ( +value ).toFixed( posTrailZero + 1 );\r\n\t\t}\r\n\t\tszSep = mask[ 0 ].split( group ); // look for separator\r\n\t\tmask[ 0 ] = szSep.join( '' ); // join back without separator for counting the pos of any leading 0.\r\n\r\n\t\tposLeadZero = mask[ 0 ] && mask[ 0 ].indexOf( '0' );\r\n\t\tif ( posLeadZero > -1 ) {\r\n\t\t\twhile ( part[ 0 ].length < ( mask[ 0 ].length - posLeadZero ) ) {\r\n\t\t\t\tpart[ 0 ] = '0' + part[ 0 ];\r\n\t\t\t}\r\n\t\t} else if ( +part[ 0 ] === 0 ) {\r\n\t\t\tpart[ 0 ] = '';\r\n\t\t}\r\n\r\n\t\tvalue = value.split( '.' );\r\n\t\tvalue[ 0 ] = part[ 0 ];\r\n\r\n\t\t// process the first group separator from decimal (.) only, the rest ignore.\r\n\t\t// get the length of the last slice of split result.\r\n\t\tposSeparator = ( szSep[ 1 ] && szSep[ szSep.length - 1 ].length );\r\n\t\tif ( posSeparator ) {\r\n\t\t\tinteger = value[ 0 ];\r\n\t\t\tstr = '';\r\n\t\t\toffset = integer.length % posSeparator;\r\n\t\t\tlen = integer.length;\r\n\t\t\tfor ( indx = 0; indx < len; indx++ ) {\r\n\t\t\t\tstr += integer.charAt( indx ); // ie6 only support charAt for sz.\r\n\t\t\t\t// -posSeparator so that won't trail separator on full length\r\n\t\t\t\t/*jshint -W018 */\r\n\t\t\t\tif ( !( ( indx - offset + 1 ) % posSeparator ) && indx < len - posSeparator ) {\r\n\t\t\t\t\tstr += group;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tvalue[ 0 ] = str;\r\n\t\t}\r\n\t\tvalue[ 1 ] = ( mask[ 1 ] && value[ 1 ] ) ? decimal + value[ 1 ] : '';\r\n\r\n\t\t// remove negative sign if result is zero\r\n\t\tresult = value.join( '' );\r\n\t\tif ( result === '0' || result === '' ) {\r\n\t\t\t// remove negative sign if result is zero\r\n\t\t\tisNegative = false;\r\n\t\t}\r\n\r\n\t\t// put back any negation, combine integer and fraction, and add back prefix & suffix\r\n\t\treturn prefix + ( ( isNegative ? '-' : '' ) + result ) + suffix;\r\n\t};\r\n\r\n}));\r\n","!function(e){if(\"object\"==typeof exports&&\"undefined\"!=typeof module)module.exports=e();else if(\"function\"==typeof define&&define.amd)define([],e);else{var t;t=\"undefined\"!=typeof window?window:\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:this,t.hoverintent=e()}}(function(){return function e(t,n,o){function r(u,f){if(!n[u]){if(!t[u]){var s=\"function\"==typeof require&&require;if(!f&&s)return s(u,!0);if(i)return i(u,!0);var c=new Error(\"Cannot find module '\"+u+\"'\");throw c.code=\"MODULE_NOT_FOUND\",c}var a=n[u]={exports:{}};t[u][0].call(a.exports,function(e){var n=t[u][1][e];return r(n?n:e)},a,a.exports,e,t,n,o)}return n[u].exports}for(var i=\"function\"==typeof require&&require,u=0;u-1;);return r}function A(n,t){for(var r=n.length;r--&&p(t,n[r],0)>-1;);return r}function z(n,t){return null==n?Xr:n[t]}function E(n){return ti.test(n)}function I(n){return ri.test(n)}function S(n){var t=-1,r=Array(n.size);return n.forEach(function(n,e){r[++t]=[e,n]}),r}function T(n,t){return function(r){return n(t(r))}}function L(n){\r\nvar t=-1,r=Array(n.size);return n.forEach(function(n){r[++t]=n}),r}function k(n,t,r){for(var e=r-1,u=n.length;++e-1}function J(n,t){var r=this.__data__,e=yn(r,n);return e<0?(++this.size,r.push([n,t])):r[e][1]=t,this}function K(n){var t=-1,r=null==n?0:n.length;for(this.clear();++t0&&r(f)?t>1?mn(f,t-1,r,e,u):c(u,f):e||(u[u.length]=f)}return u}function On(n,t){return n&&ao(n,t,Dr)}function An(n,t){t=Xn(t,n);for(var r=0,e=t.length;null!=n&&r=Gi(t,r)&&n-1;)f!==n&&Di.call(f,a,1),Di.call(n,a,1);return n}function Vn(n,t){for(var r=n?t.length:0,e=r-1;r--;){var u=t[r];if(r==e||u!==i){var i=u;Dt(u)?Di.call(n,u,1):Qn(n,u)}}return n}function Hn(n,t){return vo(Ht(n,t,Hr),n+\"\")}function Yn(n,t,r){var e=-1,u=n.length;t<0&&(t=-t>u?0:u+t),r=r>u?u:r,r<0&&(r+=u),u=t>r?0:r-t>>>0,t>>>=0;for(var i=Array(u);++e=e?n:Yn(n,t,r)}function tt(n,t){if(t)return n.slice();var r=n.length,e=Ui?Ui(r):new n.constructor(r);return n.copy(e),e}function rt(n){var t=new n.constructor(n.byteLength);\r\nreturn new ki(t).set(new ki(n)),t}function et(n,t){return new n.constructor(t?rt(n.buffer):n.buffer,n.byteOffset,n.byteLength)}function ut(t,r,e){return f(r?e(S(t),ie):S(t),n,new t.constructor)}function it(n){var t=new n.constructor(n.source,eu.exec(n));return t.lastIndex=n.lastIndex,t}function ot(n,r,e){return f(r?e(L(n),ie):L(n),t,new n.constructor)}function ct(n){return io?Object(io.call(n)):{}}function ft(n,t){return new n.constructor(t?rt(n.buffer):n.buffer,n.byteOffset,n.length)}function at(n,t){\r\nif(n!==t){var r=n!==Xr,e=null===n,u=n===n,i=Sr(n),o=t!==Xr,c=null===t,f=t===t,a=Sr(t);if(!c&&!a&&!i&&n>t||i&&o&&f&&!c&&!a||e&&o&&f||!r&&f||!u)return 1;if(!e&&!i&&!a&&n=c)return f;return f*(\"desc\"==r[e]?-1:1)}}return n.b-t.b}function st(n,t){var r=-1,e=n.length;for(t||(t=Array(e));++r1?r[u-1]:Xr,o=u>2?r[2]:Xr;for(i=n.length>3&&typeof i==\"function\"?(u--,i):Xr,o&&Nt(r[0],r[1],o)&&(i=u<3?Xr:i,u=1),t=Object(t);++e-1?u[i?t[o]:o]:Xr}}function wt(n,t,r,e,u,i){var o=r&fe,c=n.length,f=t.length;if(c!=f&&!(o&&f>c))return false;var l=i.get(n);if(l&&i.get(t))return l==t;var s=-1,h=true,p=r&ae?new en:Xr;for(i.set(n,t),i.set(t,n);++s-1&&n%1==0&&n0){if(++t>=le)return arguments[0]}else t=0;return n.apply(Xr,arguments)}}function Kt(n){if(typeof n==\"string\"||Sr(n))return n;var t=n+\"\";return\"0\"==t&&1/n==-he?\"-0\":t}function Qt(n){if(null!=n){try{return Oi.call(n)}catch(n){}\r\ntry{return n+\"\"}catch(n){}}return\"\"}function Xt(n,t,r){var e=null==n?0:n.length;if(!e)return-1;var u=null==r?0:Lr(r);return u<0&&(u=Wi(e+u,0)),h(n,Et(t,3),u)}function nr(n){var t=null==n?0:n.length;return t?n[t-1]:Xr}function tr(n,t){return n&&n.length&&t&&t.length?qn(n,t):n}function rr(n,t,r){return n&&n.length&&t&&t.length?qn(n,t,Et(r,2)):n}function er(n,t){var r=[];if(!n||!n.length)return r;var e=-1,u=[],i=n.length;for(t=Et(t,3);++e-1:!!u&&p(n,t,r)>-1}function cr(n,t){return(mo(n)?o:Fn)(n,Et(t,3))}function fr(n,t,r){var e=mo(n)?f:d,u=arguments.length<3;return e(n,Et(t,4),r,u,fo)}function ar(n,t){return(mo(n)?i:wn)(n,vr(Et(t,3)))}function lr(n){if(null==n)return 0;if(dr(n))return Ir(n)?U(n):n.length;var t=po(n);return t==Oe||t==Le?n.size:Dn(n).length;\r\n}function sr(n,t,r){var e=mo(n)?a:Jn;return r&&Nt(n,t,r)&&(t=Xr),e(n,Et(t,3))}function hr(n,t,r){function e(t){var r=h,e=p;return h=p=Xr,d=t,g=n.apply(e,r)}function u(n){return d=n,y=setTimeout(c,t),_?e(n):g}function i(n){var r=n-b,e=n-d,u=t-r;return j?Gi(u,v-e):u}function o(n){var r=n-b,e=n-d;return b===Xr||r>=t||r<0||j&&e>=v}function c(){var n=xo();return o(n)?f(n):(y=setTimeout(c,i(n)),Xr)}function f(n){return y=Xr,x&&h?e(n):(h=p=Xr,g)}function a(){y!==Xr&&clearTimeout(y),d=0,h=b=p=y=Xr}function l(){\r\nreturn y===Xr?g:f(xo())}function s(){var n=xo(),r=o(n);if(h=arguments,p=this,b=n,r){if(y===Xr)return u(b);if(j)return y=setTimeout(c,t),e(b)}return y===Xr&&(y=setTimeout(c,t)),g}var h,p,v,g,y,b,d=0,_=false,j=false,x=true;if(typeof n!=\"function\")throw new TypeError(re);return t=kr(t)||0,Ar(r)&&(_=!!r.leading,j=\"maxWait\"in r,v=j?Wi(kr(r.maxWait)||0,t):v,x=\"trailing\"in r?!!r.trailing:x),s.cancel=a,s.flush=l,s}function pr(n,t){if(typeof n!=\"function\"||null!=t&&typeof t!=\"function\")throw new TypeError(re);var r=function(){\r\nvar e=arguments,u=t?t.apply(this,e):e[0],i=r.cache;if(i.has(u))return i.get(u);var o=n.apply(this,e);return r.cache=i.set(u,o)||i,o};return r.cache=new(pr.Cache||K),r}function vr(n){if(typeof n!=\"function\")throw new TypeError(re);return function(){var t=arguments;switch(t.length){case 0:return!n.call(this);case 1:return!n.call(this,t[0]);case 2:return!n.call(this,t[0],t[1]);case 3:return!n.call(this,t[0],t[1],t[2])}return!n.apply(this,t)}}function gr(n,t,r){var e=true,u=true;if(typeof n!=\"function\")throw new TypeError(re);\r\nreturn Ar(r)&&(e=\"leading\"in r?!!r.leading:e,u=\"trailing\"in r?!!r.trailing:u),hr(n,t,{leading:e,maxWait:t,trailing:u})}function yr(n){return xn(n,ie|ce)}function br(n,t){return n===t||n!==n&&t!==t}function dr(n){return null!=n&&Or(n.length)&&!wr(n)}function _r(n){return zr(n)&&dr(n)}function jr(n){if(null==n)return true;if(dr(n)&&(mo(n)||typeof n==\"string\"||typeof n.splice==\"function\"||Oo(n)||Ao(n)||wo(n)))return!n.length;var t=po(n);if(t==Oe||t==Le)return!n.size;if(Zt(n))return!Dn(n).length;for(var r in n)if(Ai.call(n,r))return false;\r\nreturn true}function xr(n,t){return Ln(n,t)}function wr(n){if(!Ar(n))return false;var t=En(n);return t==we||t==me||t==de||t==Se}function mr(n){return typeof n==\"number\"&&n==Lr(n)}function Or(n){return typeof n==\"number\"&&n>-1&&n%1==0&&n<=pe}function Ar(n){var t=typeof n;return null!=n&&(\"object\"==t||\"function\"==t)}function zr(n){return null!=n&&typeof n==\"object\"}function Er(n){if(!zr(n)||En(n)!=Ee)return false;var t=$i(n);if(null===t)return true;var r=Ai.call(t,\"constructor\")&&t.constructor;return typeof r==\"function\"&&r instanceof r&&Oi.call(r)==Ii;\r\n}function Ir(n){return typeof n==\"string\"||!mo(n)&&zr(n)&&En(n)==ke}function Sr(n){return typeof n==\"symbol\"||zr(n)&&En(n)==Ue}function Tr(n){if(!n)return 0===n?n:0;if(n=kr(n),n===he||n===-he){return(n<0?-1:1)*ve}return n===n?n:0}function Lr(n){var t=Tr(n),r=t%1;return t===t?r?t-r:t:0}function kr(n){if(typeof n==\"number\")return n;if(Sr(n))return ge;if(Ar(n)){var t=typeof n.valueOf==\"function\"?n.valueOf():n;n=Ar(t)?t+\"\":t}if(typeof n!=\"string\")return 0===n?n:+n;n=n.replace(nu,\"\");var r=iu.test(n);return r||cu.test(n)?ci(n.slice(2),r?2:8):uu.test(n)?ge:+n;\r\n}function Ur(n){return ht(n,Nr(n))}function $r(n){return null==n?\"\":Kn(n)}function Cr(n,t,r){var e=null==n?Xr:An(n,t);return e===Xr?r:e}function Rr(n,t){return null!=n&&kt(n,t,In)}function Dr(n){return dr(n)?pn(n):Dn(n)}function Nr(n){return dr(n)?pn(n,true):Nn(n)}function Fr(n){return null==n?[]:w(n,Dr(n))}function Pr(n,t,r){return t=Tr(t),r===Xr?(r=t,t=0):r=Tr(r),n=kr(n),Sn(n,t,r)}function Br(n){return So($r(n).toLowerCase())}function Zr(n){return n=$r(n),n&&n.replace(au,di).replace(Qu,\"\")}function Mr(){\r\nvar n=arguments,t=$r(n[0]);return n.length<3?t:t.replace(n[1],n[2])}function Wr(n,t,r){if(n=$r(n),n&&(r||t===Xr))return n.replace(nu,\"\");if(!n||!(t=Kn(t)))return n;var e=$(n),u=$(t);return nt(e,O(e,u),A(e,u)+1).join(\"\")}function Gr(n){return n=$r(n),n&&He.test(n)?n.replace(Ve,_i):n}function qr(n,t,r){return n=$r(n),t=r?Xr:t,t===Xr?I(n)?D(n):s(n):n.match(t)||[]}function Vr(n){return function(){return n}}function Hr(n){return n}function Yr(n){return Rn(typeof n==\"function\"?n:xn(n,ie))}function Jr(n){\r\nreturn Ft(n)?y(Kt(n)):Gn(n)}function Kr(){return[]}function Qr(){return false}var Xr,ne=\"4.17.4\",te=200,re=\"Expected a function\",ee=\"__lodash_hash_undefined__\",ue=500,ie=1,oe=2,ce=4,fe=1,ae=2,le=800,se=16,he=1/0,pe=9007199254740991,ve=1.7976931348623157e308,ge=NaN,ye=\"[object Arguments]\",be=\"[object Array]\",de=\"[object AsyncFunction]\",_e=\"[object Boolean]\",je=\"[object Date]\",xe=\"[object Error]\",we=\"[object Function]\",me=\"[object GeneratorFunction]\",Oe=\"[object Map]\",Ae=\"[object Number]\",ze=\"[object Null]\",Ee=\"[object Object]\",Ie=\"[object Promise]\",Se=\"[object Proxy]\",Te=\"[object RegExp]\",Le=\"[object Set]\",ke=\"[object String]\",Ue=\"[object Symbol]\",$e=\"[object Undefined]\",Ce=\"[object WeakMap]\",Re=\"[object ArrayBuffer]\",De=\"[object DataView]\",Ne=\"[object Float32Array]\",Fe=\"[object Float64Array]\",Pe=\"[object Int8Array]\",Be=\"[object Int16Array]\",Ze=\"[object Int32Array]\",Me=\"[object Uint8Array]\",We=\"[object Uint8ClampedArray]\",Ge=\"[object Uint16Array]\",qe=\"[object Uint32Array]\",Ve=/&(?:amp|lt|gt|quot|#39);/g,He=RegExp(Ve.source),Ye=/\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,Je=/^\\w*$/,Ke=/^\\./,Qe=/[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g,Xe=/[\\\\^$.*+?()[\\]{}|]/g,nu=/^\\s+|\\s+$/g,tu=/[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g,ru=/\\\\(\\\\)?/g,eu=/\\w*$/,uu=/^[-+]0x[0-9a-f]+$/i,iu=/^0b[01]+$/i,ou=/^\\[object .+?Constructor\\]$/,cu=/^0o[0-7]+$/i,fu=/^(?:0|[1-9]\\d*)$/,au=/[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g,lu=\"\\\\ud800-\\\\udfff\",su=\"\\\\u0300-\\\\u036f\",hu=\"\\\\ufe20-\\\\ufe2f\",pu=\"\\\\u20d0-\\\\u20ff\",vu=su+hu+pu,gu=\"\\\\u2700-\\\\u27bf\",yu=\"a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff\",bu=\"\\\\xac\\\\xb1\\\\xd7\\\\xf7\",du=\"\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf\",_u=\"\\\\u2000-\\\\u206f\",ju=\" \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000\",xu=\"A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde\",wu=\"\\\\ufe0e\\\\ufe0f\",mu=bu+du+_u+ju,Ou=\"['\\u2019]\",Au=\"[\"+lu+\"]\",zu=\"[\"+mu+\"]\",Eu=\"[\"+vu+\"]\",Iu=\"\\\\d+\",Su=\"[\"+gu+\"]\",Tu=\"[\"+yu+\"]\",Lu=\"[^\"+lu+mu+Iu+gu+yu+xu+\"]\",ku=\"\\\\ud83c[\\\\udffb-\\\\udfff]\",Uu=\"(?:\"+Eu+\"|\"+ku+\")\",$u=\"[^\"+lu+\"]\",Cu=\"(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}\",Ru=\"[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]\",Du=\"[\"+xu+\"]\",Nu=\"\\\\u200d\",Fu=\"(?:\"+Tu+\"|\"+Lu+\")\",Pu=\"(?:\"+Du+\"|\"+Lu+\")\",Bu=\"(?:\"+Ou+\"(?:d|ll|m|re|s|t|ve))?\",Zu=\"(?:\"+Ou+\"(?:D|LL|M|RE|S|T|VE))?\",Mu=Uu+\"?\",Wu=\"[\"+wu+\"]?\",Gu=\"(?:\"+Nu+\"(?:\"+[$u,Cu,Ru].join(\"|\")+\")\"+Wu+Mu+\")*\",qu=\"\\\\d*(?:(?:1st|2nd|3rd|(?![123])\\\\dth)\\\\b)\",Vu=\"\\\\d*(?:(?:1ST|2ND|3RD|(?![123])\\\\dTH)\\\\b)\",Hu=Wu+Mu+Gu,Yu=\"(?:\"+[Su,Cu,Ru].join(\"|\")+\")\"+Hu,Ju=\"(?:\"+[$u+Eu+\"?\",Eu,Cu,Ru,Au].join(\"|\")+\")\",Ku=RegExp(Ou,\"g\"),Qu=RegExp(Eu,\"g\"),Xu=RegExp(ku+\"(?=\"+ku+\")|\"+Ju+Hu,\"g\"),ni=RegExp([Du+\"?\"+Tu+\"+\"+Bu+\"(?=\"+[zu,Du,\"$\"].join(\"|\")+\")\",Pu+\"+\"+Zu+\"(?=\"+[zu,Du+Fu,\"$\"].join(\"|\")+\")\",Du+\"?\"+Fu+\"+\"+Bu,Du+\"+\"+Zu,Vu,qu,Iu,Yu].join(\"|\"),\"g\"),ti=RegExp(\"[\"+Nu+lu+vu+wu+\"]\"),ri=/[a-z][A-Z]|[A-Z]{2,}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,ei={};\r\nei[Ne]=ei[Fe]=ei[Pe]=ei[Be]=ei[Ze]=ei[Me]=ei[We]=ei[Ge]=ei[qe]=true,ei[ye]=ei[be]=ei[Re]=ei[_e]=ei[De]=ei[je]=ei[xe]=ei[we]=ei[Oe]=ei[Ae]=ei[Ee]=ei[Te]=ei[Le]=ei[ke]=ei[Ce]=false;var ui={};ui[ye]=ui[be]=ui[Re]=ui[De]=ui[_e]=ui[je]=ui[Ne]=ui[Fe]=ui[Pe]=ui[Be]=ui[Ze]=ui[Oe]=ui[Ae]=ui[Ee]=ui[Te]=ui[Le]=ui[ke]=ui[Ue]=ui[Me]=ui[We]=ui[Ge]=ui[qe]=true,ui[xe]=ui[we]=ui[Ce]=false;var ii={\"\\xc0\":\"A\",\"\\xc1\":\"A\",\"\\xc2\":\"A\",\"\\xc3\":\"A\",\"\\xc4\":\"A\",\"\\xc5\":\"A\",\"\\xe0\":\"a\",\"\\xe1\":\"a\",\"\\xe2\":\"a\",\"\\xe3\":\"a\",\"\\xe4\":\"a\",\"\\xe5\":\"a\",\r\n\"\\xc7\":\"C\",\"\\xe7\":\"c\",\"\\xd0\":\"D\",\"\\xf0\":\"d\",\"\\xc8\":\"E\",\"\\xc9\":\"E\",\"\\xca\":\"E\",\"\\xcb\":\"E\",\"\\xe8\":\"e\",\"\\xe9\":\"e\",\"\\xea\":\"e\",\"\\xeb\":\"e\",\"\\xcc\":\"I\",\"\\xcd\":\"I\",\"\\xce\":\"I\",\"\\xcf\":\"I\",\"\\xec\":\"i\",\"\\xed\":\"i\",\"\\xee\":\"i\",\"\\xef\":\"i\",\"\\xd1\":\"N\",\"\\xf1\":\"n\",\"\\xd2\":\"O\",\"\\xd3\":\"O\",\"\\xd4\":\"O\",\"\\xd5\":\"O\",\"\\xd6\":\"O\",\"\\xd8\":\"O\",\"\\xf2\":\"o\",\"\\xf3\":\"o\",\"\\xf4\":\"o\",\"\\xf5\":\"o\",\"\\xf6\":\"o\",\"\\xf8\":\"o\",\"\\xd9\":\"U\",\"\\xda\":\"U\",\"\\xdb\":\"U\",\"\\xdc\":\"U\",\"\\xf9\":\"u\",\"\\xfa\":\"u\",\"\\xfb\":\"u\",\"\\xfc\":\"u\",\"\\xdd\":\"Y\",\"\\xfd\":\"y\",\"\\xff\":\"y\",\"\\xc6\":\"Ae\",\r\n\"\\xe6\":\"ae\",\"\\xde\":\"Th\",\"\\xfe\":\"th\",\"\\xdf\":\"ss\",\"\\u0100\":\"A\",\"\\u0102\":\"A\",\"\\u0104\":\"A\",\"\\u0101\":\"a\",\"\\u0103\":\"a\",\"\\u0105\":\"a\",\"\\u0106\":\"C\",\"\\u0108\":\"C\",\"\\u010a\":\"C\",\"\\u010c\":\"C\",\"\\u0107\":\"c\",\"\\u0109\":\"c\",\"\\u010b\":\"c\",\"\\u010d\":\"c\",\"\\u010e\":\"D\",\"\\u0110\":\"D\",\"\\u010f\":\"d\",\"\\u0111\":\"d\",\"\\u0112\":\"E\",\"\\u0114\":\"E\",\"\\u0116\":\"E\",\"\\u0118\":\"E\",\"\\u011a\":\"E\",\"\\u0113\":\"e\",\"\\u0115\":\"e\",\"\\u0117\":\"e\",\"\\u0119\":\"e\",\"\\u011b\":\"e\",\"\\u011c\":\"G\",\"\\u011e\":\"G\",\"\\u0120\":\"G\",\"\\u0122\":\"G\",\"\\u011d\":\"g\",\"\\u011f\":\"g\",\"\\u0121\":\"g\",\r\n\"\\u0123\":\"g\",\"\\u0124\":\"H\",\"\\u0126\":\"H\",\"\\u0125\":\"h\",\"\\u0127\":\"h\",\"\\u0128\":\"I\",\"\\u012a\":\"I\",\"\\u012c\":\"I\",\"\\u012e\":\"I\",\"\\u0130\":\"I\",\"\\u0129\":\"i\",\"\\u012b\":\"i\",\"\\u012d\":\"i\",\"\\u012f\":\"i\",\"\\u0131\":\"i\",\"\\u0134\":\"J\",\"\\u0135\":\"j\",\"\\u0136\":\"K\",\"\\u0137\":\"k\",\"\\u0138\":\"k\",\"\\u0139\":\"L\",\"\\u013b\":\"L\",\"\\u013d\":\"L\",\"\\u013f\":\"L\",\"\\u0141\":\"L\",\"\\u013a\":\"l\",\"\\u013c\":\"l\",\"\\u013e\":\"l\",\"\\u0140\":\"l\",\"\\u0142\":\"l\",\"\\u0143\":\"N\",\"\\u0145\":\"N\",\"\\u0147\":\"N\",\"\\u014a\":\"N\",\"\\u0144\":\"n\",\"\\u0146\":\"n\",\"\\u0148\":\"n\",\"\\u014b\":\"n\",\"\\u014c\":\"O\",\r\n\"\\u014e\":\"O\",\"\\u0150\":\"O\",\"\\u014d\":\"o\",\"\\u014f\":\"o\",\"\\u0151\":\"o\",\"\\u0154\":\"R\",\"\\u0156\":\"R\",\"\\u0158\":\"R\",\"\\u0155\":\"r\",\"\\u0157\":\"r\",\"\\u0159\":\"r\",\"\\u015a\":\"S\",\"\\u015c\":\"S\",\"\\u015e\":\"S\",\"\\u0160\":\"S\",\"\\u015b\":\"s\",\"\\u015d\":\"s\",\"\\u015f\":\"s\",\"\\u0161\":\"s\",\"\\u0162\":\"T\",\"\\u0164\":\"T\",\"\\u0166\":\"T\",\"\\u0163\":\"t\",\"\\u0165\":\"t\",\"\\u0167\":\"t\",\"\\u0168\":\"U\",\"\\u016a\":\"U\",\"\\u016c\":\"U\",\"\\u016e\":\"U\",\"\\u0170\":\"U\",\"\\u0172\":\"U\",\"\\u0169\":\"u\",\"\\u016b\":\"u\",\"\\u016d\":\"u\",\"\\u016f\":\"u\",\"\\u0171\":\"u\",\"\\u0173\":\"u\",\"\\u0174\":\"W\",\"\\u0175\":\"w\",\r\n\"\\u0176\":\"Y\",\"\\u0177\":\"y\",\"\\u0178\":\"Y\",\"\\u0179\":\"Z\",\"\\u017b\":\"Z\",\"\\u017d\":\"Z\",\"\\u017a\":\"z\",\"\\u017c\":\"z\",\"\\u017e\":\"z\",\"\\u0132\":\"IJ\",\"\\u0133\":\"ij\",\"\\u0152\":\"Oe\",\"\\u0153\":\"oe\",\"\\u0149\":\"'n\",\"\\u017f\":\"s\"},oi={\"&\":\"&\",\"<\":\"<\",\">\":\">\",\""\":'\"',\"'\":\"'\"},ci=parseInt,fi=typeof global==\"object\"&&global&&global.Object===Object&&global,ai=typeof self==\"object\"&&self&&self.Object===Object&&self,li=fi||ai||Function(\"return this\")(),si=typeof exports==\"object\"&&exports&&!exports.nodeType&&exports,hi=si&&typeof module==\"object\"&&module&&!module.nodeType&&module,pi=hi&&hi.exports===si,vi=pi&&fi.process,gi=function(){\r\ntry{return vi&&vi.binding&&vi.binding(\"util\")}catch(n){}}(),yi=gi&&gi.isTypedArray,bi=y(\"length\"),di=b(ii),_i=b(oi),ji=Array.prototype,xi=Function.prototype,wi=Object.prototype,mi=li[\"__core-js_shared__\"],Oi=xi.toString,Ai=wi.hasOwnProperty,zi=function(){var n=/[^.]+$/.exec(mi&&mi.keys&&mi.keys.IE_PROTO||\"\");return n?\"Symbol(src)_1.\"+n:\"\"}(),Ei=wi.toString,Ii=Oi.call(Object),Si=RegExp(\"^\"+Oi.call(Ai).replace(Xe,\"\\\\$&\").replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g,\"$1.*?\")+\"$\"),Ti=pi?li.Buffer:Xr,Li=li.Symbol,ki=li.Uint8Array,Ui=Ti?Ti.allocUnsafe:Xr,$i=T(Object.getPrototypeOf,Object),Ci=Object.create,Ri=wi.propertyIsEnumerable,Di=ji.splice,Ni=Li?Li.isConcatSpreadable:Xr,Fi=Li?Li.toStringTag:Xr,Pi=function(){\r\ntry{var n=Tt(Object,\"defineProperty\");return n({},\"\",{}),n}catch(n){}}(),Bi=Object.getOwnPropertySymbols,Zi=Ti?Ti.isBuffer:Xr,Mi=T(Object.keys,Object),Wi=Math.max,Gi=Math.min,qi=Date.now,Vi=Tt(li,\"DataView\"),Hi=Tt(li,\"Map\"),Yi=Tt(li,\"Promise\"),Ji=Tt(li,\"Set\"),Ki=Tt(li,\"WeakMap\"),Qi=Tt(Object,\"create\"),Xi=Qt(Vi),no=Qt(Hi),to=Qt(Yi),ro=Qt(Ji),eo=Qt(Ki),uo=Li?Li.prototype:Xr,io=uo?uo.valueOf:Xr,oo=uo?uo.toString:Xr,co=function(){function n(){}return function(t){if(!Ar(t))return{};if(Ci)return Ci(t);n.prototype=t;\r\nvar r=new n;return n.prototype=Xr,r}}();F.prototype.clear=P,F.prototype.delete=B,F.prototype.get=Z,F.prototype.has=M,F.prototype.set=W,G.prototype.clear=q,G.prototype.delete=V,G.prototype.get=H,G.prototype.has=Y,G.prototype.set=J,K.prototype.clear=Q,K.prototype.delete=X,K.prototype.get=nn,K.prototype.has=tn,K.prototype.set=rn,en.prototype.add=en.prototype.push=un,en.prototype.has=on,cn.prototype.clear=fn,cn.prototype.delete=an,cn.prototype.get=ln,cn.prototype.has=sn,cn.prototype.set=hn;var fo=bt(On),ao=dt(),lo=Pi?function(n,t){\r\nreturn Pi(n,\"toString\",{configurable:true,enumerable:false,value:Vr(t),writable:true})}:Hr,so=Bi?function(n){return null==n?[]:(n=Object(n),i(Bi(n),function(t){return Ri.call(n,t)}))}:Kr,ho=Bi?function(n){for(var t=[];n;)c(t,so(n)),n=$i(n);return t}:Kr,po=En;(Vi&&po(new Vi(new ArrayBuffer(1)))!=De||Hi&&po(new Hi)!=Oe||Yi&&po(Yi.resolve())!=Ie||Ji&&po(new Ji)!=Le||Ki&&po(new Ki)!=Ce)&&(po=function(n){var t=En(n),r=t==Ee?n.constructor:Xr,e=r?Qt(r):\"\";if(e)switch(e){case Xi:return De;case no:return Oe;case to:\r\nreturn Ie;case ro:return Le;case eo:return Ce}return t});var vo=Jt(lo),go=Gt(function(n){var t=[];return Ke.test(n)&&t.push(\"\"),n.replace(Qe,function(n,r,e,u){t.push(e?u.replace(ru,\"$1\"):r||n)}),t}),yo=Hn(tr),bo=xt(Xt),_o=gt(function(n,t,r){jn(n,r,t)}),jo=Hn(function(n,t){if(null==n)return[];var r=t.length;return r>1&&Nt(n,t[0],t[1])?t=[]:r>2&&Nt(t[0],t[1],t[2])&&(t=[t[0]]),Wn(n,mn(t,1),[])}),xo=function(){return li.Date.now()};pr.Cache=K;var wo=Tn(function(){return arguments}())?Tn:function(n){return zr(n)&&Ai.call(n,\"callee\")&&!Ri.call(n,\"callee\");\r\n},mo=Array.isArray,Oo=Zi||Qr,Ao=yi?x(yi):Cn,zo=yt(function(n,t,r){Zn(n,t,r)}),Eo=jt(function(n,t,r){return t=t.toLowerCase(),n+(r?Br(t):t)}),Io=jt(function(n,t,r){return n+(r?\"-\":\"\")+t.toLowerCase()}),So=_t(\"toUpperCase\");N.constant=Vr,N.debounce=hr,N.filter=ur,N.iteratee=Yr,N.keyBy=_o,N.keys=Dr,N.keysIn=Nr,N.map=cr,N.memoize=pr,N.merge=zo,N.negate=vr,N.property=Jr,N.pull=yo,N.pullAll=tr,N.pullAllBy=rr,N.reject=ar,N.remove=er,N.sortBy=jo,N.throttle=gr,N.toPlainObject=Ur,N.values=Fr,N.words=qr,N.camelCase=Eo,\r\nN.capitalize=Br,N.cloneDeep=yr,N.deburr=Zr,N.eq=br,N.find=bo,N.findIndex=Xt,N.forEach=ir,N.get=Cr,N.hasIn=Rr,N.identity=Hr,N.includes=or,N.inRange=Pr,N.isArguments=wo,N.isArray=mo,N.isArrayLike=dr,N.isArrayLikeObject=_r,N.isBuffer=Oo,N.isEmpty=jr,N.isEqual=xr,N.isFunction=wr,N.isInteger=mr,N.isLength=Or,N.isObject=Ar,N.isObjectLike=zr,N.isPlainObject=Er,N.isString=Ir,N.isSymbol=Sr,N.isTypedArray=Ao,N.kebabCase=Io,N.last=nr,N.stubArray=Kr,N.stubFalse=Qr,N.now=xo,N.reduce=fr,N.replace=Mr,N.size=lr,\r\nN.some=sr,N.toFinite=Tr,N.toInteger=Lr,N.toNumber=kr,N.toString=$r,N.trim=Wr,N.unescape=Gr,N.upperFirst=So,N.each=ir,N.VERSION=ne,typeof define==\"function\"&&typeof define.amd==\"object\"&&define.amd?(li._=N, define(function(){return N})):hi?((hi.exports=N)._=N,si._=N):li._=N}).call(this);","!function(r){function n(r){for(var n=\"\",t=\"\",o=0,e=0,a=0,i=r.length;i>a;a++){var f=r.charCodeAt(a);128>f?e++:(t=2048>f?String.fromCharCode(f>>6|192,63&f|128):String.fromCharCode(f>>12|224,f>>6&63|128,63&f|128),e>o&&(n+=r.slice(o,e)),n+=t,o=e=a+1)}return e>o&&(n+=r.slice(o,i)),n}function t(r){var n,t;if(r+=\"\",s=!1,v=w=r.length,w>63){for(o(r.substring(0,64)),i(A),s=!0,n=128;w>=n;n+=64)o(r.substring(n-64,n)),f(A);r=r.substring(n-64),w=r.length}for(d[0]=d[1]=d[2]=d[3]=d[4]=d[5]=d[6]=d[7]=d[8]=d[9]=d[10]=d[11]=d[12]=d[13]=d[14]=d[15]=0,n=0;w>n;n++)t=3&n,0===t?d[n>>2]=r.charCodeAt(n):d[n>>2]|=r.charCodeAt(n)<>2]|=h[3&n],n>55?(s?f(d):(i(d),s=!0),f([0,0,0,0,0,0,0,0,0,0,0,0,0,0,v<<3,0])):(d[14]=v<<3,void(s?f(d):i(d)))}function o(r){for(var n=16;n--;){var t=n<<2;A[n]=r.charCodeAt(t)+(r.charCodeAt(t+1)<<8)+(r.charCodeAt(t+2)<<16)+(r.charCodeAt(t+3)<<24)}}function e(r,o,e){t(o?r:n(r));var a=g[0];return u[1]=l[15&a],u[0]=l[15&(a>>=4)],u[3]=l[15&(a>>=4)],u[2]=l[15&(a>>=4)],u[5]=l[15&(a>>=4)],u[4]=l[15&(a>>=4)],u[7]=l[15&(a>>=4)],u[6]=l[15&(a>>=4)],a=g[1],u[9]=l[15&a],u[8]=l[15&(a>>=4)],u[11]=l[15&(a>>=4)],u[10]=l[15&(a>>=4)],u[13]=l[15&(a>>=4)],u[12]=l[15&(a>>=4)],u[15]=l[15&(a>>=4)],u[14]=l[15&(a>>=4)],a=g[2],u[17]=l[15&a],u[16]=l[15&(a>>=4)],u[19]=l[15&(a>>=4)],u[18]=l[15&(a>>=4)],u[21]=l[15&(a>>=4)],u[20]=l[15&(a>>=4)],u[23]=l[15&(a>>=4)],u[22]=l[15&(a>>=4)],a=g[3],u[25]=l[15&a],u[24]=l[15&(a>>=4)],u[27]=l[15&(a>>=4)],u[26]=l[15&(a>>=4)],u[29]=l[15&(a>>=4)],u[28]=l[15&(a>>=4)],u[31]=l[15&(a>>=4)],u[30]=l[15&(a>>=4)],e?u:u.join(\"\")}function a(r,n,t,o,e,a,i){return n+=r+o+i,(n<>>a)+t<<0}function i(r){c(0,0,0,0,r),g[0]=y[0]+1732584193<<0,g[1]=y[1]-271733879<<0,g[2]=y[2]-1732584194<<0,g[3]=y[3]+271733878<<0}function f(r){c(g[0],g[1],g[2],g[3],r),g[0]=y[0]+g[0]<<0,g[1]=y[1]+g[1]<<0,g[2]=y[2]+g[2]<<0,g[3]=y[3]+g[3]<<0}function c(r,n,t,o,e){var i,f;s?(r=a((t^o)&n^o,r,n,e[0],7,25,-680876936),o=a((n^t)&r^t,o,r,e[1],12,20,-389564586),t=a((r^n)&o^n,t,o,e[2],17,15,606105819),n=a((o^r)&t^r,n,t,e[3],22,10,-1044525330)):(r=e[0]-680876937,r=(r<<7|r>>>25)-271733879<<0,o=e[1]-117830708+(2004318071&r^-1732584194),o=(o<<12|o>>>20)+r<<0,t=e[2]-1126478375+((-271733879^r)&o^-271733879),t=(t<<17|t>>>15)+o<<0,n=e[3]-1316259209+((o^r)&t^r),n=(n<<22|n>>>10)+t<<0),r=a((t^o)&n^o,r,n,e[4],7,25,-176418897),o=a((n^t)&r^t,o,r,e[5],12,20,1200080426),t=a((r^n)&o^n,t,o,e[6],17,15,-1473231341),n=a((o^r)&t^r,n,t,e[7],22,10,-45705983),r=a((t^o)&n^o,r,n,e[8],7,25,1770035416),o=a((n^t)&r^t,o,r,e[9],12,20,-1958414417),t=a((r^n)&o^n,t,o,e[10],17,15,-42063),n=a((o^r)&t^r,n,t,e[11],22,10,-1990404162),r=a((t^o)&n^o,r,n,e[12],7,25,1804603682),o=a((n^t)&r^t,o,r,e[13],12,20,-40341101),t=a((r^n)&o^n,t,o,e[14],17,15,-1502002290),n=a((o^r)&t^r,n,t,e[15],22,10,1236535329),r=a((n^t)&o^t,r,n,e[1],5,27,-165796510),o=a((r^n)&t^n,o,r,e[6],9,23,-1069501632),t=a((o^r)&n^r,t,o,e[11],14,18,643717713),n=a((t^o)&r^o,n,t,e[0],20,12,-373897302),r=a((n^t)&o^t,r,n,e[5],5,27,-701558691),o=a((r^n)&t^n,o,r,e[10],9,23,38016083),t=a((o^r)&n^r,t,o,e[15],14,18,-660478335),n=a((t^o)&r^o,n,t,e[4],20,12,-405537848),r=a((n^t)&o^t,r,n,e[9],5,27,568446438),o=a((r^n)&t^n,o,r,e[14],9,23,-1019803690),t=a((o^r)&n^r,t,o,e[3],14,18,-187363961),n=a((t^o)&r^o,n,t,e[8],20,12,1163531501),r=a((n^t)&o^t,r,n,e[13],5,27,-1444681467),o=a((r^n)&t^n,o,r,e[2],9,23,-51403784),t=a((o^r)&n^r,t,o,e[7],14,18,1735328473),n=a((t^o)&r^o,n,t,e[12],20,12,-1926607734),i=n^t,r=a(i^o,r,n,e[5],4,28,-378558),o=a(i^r,o,r,e[8],11,21,-2022574463),f=o^r,t=a(f^n,t,o,e[11],16,16,1839030562),n=a(f^t,n,t,e[14],23,9,-35309556),i=n^t,r=a(i^o,r,n,e[1],4,28,-1530992060),o=a(i^r,o,r,e[4],11,21,1272893353),f=o^r,t=a(f^n,t,o,e[7],16,16,-155497632),n=a(f^t,n,t,e[10],23,9,-1094730640),i=n^t,r=a(i^o,r,n,e[13],4,28,681279174),o=a(i^r,o,r,e[0],11,21,-358537222),f=o^r,t=a(f^n,t,o,e[3],16,16,-722521979),n=a(f^t,n,t,e[6],23,9,76029189),i=n^t,r=a(i^o,r,n,e[9],4,28,-640364487),o=a(i^r,o,r,e[12],11,21,-421815835),f=o^r,t=a(f^n,t,o,e[15],16,16,530742520),n=a(f^t,n,t,e[2],23,9,-995338651),r=a(t^(n|~o),r,n,e[0],6,26,-198630844),o=a(n^(r|~t),o,r,e[7],10,22,1126891415),t=a(r^(o|~n),t,o,e[14],15,17,-1416354905),n=a(o^(t|~r),n,t,e[5],21,11,-57434055),r=a(t^(n|~o),r,n,e[12],6,26,1700485571),o=a(n^(r|~t),o,r,e[3],10,22,-1894986606),t=a(r^(o|~n),t,o,e[10],15,17,-1051523),n=a(o^(t|~r),n,t,e[1],21,11,-2054922799),r=a(t^(n|~o),r,n,e[8],6,26,1873313359),o=a(n^(r|~t),o,r,e[15],10,22,-30611744),t=a(r^(o|~n),t,o,e[6],15,17,-1560198380),n=a(o^(t|~r),n,t,e[13],21,11,1309151649),r=a(t^(n|~o),r,n,e[4],6,26,-145523070),o=a(n^(r|~t),o,r,e[11],10,22,-1120210379),t=a(r^(o|~n),t,o,e[2],15,17,718787259),n=a(o^(t|~r),n,t,e[9],21,11,-343485551),y[0]=r,y[1]=n,y[2]=t,y[3]=o}var u=[],d=[],A=[],h=[],l=\"0123456789abcdef\".split(\"\"),C=[],g=[],s=!1,v=0,w=0,y=[];if(r.Int32Array)d=new Int32Array(16),A=new Int32Array(16),h=new Int32Array(4),C=new Int32Array(4),g=new Int32Array(4),y=new Int32Array(4);else{var I;for(I=0;16>I;I++)d[I]=A[I]=0;for(I=0;4>I;I++)h[I]=C[I]=g[I]=y[I]=0}h[0]=128,h[1]=32768,h[2]=8388608,h[3]=-2147483648,C[0]=0,C[1]=8,C[2]=16,C[3]=24,r.md5=r.md5||e}(\"undefined\"==typeof global?window:global);","/**\r\n * Owl Carousel v2.2.1\r\n * Copyright 2013-2017 David Deutsch\r\n * Licensed under ()\r\n */\r\n/**\r\n * Owl carousel\r\n * @version 2.1.6\r\n * @author Bartosz Wojciechowski\r\n * @author David Deutsch\r\n * @license The MIT License (MIT)\r\n * @todo Lazy Load Icon\r\n * @todo prevent animationend bubling\r\n * @todo itemsScaleUp\r\n * @todo Test Zepto\r\n * @todo stagePadding calculate wrong active classes\r\n */\r\n/* eslint-disable */\r\n;(function($, window, document, undefined) {\r\n\r\n\t/**\r\n\t * Creates a carousel.\r\n\t * @class The Owl Carousel.\r\n\t * @public\r\n\t * @param {HTMLElement|jQuery} element - The element to create the carousel for.\r\n\t * @param {Object} [options] - The options\r\n\t */\r\n\tfunction Owl(element, options) {\r\n\r\n\t\t/**\r\n\t\t * Current settings for the carousel.\r\n\t\t * @public\r\n\t\t */\r\n\t\tthis.settings = null;\r\n\r\n\t\t/**\r\n\t\t * Current options set by the caller including defaults.\r\n\t\t * @public\r\n\t\t */\r\n\t\tthis.options = $.extend({}, Owl.Defaults, options);\r\n\r\n\t\t/**\r\n\t\t * Plugin element.\r\n\t\t * @public\r\n\t\t */\r\n\t\tthis.$element = $(element);\r\n\r\n\t\t/**\r\n\t\t * Proxied event handlers.\r\n\t\t * @protected\r\n\t\t */\r\n\t\tthis._handlers = {};\r\n\r\n\t\t/**\r\n\t\t * References to the running plugins of this carousel.\r\n\t\t * @protected\r\n\t\t */\r\n\t\tthis._plugins = {};\r\n\r\n\t\t/**\r\n\t\t * Currently suppressed events to prevent them from beeing retriggered.\r\n\t\t * @protected\r\n\t\t */\r\n\t\tthis._supress = {};\r\n\r\n\t\t/**\r\n\t\t * Absolute current position.\r\n\t\t * @protected\r\n\t\t */\r\n\t\tthis._current = null;\r\n\r\n\t\t/**\r\n\t\t * Animation speed in milliseconds.\r\n\t\t * @protected\r\n\t\t */\r\n\t\tthis._speed = null;\r\n\r\n\t\t/**\r\n\t\t * Coordinates of all items in pixel.\r\n\t\t * @todo The name of this member is missleading.\r\n\t\t * @protected\r\n\t\t */\r\n\t\tthis._coordinates = [];\r\n\r\n\t\t/**\r\n\t\t * Current breakpoint.\r\n\t\t * @todo Real media queries would be nice.\r\n\t\t * @protected\r\n\t\t */\r\n\t\tthis._breakpoint = null;\r\n\r\n\t\t/**\r\n\t\t * Current width of the plugin element.\r\n\t\t */\r\n\t\tthis._width = null;\r\n\r\n\t\t/**\r\n\t\t * All real items.\r\n\t\t * @protected\r\n\t\t */\r\n\t\tthis._items = [];\r\n\r\n\t\t/**\r\n\t\t * All cloned items.\r\n\t\t * @protected\r\n\t\t */\r\n\t\tthis._clones = [];\r\n\r\n\t\t/**\r\n\t\t * Merge values of all items.\r\n\t\t * @todo Maybe this could be part of a plugin.\r\n\t\t * @protected\r\n\t\t */\r\n\t\tthis._mergers = [];\r\n\r\n\t\t/**\r\n\t\t * Widths of all items.\r\n\t\t */\r\n\t\tthis._widths = [];\r\n\r\n\t\t/**\r\n\t\t * Invalidated parts within the update process.\r\n\t\t * @protected\r\n\t\t */\r\n\t\tthis._invalidated = {};\r\n\r\n\t\t/**\r\n\t\t * Ordered list of workers for the update process.\r\n\t\t * @protected\r\n\t\t */\r\n\t\tthis._pipe = [];\r\n\r\n\t\t/**\r\n\t\t * Current state information for the drag operation.\r\n\t\t * @todo #261\r\n\t\t * @protected\r\n\t\t */\r\n\t\tthis._drag = {\r\n\t\t\ttime: null,\r\n\t\t\ttarget: null,\r\n\t\t\tpointer: null,\r\n\t\t\tstage: {\r\n\t\t\t\tstart: null,\r\n\t\t\t\tcurrent: null\r\n\t\t\t},\r\n\t\t\tdirection: null\r\n\t\t};\r\n\r\n\t\t/**\r\n\t\t * Current state information and their tags.\r\n\t\t * @type {Object}\r\n\t\t * @protected\r\n\t\t */\r\n\t\tthis._states = {\r\n\t\t\tcurrent: {},\r\n\t\t\ttags: {\r\n\t\t\t\t'initializing': [ 'busy' ],\r\n\t\t\t\t'animating': [ 'busy' ],\r\n\t\t\t\t'dragging': [ 'interacting' ]\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t$.each([ 'onResize', 'onThrottledResize' ], $.proxy(function(i, handler) {\r\n\t\t\tthis._handlers[handler] = $.proxy(this[handler], this);\r\n\t\t}, this));\r\n\r\n\t\t$.each(Owl.Plugins, $.proxy(function(key, plugin) {\r\n\t\t\tthis._plugins[key.charAt(0).toLowerCase() + key.slice(1)]\r\n\t\t\t\t= new plugin(this);\r\n\t\t}, this));\r\n\r\n\t\t$.each(Owl.Workers, $.proxy(function(priority, worker) {\r\n\t\t\tthis._pipe.push({\r\n\t\t\t\t'filter': worker.filter,\r\n\t\t\t\t'run': $.proxy(worker.run, this)\r\n\t\t\t});\r\n\t\t}, this));\r\n\r\n\t\tthis.setup();\r\n\t\tthis.initialize();\r\n\t}\r\n\r\n\t/**\r\n\t * Default options for the carousel.\r\n\t * @public\r\n\t */\r\n\tOwl.Defaults = {\r\n\t\titems: 3,\r\n\t\tloop: false,\r\n\t\tcenter: false,\r\n\t\trewind: true,\r\n\r\n\t\tmouseDrag: true,\r\n\t\ttouchDrag: true,\r\n\t\tpullDrag: true,\r\n\t\tfreeDrag: false,\r\n\r\n\t\tmargin: 0,\r\n\t\tstagePadding: 0,\r\n\r\n\t\tmerge: false,\r\n\t\tmergeFit: true,\r\n\t\tautoWidth: false,\r\n\r\n\t\tstartPosition: 0,\r\n\t\trtl: false,\r\n\r\n\t\tsmartSpeed: 250,\r\n\t\tfluidSpeed: false,\r\n\t\tdragEndSpeed: false,\r\n\r\n\t\tresponsive: {},\r\n\t\tresponsiveRefreshRate: 200,\r\n\t\tresponsiveBaseElement: window,\r\n\r\n\t\tfallbackEasing: 'swing',\r\n\r\n\t\tinfo: false,\r\n\r\n\t\tnestedItemSelector: false,\r\n\t\titemElement: 'div',\r\n\t\tstageElement: 'div',\r\n\r\n\t\trefreshClass: 'owl-refresh',\r\n\t\tloadedClass: 'owl-loaded',\r\n\t\tloadingClass: 'owl-loading',\r\n\t\trtlClass: 'owl-rtl',\r\n\t\tresponsiveClass: 'owl-responsive',\r\n\t\tdragClass: 'owl-drag',\r\n\t\titemClass: 'owl-item',\r\n\t\tstageClass: 'owl-stage',\r\n\t\tstageOuterClass: 'owl-stage-outer',\r\n\t\tgrabClass: 'owl-grab'\r\n\t};\r\n\r\n\t/**\r\n\t * Enumeration for width.\r\n\t * @public\r\n\t * @readonly\r\n\t * @enum {String}\r\n\t */\r\n\tOwl.Width = {\r\n\t\tDefault: 'default',\r\n\t\tInner: 'inner',\r\n\t\tOuter: 'outer'\r\n\t};\r\n\r\n\t/**\r\n\t * Enumeration for types.\r\n\t * @public\r\n\t * @readonly\r\n\t * @enum {String}\r\n\t */\r\n\tOwl.Type = {\r\n\t\tEvent: 'event',\r\n\t\tState: 'state'\r\n\t};\r\n\r\n\t/**\r\n\t * Contains all registered plugins.\r\n\t * @public\r\n\t */\r\n\tOwl.Plugins = {};\r\n\r\n\t/**\r\n\t * List of workers involved in the update process.\r\n\t */\r\n\tOwl.Workers = [ {\r\n\t\tfilter: [ 'width', 'settings' ],\r\n\t\trun: function() {\r\n\t\t\tthis._width = this.$element.width();\r\n\t\t}\r\n\t}, {\r\n\t\tfilter: [ 'width', 'items', 'settings' ],\r\n\t\trun: function(cache) {\r\n\t\t\tcache.current = this._items && this._items[this.relative(this._current)];\r\n\t\t}\r\n\t}, {\r\n\t\tfilter: [ 'items', 'settings' ],\r\n\t\trun: function() {\r\n\t\t\tthis.$stage.children('.cloned').remove();\r\n\t\t}\r\n\t}, {\r\n\t\tfilter: [ 'width', 'items', 'settings' ],\r\n\t\trun: function(cache) {\r\n\t\t\tvar margin = this.settings.margin || '',\r\n\t\t\t\tgrid = !this.settings.autoWidth,\r\n\t\t\t\trtl = this.settings.rtl,\r\n\t\t\t\tcss = {\r\n\t\t\t\t\t'width': 'auto',\r\n\t\t\t\t\t'margin-left': rtl ? margin : '',\r\n\t\t\t\t\t'margin-right': rtl ? '' : margin\r\n\t\t\t\t};\r\n\r\n\t\t\t!grid && this.$stage.children().css(css);\r\n\r\n\t\t\tcache.css = css;\r\n\t\t}\r\n\t}, {\r\n\t\tfilter: [ 'width', 'items', 'settings' ],\r\n\t\trun: function(cache) {\r\n\t\t\tvar width = (this.width() / this.settings.items).toFixed(3) - this.settings.margin,\r\n\t\t\t\tmerge = null,\r\n\t\t\t\titerator = this._items.length,\r\n\t\t\t\tgrid = !this.settings.autoWidth,\r\n\t\t\t\twidths = [];\r\n\r\n\t\t\tcache.items = {\r\n\t\t\t\tmerge: false,\r\n\t\t\t\twidth: width\r\n\t\t\t};\r\n\r\n\t\t\twhile (iterator--) {\r\n\t\t\t\tmerge = this._mergers[iterator];\r\n\t\t\t\tmerge = this.settings.mergeFit && Math.min(merge, this.settings.items) || merge;\r\n\r\n\t\t\t\tcache.items.merge = merge > 1 || cache.items.merge;\r\n\r\n\t\t\t\twidths[iterator] = !grid ? this._items[iterator].width() : width * merge;\r\n\t\t\t}\r\n\r\n\t\t\tthis._widths = widths;\r\n\t\t}\r\n\t}, {\r\n\t\tfilter: [ 'items', 'settings' ],\r\n\t\trun: function() {\r\n\t\t\tvar clones = [],\r\n\t\t\t\titems = this._items,\r\n\t\t\t\tsettings = this.settings,\r\n\t\t\t\tview = Math.max(settings.items * 2, 4),\r\n\t\t\t\tsize = Math.ceil(items.length / 2) * 2,\r\n\t\t\t\trepeat = settings.loop && items.length ? settings.rewind ? view : Math.max(view, size) : 0,\r\n\t\t\t\tappend = '',\r\n\t\t\t\tprepend = '';\r\n\r\n\t\t\trepeat /= 2;\r\n\r\n\t\t\twhile (repeat--) {\r\n\t\t\t\tclones.push(this.normalize(clones.length / 2, true));\r\n\t\t\t\tappend = append + items[clones[clones.length - 1]][0].outerHTML;\r\n\t\t\t\tclones.push(this.normalize(items.length - 1 - (clones.length - 1) / 2, true));\r\n\t\t\t\tprepend = items[clones[clones.length - 1]][0].outerHTML + prepend;\r\n\t\t\t}\r\n\r\n\t\t\tthis._clones = clones;\r\n\r\n\t\t\t$(append).addClass('cloned').appendTo(this.$stage);\r\n\t\t\t$(prepend).addClass('cloned').prependTo(this.$stage);\r\n\t\t}\r\n\t}, {\r\n\t\tfilter: [ 'width', 'items', 'settings' ],\r\n\t\trun: function() {\r\n\t\t\tvar rtl = this.settings.rtl ? 1 : -1,\r\n\t\t\t\tsize = this._clones.length + this._items.length,\r\n\t\t\t\titerator = -1,\r\n\t\t\t\tprevious = 0,\r\n\t\t\t\tcurrent = 0,\r\n\t\t\t\tcoordinates = [];\r\n\r\n\t\t\twhile (++iterator < size) {\r\n\t\t\t\tprevious = coordinates[iterator - 1] || 0;\r\n\t\t\t\tcurrent = this._widths[this.relative(iterator)] + this.settings.margin;\r\n\t\t\t\tcoordinates.push(previous + current * rtl);\r\n\t\t\t}\r\n\r\n\t\t\tthis._coordinates = coordinates;\r\n\t\t}\r\n\t}, {\r\n\t\tfilter: [ 'width', 'items', 'settings' ],\r\n\t\trun: function() {\r\n\t\t\tvar padding = this.settings.stagePadding,\r\n\t\t\t\tcoordinates = this._coordinates,\r\n\t\t\t\tcss = {\r\n\t\t\t\t\t'width': Math.ceil(Math.abs(coordinates[coordinates.length - 1])) + padding * 2,\r\n\t\t\t\t\t'padding-left': padding || '',\r\n\t\t\t\t\t'padding-right': padding || ''\r\n\t\t\t\t};\r\n\r\n\t\t\tthis.$stage.css(css);\r\n\t\t}\r\n\t}, {\r\n\t\tfilter: [ 'width', 'items', 'settings' ],\r\n\t\trun: function(cache) {\r\n\t\t\tvar iterator = this._coordinates.length,\r\n\t\t\t\tgrid = !this.settings.autoWidth,\r\n\t\t\t\titems = this.$stage.children();\r\n\r\n\t\t\tif (grid && cache.items.merge) {\r\n\t\t\t\twhile (iterator--) {\r\n\t\t\t\t\tcache.css.width = this._widths[this.relative(iterator)];\r\n\t\t\t\t\titems.eq(iterator).css(cache.css);\r\n\t\t\t\t}\r\n\t\t\t} else if (grid) {\r\n\t\t\t\tcache.css.width = cache.items.width;\r\n\t\t\t\titems.css(cache.css);\r\n\t\t\t}\r\n\t\t}\r\n\t}, {\r\n\t\tfilter: [ 'items' ],\r\n\t\trun: function() {\r\n\t\t\tthis._coordinates.length < 1 && this.$stage.removeAttr('style');\r\n\t\t}\r\n\t}, {\r\n\t\tfilter: [ 'width', 'items', 'settings' ],\r\n\t\trun: function(cache) {\r\n\t\t\tcache.current = cache.current ? this.$stage.children().index(cache.current) : 0;\r\n\t\t\tcache.current = Math.max(this.minimum(), Math.min(this.maximum(), cache.current));\r\n\t\t\tthis.reset(cache.current);\r\n\t\t}\r\n\t}, {\r\n\t\tfilter: [ 'position' ],\r\n\t\trun: function() {\r\n\t\t\tthis.animate(this.coordinates(this._current));\r\n\t\t}\r\n\t}, {\r\n\t\tfilter: [ 'width', 'position', 'items', 'settings' ],\r\n\t\trun: function() {\r\n\t\t\tvar rtl = this.settings.rtl ? 1 : -1,\r\n\t\t\t\tpadding = this.settings.stagePadding * 2,\r\n\t\t\t\tbegin = this.coordinates(this.current()) + padding,\r\n\t\t\t\tend = begin + this.width() * rtl,\r\n\t\t\t\tinner, outer, matches = [], i, n;\r\n\r\n\t\t\tfor (i = 0, n = this._coordinates.length; i < n; i++) {\r\n\t\t\t\tinner = this._coordinates[i - 1] || 0;\r\n\t\t\t\touter = Math.abs(this._coordinates[i]) + padding * rtl;\r\n\r\n\t\t\t\tif ((this.op(inner, '<=', begin) && (this.op(inner, '>', end)))\r\n\t\t\t\t\t|| (this.op(outer, '<', begin) && this.op(outer, '>', end))) {\r\n\t\t\t\t\tmatches.push(i);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tthis.$stage.children('.active').removeClass('active');\r\n\t\t\tthis.$stage.children(':eq(' + matches.join('), :eq(') + ')').addClass('active');\r\n\r\n\t\t\tif (this.settings.center) {\r\n\t\t\t\tthis.$stage.children('.center').removeClass('center');\r\n\t\t\t\tthis.$stage.children().eq(this.current()).addClass('center');\r\n\t\t\t}\r\n\t\t}\r\n\t} ];\r\n\r\n\t/**\r\n\t * Initializes the carousel.\r\n\t * @protected\r\n\t */\r\n\tOwl.prototype.initialize = function() {\r\n\t\tthis.enter('initializing');\r\n\t\tthis.trigger('initialize');\r\n\r\n\t\tthis.$element.toggleClass(this.settings.rtlClass, this.settings.rtl);\r\n\r\n\t\tif (this.settings.autoWidth && !this.is('pre-loading')) {\r\n\t\t\tvar imgs, nestedSelector, width;\r\n\t\t\timgs = this.$element.find('img');\r\n\t\t\tnestedSelector = this.settings.nestedItemSelector ? '.' + this.settings.nestedItemSelector : undefined;\r\n\t\t\twidth = this.$element.children(nestedSelector).width();\r\n\r\n\t\t\tif (imgs.length && width <= 0) {\r\n\t\t\t\tthis.preloadAutoWidthImages(imgs);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.$element.addClass(this.options.loadingClass);\r\n\r\n\t\t// create stage\r\n\t\tthis.$stage = $('<' + this.settings.stageElement + ' class=\"' + this.settings.stageClass + '\"/>')\r\n\t\t\t.wrap('
');\r\n\r\n\t\t// append stage\r\n\t\tthis.$element.append(this.$stage.parent());\r\n\r\n\t\t// append content\r\n\t\tthis.replace(this.$element.children().not(this.$stage.parent()));\r\n\r\n\t\t// check visibility\r\n\t\tif (this.$element.is(':visible')) {\r\n\t\t\t// update view\r\n\t\t\tthis.refresh();\r\n\t\t} else {\r\n\t\t\t// invalidate width\r\n\t\t\tthis.invalidate('width');\r\n\t\t}\r\n\r\n\t\tthis.$element\r\n\t\t\t.removeClass(this.options.loadingClass)\r\n\t\t\t.addClass(this.options.loadedClass);\r\n\r\n\t\t// register event handlers\r\n\t\tthis.registerEventHandlers();\r\n\r\n\t\tthis.leave('initializing');\r\n\t\tthis.trigger('initialized');\r\n\t};\r\n\r\n\t/**\r\n\t * Setups the current settings.\r\n\t * @todo Remove responsive classes. Why should adaptive designs be brought into IE8?\r\n\t * @todo Support for media queries by using `matchMedia` would be nice.\r\n\t * @public\r\n\t */\r\n\tOwl.prototype.setup = function() {\r\n\t\tvar viewport = this.viewport(),\r\n\t\t\toverwrites = this.options.responsive,\r\n\t\t\tmatch = -1,\r\n\t\t\tsettings = null;\r\n\r\n\t\tif (!overwrites) {\r\n\t\t\tsettings = $.extend({}, this.options);\r\n\t\t} else {\r\n\t\t\t$.each(overwrites, function(breakpoint) {\r\n\t\t\t\tif (breakpoint <= viewport && breakpoint > match) {\r\n\t\t\t\t\tmatch = Number(breakpoint);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tsettings = $.extend({}, this.options, overwrites[match]);\r\n\t\t\tif (typeof settings.stagePadding === 'function') {\r\n\t\t\t\tsettings.stagePadding = settings.stagePadding();\r\n\t\t\t}\r\n\t\t\tdelete settings.responsive;\r\n\r\n\t\t\t// responsive class\r\n\t\t\tif (settings.responsiveClass) {\r\n\t\t\t\tthis.$element.attr('class',\r\n\t\t\t\t\tthis.$element.attr('class').replace(new RegExp('(' + this.options.responsiveClass + '-)\\\\S+\\\\s', 'g'), '$1' + match)\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.trigger('change', { property: { name: 'settings', value: settings } });\r\n\t\tthis._breakpoint = match;\r\n\t\tthis.settings = settings;\r\n\t\tthis.invalidate('settings');\r\n\t\tthis.trigger('changed', { property: { name: 'settings', value: this.settings } });\r\n\t};\r\n\r\n\t/**\r\n\t * Updates option logic if necessery.\r\n\t * @protected\r\n\t */\r\n\tOwl.prototype.optionsLogic = function() {\r\n\t\tif (this.settings.autoWidth) {\r\n\t\t\tthis.settings.stagePadding = false;\r\n\t\t\tthis.settings.merge = false;\r\n\t\t}\r\n\t};\r\n\r\n\t/**\r\n\t * Prepares an item before add.\r\n\t * @todo Rename event parameter `content` to `item`.\r\n\t * @protected\r\n\t * @returns {jQuery|HTMLElement} - The item container.\r\n\t */\r\n\tOwl.prototype.prepare = function(item) {\r\n\t\tvar event = this.trigger('prepare', { content: item });\r\n\r\n\t\tif (!event.data) {\r\n\t\t\tevent.data = $('<' + this.settings.itemElement + '/>')\r\n\t\t\t\t.addClass(this.options.itemClass).append(item)\r\n\t\t}\r\n\r\n\t\tthis.trigger('prepared', { content: event.data });\r\n\r\n\t\treturn event.data;\r\n\t};\r\n\r\n\t/**\r\n\t * Updates the view.\r\n\t * @public\r\n\t */\r\n\tOwl.prototype.update = function() {\r\n\t\tvar i = 0,\r\n\t\t\tn = this._pipe.length,\r\n\t\t\tfilter = $.proxy(function(p) { return this[p] }, this._invalidated),\r\n\t\t\tcache = {};\r\n\r\n\t\twhile (i < n) {\r\n\t\t\tif (this._invalidated.all || $.grep(this._pipe[i].filter, filter).length > 0) {\r\n\t\t\t\tthis._pipe[i].run(cache);\r\n\t\t\t}\r\n\t\t\ti++;\r\n\t\t}\r\n\r\n\t\tthis._invalidated = {};\r\n\r\n\t\t!this.is('valid') && this.enter('valid');\r\n\t};\r\n\r\n\t/**\r\n\t * Gets the width of the view.\r\n\t * @public\r\n\t * @param {Owl.Width} [dimension=Owl.Width.Default] - The dimension to return.\r\n\t * @returns {Number} - The width of the view in pixel.\r\n\t */\r\n\tOwl.prototype.width = function(dimension) {\r\n\t\tdimension = dimension || Owl.Width.Default;\r\n\t\tswitch (dimension) {\r\n\t\t\tcase Owl.Width.Inner:\r\n\t\t\tcase Owl.Width.Outer:\r\n\t\t\t\treturn this._width;\r\n\t\t\tdefault:\r\n\t\t\t\treturn this._width - this.settings.stagePadding * 2 + this.settings.margin;\r\n\t\t}\r\n\t};\r\n\r\n\t/**\r\n\t * Refreshes the carousel primarily for adaptive purposes.\r\n\t * @public\r\n\t */\r\n\tOwl.prototype.refresh = function() {\r\n\t\tthis.enter('refreshing');\r\n\t\tthis.trigger('refresh');\r\n\r\n\t\tthis.setup();\r\n\r\n\t\tthis.optionsLogic();\r\n\r\n\t\tthis.$element.addClass(this.options.refreshClass);\r\n\r\n\t\tthis.update();\r\n\r\n\t\tthis.$element.removeClass(this.options.refreshClass);\r\n\r\n\t\tthis.leave('refreshing');\r\n\t\tthis.trigger('refreshed');\r\n\t};\r\n\r\n\t/**\r\n\t * Checks window `resize` event.\r\n\t * @protected\r\n\t */\r\n\tOwl.prototype.onThrottledResize = function() {\r\n\t\twindow.clearTimeout(this.resizeTimer);\r\n\t\tthis.resizeTimer = window.setTimeout(this._handlers.onResize, this.settings.responsiveRefreshRate);\r\n\t};\r\n\r\n\t/**\r\n\t * Checks window `resize` event.\r\n\t * @protected\r\n\t */\r\n\tOwl.prototype.onResize = function() {\r\n\t\tif (!this._items.length) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tif (this._width === this.$element.width()) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tif (!this.$element.is(':visible')) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tthis.enter('resizing');\r\n\r\n\t\tif (this.trigger('resize').isDefaultPrevented()) {\r\n\t\t\tthis.leave('resizing');\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tthis.invalidate('width');\r\n\r\n\t\tthis.refresh();\r\n\r\n\t\tthis.leave('resizing');\r\n\t\tthis.trigger('resized');\r\n\t};\r\n\r\n\t/**\r\n\t * Registers event handlers.\r\n\t * @todo Check `msPointerEnabled`\r\n\t * @todo #261\r\n\t * @protected\r\n\t */\r\n\tOwl.prototype.registerEventHandlers = function() {\r\n\t\tif ($.support.transition) {\r\n\t\t\tthis.$stage.on($.support.transition.end + '.owl.core', $.proxy(this.onTransitionEnd, this));\r\n\t\t}\r\n\r\n\t\tif (this.settings.responsive !== false) {\r\n\t\t\tthis.on(window, 'resize', this._handlers.onThrottledResize);\r\n\t\t}\r\n\r\n\t\tif (this.settings.mouseDrag) {\r\n\t\t\tthis.$element.addClass(this.options.dragClass);\r\n\t\t\tthis.$stage.on('mousedown.owl.core', $.proxy(this.onDragStart, this));\r\n\t\t\tthis.$stage.on('dragstart.owl.core selectstart.owl.core', function() { return false });\r\n\t\t}\r\n\r\n\t\tif (this.settings.touchDrag){\r\n\t\t\tthis.$stage.on('touchstart.owl.core', $.proxy(this.onDragStart, this));\r\n\t\t\tthis.$stage.on('touchcancel.owl.core', $.proxy(this.onDragEnd, this));\r\n\t\t}\r\n\t};\r\n\r\n\t/**\r\n\t * Handles `touchstart` and `mousedown` events.\r\n\t * @todo Horizontal swipe threshold as option\r\n\t * @todo #261\r\n\t * @protected\r\n\t * @param {Event} event - The event arguments.\r\n\t */\r\n\tOwl.prototype.onDragStart = function(event) {\r\n\t\tvar stage = null;\r\n\r\n\t\tif (event.which === 3) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif ($.support.transform) {\r\n\t\t\tstage = this.$stage.css('transform').replace(/.*\\(|\\)| /g, '').split(',');\r\n\t\t\tstage = {\r\n\t\t\t\tx: stage[stage.length === 16 ? 12 : 4],\r\n\t\t\t\ty: stage[stage.length === 16 ? 13 : 5]\r\n\t\t\t};\r\n\t\t} else {\r\n\t\t\tstage = this.$stage.position();\r\n\t\t\tstage = {\r\n\t\t\t\tx: this.settings.rtl ?\r\n\t\t\t\t\tstage.left + this.$stage.width() - this.width() + this.settings.margin :\r\n\t\t\t\t\tstage.left,\r\n\t\t\t\ty: stage.top\r\n\t\t\t};\r\n\t\t}\r\n\r\n\t\tif (this.is('animating')) {\r\n\t\t\t$.support.transform ? this.animate(stage.x) : this.$stage.stop()\r\n\t\t\tthis.invalidate('position');\r\n\t\t}\r\n\r\n\t\tthis.$element.toggleClass(this.options.grabClass, event.type === 'mousedown');\r\n\r\n\t\tthis.speed(0);\r\n\r\n\t\tthis._drag.time = new Date().getTime();\r\n\t\tthis._drag.target = $(event.target);\r\n\t\tthis._drag.stage.start = stage;\r\n\t\tthis._drag.stage.current = stage;\r\n\t\tthis._drag.pointer = this.pointer(event);\r\n\r\n\t\t$(document).on('mouseup.owl.core touchend.owl.core', $.proxy(this.onDragEnd, this));\r\n\r\n\t\t$(document).one('mousemove.owl.core touchmove.owl.core', $.proxy(function(event) {\r\n\t\t\tvar delta = this.difference(this._drag.pointer, this.pointer(event));\r\n\r\n\t\t\t$(document).on('mousemove.owl.core touchmove.owl.core', $.proxy(this.onDragMove, this));\r\n\r\n\t\t\tif (Math.abs(delta.x) < Math.abs(delta.y) && this.is('valid')) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tevent.preventDefault();\r\n\r\n\t\t\tthis.enter('dragging');\r\n\t\t\tthis.trigger('drag');\r\n\t\t}, this));\r\n\t};\r\n\r\n\t/**\r\n\t * Handles the `touchmove` and `mousemove` events.\r\n\t * @todo #261\r\n\t * @protected\r\n\t * @param {Event} event - The event arguments.\r\n\t */\r\n\tOwl.prototype.onDragMove = function(event) {\r\n\t\tvar minimum = null,\r\n\t\t\tmaximum = null,\r\n\t\t\tpull = null,\r\n\t\t\tdelta = this.difference(this._drag.pointer, this.pointer(event)),\r\n\t\t\tstage = this.difference(this._drag.stage.start, delta);\r\n\r\n\t\tif (!this.is('dragging')) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tevent.preventDefault();\r\n\r\n\t\tif (this.settings.loop) {\r\n\t\t\tminimum = this.coordinates(this.minimum());\r\n\t\t\tmaximum = this.coordinates(this.maximum() + 1) - minimum;\r\n\t\t\tstage.x = (((stage.x - minimum) % maximum + maximum) % maximum) + minimum;\r\n\t\t} else {\r\n\t\t\tminimum = this.settings.rtl ? this.coordinates(this.maximum()) : this.coordinates(this.minimum());\r\n\t\t\tmaximum = this.settings.rtl ? this.coordinates(this.minimum()) : this.coordinates(this.maximum());\r\n\t\t\tpull = this.settings.pullDrag ? -1 * delta.x / 5 : 0;\r\n\t\t\tstage.x = Math.max(Math.min(stage.x, minimum + pull), maximum + pull);\r\n\t\t}\r\n\r\n\t\tthis._drag.stage.current = stage;\r\n\r\n\t\tthis.animate(stage.x);\r\n\t};\r\n\r\n\t/**\r\n\t * Handles the `touchend` and `mouseup` events.\r\n\t * @todo #261\r\n\t * @todo Threshold for click event\r\n\t * @protected\r\n\t * @param {Event} event - The event arguments.\r\n\t */\r\n\tOwl.prototype.onDragEnd = function(event) {\r\n\t\tvar delta = this.difference(this._drag.pointer, this.pointer(event)),\r\n\t\t\tstage = this._drag.stage.current,\r\n\t\t\tdirection = delta.x > 0 ^ this.settings.rtl ? 'left' : 'right';\r\n\r\n\t\t$(document).off('.owl.core');\r\n\r\n\t\tthis.$element.removeClass(this.options.grabClass);\r\n\r\n\t\tif (delta.x !== 0 && this.is('dragging') || !this.is('valid')) {\r\n\t\t\tthis.speed(this.settings.dragEndSpeed || this.settings.smartSpeed);\r\n\t\t\tthis.current(this.closest(stage.x, delta.x !== 0 ? direction : this._drag.direction));\r\n\t\t\tthis.invalidate('position');\r\n\t\t\tthis.update();\r\n\r\n\t\t\tthis._drag.direction = direction;\r\n\r\n\t\t\tif (Math.abs(delta.x) > 3 || new Date().getTime() - this._drag.time > 300) {\r\n\t\t\t\tthis._drag.target.one('click.owl.core', function() { return false; });\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (!this.is('dragging')) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.leave('dragging');\r\n\t\tthis.trigger('dragged');\r\n\t};\r\n\r\n\t/**\r\n\t * Gets absolute position of the closest item for a coordinate.\r\n\t * @todo Setting `freeDrag` makes `closest` not reusable. See #165.\r\n\t * @protected\r\n\t * @param {Number} coordinate - The coordinate in pixel.\r\n\t * @param {String} direction - The direction to check for the closest item. Ether `left` or `right`.\r\n\t * @return {Number} - The absolute position of the closest item.\r\n\t */\r\n\tOwl.prototype.closest = function(coordinate, direction) {\r\n\t\tvar position = -1,\r\n\t\t\tpull = 30,\r\n\t\t\twidth = this.width(),\r\n\t\t\tcoordinates = this.coordinates();\r\n\r\n\t\tif (!this.settings.freeDrag) {\r\n\t\t\t// check closest item\r\n\t\t\t$.each(coordinates, $.proxy(function(index, value) {\r\n\t\t\t\t// on a left pull, check on current index\r\n\t\t\t\tif (direction === 'left' && coordinate > value - pull && coordinate < value + pull) {\r\n\t\t\t\t\tposition = index;\r\n\t\t\t\t// on a right pull, check on previous index\r\n\t\t\t\t// to do so, subtract width from value and set position = index + 1\r\n\t\t\t\t} else if (direction === 'right' && coordinate > value - width - pull && coordinate < value - width + pull) {\r\n\t\t\t\t\tposition = index + 1;\r\n\t\t\t\t} else if (this.op(coordinate, '<', value)\r\n\t\t\t\t\t&& this.op(coordinate, '>', coordinates[index + 1] || value - width)) {\r\n\t\t\t\t\tposition = direction === 'left' ? index + 1 : index;\r\n\t\t\t\t}\r\n\t\t\t\treturn position === -1;\r\n\t\t\t}, this));\r\n\t\t}\r\n\r\n\t\tif (!this.settings.loop) {\r\n\t\t\t// non loop boundries\r\n\t\t\tif (this.op(coordinate, '>', coordinates[this.minimum()])) {\r\n\t\t\t\tposition = coordinate = this.minimum();\r\n\t\t\t} else if (this.op(coordinate, '<', coordinates[this.maximum()])) {\r\n\t\t\t\tposition = coordinate = this.maximum();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn position;\r\n\t};\r\n\r\n\t/**\r\n\t * Animates the stage.\r\n\t * @todo #270\r\n\t * @public\r\n\t * @param {Number} coordinate - The coordinate in pixels.\r\n\t */\r\n\tOwl.prototype.animate = function(coordinate) {\r\n\t\tvar animate = this.speed() > 0;\r\n\r\n\t\tthis.is('animating') && this.onTransitionEnd();\r\n\r\n\t\tif (animate) {\r\n\t\t\tthis.enter('animating');\r\n\t\t\tthis.trigger('translate');\r\n\t\t}\r\n\r\n\t\tif ($.support.transform3d && $.support.transition) {\r\n\t\t\tthis.$stage.css({\r\n\t\t\t\ttransform: 'translate3d(' + coordinate + 'px,0px,0px)',\r\n\t\t\t\ttransition: (this.speed() / 1000) + 's'\r\n\t\t\t});\r\n\t\t} else if (animate) {\r\n\t\t\tthis.$stage.animate({\r\n\t\t\t\tleft: coordinate + 'px'\r\n\t\t\t}, this.speed(), this.settings.fallbackEasing, $.proxy(this.onTransitionEnd, this));\r\n\t\t} else {\r\n\t\t\tthis.$stage.css({\r\n\t\t\t\tleft: coordinate + 'px'\r\n\t\t\t});\r\n\t\t}\r\n\t};\r\n\r\n\t/**\r\n\t * Checks whether the carousel is in a specific state or not.\r\n\t * @param {String} state - The state to check.\r\n\t * @returns {Boolean} - The flag which indicates if the carousel is busy.\r\n\t */\r\n\tOwl.prototype.is = function(state) {\r\n\t\treturn this._states.current[state] && this._states.current[state] > 0;\r\n\t};\r\n\r\n\t/**\r\n\t * Sets the absolute position of the current item.\r\n\t * @public\r\n\t * @param {Number} [position] - The new absolute position or nothing to leave it unchanged.\r\n\t * @returns {Number} - The absolute position of the current item.\r\n\t */\r\n\tOwl.prototype.current = function(position) {\r\n\t\tif (position === undefined) {\r\n\t\t\treturn this._current;\r\n\t\t}\r\n\r\n\t\tif (this._items.length === 0) {\r\n\t\t\treturn undefined;\r\n\t\t}\r\n\r\n\t\tposition = this.normalize(position);\r\n\r\n\t\tif (this._current !== position) {\r\n\t\t\tvar event = this.trigger('change', { property: { name: 'position', value: position } });\r\n\r\n\t\t\tif (event.data !== undefined) {\r\n\t\t\t\tposition = this.normalize(event.data);\r\n\t\t\t}\r\n\r\n\t\t\tthis._current = position;\r\n\r\n\t\t\tthis.invalidate('position');\r\n\r\n\t\t\tthis.trigger('changed', { property: { name: 'position', value: this._current } });\r\n\t\t}\r\n\r\n\t\treturn this._current;\r\n\t};\r\n\r\n\t/**\r\n\t * Invalidates the given part of the update routine.\r\n\t * @param {String} [part] - The part to invalidate.\r\n\t * @returns {Array.} - The invalidated parts.\r\n\t */\r\n\tOwl.prototype.invalidate = function(part) {\r\n\t\tif ($.type(part) === 'string') {\r\n\t\t\tthis._invalidated[part] = true;\r\n\t\t\tthis.is('valid') && this.leave('valid');\r\n\t\t}\r\n\t\treturn $.map(this._invalidated, function(v, i) { return i });\r\n\t};\r\n\r\n\t/**\r\n\t * Resets the absolute position of the current item.\r\n\t * @public\r\n\t * @param {Number} position - The absolute position of the new item.\r\n\t */\r\n\tOwl.prototype.reset = function(position) {\r\n\t\tposition = this.normalize(position);\r\n\r\n\t\tif (position === undefined) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._speed = 0;\r\n\t\tthis._current = position;\r\n\r\n\t\tthis.suppress([ 'translate', 'translated' ]);\r\n\r\n\t\tthis.animate(this.coordinates(position));\r\n\r\n\t\tthis.release([ 'translate', 'translated' ]);\r\n\t};\r\n\r\n\t/**\r\n\t * Normalizes an absolute or a relative position of an item.\r\n\t * @public\r\n\t * @param {Number} position - The absolute or relative position to normalize.\r\n\t * @param {Boolean} [relative=false] - Whether the given position is relative or not.\r\n\t * @returns {Number} - The normalized position.\r\n\t */\r\n\tOwl.prototype.normalize = function(position, relative) {\r\n\t\tvar n = this._items.length,\r\n\t\t\tm = relative ? 0 : this._clones.length;\r\n\r\n\t\tif (!this.isNumeric(position) || n < 1) {\r\n\t\t\tposition = undefined;\r\n\t\t} else if (position < 0 || position >= n + m) {\r\n\t\t\tposition = ((position - m / 2) % n + n) % n + m / 2;\r\n\t\t}\r\n\r\n\t\treturn position;\r\n\t};\r\n\r\n\t/**\r\n\t * Converts an absolute position of an item into a relative one.\r\n\t * @public\r\n\t * @param {Number} position - The absolute position to convert.\r\n\t * @returns {Number} - The converted position.\r\n\t */\r\n\tOwl.prototype.relative = function(position) {\r\n\t\tposition -= this._clones.length / 2;\r\n\t\treturn this.normalize(position, true);\r\n\t};\r\n\r\n\t/**\r\n\t * Gets the maximum position for the current item.\r\n\t * @public\r\n\t * @param {Boolean} [relative=false] - Whether to return an absolute position or a relative position.\r\n\t * @returns {Number}\r\n\t */\r\n\tOwl.prototype.maximum = function(relative) {\r\n\t\tvar settings = this.settings,\r\n\t\t\tmaximum = this._coordinates.length,\r\n\t\t\titerator,\r\n\t\t\treciprocalItemsWidth,\r\n\t\t\telementWidth;\r\n\r\n\t\tif (settings.loop) {\r\n\t\t\tmaximum = this._clones.length / 2 + this._items.length - 1;\r\n\t\t} else if (settings.autoWidth || settings.merge) {\r\n\t\t\titerator = this._items.length;\r\n\t\t\tif (iterator) {\r\n\t\t\t\treciprocalItemsWidth = this._items[--iterator].width();\r\n\t\t\t\telementWidth = this.$element.width();\r\n\t\t\t\twhile (iterator--) {\r\n\t\t\t\t\treciprocalItemsWidth += this._items[iterator].width() + this.settings.margin;\r\n\t\t\t\t\tif (reciprocalItemsWidth > elementWidth) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tmaximum = iterator + 1;\r\n\t\t} else if (settings.center) {\r\n\t\t\tmaximum = this._items.length - 1;\r\n\t\t} else {\r\n\t\t\tmaximum = this._items.length - settings.items;\r\n\t\t}\r\n\r\n\t\tif (relative) {\r\n\t\t\tmaximum -= this._clones.length / 2;\r\n\t\t}\r\n\r\n\t\treturn Math.max(maximum, 0);\r\n\t};\r\n\r\n\t/**\r\n\t * Gets the minimum position for the current item.\r\n\t * @public\r\n\t * @param {Boolean} [relative=false] - Whether to return an absolute position or a relative position.\r\n\t * @returns {Number}\r\n\t */\r\n\tOwl.prototype.minimum = function(relative) {\r\n\t\treturn relative ? 0 : this._clones.length / 2;\r\n\t};\r\n\r\n\t/**\r\n\t * Gets an item at the specified relative position.\r\n\t * @public\r\n\t * @param {Number} [position] - The relative position of the item.\r\n\t * @return {jQuery|Array.} - The item at the given position or all items if no position was given.\r\n\t */\r\n\tOwl.prototype.items = function(position) {\r\n\t\tif (position === undefined) {\r\n\t\t\treturn this._items.slice();\r\n\t\t}\r\n\r\n\t\tposition = this.normalize(position, true);\r\n\t\treturn this._items[position];\r\n\t};\r\n\r\n\t/**\r\n\t * Gets an item at the specified relative position.\r\n\t * @public\r\n\t * @param {Number} [position] - The relative position of the item.\r\n\t * @return {jQuery|Array.} - The item at the given position or all items if no position was given.\r\n\t */\r\n\tOwl.prototype.mergers = function(position) {\r\n\t\tif (position === undefined) {\r\n\t\t\treturn this._mergers.slice();\r\n\t\t}\r\n\r\n\t\tposition = this.normalize(position, true);\r\n\t\treturn this._mergers[position];\r\n\t};\r\n\r\n\t/**\r\n\t * Gets the absolute positions of clones for an item.\r\n\t * @public\r\n\t * @param {Number} [position] - The relative position of the item.\r\n\t * @returns {Array.} - The absolute positions of clones for the item or all if no position was given.\r\n\t */\r\n\tOwl.prototype.clones = function(position) {\r\n\t\tvar odd = this._clones.length / 2,\r\n\t\t\teven = odd + this._items.length,\r\n\t\t\tmap = function(index) { return index % 2 === 0 ? even + index / 2 : odd - (index + 1) / 2 };\r\n\r\n\t\tif (position === undefined) {\r\n\t\t\treturn $.map(this._clones, function(v, i) { return map(i) });\r\n\t\t}\r\n\r\n\t\treturn $.map(this._clones, function(v, i) { return v === position ? map(i) : null });\r\n\t};\r\n\r\n\t/**\r\n\t * Sets the current animation speed.\r\n\t * @public\r\n\t * @param {Number} [speed] - The animation speed in milliseconds or nothing to leave it unchanged.\r\n\t * @returns {Number} - The current animation speed in milliseconds.\r\n\t */\r\n\tOwl.prototype.speed = function(speed) {\r\n\t\tif (speed !== undefined) {\r\n\t\t\tthis._speed = speed;\r\n\t\t}\r\n\r\n\t\treturn this._speed;\r\n\t};\r\n\r\n\t/**\r\n\t * Gets the coordinate of an item.\r\n\t * @todo The name of this method is missleanding.\r\n\t * @public\r\n\t * @param {Number} position - The absolute position of the item within `minimum()` and `maximum()`.\r\n\t * @returns {Number|Array.} - The coordinate of the item in pixel or all coordinates.\r\n\t */\r\n\tOwl.prototype.coordinates = function(position) {\r\n\t\tvar multiplier = 1,\r\n\t\t\tnewPosition = position - 1,\r\n\t\t\tcoordinate;\r\n\r\n\t\tif (position === undefined) {\r\n\t\t\treturn $.map(this._coordinates, $.proxy(function(coordinate, index) {\r\n\t\t\t\treturn this.coordinates(index);\r\n\t\t\t}, this));\r\n\t\t}\r\n\r\n\t\tif (this.settings.center) {\r\n\t\t\tif (this.settings.rtl) {\r\n\t\t\t\tmultiplier = -1;\r\n\t\t\t\tnewPosition = position + 1;\r\n\t\t\t}\r\n\r\n\t\t\tcoordinate = this._coordinates[position];\r\n\t\t\tcoordinate += (this.width() - coordinate + (this._coordinates[newPosition] || 0)) / 2 * multiplier;\r\n\t\t} else {\r\n\t\t\tcoordinate = this._coordinates[newPosition] || 0;\r\n\t\t}\r\n\r\n\t\tcoordinate = Math.ceil(coordinate);\r\n\r\n\t\treturn coordinate;\r\n\t};\r\n\r\n\t/**\r\n\t * Calculates the speed for a translation.\r\n\t * @protected\r\n\t * @param {Number} from - The absolute position of the start item.\r\n\t * @param {Number} to - The absolute position of the target item.\r\n\t * @param {Number} [factor=undefined] - The time factor in milliseconds.\r\n\t * @returns {Number} - The time in milliseconds for the translation.\r\n\t */\r\n\tOwl.prototype.duration = function(from, to, factor) {\r\n\t\tif (factor === 0) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\treturn Math.min(Math.max(Math.abs(to - from), 1), 6) * Math.abs((factor || this.settings.smartSpeed));\r\n\t};\r\n\r\n\t/**\r\n\t * Slides to the specified item.\r\n\t * @public\r\n\t * @param {Number} position - The position of the item.\r\n\t * @param {Number} [speed] - The time in milliseconds for the transition.\r\n\t */\r\n\tOwl.prototype.to = function(position, speed) {\r\n\t\tvar current = this.current(),\r\n\t\t\trevert = null,\r\n\t\t\tdistance = position - this.relative(current),\r\n\t\t\tdirection = (distance > 0) - (distance < 0),\r\n\t\t\titems = this._items.length,\r\n\t\t\tminimum = this.minimum(),\r\n\t\t\tmaximum = this.maximum();\r\n\r\n\t\tif (this.settings.loop) {\r\n\t\t\tif (!this.settings.rewind && Math.abs(distance) > items / 2) {\r\n\t\t\t\tdistance += direction * -1 * items;\r\n\t\t\t}\r\n\r\n\t\t\tposition = current + distance;\r\n\t\t\trevert = ((position - minimum) % items + items) % items + minimum;\r\n\r\n\t\t\tif (revert !== position && revert - distance <= maximum && revert - distance > 0) {\r\n\t\t\t\tcurrent = revert - distance;\r\n\t\t\t\tposition = revert;\r\n\t\t\t\tthis.reset(current);\r\n\t\t\t}\r\n\t\t} else if (this.settings.rewind) {\r\n\t\t\tmaximum += 1;\r\n\t\t\tposition = (position % maximum + maximum) % maximum;\r\n\t\t} else {\r\n\t\t\tposition = Math.max(minimum, Math.min(maximum, position));\r\n\t\t}\r\n\r\n\t\tthis.speed(this.duration(current, position, speed));\r\n\t\tthis.current(position);\r\n\r\n\t\tif (this.$element.is(':visible')) {\r\n\t\t\tthis.update();\r\n\t\t}\r\n\t};\r\n\r\n\t/**\r\n\t * Slides to the next item.\r\n\t * @public\r\n\t * @param {Number} [speed] - The time in milliseconds for the transition.\r\n\t */\r\n\tOwl.prototype.next = function(speed) {\r\n\t\tspeed = speed || false;\r\n\t\tthis.to(this.relative(this.current()) + 1, speed);\r\n\t};\r\n\r\n\t/**\r\n\t * Slides to the previous item.\r\n\t * @public\r\n\t * @param {Number} [speed] - The time in milliseconds for the transition.\r\n\t */\r\n\tOwl.prototype.prev = function(speed) {\r\n\t\tspeed = speed || false;\r\n\t\tthis.to(this.relative(this.current()) - 1, speed);\r\n\t};\r\n\r\n\t/**\r\n\t * Handles the end of an animation.\r\n\t * @protected\r\n\t * @param {Event} event - The event arguments.\r\n\t */\r\n\tOwl.prototype.onTransitionEnd = function(event) {\r\n\r\n\t\t// if css2 animation then event object is undefined\r\n\t\tif (event !== undefined) {\r\n\t\t\tevent.stopPropagation();\r\n\r\n\t\t\t// Catch only owl-stage transitionEnd event\r\n\t\t\tif ((event.target || event.srcElement || event.originalTarget) !== this.$stage.get(0)) {\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.leave('animating');\r\n\t\tthis.trigger('translated');\r\n\t};\r\n\r\n\t/**\r\n\t * Gets viewport width.\r\n\t * @protected\r\n\t * @return {Number} - The width in pixel.\r\n\t */\r\n\tOwl.prototype.viewport = function() {\r\n\t\tvar width;\r\n\t\tif (this.options.responsiveBaseElement !== window) {\r\n\t\t\twidth = $(this.options.responsiveBaseElement).width();\r\n\t\t} else if (window.innerWidth) {\r\n\t\t\twidth = window.innerWidth;\r\n\t\t} else if (document.documentElement && document.documentElement.clientWidth) {\r\n\t\t\twidth = document.documentElement.clientWidth;\r\n\t\t} else {\r\n\t\t\tconsole.warn('Can not detect viewport width.');\r\n\t\t}\r\n\t\treturn width;\r\n\t};\r\n\r\n\t/**\r\n\t * Replaces the current content.\r\n\t * @public\r\n\t * @param {HTMLElement|jQuery|String} content - The new content.\r\n\t */\r\n\tOwl.prototype.replace = function(content) {\r\n\t\tthis.$stage.empty();\r\n\t\tthis._items = [];\r\n\r\n\t\tif (content) {\r\n\t\t\tcontent = (content instanceof jQuery) ? content : $(content);\r\n\t\t}\r\n\r\n\t\tif (this.settings.nestedItemSelector) {\r\n\t\t\tcontent = content.find('.' + this.settings.nestedItemSelector);\r\n\t\t}\r\n\r\n\t\tcontent.filter(function() {\r\n\t\t\treturn this.nodeType === 1;\r\n\t\t}).each($.proxy(function(index, item) {\r\n\t\t\titem = this.prepare(item);\r\n\t\t\tthis.$stage.append(item);\r\n\t\t\tthis._items.push(item);\r\n\t\t\tthis._mergers.push(item.find('[data-merge]').addBack('[data-merge]').attr('data-merge') * 1 || 1);\r\n\t\t}, this));\r\n\r\n\t\tthis.reset(this.isNumeric(this.settings.startPosition) ? this.settings.startPosition : 0);\r\n\r\n\t\tthis.invalidate('items');\r\n\t};\r\n\r\n\t/**\r\n\t * Adds an item.\r\n\t * @todo Use `item` instead of `content` for the event arguments.\r\n\t * @public\r\n\t * @param {HTMLElement|jQuery|String} content - The item content to add.\r\n\t * @param {Number} [position] - The relative position at which to insert the item otherwise the item will be added to the end.\r\n\t */\r\n\tOwl.prototype.add = function(content, position) {\r\n\t\tvar current = this.relative(this._current);\r\n\r\n\t\tposition = position === undefined ? this._items.length : this.normalize(position, true);\r\n\t\tcontent = content instanceof jQuery ? content : $(content);\r\n\r\n\t\tthis.trigger('add', { content: content, position: position });\r\n\r\n\t\tcontent = this.prepare(content);\r\n\r\n\t\tif (this._items.length === 0 || position === this._items.length) {\r\n\t\t\tthis._items.length === 0 && this.$stage.append(content);\r\n\t\t\tthis._items.length !== 0 && this._items[position - 1].after(content);\r\n\t\t\tthis._items.push(content);\r\n\t\t\tthis._mergers.push(content.find('[data-merge]').addBack('[data-merge]').attr('data-merge') * 1 || 1);\r\n\t\t} else {\r\n\t\t\tthis._items[position].before(content);\r\n\t\t\tthis._items.splice(position, 0, content);\r\n\t\t\tthis._mergers.splice(position, 0, content.find('[data-merge]').addBack('[data-merge]').attr('data-merge') * 1 || 1);\r\n\t\t}\r\n\r\n\t\tthis._items[current] && this.reset(this._items[current].index());\r\n\r\n\t\tthis.invalidate('items');\r\n\r\n\t\tthis.trigger('added', { content: content, position: position });\r\n\t};\r\n\r\n\t/**\r\n\t * Removes an item by its position.\r\n\t * @todo Use `item` instead of `content` for the event arguments.\r\n\t * @public\r\n\t * @param {Number} position - The relative position of the item to remove.\r\n\t */\r\n\tOwl.prototype.remove = function(position) {\r\n\t\tposition = this.normalize(position, true);\r\n\r\n\t\tif (position === undefined) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.trigger('remove', { content: this._items[position], position: position });\r\n\r\n\t\tthis._items[position].remove();\r\n\t\tthis._items.splice(position, 1);\r\n\t\tthis._mergers.splice(position, 1);\r\n\r\n\t\tthis.invalidate('items');\r\n\r\n\t\tthis.trigger('removed', { content: null, position: position });\r\n\t};\r\n\r\n\t/**\r\n\t * Preloads images with auto width.\r\n\t * @todo Replace by a more generic approach\r\n\t * @protected\r\n\t */\r\n\tOwl.prototype.preloadAutoWidthImages = function(images) {\r\n\t\timages.each($.proxy(function(i, element) {\r\n\t\t\tthis.enter('pre-loading');\r\n\t\t\telement = $(element);\r\n\t\t\t$(new Image()).one('load', $.proxy(function(e) {\r\n\t\t\t\telement.attr('src', e.target.src);\r\n\t\t\t\telement.css('opacity', 1);\r\n\t\t\t\tthis.leave('pre-loading');\r\n\t\t\t\t!this.is('pre-loading') && !this.is('initializing') && this.refresh();\r\n\t\t\t}, this)).attr('src', element.attr('src') || element.attr('data-src') || element.attr('data-src-retina'));\r\n\t\t}, this));\r\n\t};\r\n\r\n\t/**\r\n\t * Destroys the carousel.\r\n\t * @public\r\n\t */\r\n\tOwl.prototype.destroy = function() {\r\n\r\n\t\tthis.$element.off('.owl.core');\r\n\t\tthis.$stage.off('.owl.core');\r\n\t\t$(document).off('.owl.core');\r\n\r\n\t\tif (this.settings.responsive !== false) {\r\n\t\t\twindow.clearTimeout(this.resizeTimer);\r\n\t\t\tthis.off(window, 'resize', this._handlers.onThrottledResize);\r\n\t\t}\r\n\r\n\t\tfor (var i in this._plugins) {\r\n\t\t\tthis._plugins[i].destroy();\r\n\t\t}\r\n\r\n\t\tthis.$stage.children('.cloned').remove();\r\n\r\n\t\tthis.$stage.unwrap();\r\n\t\tthis.$stage.children().contents().unwrap();\r\n\t\tthis.$stage.children().unwrap();\r\n\r\n\t\tthis.$element\r\n\t\t\t.removeClass(this.options.refreshClass)\r\n\t\t\t.removeClass(this.options.loadingClass)\r\n\t\t\t.removeClass(this.options.loadedClass)\r\n\t\t\t.removeClass(this.options.rtlClass)\r\n\t\t\t.removeClass(this.options.dragClass)\r\n\t\t\t.removeClass(this.options.grabClass)\r\n\t\t\t.attr('class', this.$element.attr('class').replace(new RegExp(this.options.responsiveClass + '-\\\\S+\\\\s', 'g'), ''))\r\n\t\t\t.removeData('owl.carousel');\r\n\t};\r\n\r\n\t/**\r\n\t * Operators to calculate right-to-left and left-to-right.\r\n\t * @protected\r\n\t * @param {Number} [a] - The left side operand.\r\n\t * @param {String} [o] - The operator.\r\n\t * @param {Number} [b] - The right side operand.\r\n\t */\r\n\tOwl.prototype.op = function(a, o, b) {\r\n\t\tvar rtl = this.settings.rtl;\r\n\t\tswitch (o) {\r\n\t\t\tcase '<':\r\n\t\t\t\treturn rtl ? a > b : a < b;\r\n\t\t\tcase '>':\r\n\t\t\t\treturn rtl ? a < b : a > b;\r\n\t\t\tcase '>=':\r\n\t\t\t\treturn rtl ? a <= b : a >= b;\r\n\t\t\tcase '<=':\r\n\t\t\t\treturn rtl ? a >= b : a <= b;\r\n\t\t\tdefault:\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t};\r\n\r\n\t/**\r\n\t * Attaches to an internal event.\r\n\t * @protected\r\n\t * @param {HTMLElement} element - The event source.\r\n\t * @param {String} event - The event name.\r\n\t * @param {Function} listener - The event handler to attach.\r\n\t * @param {Boolean} capture - Wether the event should be handled at the capturing phase or not.\r\n\t */\r\n\tOwl.prototype.on = function(element, event, listener, capture) {\r\n\t\tif (element.addEventListener) {\r\n\t\t\telement.addEventListener(event, listener, capture);\r\n\t\t} else if (element.attachEvent) {\r\n\t\t\telement.attachEvent('on' + event, listener);\r\n\t\t}\r\n\t};\r\n\r\n\t/**\r\n\t * Detaches from an internal event.\r\n\t * @protected\r\n\t * @param {HTMLElement} element - The event source.\r\n\t * @param {String} event - The event name.\r\n\t * @param {Function} listener - The attached event handler to detach.\r\n\t * @param {Boolean} capture - Wether the attached event handler was registered as a capturing listener or not.\r\n\t */\r\n\tOwl.prototype.off = function(element, event, listener, capture) {\r\n\t\tif (element.removeEventListener) {\r\n\t\t\telement.removeEventListener(event, listener, capture);\r\n\t\t} else if (element.detachEvent) {\r\n\t\t\telement.detachEvent('on' + event, listener);\r\n\t\t}\r\n\t};\r\n\r\n\t/**\r\n\t * Triggers a public event.\r\n\t * @todo Remove `status`, `relatedTarget` should be used instead.\r\n\t * @protected\r\n\t * @param {String} name - The event name.\r\n\t * @param {*} [data=null] - The event data.\r\n\t * @param {String} [namespace=carousel] - The event namespace.\r\n\t * @param {String} [state] - The state which is associated with the event.\r\n\t * @param {Boolean} [enter=false] - Indicates if the call enters the specified state or not.\r\n\t * @returns {Event} - The event arguments.\r\n\t */\r\n\tOwl.prototype.trigger = function(name, data, namespace, state, enter) {\r\n\t\tvar status = {\r\n\t\t\titem: { count: this._items.length, index: this.current() }\r\n\t\t}, handler = $.camelCase(\r\n\t\t\t$.grep([ 'on', name, namespace ], function(v) { return v })\r\n\t\t\t\t.join('-').toLowerCase()\r\n\t\t), event = $.Event(\r\n\t\t\t[ name, 'owl', namespace || 'carousel' ].join('.').toLowerCase(),\r\n\t\t\t$.extend({ relatedTarget: this }, status, data)\r\n\t\t);\r\n\r\n\t\tif (!this._supress[name]) {\r\n\t\t\t$.each(this._plugins, function(name, plugin) {\r\n\t\t\t\tif (plugin.onTrigger) {\r\n\t\t\t\t\tplugin.onTrigger(event);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tthis.register({ type: Owl.Type.Event, name: name });\r\n\t\t\tthis.$element.trigger(event);\r\n\r\n\t\t\tif (this.settings && typeof this.settings[handler] === 'function') {\r\n\t\t\t\tthis.settings[handler].call(this, event);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn event;\r\n\t};\r\n\r\n\t/**\r\n\t * Enters a state.\r\n\t * @param name - The state name.\r\n\t */\r\n\tOwl.prototype.enter = function(name) {\r\n\t\t$.each([ name ].concat(this._states.tags[name] || []), $.proxy(function(i, name) {\r\n\t\t\tif (this._states.current[name] === undefined) {\r\n\t\t\t\tthis._states.current[name] = 0;\r\n\t\t\t}\r\n\r\n\t\t\tthis._states.current[name]++;\r\n\t\t}, this));\r\n\t};\r\n\r\n\t/**\r\n\t * Leaves a state.\r\n\t * @param name - The state name.\r\n\t */\r\n\tOwl.prototype.leave = function(name) {\r\n\t\t$.each([ name ].concat(this._states.tags[name] || []), $.proxy(function(i, name) {\r\n\t\t\tthis._states.current[name]--;\r\n\t\t}, this));\r\n\t};\r\n\r\n\t/**\r\n\t * Registers an event or state.\r\n\t * @public\r\n\t * @param {Object} object - The event or state to register.\r\n\t */\r\n\tOwl.prototype.register = function(object) {\r\n\t\tif (object.type === Owl.Type.Event) {\r\n\t\t\tif (!$.event.special[object.name]) {\r\n\t\t\t\t$.event.special[object.name] = {};\r\n\t\t\t}\r\n\r\n\t\t\tif (!$.event.special[object.name].owl) {\r\n\t\t\t\tvar _default = $.event.special[object.name]._default;\r\n\t\t\t\t$.event.special[object.name]._default = function(e) {\r\n\t\t\t\t\tif (_default && _default.apply && (!e.namespace || e.namespace.indexOf('owl') === -1)) {\r\n\t\t\t\t\t\treturn _default.apply(this, arguments);\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn e.namespace && e.namespace.indexOf('owl') > -1;\r\n\t\t\t\t};\r\n\t\t\t\t$.event.special[object.name].owl = true;\r\n\t\t\t}\r\n\t\t} else if (object.type === Owl.Type.State) {\r\n\t\t\tif (!this._states.tags[object.name]) {\r\n\t\t\t\tthis._states.tags[object.name] = object.tags;\r\n\t\t\t} else {\r\n\t\t\t\tthis._states.tags[object.name] = this._states.tags[object.name].concat(object.tags);\r\n\t\t\t}\r\n\r\n\t\t\tthis._states.tags[object.name] = $.grep(this._states.tags[object.name], $.proxy(function(tag, i) {\r\n\t\t\t\treturn $.inArray(tag, this._states.tags[object.name]) === i;\r\n\t\t\t}, this));\r\n\t\t}\r\n\t};\r\n\r\n\t/**\r\n\t * Suppresses events.\r\n\t * @protected\r\n\t * @param {Array.} events - The events to suppress.\r\n\t */\r\n\tOwl.prototype.suppress = function(events) {\r\n\t\t$.each(events, $.proxy(function(index, event) {\r\n\t\t\tthis._supress[event] = true;\r\n\t\t}, this));\r\n\t};\r\n\r\n\t/**\r\n\t * Releases suppressed events.\r\n\t * @protected\r\n\t * @param {Array.} events - The events to release.\r\n\t */\r\n\tOwl.prototype.release = function(events) {\r\n\t\t$.each(events, $.proxy(function(index, event) {\r\n\t\t\tdelete this._supress[event];\r\n\t\t}, this));\r\n\t};\r\n\r\n\t/**\r\n\t * Gets unified pointer coordinates from event.\r\n\t * @todo #261\r\n\t * @protected\r\n\t * @param {Event} - The `mousedown` or `touchstart` event.\r\n\t * @returns {Object} - Contains `x` and `y` coordinates of current pointer position.\r\n\t */\r\n\tOwl.prototype.pointer = function(event) {\r\n\t\tvar result = { x: null, y: null };\r\n\r\n\t\tevent = event.originalEvent || event || window.event;\r\n\r\n\t\tevent = event.touches && event.touches.length ?\r\n\t\t\tevent.touches[0] : event.changedTouches && event.changedTouches.length ?\r\n\t\t\t\tevent.changedTouches[0] : event;\r\n\r\n\t\tif (event.pageX) {\r\n\t\t\tresult.x = event.pageX;\r\n\t\t\tresult.y = event.pageY;\r\n\t\t} else {\r\n\t\t\tresult.x = event.clientX;\r\n\t\t\tresult.y = event.clientY;\r\n\t\t}\r\n\r\n\t\treturn result;\r\n\t};\r\n\r\n\t/**\r\n\t * Determines if the input is a Number or something that can be coerced to a Number\r\n\t * @protected\r\n\t * @param {Number|String|Object|Array|Boolean|RegExp|Function|Symbol} - The input to be tested\r\n\t * @returns {Boolean} - An indication if the input is a Number or can be coerced to a Number\r\n\t */\r\n\tOwl.prototype.isNumeric = function(number) {\r\n\t\treturn !isNaN(parseFloat(number));\r\n\t};\r\n\r\n\t/**\r\n\t * Gets the difference of two vectors.\r\n\t * @todo #261\r\n\t * @protected\r\n\t * @param {Object} - The first vector.\r\n\t * @param {Object} - The second vector.\r\n\t * @returns {Object} - The difference.\r\n\t */\r\n\tOwl.prototype.difference = function(first, second) {\r\n\t\treturn {\r\n\t\t\tx: first.x - second.x,\r\n\t\t\ty: first.y - second.y\r\n\t\t};\r\n\t};\r\n\r\n\t/**\r\n\t * The jQuery Plugin for the Owl Carousel\r\n\t * @todo Navigation plugin `next` and `prev`\r\n\t * @public\r\n\t */\r\n\t$.fn.owlCarousel = function(option) {\r\n\t\tvar args = Array.prototype.slice.call(arguments, 1);\r\n\r\n\t\treturn this.each(function() {\r\n\t\t\tvar $this = $(this),\r\n\t\t\t\tdata = $this.data('owl.carousel');\r\n\r\n\t\t\tif (!data) {\r\n\t\t\t\tdata = new Owl(this, typeof option == 'object' && option);\r\n\t\t\t\t$this.data('owl.carousel', data);\r\n\r\n\t\t\t\t$.each([\r\n\t\t\t\t\t'next', 'prev', 'to', 'destroy', 'refresh', 'replace', 'add', 'remove'\r\n\t\t\t\t], function(i, event) {\r\n\t\t\t\t\tdata.register({ type: Owl.Type.Event, name: event });\r\n\t\t\t\t\tdata.$element.on(event + '.owl.carousel.core', $.proxy(function(e) {\r\n\t\t\t\t\t\tif (e.namespace && e.relatedTarget !== this) {\r\n\t\t\t\t\t\t\tthis.suppress([ event ]);\r\n\t\t\t\t\t\t\tdata[event].apply(this, [].slice.call(arguments, 1));\r\n\t\t\t\t\t\t\tthis.release([ event ]);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}, data));\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tif (typeof option == 'string' && option.charAt(0) !== '_') {\r\n\t\t\t\tdata[option].apply(data, args);\r\n\t\t\t}\r\n\t\t});\r\n\t};\r\n\r\n\t/**\r\n\t * The constructor for the jQuery Plugin\r\n\t * @public\r\n\t */\r\n\t$.fn.owlCarousel.Constructor = Owl;\r\n\r\n})(window.Zepto || window.jQuery, window, document);\r\n\r\n/**\r\n * AutoRefresh Plugin\r\n * @version 2.1.0\r\n * @author Artus Kolanowski\r\n * @author David Deutsch\r\n * @license The MIT License (MIT)\r\n */\r\n;(function($, window, document, undefined) {\r\n\r\n\t/**\r\n\t * Creates the auto refresh plugin.\r\n\t * @class The Auto Refresh Plugin\r\n\t * @param {Owl} carousel - The Owl Carousel\r\n\t */\r\n\tvar AutoRefresh = function(carousel) {\r\n\t\t/**\r\n\t\t * Reference to the core.\r\n\t\t * @protected\r\n\t\t * @type {Owl}\r\n\t\t */\r\n\t\tthis._core = carousel;\r\n\r\n\t\t/**\r\n\t\t * Refresh interval.\r\n\t\t * @protected\r\n\t\t * @type {number}\r\n\t\t */\r\n\t\tthis._interval = null;\r\n\r\n\t\t/**\r\n\t\t * Whether the element is currently visible or not.\r\n\t\t * @protected\r\n\t\t * @type {Boolean}\r\n\t\t */\r\n\t\tthis._visible = null;\r\n\r\n\t\t/**\r\n\t\t * All event handlers.\r\n\t\t * @protected\r\n\t\t * @type {Object}\r\n\t\t */\r\n\t\tthis._handlers = {\r\n\t\t\t'initialized.owl.carousel': $.proxy(function(e) {\r\n\t\t\t\tif (e.namespace && this._core.settings.autoRefresh) {\r\n\t\t\t\t\tthis.watch();\r\n\t\t\t\t}\r\n\t\t\t}, this)\r\n\t\t};\r\n\r\n\t\t// set default options\r\n\t\tthis._core.options = $.extend({}, AutoRefresh.Defaults, this._core.options);\r\n\r\n\t\t// register event handlers\r\n\t\tthis._core.$element.on(this._handlers);\r\n\t};\r\n\r\n\t/**\r\n\t * Default options.\r\n\t * @public\r\n\t */\r\n\tAutoRefresh.Defaults = {\r\n\t\tautoRefresh: true,\r\n\t\tautoRefreshInterval: 500\r\n\t};\r\n\r\n\t/**\r\n\t * Watches the element.\r\n\t */\r\n\tAutoRefresh.prototype.watch = function() {\r\n\t\tif (this._interval) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._visible = this._core.$element.is(':visible');\r\n\t\tthis._interval = window.setInterval($.proxy(this.refresh, this), this._core.settings.autoRefreshInterval);\r\n\t};\r\n\r\n\t/**\r\n\t * Refreshes the element.\r\n\t */\r\n\tAutoRefresh.prototype.refresh = function() {\r\n\t\tif (this._core.$element.is(':visible') === this._visible) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._visible = !this._visible;\r\n\r\n\t\tthis._core.$element.toggleClass('owl-hidden', !this._visible);\r\n\r\n\t\tthis._visible && (this._core.invalidate('width') && this._core.refresh());\r\n\t};\r\n\r\n\t/**\r\n\t * Destroys the plugin.\r\n\t */\r\n\tAutoRefresh.prototype.destroy = function() {\r\n\t\tvar handler, property;\r\n\r\n\t\twindow.clearInterval(this._interval);\r\n\r\n\t\tfor (handler in this._handlers) {\r\n\t\t\tthis._core.$element.off(handler, this._handlers[handler]);\r\n\t\t}\r\n\t\tfor (property in Object.getOwnPropertyNames(this)) {\r\n\t\t\ttypeof this[property] != 'function' && (this[property] = null);\r\n\t\t}\r\n\t};\r\n\r\n\t$.fn.owlCarousel.Constructor.Plugins.AutoRefresh = AutoRefresh;\r\n\r\n})(window.Zepto || window.jQuery, window, document);\r\n\r\n/**\r\n * Lazy Plugin\r\n * @version 2.1.0\r\n * @author Bartosz Wojciechowski\r\n * @author David Deutsch\r\n * @license The MIT License (MIT)\r\n */\r\n;(function($, window, document, undefined) {\r\n\r\n\t/**\r\n\t * Creates the lazy plugin.\r\n\t * @class The Lazy Plugin\r\n\t * @param {Owl} carousel - The Owl Carousel\r\n\t */\r\n\tvar Lazy = function(carousel) {\r\n\r\n\t\t/**\r\n\t\t * Reference to the core.\r\n\t\t * @protected\r\n\t\t * @type {Owl}\r\n\t\t */\r\n\t\tthis._core = carousel;\r\n\r\n\t\t/**\r\n\t\t * Already loaded items.\r\n\t\t * @protected\r\n\t\t * @type {Array.}\r\n\t\t */\r\n\t\tthis._loaded = [];\r\n\r\n\t\t/**\r\n\t\t * Event handlers.\r\n\t\t * @protected\r\n\t\t * @type {Object}\r\n\t\t */\r\n\t\tthis._handlers = {\r\n\t\t\t'initialized.owl.carousel change.owl.carousel resized.owl.carousel': $.proxy(function(e) {\r\n\t\t\t\tif (!e.namespace) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (!this._core.settings || !this._core.settings.lazyLoad) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif ((e.property && e.property.name == 'position') || e.type == 'initialized') {\r\n\t\t\t\t\tvar settings = this._core.settings,\r\n\t\t\t\t\t\tn = (settings.center && Math.ceil(settings.items / 2) || settings.items),\r\n\t\t\t\t\t\ti = ((settings.center && n * -1) || 0),\r\n\t\t\t\t\t\tposition = (e.property && e.property.value !== undefined ? e.property.value : this._core.current()) + i,\r\n\t\t\t\t\t\tpositions = this.positions(position),\r\n\t\t\t\t\t\tclones = this._core.clones().length,\r\n\t\t\t\t\t\titerator = positions.length,\r\n\t\t\t\t\t\tload = $.proxy(function(i, v) { this.load(v) }, this);\r\n\r\n\t\t\t\t\twhile (iterator--) {\r\n\t\t\t\t\t\tthis.load(clones / 2 + positions[iterator]);\r\n\t\t\t\t\t\tclones && $.each(this._core.clones(positions[iterator]), load);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}, this)\r\n\t\t};\r\n\r\n\t\t// set the default options\r\n\t\tthis._core.options = $.extend({}, Lazy.Defaults, this._core.options);\r\n\r\n\t\t// register event handler\r\n\t\tthis._core.$element.on(this._handlers);\r\n\t};\r\n\r\n\t/**\r\n\t * Default options.\r\n\t * @public\r\n\t */\r\n\tLazy.Defaults = {\r\n\t\tlazyLoad: false,\r\n\t\tlazyPrefetch: 'page'\r\n\t};\r\n\r\n\t/**\r\n\t * Gets the positions to load for the given position.\r\n\t * @todo Page size doesn't work with auto width or merge and might be a missing feature of the core.\r\n\t * @param {Numer} current - The absolute current position of the carousel.\r\n\t * @returns {Array}\r\n\t */\r\n\tLazy.prototype.positions = function(current) {\r\n\t\tvar result = [],\r\n\t\t\tsettings = this._core.settings,\r\n\t\t\trelative = this._core.relative(current),\r\n\t\t\tbackward = settings.loop || settings.center && relative > 0,\r\n\t\t\tbefore = settings.center && (relative > 0 || settings.loop),\r\n\t\t\tpage = settings.items + (before && settings.items % 2 === 0 ? 1 : 0),\r\n\t\t\tprefetch = settings.lazyPrefetch === 'page' ? page : settings.lazyPrefetch,\r\n\t\t\titerator = page,\r\n\t\t\toffset = before ? -Math.ceil(settings.items / 2) : 0;\r\n\r\n\t\twhile (prefetch--) {\r\n\t\t\tbackward && result.unshift(this._core.relative(current - prefetch + offset - 1));\r\n\t\t\tresult.unshift(this._core.relative(current + page + prefetch + offset));\r\n\t\t}\r\n\r\n\t\twhile (iterator--) {\r\n\t\t\tresult.unshift(this._core.relative(current + iterator + offset));\r\n\t\t}\r\n\r\n\t\treturn result;\r\n\t};\r\n\r\n\t/**\r\n\t * Loads all resources of an item at the specified position.\r\n\t * @param {Number} position - The absolute position of the item.\r\n\t * @protected\r\n\t */\r\n\tLazy.prototype.load = function(position) {\r\n\t\tvar $item = this._core.$stage.children().eq(position),\r\n\t\t\t$elements = $item && $item.find('.owl-lazy');\r\n\r\n\t\tif (!$elements || $.inArray($item.get(0), this._loaded) > -1) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t$elements.each($.proxy(function(index, element) {\r\n\t\t\tvar $element = $(element), image,\r\n url = (window.devicePixelRatio > 1 && $element.attr('data-src-retina')) || $element.attr('data-src') || $element.attr('data-srcset');\r\n\r\n\t\t\tif ($element.is('img') && !$element.attr('data-src')) {\r\n\t\t\t\t$element.css('opacity', 1);\r\n\t\t\t\tthis._core.trigger('loaded', { element: $element, url: url }, 'lazy');\r\n\t\t\t} else {\r\n\t\t\t\tthis._core.trigger('load', { element: $element, url: url }, 'lazy');\r\n\r\n\t\t\t\tif ($element.is('img')) {\r\n\t\t\t\t\t$element.one('load.owl.lazy', $.proxy(function() {\r\n\t\t\t\t\t\t$element.css('opacity', 1);\r\n\t\t\t\t\t\tthis._core.trigger('loaded', { element: $element, url: url }, 'lazy');\r\n\t\t\t\t\t}, this)).attr('src', url);\r\n\t\t\t\t} else if ($element.is('source')) {\r\n\t\t\t\t\t$element.attr('srcset', $element.attr('data-srcset'));\r\n\t\t\t\t} else {\r\n\t\t\t\t\timage = new Image();\r\n\t\t\t\t\timage.onload = $.proxy(function() {\r\n\t\t\t\t\t\t$element.css({\r\n\t\t\t\t\t\t\t'background-image': 'url(\"' + url + '\")',\r\n\t\t\t\t\t\t\t'opacity': '1'\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t\tthis._core.trigger('loaded', { element: $element, url: url }, 'lazy');\r\n\t\t\t\t\t}, this);\r\n\t\t\t\t\timage.src = url;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t}, this));\r\n\r\n\t\tthis._loaded.push($item.get(0));\r\n\t};\r\n\r\n\t/**\r\n\t * Destroys the plugin.\r\n\t * @public\r\n\t */\r\n\tLazy.prototype.destroy = function() {\r\n\t\tvar handler, property;\r\n\r\n\t\tfor (handler in this.handlers) {\r\n\t\t\tthis._core.$element.off(handler, this.handlers[handler]);\r\n\t\t}\r\n\t\tfor (property in Object.getOwnPropertyNames(this)) {\r\n\t\t\ttypeof this[property] != 'function' && (this[property] = null);\r\n\t\t}\r\n\t};\r\n\r\n\t$.fn.owlCarousel.Constructor.Plugins.Lazy = Lazy;\r\n\r\n})(window.Zepto || window.jQuery, window, document);\r\n\r\n/**\r\n * AutoHeight Plugin\r\n * @version 2.1.0\r\n * @author Bartosz Wojciechowski\r\n * @author David Deutsch\r\n * @license The MIT License (MIT)\r\n */\r\n;(function($, window, document, undefined) {\r\n\r\n\t/**\r\n\t * Creates the auto height plugin.\r\n\t * @class The Auto Height Plugin\r\n\t * @param {Owl} carousel - The Owl Carousel\r\n\t */\r\n\tvar AutoHeight = function(carousel) {\r\n\t\t/**\r\n\t\t * Reference to the core.\r\n\t\t * @protected\r\n\t\t * @type {Owl}\r\n\t\t */\r\n\t\tthis._core = carousel;\r\n\r\n\t\t/**\r\n\t\t * All event handlers.\r\n\t\t * @protected\r\n\t\t * @type {Object}\r\n\t\t */\r\n\t\tthis._handlers = {\r\n\t\t\t'initialized.owl.carousel refreshed.owl.carousel': $.proxy(function(e) {\r\n\t\t\t\tif (e.namespace && this._core.settings.autoHeight) {\r\n\t\t\t\t\tthis.update();\r\n\t\t\t\t}\r\n\t\t\t}, this),\r\n\t\t\t'changed.owl.carousel': $.proxy(function(e) {\r\n\t\t\t\tif (e.namespace && this._core.settings.autoHeight && e.property.name === 'position'){\r\n\t\t\t\t\tthis.update();\r\n\t\t\t\t}\r\n\t\t\t}, this),\r\n\t\t\t'loaded.owl.lazy': $.proxy(function(e) {\r\n\t\t\t\tif (e.namespace && this._core.settings.autoHeight\r\n\t\t\t\t\t&& e.element.closest('.' + this._core.settings.itemClass).index() === this._core.current()) {\r\n\t\t\t\t\tthis.update();\r\n\t\t\t\t}\r\n\t\t\t}, this)\r\n\t\t};\r\n\r\n\t\t// set default options\r\n\t\tthis._core.options = $.extend({}, AutoHeight.Defaults, this._core.options);\r\n\r\n\t\t// register event handlers\r\n\t\tthis._core.$element.on(this._handlers);\r\n\t};\r\n\r\n\t/**\r\n\t * Default options.\r\n\t * @public\r\n\t */\r\n\tAutoHeight.Defaults = {\r\n\t\tautoHeight: false,\r\n\t\tautoHeightClass: 'owl-height'\r\n\t};\r\n\r\n\t/**\r\n\t * Updates the view.\r\n\t */\r\n\tAutoHeight.prototype.update = function() {\r\n\t\tvar start = this._core._current,\r\n\t\t\tend = start + this._core.settings.items,\r\n\t\t\tvisible = this._core.$stage.children().toArray().slice(start, end),\r\n\t\t\theights = [],\r\n\t\t\tmaxheight = 0;\r\n\r\n\t\t$.each(visible, function(index, item) {\r\n\t\t\theights.push($(item).height());\r\n\t\t});\r\n\r\n\t\tmaxheight = Math.max.apply(null, heights);\r\n\r\n\t\tthis._core.$stage.parent()\r\n\t\t\t.height(maxheight)\r\n\t\t\t.addClass(this._core.settings.autoHeightClass);\r\n\t};\r\n\r\n\tAutoHeight.prototype.destroy = function() {\r\n\t\tvar handler, property;\r\n\r\n\t\tfor (handler in this._handlers) {\r\n\t\t\tthis._core.$element.off(handler, this._handlers[handler]);\r\n\t\t}\r\n\t\tfor (property in Object.getOwnPropertyNames(this)) {\r\n\t\t\ttypeof this[property] !== 'function' && (this[property] = null);\r\n\t\t}\r\n\t};\r\n\r\n\t$.fn.owlCarousel.Constructor.Plugins.AutoHeight = AutoHeight;\r\n\r\n})(window.Zepto || window.jQuery, window, document);\r\n\r\n/**\r\n * Video Plugin\r\n * @version 2.1.0\r\n * @author Bartosz Wojciechowski\r\n * @author David Deutsch\r\n * @license The MIT License (MIT)\r\n */\r\n;(function($, window, document, undefined) {\r\n\r\n\t/**\r\n\t * Creates the video plugin.\r\n\t * @class The Video Plugin\r\n\t * @param {Owl} carousel - The Owl Carousel\r\n\t */\r\n\tvar Video = function(carousel) {\r\n\t\t/**\r\n\t\t * Reference to the core.\r\n\t\t * @protected\r\n\t\t * @type {Owl}\r\n\t\t */\r\n\t\tthis._core = carousel;\r\n\r\n\t\t/**\r\n\t\t * Cache all video URLs.\r\n\t\t * @protected\r\n\t\t * @type {Object}\r\n\t\t */\r\n\t\tthis._videos = {};\r\n\r\n\t\t/**\r\n\t\t * Current playing item.\r\n\t\t * @protected\r\n\t\t * @type {jQuery}\r\n\t\t */\r\n\t\tthis._playing = null;\r\n\r\n\t\t/**\r\n\t\t * All event handlers.\r\n\t\t * @todo The cloned content removale is too late\r\n\t\t * @protected\r\n\t\t * @type {Object}\r\n\t\t */\r\n\t\tthis._handlers = {\r\n\t\t\t'initialized.owl.carousel': $.proxy(function(e) {\r\n\t\t\t\tif (e.namespace) {\r\n\t\t\t\t\tthis._core.register({ type: 'state', name: 'playing', tags: [ 'interacting' ] });\r\n\t\t\t\t}\r\n\t\t\t}, this),\r\n\t\t\t'resize.owl.carousel': $.proxy(function(e) {\r\n\t\t\t\tif (e.namespace && this._core.settings.video && this.isInFullScreen()) {\r\n\t\t\t\t\te.preventDefault();\r\n\t\t\t\t}\r\n\t\t\t}, this),\r\n\t\t\t'refreshed.owl.carousel': $.proxy(function(e) {\r\n\t\t\t\tif (e.namespace && this._core.is('resizing')) {\r\n\t\t\t\t\tthis._core.$stage.find('.cloned .owl-video-frame').remove();\r\n\t\t\t\t}\r\n\t\t\t}, this),\r\n\t\t\t'changed.owl.carousel': $.proxy(function(e) {\r\n\t\t\t\tif (e.namespace && e.property.name === 'position' && this._playing) {\r\n\t\t\t\t\tthis.stop();\r\n\t\t\t\t}\r\n\t\t\t}, this),\r\n\t\t\t'prepared.owl.carousel': $.proxy(function(e) {\r\n\t\t\t\tif (!e.namespace) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvar $element = $(e.content).find('.owl-video');\r\n\r\n\t\t\t\tif ($element.length) {\r\n\t\t\t\t\t$element.css('display', 'none');\r\n\t\t\t\t\tthis.fetch($element, $(e.content));\r\n\t\t\t\t}\r\n\t\t\t}, this)\r\n\t\t};\r\n\r\n\t\t// set default options\r\n\t\tthis._core.options = $.extend({}, Video.Defaults, this._core.options);\r\n\r\n\t\t// register event handlers\r\n\t\tthis._core.$element.on(this._handlers);\r\n\r\n\t\tthis._core.$element.on('click.owl.video', '.owl-video-play-icon', $.proxy(function(e) {\r\n\t\t\tthis.play(e);\r\n\t\t}, this));\r\n\t};\r\n\r\n\t/**\r\n\t * Default options.\r\n\t * @public\r\n\t */\r\n\tVideo.Defaults = {\r\n\t\tvideo: false,\r\n\t\tvideoHeight: false,\r\n\t\tvideoWidth: false\r\n\t};\r\n\r\n\t/**\r\n\t * Gets the video ID and the type (YouTube/Vimeo/vzaar only).\r\n\t * @protected\r\n\t * @param {jQuery} target - The target containing the video data.\r\n\t * @param {jQuery} item - The item containing the video.\r\n\t */\r\n\tVideo.prototype.fetch = function(target, item) {\r\n\t\t\tvar type = (function() {\r\n\t\t\t\t\tif (target.attr('data-vimeo-id')) {\r\n\t\t\t\t\t\treturn 'vimeo';\r\n\t\t\t\t\t} else if (target.attr('data-vzaar-id')) {\r\n\t\t\t\t\t\treturn 'vzaar'\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\treturn 'youtube';\r\n\t\t\t\t\t}\r\n\t\t\t\t})(),\r\n\t\t\t\tid = target.attr('data-vimeo-id') || target.attr('data-youtube-id') || target.attr('data-vzaar-id'),\r\n\t\t\t\twidth = target.attr('data-width') || this._core.settings.videoWidth,\r\n\t\t\t\theight = target.attr('data-height') || this._core.settings.videoHeight,\r\n\t\t\t\turl = target.attr('href');\r\n\r\n\t\tif (url) {\r\n\r\n\t\t\t/*\r\n\t\t\t\t\tParses the id's out of the following urls (and probably more):\r\n\t\t\t\t\thttps://www.youtube.com/watch?v=:id\r\n\t\t\t\t\thttps://youtu.be/:id\r\n\t\t\t\t\thttps://vimeo.com/:id\r\n\t\t\t\t\thttps://vimeo.com/channels/:channel/:id\r\n\t\t\t\t\thttps://vimeo.com/groups/:group/videos/:id\r\n\t\t\t\t\thttps://app.vzaar.com/videos/:id\r\n\r\n\t\t\t\t\tVisual example: https://regexper.com/#(http%3A%7Chttps%3A%7C)%5C%2F%5C%2F(player.%7Cwww.%7Capp.)%3F(vimeo%5C.com%7Cyoutu(be%5C.com%7C%5C.be%7Cbe%5C.googleapis%5C.com)%7Cvzaar%5C.com)%5C%2F(video%5C%2F%7Cvideos%5C%2F%7Cembed%5C%2F%7Cchannels%5C%2F.%2B%5C%2F%7Cgroups%5C%2F.%2B%5C%2F%7Cwatch%5C%3Fv%3D%7Cv%5C%2F)%3F(%5BA-Za-z0-9._%25-%5D*)(%5C%26%5CS%2B)%3F\r\n\t\t\t*/\r\n\r\n\t\t\tid = url.match(/(http:|https:|)\\/\\/(player.|www.|app.)?(vimeo\\.com|youtu(be\\.com|\\.be|be\\.googleapis\\.com)|vzaar\\.com)\\/(video\\/|videos\\/|embed\\/|channels\\/.+\\/|groups\\/.+\\/|watch\\?v=|v\\/)?([A-Za-z0-9._%-]*)(\\&\\S+)?/);\r\n\r\n\t\t\tif (id[3].indexOf('youtu') > -1) {\r\n\t\t\t\ttype = 'youtube';\r\n\t\t\t} else if (id[3].indexOf('vimeo') > -1) {\r\n\t\t\t\ttype = 'vimeo';\r\n\t\t\t} else if (id[3].indexOf('vzaar') > -1) {\r\n\t\t\t\ttype = 'vzaar';\r\n\t\t\t} else {\r\n\t\t\t\tthrow new Error('Video URL not supported.');\r\n\t\t\t}\r\n\t\t\tid = id[6];\r\n\t\t} else {\r\n\t\t\tthrow new Error('Missing video URL.');\r\n\t\t}\r\n\r\n\t\tthis._videos[url] = {\r\n\t\t\ttype: type,\r\n\t\t\tid: id,\r\n\t\t\twidth: width,\r\n\t\t\theight: height\r\n\t\t};\r\n\r\n\t\titem.attr('data-video', url);\r\n\r\n\t\tthis.thumbnail(target, this._videos[url]);\r\n\t};\r\n\r\n\t/**\r\n\t * Creates video thumbnail.\r\n\t * @protected\r\n\t * @param {jQuery} target - The target containing the video data.\r\n\t * @param {Object} info - The video info object.\r\n\t * @see `fetch`\r\n\t */\r\n\tVideo.prototype.thumbnail = function(target, video) {\r\n\t\tvar tnLink,\r\n\t\t\ticon,\r\n\t\t\tpath,\r\n\t\t\tdimensions = video.width && video.height ? 'style=\"width:' + video.width + 'px;height:' + video.height + 'px;\"' : '',\r\n\t\t\tcustomTn = target.find('img'),\r\n\t\t\tsrcType = 'src',\r\n\t\t\tlazyClass = '',\r\n\t\t\tsettings = this._core.settings,\r\n\t\t\tcreate = function(path) {\r\n\t\t\t\ticon = '
';\r\n\r\n\t\t\t\tif (settings.lazyLoad) {\r\n\t\t\t\t\ttnLink = '
';\r\n\t\t\t\t} else {\r\n\t\t\t\t\ttnLink = '
';\r\n\t\t\t\t}\r\n\t\t\t\ttarget.after(tnLink);\r\n\t\t\t\ttarget.after(icon);\r\n\t\t\t};\r\n\r\n\t\t// wrap video content into owl-video-wrapper div\r\n\t\ttarget.wrap('
');\r\n\r\n\t\tif (this._core.settings.lazyLoad) {\r\n\t\t\tsrcType = 'data-src';\r\n\t\t\tlazyClass = 'owl-lazy';\r\n\t\t}\r\n\r\n\t\t// custom thumbnail\r\n\t\tif (customTn.length) {\r\n\t\t\tcreate(customTn.attr(srcType));\r\n\t\t\tcustomTn.remove();\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tif (video.type === 'youtube') {\r\n\t\t\tpath = \"//img.youtube.com/vi/\" + video.id + \"/hqdefault.jpg\";\r\n\t\t\tcreate(path);\r\n\t\t} else if (video.type === 'vimeo') {\r\n\t\t\t$.ajax({\r\n\t\t\t\ttype: 'GET',\r\n\t\t\t\turl: '//vimeo.com/api/v2/video/' + video.id + '.json',\r\n\t\t\t\tjsonp: 'callback',\r\n\t\t\t\tdataType: 'jsonp',\r\n\t\t\t\tsuccess: function(data) {\r\n\t\t\t\t\tpath = data[0].thumbnail_large;\r\n\t\t\t\t\tcreate(path);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t} else if (video.type === 'vzaar') {\r\n\t\t\t$.ajax({\r\n\t\t\t\ttype: 'GET',\r\n\t\t\t\turl: '//vzaar.com/api/videos/' + video.id + '.json',\r\n\t\t\t\tjsonp: 'callback',\r\n\t\t\t\tdataType: 'jsonp',\r\n\t\t\t\tsuccess: function(data) {\r\n\t\t\t\t\tpath = data.framegrab_url;\r\n\t\t\t\t\tcreate(path);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t};\r\n\r\n\t/**\r\n\t * Stops the current video.\r\n\t * @public\r\n\t */\r\n\tVideo.prototype.stop = function() {\r\n\t\tthis._core.trigger('stop', null, 'video');\r\n\t\tthis._playing.find('.owl-video-frame').remove();\r\n\t\tthis._playing.removeClass('owl-video-playing');\r\n\t\tthis._playing = null;\r\n\t\tthis._core.leave('playing');\r\n\t\tthis._core.trigger('stopped', null, 'video');\r\n\t};\r\n\r\n\t/**\r\n\t * Starts the current video.\r\n\t * @public\r\n\t * @param {Event} event - The event arguments.\r\n\t */\r\n\tVideo.prototype.play = function(event) {\r\n\t\tvar target = $(event.target),\r\n\t\t\titem = target.closest('.' + this._core.settings.itemClass),\r\n\t\t\tvideo = this._videos[item.attr('data-video')],\r\n\t\t\twidth = video.width || '100%',\r\n\t\t\theight = video.height || this._core.$stage.height(),\r\n\t\t\thtml;\r\n\r\n\t\tif (this._playing) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._core.enter('playing');\r\n\t\tthis._core.trigger('play', null, 'video');\r\n\r\n\t\titem = this._core.items(this._core.relative(item.index()));\r\n\r\n\t\tthis._core.reset(item.index());\r\n\r\n\t\tif (video.type === 'youtube') {\r\n\t\t\thtml = '';\r\n\t\t} else if (video.type === 'vimeo') {\r\n\t\t\thtml = '';\r\n\t\t} else if (video.type === 'vzaar') {\r\n\t\t\thtml = '';\r\n\t\t}\r\n\r\n\t\t$('
' + html + '
').insertAfter(item.find('.owl-video'));\r\n\r\n\t\tthis._playing = item.addClass('owl-video-playing');\r\n\t};\r\n\r\n\t/**\r\n\t * Checks whether an video is currently in full screen mode or not.\r\n\t * @todo Bad style because looks like a readonly method but changes members.\r\n\t * @protected\r\n\t * @returns {Boolean}\r\n\t */\r\n\tVideo.prototype.isInFullScreen = function() {\r\n\t\tvar element = document.fullscreenElement || document.mozFullScreenElement ||\r\n\t\t\t\tdocument.webkitFullscreenElement;\r\n\r\n\t\treturn element && $(element).parent().hasClass('owl-video-frame');\r\n\t};\r\n\r\n\t/**\r\n\t * Destroys the plugin.\r\n\t */\r\n\tVideo.prototype.destroy = function() {\r\n\t\tvar handler, property;\r\n\r\n\t\tthis._core.$element.off('click.owl.video');\r\n\r\n\t\tfor (handler in this._handlers) {\r\n\t\t\tthis._core.$element.off(handler, this._handlers[handler]);\r\n\t\t}\r\n\t\tfor (property in Object.getOwnPropertyNames(this)) {\r\n\t\t\ttypeof this[property] != 'function' && (this[property] = null);\r\n\t\t}\r\n\t};\r\n\r\n\t$.fn.owlCarousel.Constructor.Plugins.Video = Video;\r\n\r\n})(window.Zepto || window.jQuery, window, document);\r\n\r\n/**\r\n * Animate Plugin\r\n * @version 2.1.0\r\n * @author Bartosz Wojciechowski\r\n * @author David Deutsch\r\n * @license The MIT License (MIT)\r\n */\r\n;(function($, window, document, undefined) {\r\n\r\n\t/**\r\n\t * Creates the animate plugin.\r\n\t * @class The Navigation Plugin\r\n\t * @param {Owl} scope - The Owl Carousel\r\n\t */\r\n\tvar Animate = function(scope) {\r\n\t\tthis.core = scope;\r\n\t\tthis.core.options = $.extend({}, Animate.Defaults, this.core.options);\r\n\t\tthis.swapping = true;\r\n\t\tthis.previous = undefined;\r\n\t\tthis.next = undefined;\r\n\r\n\t\tthis.handlers = {\r\n\t\t\t'change.owl.carousel': $.proxy(function(e) {\r\n\t\t\t\tif (e.namespace && e.property.name == 'position') {\r\n\t\t\t\t\tthis.previous = this.core.current();\r\n\t\t\t\t\tthis.next = e.property.value;\r\n\t\t\t\t}\r\n\t\t\t}, this),\r\n\t\t\t'drag.owl.carousel dragged.owl.carousel translated.owl.carousel': $.proxy(function(e) {\r\n\t\t\t\tif (e.namespace) {\r\n\t\t\t\t\tthis.swapping = e.type == 'translated';\r\n\t\t\t\t}\r\n\t\t\t}, this),\r\n\t\t\t'translate.owl.carousel': $.proxy(function(e) {\r\n\t\t\t\tif (e.namespace && this.swapping && (this.core.options.animateOut || this.core.options.animateIn)) {\r\n\t\t\t\t\tthis.swap();\r\n\t\t\t\t}\r\n\t\t\t}, this)\r\n\t\t};\r\n\r\n\t\tthis.core.$element.on(this.handlers);\r\n\t};\r\n\r\n\t/**\r\n\t * Default options.\r\n\t * @public\r\n\t */\r\n\tAnimate.Defaults = {\r\n\t\tanimateOut: false,\r\n\t\tanimateIn: false\r\n\t};\r\n\r\n\t/**\r\n\t * Toggles the animation classes whenever an translations starts.\r\n\t * @protected\r\n\t * @returns {Boolean|undefined}\r\n\t */\r\n\tAnimate.prototype.swap = function() {\r\n\r\n\t\tif (this.core.settings.items !== 1) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (!$.support.animation || !$.support.transition) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.core.speed(0);\r\n\r\n\t\tvar left,\r\n\t\t\tclear = $.proxy(this.clear, this),\r\n\t\t\tprevious = this.core.$stage.children().eq(this.previous),\r\n\t\t\tnext = this.core.$stage.children().eq(this.next),\r\n\t\t\tincoming = this.core.settings.animateIn,\r\n\t\t\toutgoing = this.core.settings.animateOut;\r\n\r\n\t\tif (this.core.current() === this.previous) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (outgoing) {\r\n\t\t\tleft = this.core.coordinates(this.previous) - this.core.coordinates(this.next);\r\n\t\t\tprevious.one($.support.animation.end, clear)\r\n\t\t\t\t.css( { 'left': left + 'px' } )\r\n\t\t\t\t.addClass('animated owl-animated-out')\r\n\t\t\t\t.addClass(outgoing);\r\n\t\t}\r\n\r\n\t\tif (incoming) {\r\n\t\t\tnext.one($.support.animation.end, clear)\r\n\t\t\t\t.addClass('animated owl-animated-in')\r\n\t\t\t\t.addClass(incoming);\r\n\t\t}\r\n\t};\r\n\r\n\tAnimate.prototype.clear = function(e) {\r\n\t\t$(e.target).css( { 'left': '' } )\r\n\t\t\t.removeClass('animated owl-animated-out owl-animated-in')\r\n\t\t\t.removeClass(this.core.settings.animateIn)\r\n\t\t\t.removeClass(this.core.settings.animateOut);\r\n\t\tthis.core.onTransitionEnd();\r\n\t};\r\n\r\n\t/**\r\n\t * Destroys the plugin.\r\n\t * @public\r\n\t */\r\n\tAnimate.prototype.destroy = function() {\r\n\t\tvar handler, property;\r\n\r\n\t\tfor (handler in this.handlers) {\r\n\t\t\tthis.core.$element.off(handler, this.handlers[handler]);\r\n\t\t}\r\n\t\tfor (property in Object.getOwnPropertyNames(this)) {\r\n\t\t\ttypeof this[property] != 'function' && (this[property] = null);\r\n\t\t}\r\n\t};\r\n\r\n\t$.fn.owlCarousel.Constructor.Plugins.Animate = Animate;\r\n\r\n})(window.Zepto || window.jQuery, window, document);\r\n\r\n/**\r\n * Autoplay Plugin\r\n * @version 2.1.0\r\n * @author Bartosz Wojciechowski\r\n * @author Artus Kolanowski\r\n * @author David Deutsch\r\n * @license The MIT License (MIT)\r\n */\r\n;(function($, window, document, undefined) {\r\n\r\n\t/**\r\n\t * Creates the autoplay plugin.\r\n\t * @class The Autoplay Plugin\r\n\t * @param {Owl} scope - The Owl Carousel\r\n\t */\r\n\tvar Autoplay = function(carousel) {\r\n\t\t/**\r\n\t\t * Reference to the core.\r\n\t\t * @protected\r\n\t\t * @type {Owl}\r\n\t\t */\r\n\t\tthis._core = carousel;\r\n\r\n\t\t/**\r\n\t\t * The autoplay timeout.\r\n\t\t * @type {Timeout}\r\n\t\t */\r\n\t\tthis._timeout = null;\r\n\r\n\t\t/**\r\n\t\t * Indicates whenever the autoplay is paused.\r\n\t\t * @type {Boolean}\r\n\t\t */\r\n\t\tthis._paused = false;\r\n\r\n\t\t/**\r\n\t\t * All event handlers.\r\n\t\t * @protected\r\n\t\t * @type {Object}\r\n\t\t */\r\n\t\tthis._handlers = {\r\n\t\t\t'changed.owl.carousel': $.proxy(function(e) {\r\n\t\t\t\tif (e.namespace && e.property.name === 'settings') {\r\n\t\t\t\t\tif (this._core.settings.autoplay) {\r\n\t\t\t\t\t\tthis.play();\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tthis.stop();\r\n\t\t\t\t\t}\r\n\t\t\t\t} else if (e.namespace && e.property.name === 'position') {\r\n\t\t\t\t\t//console.log('play?', e);\r\n\t\t\t\t\tif (this._core.settings.autoplay) {\r\n\t\t\t\t\t\tthis._setAutoPlayInterval();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}, this),\r\n\t\t\t'initialized.owl.carousel': $.proxy(function(e) {\r\n\t\t\t\tif (e.namespace && this._core.settings.autoplay) {\r\n\t\t\t\t\tthis.play();\r\n\t\t\t\t}\r\n\t\t\t}, this),\r\n\t\t\t'play.owl.autoplay': $.proxy(function(e, t, s) {\r\n\t\t\t\tif (e.namespace) {\r\n\t\t\t\t\tthis.play(t, s);\r\n\t\t\t\t}\r\n\t\t\t}, this),\r\n\t\t\t'stop.owl.autoplay': $.proxy(function(e) {\r\n\t\t\t\tif (e.namespace) {\r\n\t\t\t\t\tthis.stop();\r\n\t\t\t\t}\r\n\t\t\t}, this),\r\n\t\t\t'mouseover.owl.autoplay': $.proxy(function() {\r\n\t\t\t\tif (this._core.settings.autoplayHoverPause && this._core.is('rotating')) {\r\n\t\t\t\t\tthis.pause();\r\n\t\t\t\t}\r\n\t\t\t}, this),\r\n\t\t\t'mouseleave.owl.autoplay': $.proxy(function() {\r\n\t\t\t\tif (this._core.settings.autoplayHoverPause && this._core.is('rotating')) {\r\n\t\t\t\t\tthis.play();\r\n\t\t\t\t}\r\n\t\t\t}, this),\r\n\t\t\t'touchstart.owl.core': $.proxy(function() {\r\n\t\t\t\tif (this._core.settings.autoplayHoverPause && this._core.is('rotating')) {\r\n\t\t\t\t\tthis.pause();\r\n\t\t\t\t}\r\n\t\t\t}, this),\r\n\t\t\t'touchend.owl.core': $.proxy(function() {\r\n\t\t\t\tif (this._core.settings.autoplayHoverPause) {\r\n\t\t\t\t\tthis.play();\r\n\t\t\t\t}\r\n\t\t\t}, this)\r\n\t\t};\r\n\r\n\t\t// register event handlers\r\n\t\tthis._core.$element.on(this._handlers);\r\n\r\n\t\t// set default options\r\n\t\tthis._core.options = $.extend({}, Autoplay.Defaults, this._core.options);\r\n\t};\r\n\r\n\t/**\r\n\t * Default options.\r\n\t * @public\r\n\t */\r\n\tAutoplay.Defaults = {\r\n\t\tautoplay: false,\r\n\t\tautoplayTimeout: 5000,\r\n\t\tautoplayHoverPause: false,\r\n\t\tautoplaySpeed: false\r\n\t};\r\n\r\n\t/**\r\n\t * Starts the autoplay.\r\n\t * @public\r\n\t * @param {Number} [timeout] - The interval before the next animation starts.\r\n\t * @param {Number} [speed] - The animation speed for the animations.\r\n\t */\r\n\tAutoplay.prototype.play = function(timeout, speed) {\r\n\t\tthis._paused = false;\r\n\r\n\t\tif (this._core.is('rotating')) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._core.enter('rotating');\r\n\r\n\t\tthis._setAutoPlayInterval();\r\n\t};\r\n\r\n\t/**\r\n\t * Gets a new timeout\r\n\t * @private\r\n\t * @param {Number} [timeout] - The interval before the next animation starts.\r\n\t * @param {Number} [speed] - The animation speed for the animations.\r\n\t * @return {Timeout}\r\n\t */\r\n\tAutoplay.prototype._getNextTimeout = function(timeout, speed) {\r\n\t\tif ( this._timeout ) {\r\n\t\t\twindow.clearTimeout(this._timeout);\r\n\t\t}\r\n\t\treturn window.setTimeout($.proxy(function() {\r\n\t\t\tif (this._paused || this._core.is('busy') || this._core.is('interacting') || document.hidden) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tthis._core.next(speed || this._core.settings.autoplaySpeed);\r\n\t\t}, this), timeout || this._core.settings.autoplayTimeout);\r\n\t};\r\n\r\n\t/**\r\n\t * Sets autoplay in motion.\r\n\t * @private\r\n\t */\r\n\tAutoplay.prototype._setAutoPlayInterval = function() {\r\n\t\tthis._timeout = this._getNextTimeout();\r\n\t};\r\n\r\n\t/**\r\n\t * Stops the autoplay.\r\n\t * @public\r\n\t */\r\n\tAutoplay.prototype.stop = function() {\r\n\t\tif (!this._core.is('rotating')) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\twindow.clearTimeout(this._timeout);\r\n\t\tthis._core.leave('rotating');\r\n\t};\r\n\r\n\t/**\r\n\t * Stops the autoplay.\r\n\t * @public\r\n\t */\r\n\tAutoplay.prototype.pause = function() {\r\n\t\tif (!this._core.is('rotating')) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._paused = true;\r\n\t};\r\n\r\n\t/**\r\n\t * Destroys the plugin.\r\n\t */\r\n\tAutoplay.prototype.destroy = function() {\r\n\t\tvar handler, property;\r\n\r\n\t\tthis.stop();\r\n\r\n\t\tfor (handler in this._handlers) {\r\n\t\t\tthis._core.$element.off(handler, this._handlers[handler]);\r\n\t\t}\r\n\t\tfor (property in Object.getOwnPropertyNames(this)) {\r\n\t\t\ttypeof this[property] != 'function' && (this[property] = null);\r\n\t\t}\r\n\t};\r\n\r\n\t$.fn.owlCarousel.Constructor.Plugins.autoplay = Autoplay;\r\n\r\n})(window.Zepto || window.jQuery, window, document);\r\n\r\n/**\r\n * Navigation Plugin\r\n * @version 2.1.0\r\n * @author Artus Kolanowski\r\n * @author David Deutsch\r\n * @license The MIT License (MIT)\r\n */\r\n;(function($, window, document, undefined) {\r\n\t'use strict';\r\n\r\n\t/**\r\n\t * Creates the navigation plugin.\r\n\t * @class The Navigation Plugin\r\n\t * @param {Owl} carousel - The Owl Carousel.\r\n\t */\r\n\tvar Navigation = function(carousel) {\r\n\t\t/**\r\n\t\t * Reference to the core.\r\n\t\t * @protected\r\n\t\t * @type {Owl}\r\n\t\t */\r\n\t\tthis._core = carousel;\r\n\r\n\t\t/**\r\n\t\t * Indicates whether the plugin is initialized or not.\r\n\t\t * @protected\r\n\t\t * @type {Boolean}\r\n\t\t */\r\n\t\tthis._initialized = false;\r\n\r\n\t\t/**\r\n\t\t * The current paging indexes.\r\n\t\t * @protected\r\n\t\t * @type {Array}\r\n\t\t */\r\n\t\tthis._pages = [];\r\n\r\n\t\t/**\r\n\t\t * All DOM elements of the user interface.\r\n\t\t * @protected\r\n\t\t * @type {Object}\r\n\t\t */\r\n\t\tthis._controls = {};\r\n\r\n\t\t/**\r\n\t\t * Markup for an indicator.\r\n\t\t * @protected\r\n\t\t * @type {Array.}\r\n\t\t */\r\n\t\tthis._templates = [];\r\n\r\n\t\t/**\r\n\t\t * The carousel element.\r\n\t\t * @type {jQuery}\r\n\t\t */\r\n\t\tthis.$element = this._core.$element;\r\n\r\n\t\t/**\r\n\t\t * Overridden methods of the carousel.\r\n\t\t * @protected\r\n\t\t * @type {Object}\r\n\t\t */\r\n\t\tthis._overrides = {\r\n\t\t\tnext: this._core.next,\r\n\t\t\tprev: this._core.prev,\r\n\t\t\tto: this._core.to\r\n\t\t};\r\n\r\n\t\t/**\r\n\t\t * All event handlers.\r\n\t\t * @protected\r\n\t\t * @type {Object}\r\n\t\t */\r\n\t\tthis._handlers = {\r\n\t\t\t'prepared.owl.carousel': $.proxy(function(e) {\r\n\t\t\t\tif (e.namespace && this._core.settings.dotsData) {\r\n\t\t\t\t\tthis._templates.push('
' +\r\n\t\t\t\t\t\t$(e.content).find('[data-dot]').addBack('[data-dot]').attr('data-dot') + '
');\r\n\t\t\t\t}\r\n\t\t\t}, this),\r\n\t\t\t'added.owl.carousel': $.proxy(function(e) {\r\n\t\t\t\tif (e.namespace && this._core.settings.dotsData) {\r\n\t\t\t\t\tthis._templates.splice(e.position, 0, this._templates.pop());\r\n\t\t\t\t}\r\n\t\t\t}, this),\r\n\t\t\t'remove.owl.carousel': $.proxy(function(e) {\r\n\t\t\t\tif (e.namespace && this._core.settings.dotsData) {\r\n\t\t\t\t\tthis._templates.splice(e.position, 1);\r\n\t\t\t\t}\r\n\t\t\t}, this),\r\n\t\t\t'changed.owl.carousel': $.proxy(function(e) {\r\n\t\t\t\tif (e.namespace && e.property.name == 'position') {\r\n\t\t\t\t\tthis.draw();\r\n\t\t\t\t}\r\n\t\t\t}, this),\r\n\t\t\t'initialized.owl.carousel': $.proxy(function(e) {\r\n\t\t\t\tif (e.namespace && !this._initialized) {\r\n\t\t\t\t\tthis._core.trigger('initialize', null, 'navigation');\r\n\t\t\t\t\tthis.initialize();\r\n\t\t\t\t\tthis.update();\r\n\t\t\t\t\tthis.draw();\r\n\t\t\t\t\tthis._initialized = true;\r\n\t\t\t\t\tthis._core.trigger('initialized', null, 'navigation');\r\n\t\t\t\t}\r\n\t\t\t}, this),\r\n\t\t\t'refreshed.owl.carousel': $.proxy(function(e) {\r\n\t\t\t\tif (e.namespace && this._initialized) {\r\n\t\t\t\t\tthis._core.trigger('refresh', null, 'navigation');\r\n\t\t\t\t\tthis.update();\r\n\t\t\t\t\tthis.draw();\r\n\t\t\t\t\tthis._core.trigger('refreshed', null, 'navigation');\r\n\t\t\t\t}\r\n\t\t\t}, this)\r\n\t\t};\r\n\r\n\t\t// set default options\r\n\t\tthis._core.options = $.extend({}, Navigation.Defaults, this._core.options);\r\n\r\n\t\t// register event handlers\r\n\t\tthis.$element.on(this._handlers);\r\n\t};\r\n\r\n\t/**\r\n\t * Default options.\r\n\t * @public\r\n\t * @todo Rename `slideBy` to `navBy`\r\n\t */\r\n\tNavigation.Defaults = {\r\n\t\tnav: false,\r\n\t\tnavText: [ 'prev', 'next' ],\r\n\t\tnavSpeed: false,\r\n\t\tnavElement: 'div',\r\n\t\tnavContainer: false,\r\n\t\tnavContainerClass: 'owl-nav',\r\n\t\tnavClass: [ 'owl-prev', 'owl-next' ],\r\n\t\tslideBy: 1,\r\n\t\tdotClass: 'owl-dot',\r\n\t\tdotsClass: 'owl-dots',\r\n\t\tdots: true,\r\n\t\tdotsEach: false,\r\n\t\tdotsData: false,\r\n\t\tdotsSpeed: false,\r\n\t\tdotsContainer: false\r\n\t};\r\n\r\n\t/**\r\n\t * Initializes the layout of the plugin and extends the carousel.\r\n\t * @protected\r\n\t */\r\n\tNavigation.prototype.initialize = function() {\r\n\t\tvar override,\r\n\t\t\tsettings = this._core.settings;\r\n\r\n\t\t// create DOM structure for relative navigation\r\n\t\tthis._controls.$relative = (settings.navContainer ? $(settings.navContainer)\r\n\t\t\t: $('
').addClass(settings.navContainerClass).appendTo(this.$element)).addClass('disabled');\r\n\r\n\t\tthis._controls.$previous = $('<' + settings.navElement + '>')\r\n\t\t\t.addClass(settings.navClass[0])\r\n\t\t\t.html(settings.navText[0])\r\n\t\t\t.prependTo(this._controls.$relative)\r\n\t\t\t.on('click', $.proxy(function(e) {\r\n\t\t\t\tthis.prev(settings.navSpeed);\r\n\t\t\t}, this));\r\n\t\tthis._controls.$next = $('<' + settings.navElement + '>')\r\n\t\t\t.addClass(settings.navClass[1])\r\n\t\t\t.html(settings.navText[1])\r\n\t\t\t.appendTo(this._controls.$relative)\r\n\t\t\t.on('click', $.proxy(function(e) {\r\n\t\t\t\tthis.next(settings.navSpeed);\r\n\t\t\t}, this));\r\n\r\n\t\t// create DOM structure for absolute navigation\r\n\t\tif (!settings.dotsData) {\r\n\t\t\tthis._templates = [ $('
')\r\n\t\t\t\t.addClass(settings.dotClass)\r\n\t\t\t\t.append($(''))\r\n\t\t\t\t.prop('outerHTML') ];\r\n\t\t}\r\n\r\n\t\tthis._controls.$absolute = (settings.dotsContainer ? $(settings.dotsContainer)\r\n\t\t\t: $('
').addClass(settings.dotsClass).appendTo(this.$element)).addClass('disabled');\r\n\r\n\t\tthis._controls.$absolute.on('click', 'div', $.proxy(function(e) {\r\n\t\t\tvar index = $(e.target).parent().is(this._controls.$absolute)\r\n\t\t\t\t? $(e.target).index() : $(e.target).parent().index();\r\n\r\n\t\t\te.preventDefault();\r\n\r\n\t\t\tthis.to(index, settings.dotsSpeed);\r\n\t\t}, this));\r\n\r\n\t\t// override public methods of the carousel\r\n\t\tfor (override in this._overrides) {\r\n\t\t\tthis._core[override] = $.proxy(this[override], this);\r\n\t\t}\r\n\t};\r\n\r\n\t/**\r\n\t * Destroys the plugin.\r\n\t * @protected\r\n\t */\r\n\tNavigation.prototype.destroy = function() {\r\n\t\tvar handler, control, property, override;\r\n\r\n\t\tfor (handler in this._handlers) {\r\n\t\t\tthis.$element.off(handler, this._handlers[handler]);\r\n\t\t}\r\n\t\tfor (control in this._controls) {\r\n\t\t\tthis._controls[control].remove();\r\n\t\t}\r\n\t\tfor (override in this.overides) {\r\n\t\t\tthis._core[override] = this._overrides[override];\r\n\t\t}\r\n\t\tfor (property in Object.getOwnPropertyNames(this)) {\r\n\t\t\ttypeof this[property] != 'function' && (this[property] = null);\r\n\t\t}\r\n\t};\r\n\r\n\t/**\r\n\t * Updates the internal state.\r\n\t * @protected\r\n\t */\r\n\tNavigation.prototype.update = function() {\r\n\t\tvar i, j, k,\r\n\t\t\tlower = this._core.clones().length / 2,\r\n\t\t\tupper = lower + this._core.items().length,\r\n\t\t\tmaximum = this._core.maximum(true),\r\n\t\t\tsettings = this._core.settings,\r\n\t\t\tsize = settings.center || settings.autoWidth || settings.dotsData\r\n\t\t\t\t? 1 : settings.dotsEach || settings.items;\r\n\r\n\t\tif (settings.slideBy !== 'page') {\r\n\t\t\tsettings.slideBy = Math.min(settings.slideBy, settings.items);\r\n\t\t}\r\n\r\n\t\tif (settings.dots || settings.slideBy == 'page') {\r\n\t\t\tthis._pages = [];\r\n\r\n\t\t\tfor (i = lower, j = 0, k = 0; i < upper; i++) {\r\n\t\t\t\tif (j >= size || j === 0) {\r\n\t\t\t\t\tthis._pages.push({\r\n\t\t\t\t\t\tstart: Math.min(maximum, i - lower),\r\n\t\t\t\t\t\tend: i - lower + size - 1\r\n\t\t\t\t\t});\r\n\t\t\t\t\tif (Math.min(maximum, i - lower) === maximum) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tj = 0, ++k;\r\n\t\t\t\t}\r\n\t\t\t\tj += this._core.mergers(this._core.relative(i));\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t/**\r\n\t * Draws the user interface.\r\n\t * @todo The option `dotsData` wont work.\r\n\t * @protected\r\n\t */\r\n\tNavigation.prototype.draw = function() {\r\n\t\tvar difference,\r\n\t\t\tsettings = this._core.settings,\r\n\t\t\tdisabled = this._core.items().length <= settings.items,\r\n\t\t\tindex = this._core.relative(this._core.current()),\r\n\t\t\tloop = settings.loop || settings.rewind;\r\n\r\n\t\tthis._controls.$relative.toggleClass('disabled', !settings.nav || disabled);\r\n\r\n\t\tif (settings.nav) {\r\n\t\t\tthis._controls.$previous.toggleClass('disabled', !loop && index <= this._core.minimum(true));\r\n\t\t\tthis._controls.$next.toggleClass('disabled', !loop && index >= this._core.maximum(true));\r\n\t\t}\r\n\r\n\t\tthis._controls.$absolute.toggleClass('disabled', !settings.dots || disabled);\r\n\r\n\t\tif (settings.dots) {\r\n\t\t\tdifference = this._pages.length - this._controls.$absolute.children().length;\r\n\r\n\t\t\tif (settings.dotsData && difference !== 0) {\r\n\t\t\t\tthis._controls.$absolute.html(this._templates.join(''));\r\n\t\t\t} else if (difference > 0) {\r\n\t\t\t\tthis._controls.$absolute.append(new Array(difference + 1).join(this._templates[0]));\r\n\t\t\t} else if (difference < 0) {\r\n\t\t\t\tthis._controls.$absolute.children().slice(difference).remove();\r\n\t\t\t}\r\n\r\n\t\t\tthis._controls.$absolute.find('.active').removeClass('active');\r\n\t\t\tthis._controls.$absolute.children().eq($.inArray(this.current(), this._pages)).addClass('active');\r\n\t\t}\r\n\t};\r\n\r\n\t/**\r\n\t * Extends event data.\r\n\t * @protected\r\n\t * @param {Event} event - The event object which gets thrown.\r\n\t */\r\n\tNavigation.prototype.onTrigger = function(event) {\r\n\t\tvar settings = this._core.settings;\r\n\r\n\t\tevent.page = {\r\n\t\t\tindex: $.inArray(this.current(), this._pages),\r\n\t\t\tcount: this._pages.length,\r\n\t\t\tsize: settings && (settings.center || settings.autoWidth || settings.dotsData\r\n\t\t\t\t? 1 : settings.dotsEach || settings.items)\r\n\t\t};\r\n\t};\r\n\r\n\t/**\r\n\t * Gets the current page position of the carousel.\r\n\t * @protected\r\n\t * @returns {Number}\r\n\t */\r\n\tNavigation.prototype.current = function() {\r\n\t\tvar current = this._core.relative(this._core.current());\r\n\t\treturn $.grep(this._pages, $.proxy(function(page, index) {\r\n\t\t\treturn page.start <= current && page.end >= current;\r\n\t\t}, this)).pop();\r\n\t};\r\n\r\n\t/**\r\n\t * Gets the current succesor/predecessor position.\r\n\t * @protected\r\n\t * @returns {Number}\r\n\t */\r\n\tNavigation.prototype.getPosition = function(successor) {\r\n\t\tvar position, length,\r\n\t\t\tsettings = this._core.settings;\r\n\r\n\t\tif (settings.slideBy == 'page') {\r\n\t\t\tposition = $.inArray(this.current(), this._pages);\r\n\t\t\tlength = this._pages.length;\r\n\t\t\tsuccessor ? ++position : --position;\r\n\t\t\tposition = this._pages[((position % length) + length) % length].start;\r\n\t\t} else {\r\n\t\t\tposition = this._core.relative(this._core.current());\r\n\t\t\tlength = this._core.items().length;\r\n\t\t\tsuccessor ? position += settings.slideBy : position -= settings.slideBy;\r\n\t\t}\r\n\r\n\t\treturn position;\r\n\t};\r\n\r\n\t/**\r\n\t * Slides to the next item or page.\r\n\t * @public\r\n\t * @param {Number} [speed=false] - The time in milliseconds for the transition.\r\n\t */\r\n\tNavigation.prototype.next = function(speed) {\r\n\t\t$.proxy(this._overrides.to, this._core)(this.getPosition(true), speed);\r\n\t};\r\n\r\n\t/**\r\n\t * Slides to the previous item or page.\r\n\t * @public\r\n\t * @param {Number} [speed=false] - The time in milliseconds for the transition.\r\n\t */\r\n\tNavigation.prototype.prev = function(speed) {\r\n\t\t$.proxy(this._overrides.to, this._core)(this.getPosition(false), speed);\r\n\t};\r\n\r\n\t/**\r\n\t * Slides to the specified item or page.\r\n\t * @public\r\n\t * @param {Number} position - The position of the item or page.\r\n\t * @param {Number} [speed] - The time in milliseconds for the transition.\r\n\t * @param {Boolean} [standard=false] - Whether to use the standard behaviour or not.\r\n\t */\r\n\tNavigation.prototype.to = function(position, speed, standard) {\r\n\t\tvar length;\r\n\r\n\t\tif (!standard && this._pages.length) {\r\n\t\t\tlength = this._pages.length;\r\n\t\t\t$.proxy(this._overrides.to, this._core)(this._pages[((position % length) + length) % length].start, speed);\r\n\t\t} else {\r\n\t\t\t$.proxy(this._overrides.to, this._core)(position, speed);\r\n\t\t}\r\n\t};\r\n\r\n\t$.fn.owlCarousel.Constructor.Plugins.Navigation = Navigation;\r\n\r\n})(window.Zepto || window.jQuery, window, document);\r\n\r\n/**\r\n * Support Plugin\r\n *\r\n * @version 2.1.0\r\n * @author Vivid Planet Software GmbH\r\n * @author Artus Kolanowski\r\n * @author David Deutsch\r\n * @license The MIT License (MIT)\r\n */\r\n;(function($, window, document, undefined) {\r\n\r\n\tvar style = $('').get(0).style,\r\n\t\tprefixes = 'Webkit Moz O ms'.split(' '),\r\n\t\tevents = {\r\n\t\t\ttransition: {\r\n\t\t\t\tend: {\r\n\t\t\t\t\tWebkitTransition: 'webkitTransitionEnd',\r\n\t\t\t\t\tMozTransition: 'transitionend',\r\n\t\t\t\t\tOTransition: 'oTransitionEnd',\r\n\t\t\t\t\ttransition: 'transitionend'\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tanimation: {\r\n\t\t\t\tend: {\r\n\t\t\t\t\tWebkitAnimation: 'webkitAnimationEnd',\r\n\t\t\t\t\tMozAnimation: 'animationend',\r\n\t\t\t\t\tOAnimation: 'oAnimationEnd',\r\n\t\t\t\t\tanimation: 'animationend'\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\ttests = {\r\n\t\t\tcsstransforms: function() {\r\n\t\t\t\treturn !!test('transform');\r\n\t\t\t},\r\n\t\t\tcsstransforms3d: function() {\r\n\t\t\t\treturn !!test('perspective');\r\n\t\t\t},\r\n\t\t\tcsstransitions: function() {\r\n\t\t\t\treturn !!test('transition');\r\n\t\t\t},\r\n\t\t\tcssanimations: function() {\r\n\t\t\t\treturn !!test('animation');\r\n\t\t\t}\r\n\t\t};\r\n\r\n\tfunction test(property, prefixed) {\r\n\t\tvar result = false,\r\n\t\t\tupper = property.charAt(0).toUpperCase() + property.slice(1);\r\n\r\n\t\t$.each((property + ' ' + prefixes.join(upper + ' ') + upper).split(' '), function(i, property) {\r\n\t\t\tif (style[property] !== undefined) {\r\n\t\t\t\tresult = prefixed ? property : true;\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tfunction prefixed(property) {\r\n\t\treturn test(property, true);\r\n\t}\r\n\r\n\tif (tests.csstransitions()) {\r\n\t\t/* jshint -W053 */\r\n\t\t$.support.transition = new String(prefixed('transition'))\r\n\t\t$.support.transition.end = events.transition.end[ $.support.transition ];\r\n\t}\r\n\r\n\tif (tests.cssanimations()) {\r\n\t\t/* jshint -W053 */\r\n\t\t$.support.animation = new String(prefixed('animation'))\r\n\t\t$.support.animation.end = events.animation.end[ $.support.animation ];\r\n\t}\r\n\r\n\tif (tests.csstransforms()) {\r\n\t\t/* jshint -W053 */\r\n\t\t$.support.transform = new String(prefixed('transform'));\r\n\t\t$.support.transform3d = tests.csstransforms3d();\r\n\t}\r\n\r\n})(window.Zepto || window.jQuery, window, document);\r\n","/**\r\n * Copyright (c) 2011-2014 Felix Gnass\r\n * Licensed under the MIT license\r\n * http://spin.js.org/\r\n *\r\n * Example:\r\n var opts = {\r\n lines: 12 // The number of lines to draw\r\n , length: 7 // The length of each line\r\n , width: 5 // The line thickness\r\n , radius: 10 // The radius of the inner circle\r\n , scale: 1.0 // Scales overall size of the spinner\r\n , corners: 1 // Roundness (0..1)\r\n , color: '#000' // #rgb or #rrggbb\r\n , opacity: 1/4 // Opacity of the lines\r\n , rotate: 0 // Rotation offset\r\n , direction: 1 // 1: clockwise, -1: counterclockwise\r\n , speed: 1 // Rounds per second\r\n , trail: 100 // Afterglow percentage\r\n , fps: 20 // Frames per second when using setTimeout()\r\n , zIndex: 2e9 // Use a high z-index by default\r\n , className: 'spinner' // CSS class to assign to the element\r\n , top: '50%' // center vertically\r\n , left: '50%' // center horizontally\r\n , shadow: false // Whether to render a shadow\r\n , hwaccel: false // Whether to use hardware acceleration (might be buggy)\r\n , position: 'absolute' // Element positioning\r\n }\r\n var target = document.getElementById('foo')\r\n var spinner = new Spinner(opts).spin(target)\r\n */\r\n;(function (root, factory) {\r\n\r\n /* CommonJS */\r\n if (typeof module == 'object' && module.exports) module.exports = factory()\r\n\r\n /* AMD module */\r\n else if (typeof define == 'function' && define.amd) define(factory)\r\n\r\n /* Browser global */\r\n else root.Spinner = factory()\r\n}(this, function () {\r\n \"use strict\"\r\n\r\n var prefixes = ['webkit', 'Moz', 'ms', 'O'] /* Vendor prefixes */\r\n , animations = {} /* Animation rules keyed by their name */\r\n , useCssAnimations /* Whether to use CSS animations or setTimeout */\r\n , sheet /* A stylesheet to hold the @keyframe or VML rules. */\r\n\r\n /**\r\n * Utility function to create elements. If no tag name is given,\r\n * a DIV is created. Optionally properties can be passed.\r\n */\r\n function createEl (tag, prop) {\r\n var el = document.createElement(tag || 'div')\r\n , n\r\n\r\n for (n in prop) el[n] = prop[n]\r\n return el\r\n }\r\n\r\n /**\r\n * Appends children and returns the parent.\r\n */\r\n function ins (parent /* child1, child2, ...*/) {\r\n for (var i = 1, n = arguments.length; i < n; i++) {\r\n parent.appendChild(arguments[i])\r\n }\r\n\r\n return parent\r\n }\r\n\r\n /**\r\n * Creates an opacity keyframe animation rule and returns its name.\r\n * Since most mobile Webkits have timing issues with animation-delay,\r\n * we create separate rules for each line/segment.\r\n */\r\n function addAnimation (alpha, trail, i, lines) {\r\n var name = ['opacity', trail, ~~(alpha * 100), i, lines].join('-')\r\n , start = 0.01 + i/lines * 100\r\n , z = Math.max(1 - (1-alpha) / trail * (100-start), alpha)\r\n , prefix = useCssAnimations.substring(0, useCssAnimations.indexOf('Animation')).toLowerCase()\r\n , pre = prefix && '-' + prefix + '-' || ''\r\n\r\n if (!animations[name]) {\r\n sheet.insertRule(\r\n '@' + pre + 'keyframes ' + name + '{' +\r\n '0%{opacity:' + z + '}' +\r\n start + '%{opacity:' + alpha + '}' +\r\n (start+0.01) + '%{opacity:1}' +\r\n (start+trail) % 100 + '%{opacity:' + alpha + '}' +\r\n '100%{opacity:' + z + '}' +\r\n '}', sheet.cssRules.length)\r\n\r\n animations[name] = 1\r\n }\r\n\r\n return name\r\n }\r\n\r\n /**\r\n * Tries various vendor prefixes and returns the first supported property.\r\n */\r\n function vendor (el, prop) {\r\n var s = el.style\r\n , pp\r\n , i\r\n\r\n prop = prop.charAt(0).toUpperCase() + prop.slice(1)\r\n if (s[prop] !== undefined) return prop\r\n for (i = 0; i < prefixes.length; i++) {\r\n pp = prefixes[i]+prop\r\n if (s[pp] !== undefined) return pp\r\n }\r\n }\r\n\r\n /**\r\n * Sets multiple style properties at once.\r\n */\r\n function css (el, prop) {\r\n for (var n in prop) {\r\n el.style[vendor(el, n) || n] = prop[n]\r\n }\r\n\r\n return el\r\n }\r\n\r\n /**\r\n * Fills in default values.\r\n */\r\n function merge (obj) {\r\n for (var i = 1; i < arguments.length; i++) {\r\n var def = arguments[i]\r\n for (var n in def) {\r\n if (obj[n] === undefined) obj[n] = def[n]\r\n }\r\n }\r\n return obj\r\n }\r\n\r\n /**\r\n * Returns the line color from the given string or array.\r\n */\r\n function getColor (color, idx) {\r\n return typeof color == 'string' ? color : color[idx % color.length]\r\n }\r\n\r\n // Built-in defaults\r\n\r\n var defaults = {\r\n lines: 12 // The number of lines to draw\r\n , length: 7 // The length of each line\r\n , width: 5 // The line thickness\r\n , radius: 10 // The radius of the inner circle\r\n , scale: 1.0 // Scales overall size of the spinner\r\n , corners: 1 // Roundness (0..1)\r\n , color: '#000' // #rgb or #rrggbb\r\n , opacity: 1/4 // Opacity of the lines\r\n , rotate: 0 // Rotation offset\r\n , direction: 1 // 1: clockwise, -1: counterclockwise\r\n , speed: 1 // Rounds per second\r\n , trail: 100 // Afterglow percentage\r\n , fps: 20 // Frames per second when using setTimeout()\r\n , zIndex: 2e9 // Use a high z-index by default\r\n , className: 'spinner' // CSS class to assign to the element\r\n , top: '50%' // center vertically\r\n , left: '50%' // center horizontally\r\n , shadow: false // Whether to render a shadow\r\n , hwaccel: false // Whether to use hardware acceleration (might be buggy)\r\n , position: 'absolute' // Element positioning\r\n }\r\n\r\n /** The constructor */\r\n function Spinner (o) {\r\n this.opts = merge(o || {}, Spinner.defaults, defaults)\r\n }\r\n\r\n // Global defaults that override the built-ins:\r\n Spinner.defaults = {}\r\n\r\n merge(Spinner.prototype, {\r\n /**\r\n * Adds the spinner to the given target element. If this instance is already\r\n * spinning, it is automatically removed from its previous target b calling\r\n * stop() internally.\r\n */\r\n spin: function (target) {\r\n this.stop()\r\n\r\n var self = this\r\n , o = self.opts\r\n , el = self.el = createEl(null, {className: o.className})\r\n\r\n css(el, {\r\n position: o.position\r\n , width: 0\r\n , zIndex: o.zIndex\r\n , left: o.left\r\n , top: o.top\r\n })\r\n\r\n if (target) {\r\n target.insertBefore(el, target.firstChild || null)\r\n }\r\n\r\n el.setAttribute('role', 'progressbar')\r\n self.lines(el, self.opts)\r\n\r\n if (!useCssAnimations) {\r\n // No CSS animation support, use setTimeout() instead\r\n var i = 0\r\n , start = (o.lines - 1) * (1 - o.direction) / 2\r\n , alpha\r\n , fps = o.fps\r\n , f = fps / o.speed\r\n , ostep = (1 - o.opacity) / (f * o.trail / 100)\r\n , astep = f / o.lines\r\n\r\n ;(function anim () {\r\n i++\r\n for (var j = 0; j < o.lines; j++) {\r\n alpha = Math.max(1 - (i + (o.lines - j) * astep) % f * ostep, o.opacity)\r\n\r\n self.opacity(el, j * o.direction + start, alpha, o)\r\n }\r\n self.timeout = self.el && setTimeout(anim, ~~(1000 / fps))\r\n })()\r\n }\r\n return self\r\n }\r\n\r\n /**\r\n * Stops and removes the Spinner.\r\n */\r\n , stop: function () {\r\n var el = this.el\r\n if (el) {\r\n clearTimeout(this.timeout)\r\n if (el.parentNode) el.parentNode.removeChild(el)\r\n this.el = undefined\r\n }\r\n return this\r\n }\r\n\r\n /**\r\n * Internal method that draws the individual lines. Will be overwritten\r\n * in VML fallback mode below.\r\n */\r\n , lines: function (el, o) {\r\n var i = 0\r\n , start = (o.lines - 1) * (1 - o.direction) / 2\r\n , seg\r\n\r\n function fill (color, shadow) {\r\n return css(createEl(), {\r\n position: 'absolute'\r\n , width: o.scale * (o.length + o.width) + 'px'\r\n , height: o.scale * o.width + 'px'\r\n , background: color\r\n , boxShadow: shadow\r\n , transformOrigin: 'left'\r\n , transform: 'rotate(' + ~~(360/o.lines*i + o.rotate) + 'deg) translate(' + o.scale*o.radius + 'px' + ',0)'\r\n , borderRadius: (o.corners * o.scale * o.width >> 1) + 'px'\r\n })\r\n }\r\n\r\n for (; i < o.lines; i++) {\r\n seg = css(createEl(), {\r\n position: 'absolute'\r\n , top: 1 + ~(o.scale * o.width / 2) + 'px'\r\n , transform: o.hwaccel ? 'translate3d(0,0,0)' : ''\r\n , opacity: o.opacity\r\n , animation: useCssAnimations && addAnimation(o.opacity, o.trail, start + i * o.direction, o.lines) + ' ' + 1 / o.speed + 's linear infinite'\r\n })\r\n\r\n if (o.shadow) ins(seg, css(fill('#000', '0 0 4px #000'), {top: '2px'}))\r\n ins(el, ins(seg, fill(getColor(o.color, i), '0 0 1px rgba(0,0,0,.1)')))\r\n }\r\n return el\r\n }\r\n\r\n /**\r\n * Internal method that adjusts the opacity of a single line.\r\n * Will be overwritten in VML fallback mode below.\r\n */\r\n , opacity: function (el, i, val) {\r\n if (i < el.childNodes.length) el.childNodes[i].style.opacity = val\r\n }\r\n\r\n })\r\n\r\n\r\n function initVML () {\r\n\r\n /* Utility function to create a VML tag */\r\n function vml (tag, attr) {\r\n return createEl('<' + tag + ' xmlns=\"urn:schemas-microsoft.com:vml\" class=\"spin-vml\">', attr)\r\n }\r\n\r\n // No CSS transforms but VML support, add a CSS rule for VML elements:\r\n sheet.addRule('.spin-vml', 'behavior:url(#default#VML)')\r\n\r\n Spinner.prototype.lines = function (el, o) {\r\n var r = o.scale * (o.length + o.width)\r\n , s = o.scale * 2 * r\r\n\r\n function grp () {\r\n return css(\r\n vml('group', {\r\n coordsize: s + ' ' + s\r\n , coordorigin: -r + ' ' + -r\r\n })\r\n , { width: s, height: s }\r\n )\r\n }\r\n\r\n var margin = -(o.width + o.length) * o.scale * 2 + 'px'\r\n , g = css(grp(), {position: 'absolute', top: margin, left: margin})\r\n , i\r\n\r\n function seg (i, dx, filter) {\r\n ins(\r\n g\r\n , ins(\r\n css(grp(), {rotation: 360 / o.lines * i + 'deg', left: ~~dx})\r\n , ins(\r\n css(\r\n vml('roundrect', {arcsize: o.corners})\r\n , { width: r\r\n , height: o.scale * o.width\r\n , left: o.scale * o.radius\r\n , top: -o.scale * o.width >> 1\r\n , filter: filter\r\n }\r\n )\r\n , vml('fill', {color: getColor(o.color, i), opacity: o.opacity})\r\n , vml('stroke', {opacity: 0}) // transparent stroke to fix color bleeding upon opacity change\r\n )\r\n )\r\n )\r\n }\r\n\r\n if (o.shadow)\r\n for (i = 1; i <= o.lines; i++) {\r\n seg(i, -2, 'progid:DXImageTransform.Microsoft.Blur(pixelradius=2,makeshadow=1,shadowopacity=.3)')\r\n }\r\n\r\n for (i = 1; i <= o.lines; i++) seg(i)\r\n return ins(el, g)\r\n }\r\n\r\n Spinner.prototype.opacity = function (el, i, val, o) {\r\n var c = el.firstChild\r\n o = o.shadow && o.lines || 0\r\n if (c && i + o < c.childNodes.length) {\r\n c = c.childNodes[i + o]; c = c && c.firstChild; c = c && c.firstChild\r\n if (c) c.opacity = val\r\n }\r\n }\r\n }\r\n\r\n if (typeof document !== 'undefined') {\r\n sheet = (function () {\r\n var el = createEl('style', {type : 'text/css'})\r\n document.head.insertBefore(el, document.head.firstChild);\r\n return el.sheet || el.styleSheet\r\n }())\r\n\r\n var probe = css(createEl('group'), {behavior: 'url(#default#VML)'})\r\n\r\n if (!vendor(probe, 'transform') && probe.adj) initVML()\r\n else useCssAnimations = vendor(probe, 'animation')\r\n }\r\n\r\n return Spinner\r\n\r\n}));","/**\r\n * @license AngularJS v1.7.5\r\n * (c) 2010-2018 Google, Inc. http://angularjs.org\r\n * License: MIT\r\n */\r\n(function(window, angular) {'use strict';\r\n\r\nvar ELEMENT_NODE = 1;\r\nvar COMMENT_NODE = 8;\r\n\r\nvar ADD_CLASS_SUFFIX = '-add';\r\nvar REMOVE_CLASS_SUFFIX = '-remove';\r\nvar EVENT_CLASS_PREFIX = 'ng-';\r\nvar ACTIVE_CLASS_SUFFIX = '-active';\r\nvar PREPARE_CLASS_SUFFIX = '-prepare';\r\n\r\nvar NG_ANIMATE_CLASSNAME = 'ng-animate';\r\nvar NG_ANIMATE_CHILDREN_DATA = '$$ngAnimateChildren';\r\n\r\n// Detect proper transitionend/animationend event names.\r\nvar CSS_PREFIX = '', TRANSITION_PROP, TRANSITIONEND_EVENT, ANIMATION_PROP, ANIMATIONEND_EVENT;\r\n\r\n// If unprefixed events are not supported but webkit-prefixed are, use the latter.\r\n// Otherwise, just use W3C names, browsers not supporting them at all will just ignore them.\r\n// Note: Chrome implements `window.onwebkitanimationend` and doesn't implement `window.onanimationend`\r\n// but at the same time dispatches the `animationend` event and not `webkitAnimationEnd`.\r\n// Register both events in case `window.onanimationend` is not supported because of that,\r\n// do the same for `transitionend` as Safari is likely to exhibit similar behavior.\r\n// Also, the only modern browser that uses vendor prefixes for transitions/keyframes is webkit\r\n// therefore there is no reason to test anymore for other vendor prefixes:\r\n// http://caniuse.com/#search=transition\r\nif ((window.ontransitionend === undefined) && (window.onwebkittransitionend !== undefined)) {\r\n CSS_PREFIX = '-webkit-';\r\n TRANSITION_PROP = 'WebkitTransition';\r\n TRANSITIONEND_EVENT = 'webkitTransitionEnd transitionend';\r\n} else {\r\n TRANSITION_PROP = 'transition';\r\n TRANSITIONEND_EVENT = 'transitionend';\r\n}\r\n\r\nif ((window.onanimationend === undefined) && (window.onwebkitanimationend !== undefined)) {\r\n CSS_PREFIX = '-webkit-';\r\n ANIMATION_PROP = 'WebkitAnimation';\r\n ANIMATIONEND_EVENT = 'webkitAnimationEnd animationend';\r\n} else {\r\n ANIMATION_PROP = 'animation';\r\n ANIMATIONEND_EVENT = 'animationend';\r\n}\r\n\r\nvar DURATION_KEY = 'Duration';\r\nvar PROPERTY_KEY = 'Property';\r\nvar DELAY_KEY = 'Delay';\r\nvar TIMING_KEY = 'TimingFunction';\r\nvar ANIMATION_ITERATION_COUNT_KEY = 'IterationCount';\r\nvar ANIMATION_PLAYSTATE_KEY = 'PlayState';\r\nvar SAFE_FAST_FORWARD_DURATION_VALUE = 9999;\r\n\r\nvar ANIMATION_DELAY_PROP = ANIMATION_PROP + DELAY_KEY;\r\nvar ANIMATION_DURATION_PROP = ANIMATION_PROP + DURATION_KEY;\r\nvar TRANSITION_DELAY_PROP = TRANSITION_PROP + DELAY_KEY;\r\nvar TRANSITION_DURATION_PROP = TRANSITION_PROP + DURATION_KEY;\r\n\r\nvar ngMinErr = angular.$$minErr('ng');\r\nfunction assertArg(arg, name, reason) {\r\n if (!arg) {\r\n throw ngMinErr('areq', 'Argument \\'{0}\\' is {1}', (name || '?'), (reason || 'required'));\r\n }\r\n return arg;\r\n}\r\n\r\nfunction mergeClasses(a,b) {\r\n if (!a && !b) return '';\r\n if (!a) return b;\r\n if (!b) return a;\r\n if (isArray(a)) a = a.join(' ');\r\n if (isArray(b)) b = b.join(' ');\r\n return a + ' ' + b;\r\n}\r\n\r\nfunction packageStyles(options) {\r\n var styles = {};\r\n if (options && (options.to || options.from)) {\r\n styles.to = options.to;\r\n styles.from = options.from;\r\n }\r\n return styles;\r\n}\r\n\r\nfunction pendClasses(classes, fix, isPrefix) {\r\n var className = '';\r\n classes = isArray(classes)\r\n ? classes\r\n : classes && isString(classes) && classes.length\r\n ? classes.split(/\\s+/)\r\n : [];\r\n forEach(classes, function(klass, i) {\r\n if (klass && klass.length > 0) {\r\n className += (i > 0) ? ' ' : '';\r\n className += isPrefix ? fix + klass\r\n : klass + fix;\r\n }\r\n });\r\n return className;\r\n}\r\n\r\nfunction removeFromArray(arr, val) {\r\n var index = arr.indexOf(val);\r\n if (val >= 0) {\r\n arr.splice(index, 1);\r\n }\r\n}\r\n\r\nfunction stripCommentsFromElement(element) {\r\n if (element instanceof jqLite) {\r\n switch (element.length) {\r\n case 0:\r\n return element;\r\n\r\n case 1:\r\n // there is no point of stripping anything if the element\r\n // is the only element within the jqLite wrapper.\r\n // (it's important that we retain the element instance.)\r\n if (element[0].nodeType === ELEMENT_NODE) {\r\n return element;\r\n }\r\n break;\r\n\r\n default:\r\n return jqLite(extractElementNode(element));\r\n }\r\n }\r\n\r\n if (element.nodeType === ELEMENT_NODE) {\r\n return jqLite(element);\r\n }\r\n}\r\n\r\nfunction extractElementNode(element) {\r\n if (!element[0]) return element;\r\n for (var i = 0; i < element.length; i++) {\r\n var elm = element[i];\r\n if (elm.nodeType === ELEMENT_NODE) {\r\n return elm;\r\n }\r\n }\r\n}\r\n\r\nfunction $$addClass($$jqLite, element, className) {\r\n forEach(element, function(elm) {\r\n $$jqLite.addClass(elm, className);\r\n });\r\n}\r\n\r\nfunction $$removeClass($$jqLite, element, className) {\r\n forEach(element, function(elm) {\r\n $$jqLite.removeClass(elm, className);\r\n });\r\n}\r\n\r\nfunction applyAnimationClassesFactory($$jqLite) {\r\n return function(element, options) {\r\n if (options.addClass) {\r\n $$addClass($$jqLite, element, options.addClass);\r\n options.addClass = null;\r\n }\r\n if (options.removeClass) {\r\n $$removeClass($$jqLite, element, options.removeClass);\r\n options.removeClass = null;\r\n }\r\n };\r\n}\r\n\r\nfunction prepareAnimationOptions(options) {\r\n options = options || {};\r\n if (!options.$$prepared) {\r\n var domOperation = options.domOperation || noop;\r\n options.domOperation = function() {\r\n options.$$domOperationFired = true;\r\n domOperation();\r\n domOperation = noop;\r\n };\r\n options.$$prepared = true;\r\n }\r\n return options;\r\n}\r\n\r\nfunction applyAnimationStyles(element, options) {\r\n applyAnimationFromStyles(element, options);\r\n applyAnimationToStyles(element, options);\r\n}\r\n\r\nfunction applyAnimationFromStyles(element, options) {\r\n if (options.from) {\r\n element.css(options.from);\r\n options.from = null;\r\n }\r\n}\r\n\r\nfunction applyAnimationToStyles(element, options) {\r\n if (options.to) {\r\n element.css(options.to);\r\n options.to = null;\r\n }\r\n}\r\n\r\nfunction mergeAnimationDetails(element, oldAnimation, newAnimation) {\r\n var target = oldAnimation.options || {};\r\n var newOptions = newAnimation.options || {};\r\n\r\n var toAdd = (target.addClass || '') + ' ' + (newOptions.addClass || '');\r\n var toRemove = (target.removeClass || '') + ' ' + (newOptions.removeClass || '');\r\n var classes = resolveElementClasses(element.attr('class'), toAdd, toRemove);\r\n\r\n if (newOptions.preparationClasses) {\r\n target.preparationClasses = concatWithSpace(newOptions.preparationClasses, target.preparationClasses);\r\n delete newOptions.preparationClasses;\r\n }\r\n\r\n // noop is basically when there is no callback; otherwise something has been set\r\n var realDomOperation = target.domOperation !== noop ? target.domOperation : null;\r\n\r\n extend(target, newOptions);\r\n\r\n // TODO(matsko or sreeramu): proper fix is to maintain all animation callback in array and call at last,but now only leave has the callback so no issue with this.\r\n if (realDomOperation) {\r\n target.domOperation = realDomOperation;\r\n }\r\n\r\n if (classes.addClass) {\r\n target.addClass = classes.addClass;\r\n } else {\r\n target.addClass = null;\r\n }\r\n\r\n if (classes.removeClass) {\r\n target.removeClass = classes.removeClass;\r\n } else {\r\n target.removeClass = null;\r\n }\r\n\r\n oldAnimation.addClass = target.addClass;\r\n oldAnimation.removeClass = target.removeClass;\r\n\r\n return target;\r\n}\r\n\r\nfunction resolveElementClasses(existing, toAdd, toRemove) {\r\n var ADD_CLASS = 1;\r\n var REMOVE_CLASS = -1;\r\n\r\n var flags = {};\r\n existing = splitClassesToLookup(existing);\r\n\r\n toAdd = splitClassesToLookup(toAdd);\r\n forEach(toAdd, function(value, key) {\r\n flags[key] = ADD_CLASS;\r\n });\r\n\r\n toRemove = splitClassesToLookup(toRemove);\r\n forEach(toRemove, function(value, key) {\r\n flags[key] = flags[key] === ADD_CLASS ? null : REMOVE_CLASS;\r\n });\r\n\r\n var classes = {\r\n addClass: '',\r\n removeClass: ''\r\n };\r\n\r\n forEach(flags, function(val, klass) {\r\n var prop, allow;\r\n if (val === ADD_CLASS) {\r\n prop = 'addClass';\r\n allow = !existing[klass] || existing[klass + REMOVE_CLASS_SUFFIX];\r\n } else if (val === REMOVE_CLASS) {\r\n prop = 'removeClass';\r\n allow = existing[klass] || existing[klass + ADD_CLASS_SUFFIX];\r\n }\r\n if (allow) {\r\n if (classes[prop].length) {\r\n classes[prop] += ' ';\r\n }\r\n classes[prop] += klass;\r\n }\r\n });\r\n\r\n function splitClassesToLookup(classes) {\r\n if (isString(classes)) {\r\n classes = classes.split(' ');\r\n }\r\n\r\n var obj = {};\r\n forEach(classes, function(klass) {\r\n // sometimes the split leaves empty string values\r\n // incase extra spaces were applied to the options\r\n if (klass.length) {\r\n obj[klass] = true;\r\n }\r\n });\r\n return obj;\r\n }\r\n\r\n return classes;\r\n}\r\n\r\nfunction getDomNode(element) {\r\n return (element instanceof jqLite) ? element[0] : element;\r\n}\r\n\r\nfunction applyGeneratedPreparationClasses($$jqLite, element, event, options) {\r\n var classes = '';\r\n if (event) {\r\n classes = pendClasses(event, EVENT_CLASS_PREFIX, true);\r\n }\r\n if (options.addClass) {\r\n classes = concatWithSpace(classes, pendClasses(options.addClass, ADD_CLASS_SUFFIX));\r\n }\r\n if (options.removeClass) {\r\n classes = concatWithSpace(classes, pendClasses(options.removeClass, REMOVE_CLASS_SUFFIX));\r\n }\r\n if (classes.length) {\r\n options.preparationClasses = classes;\r\n element.addClass(classes);\r\n }\r\n}\r\n\r\nfunction clearGeneratedClasses(element, options) {\r\n if (options.preparationClasses) {\r\n element.removeClass(options.preparationClasses);\r\n options.preparationClasses = null;\r\n }\r\n if (options.activeClasses) {\r\n element.removeClass(options.activeClasses);\r\n options.activeClasses = null;\r\n }\r\n}\r\n\r\nfunction blockTransitions(node, duration) {\r\n // we use a negative delay value since it performs blocking\r\n // yet it doesn't kill any existing transitions running on the\r\n // same element which makes this safe for class-based animations\r\n var value = duration ? '-' + duration + 's' : '';\r\n applyInlineStyle(node, [TRANSITION_DELAY_PROP, value]);\r\n return [TRANSITION_DELAY_PROP, value];\r\n}\r\n\r\nfunction blockKeyframeAnimations(node, applyBlock) {\r\n var value = applyBlock ? 'paused' : '';\r\n var key = ANIMATION_PROP + ANIMATION_PLAYSTATE_KEY;\r\n applyInlineStyle(node, [key, value]);\r\n return [key, value];\r\n}\r\n\r\nfunction applyInlineStyle(node, styleTuple) {\r\n var prop = styleTuple[0];\r\n var value = styleTuple[1];\r\n node.style[prop] = value;\r\n}\r\n\r\nfunction concatWithSpace(a,b) {\r\n if (!a) return b;\r\n if (!b) return a;\r\n return a + ' ' + b;\r\n}\r\n\r\nvar $$rAFSchedulerFactory = ['$$rAF', function($$rAF) {\r\n var queue, cancelFn;\r\n\r\n function scheduler(tasks) {\r\n // we make a copy since RAFScheduler mutates the state\r\n // of the passed in array variable and this would be difficult\r\n // to track down on the outside code\r\n queue = queue.concat(tasks);\r\n nextTick();\r\n }\r\n\r\n queue = scheduler.queue = [];\r\n\r\n /* waitUntilQuiet does two things:\r\n * 1. It will run the FINAL `fn` value only when an uncanceled RAF has passed through\r\n * 2. It will delay the next wave of tasks from running until the quiet `fn` has run.\r\n *\r\n * The motivation here is that animation code can request more time from the scheduler\r\n * before the next wave runs. This allows for certain DOM properties such as classes to\r\n * be resolved in time for the next animation to run.\r\n */\r\n scheduler.waitUntilQuiet = function(fn) {\r\n if (cancelFn) cancelFn();\r\n\r\n cancelFn = $$rAF(function() {\r\n cancelFn = null;\r\n fn();\r\n nextTick();\r\n });\r\n };\r\n\r\n return scheduler;\r\n\r\n function nextTick() {\r\n if (!queue.length) return;\r\n\r\n var items = queue.shift();\r\n for (var i = 0; i < items.length; i++) {\r\n items[i]();\r\n }\r\n\r\n if (!cancelFn) {\r\n $$rAF(function() {\r\n if (!cancelFn) nextTick();\r\n });\r\n }\r\n }\r\n}];\r\n\r\n/**\r\n * @ngdoc directive\r\n * @name ngAnimateChildren\r\n * @restrict AE\r\n * @element ANY\r\n *\r\n * @description\r\n *\r\n * ngAnimateChildren allows you to specify that children of this element should animate even if any\r\n * of the children's parents are currently animating. By default, when an element has an active `enter`, `leave`, or `move`\r\n * (structural) animation, child elements that also have an active structural animation are not animated.\r\n *\r\n * Note that even if `ngAnimateChildren` is set, no child animations will run when the parent element is removed from the DOM (`leave` animation).\r\n *\r\n *\r\n * @param {string} ngAnimateChildren If the value is empty, `true` or `on`,\r\n * then child animations are allowed. If the value is `false`, child animations are not allowed.\r\n *\r\n * @example\r\n * \r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n List of items:\r\n
Item {{item}}
\r\n
\r\n
\r\n
\r\n
\r\n \r\n\r\n .container.ng-enter,\r\n .container.ng-leave {\r\n transition: all ease 1.5s;\r\n }\r\n\r\n .container.ng-enter,\r\n .container.ng-leave-active {\r\n opacity: 0;\r\n }\r\n\r\n .container.ng-leave,\r\n .container.ng-enter-active {\r\n opacity: 1;\r\n }\r\n\r\n .item {\r\n background: firebrick;\r\n color: #FFF;\r\n margin-bottom: 10px;\r\n }\r\n\r\n .item.ng-enter,\r\n .item.ng-leave {\r\n transition: transform 1.5s ease;\r\n }\r\n\r\n .item.ng-enter {\r\n transform: translateX(50px);\r\n }\r\n\r\n .item.ng-enter-active {\r\n transform: translateX(0);\r\n }\r\n \r\n \r\n angular.module('ngAnimateChildren', ['ngAnimate'])\r\n .controller('MainController', function MainController() {\r\n this.animateChildren = false;\r\n this.enterElement = false;\r\n });\r\n \r\n
\r\n */\r\nvar $$AnimateChildrenDirective = ['$interpolate', function($interpolate) {\r\n return {\r\n link: function(scope, element, attrs) {\r\n var val = attrs.ngAnimateChildren;\r\n if (isString(val) && val.length === 0) { //empty attribute\r\n element.data(NG_ANIMATE_CHILDREN_DATA, true);\r\n } else {\r\n // Interpolate and set the value, so that it is available to\r\n // animations that run right after compilation\r\n setData($interpolate(val)(scope));\r\n attrs.$observe('ngAnimateChildren', setData);\r\n }\r\n\r\n function setData(value) {\r\n value = value === 'on' || value === 'true';\r\n element.data(NG_ANIMATE_CHILDREN_DATA, value);\r\n }\r\n }\r\n };\r\n}];\r\n\r\n/* exported $AnimateCssProvider */\r\n\r\nvar ANIMATE_TIMER_KEY = '$$animateCss';\r\n\r\n/**\r\n * @ngdoc service\r\n * @name $animateCss\r\n * @kind object\r\n *\r\n * @description\r\n * The `$animateCss` service is a useful utility to trigger customized CSS-based transitions/keyframes\r\n * from a JavaScript-based animation or directly from a directive. The purpose of `$animateCss` is NOT\r\n * to side-step how `$animate` and ngAnimate work, but the goal is to allow pre-existing animations or\r\n * directives to create more complex animations that can be purely driven using CSS code.\r\n *\r\n * Note that only browsers that support CSS transitions and/or keyframe animations are capable of\r\n * rendering animations triggered via `$animateCss` (bad news for IE9 and lower).\r\n *\r\n * ## General Use\r\n * Once again, `$animateCss` is designed to be used inside of a registered JavaScript animation that\r\n * is powered by ngAnimate. It is possible to use `$animateCss` directly inside of a directive, however,\r\n * any automatic control over cancelling animations and/or preventing animations from being run on\r\n * child elements will not be handled by AngularJS. For this to work as expected, please use `$animate` to\r\n * trigger the animation and then setup a JavaScript animation that injects `$animateCss` to trigger\r\n * the CSS animation.\r\n *\r\n * The example below shows how we can create a folding animation on an element using `ng-if`:\r\n *\r\n * ```html\r\n * \r\n *
\r\n * This element will go BOOM\r\n *
\r\n * \r\n * ```\r\n *\r\n * Now we create the **JavaScript animation** that will trigger the CSS transition:\r\n *\r\n * ```js\r\n * ngModule.animation('.fold-animation', ['$animateCss', function($animateCss) {\r\n * return {\r\n * enter: function(element, doneFn) {\r\n * var height = element[0].offsetHeight;\r\n * return $animateCss(element, {\r\n * from: { height:'0px' },\r\n * to: { height:height + 'px' },\r\n * duration: 1 // one second\r\n * });\r\n * }\r\n * }\r\n * }]);\r\n * ```\r\n *\r\n * ## More Advanced Uses\r\n *\r\n * `$animateCss` is the underlying code that ngAnimate uses to power **CSS-based animations** behind the scenes. Therefore CSS hooks\r\n * like `.ng-EVENT`, `.ng-EVENT-active`, `.ng-EVENT-stagger` are all features that can be triggered using `$animateCss` via JavaScript code.\r\n *\r\n * This also means that just about any combination of adding classes, removing classes, setting styles, dynamically setting a keyframe animation,\r\n * applying a hardcoded duration or delay value, changing the animation easing or applying a stagger animation are all options that work with\r\n * `$animateCss`. The service itself is smart enough to figure out the combination of options and examine the element styling properties in order\r\n * to provide a working animation that will run in CSS.\r\n *\r\n * The example below showcases a more advanced version of the `.fold-animation` from the example above:\r\n *\r\n * ```js\r\n * ngModule.animation('.fold-animation', ['$animateCss', function($animateCss) {\r\n * return {\r\n * enter: function(element, doneFn) {\r\n * var height = element[0].offsetHeight;\r\n * return $animateCss(element, {\r\n * addClass: 'red large-text pulse-twice',\r\n * easing: 'ease-out',\r\n * from: { height:'0px' },\r\n * to: { height:height + 'px' },\r\n * duration: 1 // one second\r\n * });\r\n * }\r\n * }\r\n * }]);\r\n * ```\r\n *\r\n * Since we're adding/removing CSS classes then the CSS transition will also pick those up:\r\n *\r\n * ```css\r\n * /* since a hardcoded duration value of 1 was provided in the JavaScript animation code,\r\n * the CSS classes below will be transitioned despite them being defined as regular CSS classes */\r\n * .red { background:red; }\r\n * .large-text { font-size:20px; }\r\n *\r\n * /* we can also use a keyframe animation and $animateCss will make it work alongside the transition */\r\n * .pulse-twice {\r\n * animation: 0.5s pulse linear 2;\r\n * -webkit-animation: 0.5s pulse linear 2;\r\n * }\r\n *\r\n * @keyframes pulse {\r\n * from { transform: scale(0.5); }\r\n * to { transform: scale(1.5); }\r\n * }\r\n *\r\n * @-webkit-keyframes pulse {\r\n * from { -webkit-transform: scale(0.5); }\r\n * to { -webkit-transform: scale(1.5); }\r\n * }\r\n * ```\r\n *\r\n * Given this complex combination of CSS classes, styles and options, `$animateCss` will figure everything out and make the animation happen.\r\n *\r\n * ## How the Options are handled\r\n *\r\n * `$animateCss` is very versatile and intelligent when it comes to figuring out what configurations to apply to the element to ensure the animation\r\n * works with the options provided. Say for example we were adding a class that contained a keyframe value and we wanted to also animate some inline\r\n * styles using the `from` and `to` properties.\r\n *\r\n * ```js\r\n * var animator = $animateCss(element, {\r\n * from: { background:'red' },\r\n * to: { background:'blue' }\r\n * });\r\n * animator.start();\r\n * ```\r\n *\r\n * ```css\r\n * .rotating-animation {\r\n * animation:0.5s rotate linear;\r\n * -webkit-animation:0.5s rotate linear;\r\n * }\r\n *\r\n * @keyframes rotate {\r\n * from { transform: rotate(0deg); }\r\n * to { transform: rotate(360deg); }\r\n * }\r\n *\r\n * @-webkit-keyframes rotate {\r\n * from { -webkit-transform: rotate(0deg); }\r\n * to { -webkit-transform: rotate(360deg); }\r\n * }\r\n * ```\r\n *\r\n * The missing pieces here are that we do not have a transition set (within the CSS code nor within the `$animateCss` options) and the duration of the animation is\r\n * going to be detected from what the keyframe styles on the CSS class are. In this event, `$animateCss` will automatically create an inline transition\r\n * style matching the duration detected from the keyframe style (which is present in the CSS class that is being added) and then prepare both the transition\r\n * and keyframe animations to run in parallel on the element. Then when the animation is underway the provided `from` and `to` CSS styles will be applied\r\n * and spread across the transition and keyframe animation.\r\n *\r\n * ## What is returned\r\n *\r\n * `$animateCss` works in two stages: a preparation phase and an animation phase. Therefore when `$animateCss` is first called it will NOT actually\r\n * start the animation. All that is going on here is that the element is being prepared for the animation (which means that the generated CSS classes are\r\n * added and removed on the element). Once `$animateCss` is called it will return an object with the following properties:\r\n *\r\n * ```js\r\n * var animator = $animateCss(element, { ... });\r\n * ```\r\n *\r\n * Now what do the contents of our `animator` variable look like:\r\n *\r\n * ```js\r\n * {\r\n * // starts the animation\r\n * start: Function,\r\n *\r\n * // ends (aborts) the animation\r\n * end: Function\r\n * }\r\n * ```\r\n *\r\n * To actually start the animation we need to run `animation.start()` which will then return a promise that we can hook into to detect when the animation ends.\r\n * If we choose not to run the animation then we MUST run `animation.end()` to perform a cleanup on the element (since some CSS classes and styles may have been\r\n * applied to the element during the preparation phase). Note that all other properties such as duration, delay, transitions and keyframes are just properties\r\n * and that changing them will not reconfigure the parameters of the animation.\r\n *\r\n * ### runner.done() vs runner.then()\r\n * It is documented that `animation.start()` will return a promise object and this is true, however, there is also an additional method available on the\r\n * runner called `.done(callbackFn)`. The done method works the same as `.finally(callbackFn)`, however, it does **not trigger a digest to occur**.\r\n * Therefore, for performance reasons, it's always best to use `runner.done(callback)` instead of `runner.then()`, `runner.catch()` or `runner.finally()`\r\n * unless you really need a digest to kick off afterwards.\r\n *\r\n * Keep in mind that, to make this easier, ngAnimate has tweaked the JS animations API to recognize when a runner instance is returned from $animateCss\r\n * (so there is no need to call `runner.done(doneFn)` inside of your JavaScript animation code).\r\n * Check the {@link ngAnimate.$animateCss#usage animation code above} to see how this works.\r\n *\r\n * @param {DOMElement} element the element that will be animated\r\n * @param {object} options the animation-related options that will be applied during the animation\r\n *\r\n * * `event` - The DOM event (e.g. enter, leave, move). When used, a generated CSS class of `ng-EVENT` and `ng-EVENT-active` will be applied\r\n * to the element during the animation. Multiple events can be provided when spaces are used as a separator. (Note that this will not perform any DOM operation.)\r\n * * `structural` - Indicates that the `ng-` prefix will be added to the event class. Setting to `false` or omitting will turn `ng-EVENT` and\r\n * `ng-EVENT-active` in `EVENT` and `EVENT-active`. Unused if `event` is omitted.\r\n * * `easing` - The CSS easing value that will be applied to the transition or keyframe animation (or both).\r\n * * `transitionStyle` - The raw CSS transition style that will be used (e.g. `1s linear all`).\r\n * * `keyframeStyle` - The raw CSS keyframe animation style that will be used (e.g. `1s my_animation linear`).\r\n * * `from` - The starting CSS styles (a key/value object) that will be applied at the start of the animation.\r\n * * `to` - The ending CSS styles (a key/value object) that will be applied across the animation via a CSS transition.\r\n * * `addClass` - A space separated list of CSS classes that will be added to the element and spread across the animation.\r\n * * `removeClass` - A space separated list of CSS classes that will be removed from the element and spread across the animation.\r\n * * `duration` - A number value representing the total duration of the transition and/or keyframe (note that a value of 1 is 1000ms). If a value of `0`\r\n * is provided then the animation will be skipped entirely.\r\n * * `delay` - A number value representing the total delay of the transition and/or keyframe (note that a value of 1 is 1000ms). If a value of `true` is\r\n * used then whatever delay value is detected from the CSS classes will be mirrored on the elements styles (e.g. by setting delay true then the style value\r\n * of the element will be `transition-delay: DETECTED_VALUE`). Using `true` is useful when you want the CSS classes and inline styles to all share the same\r\n * CSS delay value.\r\n * * `stagger` - A numeric time value representing the delay between successively animated elements\r\n * ({@link ngAnimate#css-staggering-animations Click here to learn how CSS-based staggering works in ngAnimate.})\r\n * * `staggerIndex` - The numeric index representing the stagger item (e.g. a value of 5 is equal to the sixth item in the stagger; therefore when a\r\n * `stagger` option value of `0.1` is used then there will be a stagger delay of `600ms`)\r\n * * `applyClassesEarly` - Whether or not the classes being added or removed will be used when detecting the animation. This is set by `$animate` when enter/leave/move animations are fired to ensure that the CSS classes are resolved in time. (Note that this will prevent any transitions from occurring on the classes being added and removed.)\r\n * * `cleanupStyles` - Whether or not the provided `from` and `to` styles will be removed once\r\n * the animation is closed. This is useful for when the styles are used purely for the sake of\r\n * the animation and do not have a lasting visual effect on the element (e.g. a collapse and open animation).\r\n * By default this value is set to `false`.\r\n *\r\n * @return {object} an object with start and end methods and details about the animation.\r\n *\r\n * * `start` - The method to start the animation. This will return a `Promise` when called.\r\n * * `end` - This method will cancel the animation and remove all applied CSS classes and styles.\r\n */\r\nvar ONE_SECOND = 1000;\r\n\r\nvar ELAPSED_TIME_MAX_DECIMAL_PLACES = 3;\r\nvar CLOSING_TIME_BUFFER = 1.5;\r\n\r\nvar DETECT_CSS_PROPERTIES = {\r\n transitionDuration: TRANSITION_DURATION_PROP,\r\n transitionDelay: TRANSITION_DELAY_PROP,\r\n transitionProperty: TRANSITION_PROP + PROPERTY_KEY,\r\n animationDuration: ANIMATION_DURATION_PROP,\r\n animationDelay: ANIMATION_DELAY_PROP,\r\n animationIterationCount: ANIMATION_PROP + ANIMATION_ITERATION_COUNT_KEY\r\n};\r\n\r\nvar DETECT_STAGGER_CSS_PROPERTIES = {\r\n transitionDuration: TRANSITION_DURATION_PROP,\r\n transitionDelay: TRANSITION_DELAY_PROP,\r\n animationDuration: ANIMATION_DURATION_PROP,\r\n animationDelay: ANIMATION_DELAY_PROP\r\n};\r\n\r\nfunction getCssKeyframeDurationStyle(duration) {\r\n return [ANIMATION_DURATION_PROP, duration + 's'];\r\n}\r\n\r\nfunction getCssDelayStyle(delay, isKeyframeAnimation) {\r\n var prop = isKeyframeAnimation ? ANIMATION_DELAY_PROP : TRANSITION_DELAY_PROP;\r\n return [prop, delay + 's'];\r\n}\r\n\r\nfunction computeCssStyles($window, element, properties) {\r\n var styles = Object.create(null);\r\n var detectedStyles = $window.getComputedStyle(element) || {};\r\n forEach(properties, function(formalStyleName, actualStyleName) {\r\n var val = detectedStyles[formalStyleName];\r\n if (val) {\r\n var c = val.charAt(0);\r\n\r\n // only numerical-based values have a negative sign or digit as the first value\r\n if (c === '-' || c === '+' || c >= 0) {\r\n val = parseMaxTime(val);\r\n }\r\n\r\n // by setting this to null in the event that the delay is not set or is set directly as 0\r\n // then we can still allow for negative values to be used later on and not mistake this\r\n // value for being greater than any other negative value.\r\n if (val === 0) {\r\n val = null;\r\n }\r\n styles[actualStyleName] = val;\r\n }\r\n });\r\n\r\n return styles;\r\n}\r\n\r\nfunction parseMaxTime(str) {\r\n var maxValue = 0;\r\n var values = str.split(/\\s*,\\s*/);\r\n forEach(values, function(value) {\r\n // it's always safe to consider only second values and omit `ms` values since\r\n // getComputedStyle will always handle the conversion for us\r\n if (value.charAt(value.length - 1) === 's') {\r\n value = value.substring(0, value.length - 1);\r\n }\r\n value = parseFloat(value) || 0;\r\n maxValue = maxValue ? Math.max(value, maxValue) : value;\r\n });\r\n return maxValue;\r\n}\r\n\r\nfunction truthyTimingValue(val) {\r\n return val === 0 || val != null;\r\n}\r\n\r\nfunction getCssTransitionDurationStyle(duration, applyOnlyDuration) {\r\n var style = TRANSITION_PROP;\r\n var value = duration + 's';\r\n if (applyOnlyDuration) {\r\n style += DURATION_KEY;\r\n } else {\r\n value += ' linear all';\r\n }\r\n return [style, value];\r\n}\r\n\r\n// we do not reassign an already present style value since\r\n// if we detect the style property value again we may be\r\n// detecting styles that were added via the `from` styles.\r\n// We make use of `isDefined` here since an empty string\r\n// or null value (which is what getPropertyValue will return\r\n// for a non-existing style) will still be marked as a valid\r\n// value for the style (a falsy value implies that the style\r\n// is to be removed at the end of the animation). If we had a simple\r\n// \"OR\" statement then it would not be enough to catch that.\r\nfunction registerRestorableStyles(backup, node, properties) {\r\n forEach(properties, function(prop) {\r\n backup[prop] = isDefined(backup[prop])\r\n ? backup[prop]\r\n : node.style.getPropertyValue(prop);\r\n });\r\n}\r\n\r\nvar $AnimateCssProvider = ['$animateProvider', /** @this */ function($animateProvider) {\r\n\r\n this.$get = ['$window', '$$jqLite', '$$AnimateRunner', '$timeout', '$$animateCache',\r\n '$$forceReflow', '$sniffer', '$$rAFScheduler', '$$animateQueue',\r\n function($window, $$jqLite, $$AnimateRunner, $timeout, $$animateCache,\r\n $$forceReflow, $sniffer, $$rAFScheduler, $$animateQueue) {\r\n\r\n var applyAnimationClasses = applyAnimationClassesFactory($$jqLite);\r\n\r\n function computeCachedCssStyles(node, className, cacheKey, allowNoDuration, properties) {\r\n var timings = $$animateCache.get(cacheKey);\r\n\r\n if (!timings) {\r\n timings = computeCssStyles($window, node, properties);\r\n if (timings.animationIterationCount === 'infinite') {\r\n timings.animationIterationCount = 1;\r\n }\r\n }\r\n\r\n // if a css animation has no duration we\r\n // should mark that so that repeated addClass/removeClass calls are skipped\r\n var hasDuration = allowNoDuration || (timings.transitionDuration > 0 || timings.animationDuration > 0);\r\n\r\n // we keep putting this in multiple times even though the value and the cacheKey are the same\r\n // because we're keeping an internal tally of how many duplicate animations are detected.\r\n $$animateCache.put(cacheKey, timings, hasDuration);\r\n\r\n return timings;\r\n }\r\n\r\n function computeCachedCssStaggerStyles(node, className, cacheKey, properties) {\r\n var stagger;\r\n var staggerCacheKey = 'stagger-' + cacheKey;\r\n\r\n // if we have one or more existing matches of matching elements\r\n // containing the same parent + CSS styles (which is how cacheKey works)\r\n // then staggering is possible\r\n if ($$animateCache.count(cacheKey) > 0) {\r\n stagger = $$animateCache.get(staggerCacheKey);\r\n\r\n if (!stagger) {\r\n var staggerClassName = pendClasses(className, '-stagger');\r\n\r\n $$jqLite.addClass(node, staggerClassName);\r\n\r\n stagger = computeCssStyles($window, node, properties);\r\n\r\n // force the conversion of a null value to zero incase not set\r\n stagger.animationDuration = Math.max(stagger.animationDuration, 0);\r\n stagger.transitionDuration = Math.max(stagger.transitionDuration, 0);\r\n\r\n $$jqLite.removeClass(node, staggerClassName);\r\n\r\n $$animateCache.put(staggerCacheKey, stagger, true);\r\n }\r\n }\r\n\r\n return stagger || {};\r\n }\r\n\r\n var rafWaitQueue = [];\r\n function waitUntilQuiet(callback) {\r\n rafWaitQueue.push(callback);\r\n $$rAFScheduler.waitUntilQuiet(function() {\r\n $$animateCache.flush();\r\n\r\n // DO NOT REMOVE THIS LINE OR REFACTOR OUT THE `pageWidth` variable.\r\n // PLEASE EXAMINE THE `$$forceReflow` service to understand why.\r\n var pageWidth = $$forceReflow();\r\n\r\n // we use a for loop to ensure that if the queue is changed\r\n // during this looping then it will consider new requests\r\n for (var i = 0; i < rafWaitQueue.length; i++) {\r\n rafWaitQueue[i](pageWidth);\r\n }\r\n rafWaitQueue.length = 0;\r\n });\r\n }\r\n\r\n function computeTimings(node, className, cacheKey, allowNoDuration) {\r\n var timings = computeCachedCssStyles(node, className, cacheKey, allowNoDuration, DETECT_CSS_PROPERTIES);\r\n var aD = timings.animationDelay;\r\n var tD = timings.transitionDelay;\r\n timings.maxDelay = aD && tD\r\n ? Math.max(aD, tD)\r\n : (aD || tD);\r\n timings.maxDuration = Math.max(\r\n timings.animationDuration * timings.animationIterationCount,\r\n timings.transitionDuration);\r\n\r\n return timings;\r\n }\r\n\r\n return function init(element, initialOptions) {\r\n // all of the animation functions should create\r\n // a copy of the options data, however, if a\r\n // parent service has already created a copy then\r\n // we should stick to using that\r\n var options = initialOptions || {};\r\n if (!options.$$prepared) {\r\n options = prepareAnimationOptions(copy(options));\r\n }\r\n\r\n var restoreStyles = {};\r\n var node = getDomNode(element);\r\n if (!node\r\n || !node.parentNode\r\n || !$$animateQueue.enabled()) {\r\n return closeAndReturnNoopAnimator();\r\n }\r\n\r\n var temporaryStyles = [];\r\n var classes = element.attr('class');\r\n var styles = packageStyles(options);\r\n var animationClosed;\r\n var animationPaused;\r\n var animationCompleted;\r\n var runner;\r\n var runnerHost;\r\n var maxDelay;\r\n var maxDelayTime;\r\n var maxDuration;\r\n var maxDurationTime;\r\n var startTime;\r\n var events = [];\r\n\r\n if (options.duration === 0 || (!$sniffer.animations && !$sniffer.transitions)) {\r\n return closeAndReturnNoopAnimator();\r\n }\r\n\r\n var method = options.event && isArray(options.event)\r\n ? options.event.join(' ')\r\n : options.event;\r\n\r\n var isStructural = method && options.structural;\r\n var structuralClassName = '';\r\n var addRemoveClassName = '';\r\n\r\n if (isStructural) {\r\n structuralClassName = pendClasses(method, EVENT_CLASS_PREFIX, true);\r\n } else if (method) {\r\n structuralClassName = method;\r\n }\r\n\r\n if (options.addClass) {\r\n addRemoveClassName += pendClasses(options.addClass, ADD_CLASS_SUFFIX);\r\n }\r\n\r\n if (options.removeClass) {\r\n if (addRemoveClassName.length) {\r\n addRemoveClassName += ' ';\r\n }\r\n addRemoveClassName += pendClasses(options.removeClass, REMOVE_CLASS_SUFFIX);\r\n }\r\n\r\n // there may be a situation where a structural animation is combined together\r\n // with CSS classes that need to resolve before the animation is computed.\r\n // However this means that there is no explicit CSS code to block the animation\r\n // from happening (by setting 0s none in the class name). If this is the case\r\n // we need to apply the classes before the first rAF so we know to continue if\r\n // there actually is a detected transition or keyframe animation\r\n if (options.applyClassesEarly && addRemoveClassName.length) {\r\n applyAnimationClasses(element, options);\r\n }\r\n\r\n var preparationClasses = [structuralClassName, addRemoveClassName].join(' ').trim();\r\n var fullClassName = classes + ' ' + preparationClasses;\r\n var hasToStyles = styles.to && Object.keys(styles.to).length > 0;\r\n var containsKeyframeAnimation = (options.keyframeStyle || '').length > 0;\r\n\r\n // there is no way we can trigger an animation if no styles and\r\n // no classes are being applied which would then trigger a transition,\r\n // unless there a is raw keyframe value that is applied to the element.\r\n if (!containsKeyframeAnimation\r\n && !hasToStyles\r\n && !preparationClasses) {\r\n return closeAndReturnNoopAnimator();\r\n }\r\n\r\n var stagger, cacheKey = $$animateCache.cacheKey(node, method, options.addClass, options.removeClass);\r\n if ($$animateCache.containsCachedAnimationWithoutDuration(cacheKey)) {\r\n preparationClasses = null;\r\n return closeAndReturnNoopAnimator();\r\n }\r\n\r\n if (options.stagger > 0) {\r\n var staggerVal = parseFloat(options.stagger);\r\n stagger = {\r\n transitionDelay: staggerVal,\r\n animationDelay: staggerVal,\r\n transitionDuration: 0,\r\n animationDuration: 0\r\n };\r\n } else {\r\n stagger = computeCachedCssStaggerStyles(node, preparationClasses, cacheKey, DETECT_STAGGER_CSS_PROPERTIES);\r\n }\r\n\r\n if (!options.$$skipPreparationClasses) {\r\n $$jqLite.addClass(element, preparationClasses);\r\n }\r\n\r\n var applyOnlyDuration;\r\n\r\n if (options.transitionStyle) {\r\n var transitionStyle = [TRANSITION_PROP, options.transitionStyle];\r\n applyInlineStyle(node, transitionStyle);\r\n temporaryStyles.push(transitionStyle);\r\n }\r\n\r\n if (options.duration >= 0) {\r\n applyOnlyDuration = node.style[TRANSITION_PROP].length > 0;\r\n var durationStyle = getCssTransitionDurationStyle(options.duration, applyOnlyDuration);\r\n\r\n // we set the duration so that it will be picked up by getComputedStyle later\r\n applyInlineStyle(node, durationStyle);\r\n temporaryStyles.push(durationStyle);\r\n }\r\n\r\n if (options.keyframeStyle) {\r\n var keyframeStyle = [ANIMATION_PROP, options.keyframeStyle];\r\n applyInlineStyle(node, keyframeStyle);\r\n temporaryStyles.push(keyframeStyle);\r\n }\r\n\r\n var itemIndex = stagger\r\n ? options.staggerIndex >= 0\r\n ? options.staggerIndex\r\n : $$animateCache.count(cacheKey)\r\n : 0;\r\n\r\n var isFirst = itemIndex === 0;\r\n\r\n // this is a pre-emptive way of forcing the setup classes to be added and applied INSTANTLY\r\n // without causing any combination of transitions to kick in. By adding a negative delay value\r\n // it forces the setup class' transition to end immediately. We later then remove the negative\r\n // transition delay to allow for the transition to naturally do it's thing. The beauty here is\r\n // that if there is no transition defined then nothing will happen and this will also allow\r\n // other transitions to be stacked on top of each other without any chopping them out.\r\n if (isFirst && !options.skipBlocking) {\r\n blockTransitions(node, SAFE_FAST_FORWARD_DURATION_VALUE);\r\n }\r\n\r\n var timings = computeTimings(node, fullClassName, cacheKey, !isStructural);\r\n var relativeDelay = timings.maxDelay;\r\n maxDelay = Math.max(relativeDelay, 0);\r\n maxDuration = timings.maxDuration;\r\n\r\n var flags = {};\r\n flags.hasTransitions = timings.transitionDuration > 0;\r\n flags.hasAnimations = timings.animationDuration > 0;\r\n flags.hasTransitionAll = flags.hasTransitions && timings.transitionProperty === 'all';\r\n flags.applyTransitionDuration = hasToStyles && (\r\n (flags.hasTransitions && !flags.hasTransitionAll)\r\n || (flags.hasAnimations && !flags.hasTransitions));\r\n flags.applyAnimationDuration = options.duration && flags.hasAnimations;\r\n flags.applyTransitionDelay = truthyTimingValue(options.delay) && (flags.applyTransitionDuration || flags.hasTransitions);\r\n flags.applyAnimationDelay = truthyTimingValue(options.delay) && flags.hasAnimations;\r\n flags.recalculateTimingStyles = addRemoveClassName.length > 0;\r\n\r\n if (flags.applyTransitionDuration || flags.applyAnimationDuration) {\r\n maxDuration = options.duration ? parseFloat(options.duration) : maxDuration;\r\n\r\n if (flags.applyTransitionDuration) {\r\n flags.hasTransitions = true;\r\n timings.transitionDuration = maxDuration;\r\n applyOnlyDuration = node.style[TRANSITION_PROP + PROPERTY_KEY].length > 0;\r\n temporaryStyles.push(getCssTransitionDurationStyle(maxDuration, applyOnlyDuration));\r\n }\r\n\r\n if (flags.applyAnimationDuration) {\r\n flags.hasAnimations = true;\r\n timings.animationDuration = maxDuration;\r\n temporaryStyles.push(getCssKeyframeDurationStyle(maxDuration));\r\n }\r\n }\r\n\r\n if (maxDuration === 0 && !flags.recalculateTimingStyles) {\r\n return closeAndReturnNoopAnimator();\r\n }\r\n\r\n var activeClasses = pendClasses(preparationClasses, ACTIVE_CLASS_SUFFIX);\r\n\r\n if (options.delay != null) {\r\n var delayStyle;\r\n if (typeof options.delay !== 'boolean') {\r\n delayStyle = parseFloat(options.delay);\r\n // number in options.delay means we have to recalculate the delay for the closing timeout\r\n maxDelay = Math.max(delayStyle, 0);\r\n }\r\n\r\n if (flags.applyTransitionDelay) {\r\n temporaryStyles.push(getCssDelayStyle(delayStyle));\r\n }\r\n\r\n if (flags.applyAnimationDelay) {\r\n temporaryStyles.push(getCssDelayStyle(delayStyle, true));\r\n }\r\n }\r\n\r\n // we need to recalculate the delay value since we used a pre-emptive negative\r\n // delay value and the delay value is required for the final event checking. This\r\n // property will ensure that this will happen after the RAF phase has passed.\r\n if (options.duration == null && timings.transitionDuration > 0) {\r\n flags.recalculateTimingStyles = flags.recalculateTimingStyles || isFirst;\r\n }\r\n\r\n maxDelayTime = maxDelay * ONE_SECOND;\r\n maxDurationTime = maxDuration * ONE_SECOND;\r\n if (!options.skipBlocking) {\r\n flags.blockTransition = timings.transitionDuration > 0;\r\n flags.blockKeyframeAnimation = timings.animationDuration > 0 &&\r\n stagger.animationDelay > 0 &&\r\n stagger.animationDuration === 0;\r\n }\r\n\r\n if (options.from) {\r\n if (options.cleanupStyles) {\r\n registerRestorableStyles(restoreStyles, node, Object.keys(options.from));\r\n }\r\n applyAnimationFromStyles(element, options);\r\n }\r\n\r\n if (flags.blockTransition || flags.blockKeyframeAnimation) {\r\n applyBlocking(maxDuration);\r\n } else if (!options.skipBlocking) {\r\n blockTransitions(node, false);\r\n }\r\n\r\n // TODO(matsko): for 1.5 change this code to have an animator object for better debugging\r\n return {\r\n $$willAnimate: true,\r\n end: endFn,\r\n start: function() {\r\n if (animationClosed) return;\r\n\r\n runnerHost = {\r\n end: endFn,\r\n cancel: cancelFn,\r\n resume: null, //this will be set during the start() phase\r\n pause: null\r\n };\r\n\r\n runner = new $$AnimateRunner(runnerHost);\r\n\r\n waitUntilQuiet(start);\r\n\r\n // we don't have access to pause/resume the animation\r\n // since it hasn't run yet. AnimateRunner will therefore\r\n // set noop functions for resume and pause and they will\r\n // later be overridden once the animation is triggered\r\n return runner;\r\n }\r\n };\r\n\r\n function endFn() {\r\n close();\r\n }\r\n\r\n function cancelFn() {\r\n close(true);\r\n }\r\n\r\n function close(rejected) {\r\n // if the promise has been called already then we shouldn't close\r\n // the animation again\r\n if (animationClosed || (animationCompleted && animationPaused)) return;\r\n animationClosed = true;\r\n animationPaused = false;\r\n\r\n if (preparationClasses && !options.$$skipPreparationClasses) {\r\n $$jqLite.removeClass(element, preparationClasses);\r\n }\r\n\r\n if (activeClasses) {\r\n $$jqLite.removeClass(element, activeClasses);\r\n }\r\n\r\n blockKeyframeAnimations(node, false);\r\n blockTransitions(node, false);\r\n\r\n forEach(temporaryStyles, function(entry) {\r\n // There is only one way to remove inline style properties entirely from elements.\r\n // By using `removeProperty` this works, but we need to convert camel-cased CSS\r\n // styles down to hyphenated values.\r\n node.style[entry[0]] = '';\r\n });\r\n\r\n applyAnimationClasses(element, options);\r\n applyAnimationStyles(element, options);\r\n\r\n if (Object.keys(restoreStyles).length) {\r\n forEach(restoreStyles, function(value, prop) {\r\n if (value) {\r\n node.style.setProperty(prop, value);\r\n } else {\r\n node.style.removeProperty(prop);\r\n }\r\n });\r\n }\r\n\r\n // the reason why we have this option is to allow a synchronous closing callback\r\n // that is fired as SOON as the animation ends (when the CSS is removed) or if\r\n // the animation never takes off at all. A good example is a leave animation since\r\n // the element must be removed just after the animation is over or else the element\r\n // will appear on screen for one animation frame causing an overbearing flicker.\r\n if (options.onDone) {\r\n options.onDone();\r\n }\r\n\r\n if (events && events.length) {\r\n // Remove the transitionend / animationend listener(s)\r\n element.off(events.join(' '), onAnimationProgress);\r\n }\r\n\r\n //Cancel the fallback closing timeout and remove the timer data\r\n var animationTimerData = element.data(ANIMATE_TIMER_KEY);\r\n if (animationTimerData) {\r\n $timeout.cancel(animationTimerData[0].timer);\r\n element.removeData(ANIMATE_TIMER_KEY);\r\n }\r\n\r\n // if the preparation function fails then the promise is not setup\r\n if (runner) {\r\n runner.complete(!rejected);\r\n }\r\n }\r\n\r\n function applyBlocking(duration) {\r\n if (flags.blockTransition) {\r\n blockTransitions(node, duration);\r\n }\r\n\r\n if (flags.blockKeyframeAnimation) {\r\n blockKeyframeAnimations(node, !!duration);\r\n }\r\n }\r\n\r\n function closeAndReturnNoopAnimator() {\r\n runner = new $$AnimateRunner({\r\n end: endFn,\r\n cancel: cancelFn\r\n });\r\n\r\n // should flush the cache animation\r\n waitUntilQuiet(noop);\r\n close();\r\n\r\n return {\r\n $$willAnimate: false,\r\n start: function() {\r\n return runner;\r\n },\r\n end: endFn\r\n };\r\n }\r\n\r\n function onAnimationProgress(event) {\r\n event.stopPropagation();\r\n var ev = event.originalEvent || event;\r\n\r\n if (ev.target !== node) {\r\n // Since TransitionEvent / AnimationEvent bubble up,\r\n // we have to ignore events by finished child animations\r\n return;\r\n }\r\n\r\n // we now always use `Date.now()` due to the recent changes with\r\n // event.timeStamp in Firefox, Webkit and Chrome (see #13494 for more info)\r\n var timeStamp = ev.$manualTimeStamp || Date.now();\r\n\r\n /* Firefox (or possibly just Gecko) likes to not round values up\r\n * when a ms measurement is used for the animation */\r\n var elapsedTime = parseFloat(ev.elapsedTime.toFixed(ELAPSED_TIME_MAX_DECIMAL_PLACES));\r\n\r\n /* $manualTimeStamp is a mocked timeStamp value which is set\r\n * within browserTrigger(). This is only here so that tests can\r\n * mock animations properly. Real events fallback to event.timeStamp,\r\n * or, if they don't, then a timeStamp is automatically created for them.\r\n * We're checking to see if the timeStamp surpasses the expected delay,\r\n * but we're using elapsedTime instead of the timeStamp on the 2nd\r\n * pre-condition since animationPauseds sometimes close off early */\r\n if (Math.max(timeStamp - startTime, 0) >= maxDelayTime && elapsedTime >= maxDuration) {\r\n // we set this flag to ensure that if the transition is paused then, when resumed,\r\n // the animation will automatically close itself since transitions cannot be paused.\r\n animationCompleted = true;\r\n close();\r\n }\r\n }\r\n\r\n function start() {\r\n if (animationClosed) return;\r\n if (!node.parentNode) {\r\n close();\r\n return;\r\n }\r\n\r\n // even though we only pause keyframe animations here the pause flag\r\n // will still happen when transitions are used. Only the transition will\r\n // not be paused since that is not possible. If the animation ends when\r\n // paused then it will not complete until unpaused or cancelled.\r\n var playPause = function(playAnimation) {\r\n if (!animationCompleted) {\r\n animationPaused = !playAnimation;\r\n if (timings.animationDuration) {\r\n var value = blockKeyframeAnimations(node, animationPaused);\r\n if (animationPaused) {\r\n temporaryStyles.push(value);\r\n } else {\r\n removeFromArray(temporaryStyles, value);\r\n }\r\n }\r\n } else if (animationPaused && playAnimation) {\r\n animationPaused = false;\r\n close();\r\n }\r\n };\r\n\r\n // checking the stagger duration prevents an accidentally cascade of the CSS delay style\r\n // being inherited from the parent. If the transition duration is zero then we can safely\r\n // rely that the delay value is an intentional stagger delay style.\r\n var maxStagger = itemIndex > 0\r\n && ((timings.transitionDuration && stagger.transitionDuration === 0) ||\r\n (timings.animationDuration && stagger.animationDuration === 0))\r\n && Math.max(stagger.animationDelay, stagger.transitionDelay);\r\n if (maxStagger) {\r\n $timeout(triggerAnimationStart,\r\n Math.floor(maxStagger * itemIndex * ONE_SECOND),\r\n false);\r\n } else {\r\n triggerAnimationStart();\r\n }\r\n\r\n // this will decorate the existing promise runner with pause/resume methods\r\n runnerHost.resume = function() {\r\n playPause(true);\r\n };\r\n\r\n runnerHost.pause = function() {\r\n playPause(false);\r\n };\r\n\r\n function triggerAnimationStart() {\r\n // just incase a stagger animation kicks in when the animation\r\n // itself was cancelled entirely\r\n if (animationClosed) return;\r\n\r\n applyBlocking(false);\r\n\r\n forEach(temporaryStyles, function(entry) {\r\n var key = entry[0];\r\n var value = entry[1];\r\n node.style[key] = value;\r\n });\r\n\r\n applyAnimationClasses(element, options);\r\n $$jqLite.addClass(element, activeClasses);\r\n\r\n if (flags.recalculateTimingStyles) {\r\n fullClassName = node.getAttribute('class') + ' ' + preparationClasses;\r\n cacheKey = $$animateCache.cacheKey(node, method, options.addClass, options.removeClass);\r\n\r\n timings = computeTimings(node, fullClassName, cacheKey, false);\r\n relativeDelay = timings.maxDelay;\r\n maxDelay = Math.max(relativeDelay, 0);\r\n maxDuration = timings.maxDuration;\r\n\r\n if (maxDuration === 0) {\r\n close();\r\n return;\r\n }\r\n\r\n flags.hasTransitions = timings.transitionDuration > 0;\r\n flags.hasAnimations = timings.animationDuration > 0;\r\n }\r\n\r\n if (flags.applyAnimationDelay) {\r\n relativeDelay = typeof options.delay !== 'boolean' && truthyTimingValue(options.delay)\r\n ? parseFloat(options.delay)\r\n : relativeDelay;\r\n\r\n maxDelay = Math.max(relativeDelay, 0);\r\n timings.animationDelay = relativeDelay;\r\n delayStyle = getCssDelayStyle(relativeDelay, true);\r\n temporaryStyles.push(delayStyle);\r\n node.style[delayStyle[0]] = delayStyle[1];\r\n }\r\n\r\n maxDelayTime = maxDelay * ONE_SECOND;\r\n maxDurationTime = maxDuration * ONE_SECOND;\r\n\r\n if (options.easing) {\r\n var easeProp, easeVal = options.easing;\r\n if (flags.hasTransitions) {\r\n easeProp = TRANSITION_PROP + TIMING_KEY;\r\n temporaryStyles.push([easeProp, easeVal]);\r\n node.style[easeProp] = easeVal;\r\n }\r\n if (flags.hasAnimations) {\r\n easeProp = ANIMATION_PROP + TIMING_KEY;\r\n temporaryStyles.push([easeProp, easeVal]);\r\n node.style[easeProp] = easeVal;\r\n }\r\n }\r\n\r\n if (timings.transitionDuration) {\r\n events.push(TRANSITIONEND_EVENT);\r\n }\r\n\r\n if (timings.animationDuration) {\r\n events.push(ANIMATIONEND_EVENT);\r\n }\r\n\r\n startTime = Date.now();\r\n var timerTime = maxDelayTime + CLOSING_TIME_BUFFER * maxDurationTime;\r\n var endTime = startTime + timerTime;\r\n\r\n var animationsData = element.data(ANIMATE_TIMER_KEY) || [];\r\n var setupFallbackTimer = true;\r\n if (animationsData.length) {\r\n var currentTimerData = animationsData[0];\r\n setupFallbackTimer = endTime > currentTimerData.expectedEndTime;\r\n if (setupFallbackTimer) {\r\n $timeout.cancel(currentTimerData.timer);\r\n } else {\r\n animationsData.push(close);\r\n }\r\n }\r\n\r\n if (setupFallbackTimer) {\r\n var timer = $timeout(onAnimationExpired, timerTime, false);\r\n animationsData[0] = {\r\n timer: timer,\r\n expectedEndTime: endTime\r\n };\r\n animationsData.push(close);\r\n element.data(ANIMATE_TIMER_KEY, animationsData);\r\n }\r\n\r\n if (events.length) {\r\n element.on(events.join(' '), onAnimationProgress);\r\n }\r\n\r\n if (options.to) {\r\n if (options.cleanupStyles) {\r\n registerRestorableStyles(restoreStyles, node, Object.keys(options.to));\r\n }\r\n applyAnimationToStyles(element, options);\r\n }\r\n }\r\n\r\n function onAnimationExpired() {\r\n var animationsData = element.data(ANIMATE_TIMER_KEY);\r\n\r\n // this will be false in the event that the element was\r\n // removed from the DOM (via a leave animation or something\r\n // similar)\r\n if (animationsData) {\r\n for (var i = 1; i < animationsData.length; i++) {\r\n animationsData[i]();\r\n }\r\n element.removeData(ANIMATE_TIMER_KEY);\r\n }\r\n }\r\n }\r\n };\r\n }];\r\n}];\r\n\r\nvar $$AnimateCssDriverProvider = ['$$animationProvider', /** @this */ function($$animationProvider) {\r\n $$animationProvider.drivers.push('$$animateCssDriver');\r\n\r\n var NG_ANIMATE_SHIM_CLASS_NAME = 'ng-animate-shim';\r\n var NG_ANIMATE_ANCHOR_CLASS_NAME = 'ng-anchor';\r\n\r\n var NG_OUT_ANCHOR_CLASS_NAME = 'ng-anchor-out';\r\n var NG_IN_ANCHOR_CLASS_NAME = 'ng-anchor-in';\r\n\r\n function isDocumentFragment(node) {\r\n return node.parentNode && node.parentNode.nodeType === 11;\r\n }\r\n\r\n this.$get = ['$animateCss', '$rootScope', '$$AnimateRunner', '$rootElement', '$sniffer', '$$jqLite', '$document',\r\n function($animateCss, $rootScope, $$AnimateRunner, $rootElement, $sniffer, $$jqLite, $document) {\r\n\r\n // only browsers that support these properties can render animations\r\n if (!$sniffer.animations && !$sniffer.transitions) return noop;\r\n\r\n var bodyNode = $document[0].body;\r\n var rootNode = getDomNode($rootElement);\r\n\r\n var rootBodyElement = jqLite(\r\n // this is to avoid using something that exists outside of the body\r\n // we also special case the doc fragment case because our unit test code\r\n // appends the $rootElement to the body after the app has been bootstrapped\r\n isDocumentFragment(rootNode) || bodyNode.contains(rootNode) ? rootNode : bodyNode\r\n );\r\n\r\n return function initDriverFn(animationDetails) {\r\n return animationDetails.from && animationDetails.to\r\n ? prepareFromToAnchorAnimation(animationDetails.from,\r\n animationDetails.to,\r\n animationDetails.classes,\r\n animationDetails.anchors)\r\n : prepareRegularAnimation(animationDetails);\r\n };\r\n\r\n function filterCssClasses(classes) {\r\n //remove all the `ng-` stuff\r\n return classes.replace(/\\bng-\\S+\\b/g, '');\r\n }\r\n\r\n function getUniqueValues(a, b) {\r\n if (isString(a)) a = a.split(' ');\r\n if (isString(b)) b = b.split(' ');\r\n return a.filter(function(val) {\r\n return b.indexOf(val) === -1;\r\n }).join(' ');\r\n }\r\n\r\n function prepareAnchoredAnimation(classes, outAnchor, inAnchor) {\r\n var clone = jqLite(getDomNode(outAnchor).cloneNode(true));\r\n var startingClasses = filterCssClasses(getClassVal(clone));\r\n\r\n outAnchor.addClass(NG_ANIMATE_SHIM_CLASS_NAME);\r\n inAnchor.addClass(NG_ANIMATE_SHIM_CLASS_NAME);\r\n\r\n clone.addClass(NG_ANIMATE_ANCHOR_CLASS_NAME);\r\n\r\n rootBodyElement.append(clone);\r\n\r\n var animatorIn, animatorOut = prepareOutAnimation();\r\n\r\n // the user may not end up using the `out` animation and\r\n // only making use of the `in` animation or vice-versa.\r\n // In either case we should allow this and not assume the\r\n // animation is over unless both animations are not used.\r\n if (!animatorOut) {\r\n animatorIn = prepareInAnimation();\r\n if (!animatorIn) {\r\n return end();\r\n }\r\n }\r\n\r\n var startingAnimator = animatorOut || animatorIn;\r\n\r\n return {\r\n start: function() {\r\n var runner;\r\n\r\n var currentAnimation = startingAnimator.start();\r\n currentAnimation.done(function() {\r\n currentAnimation = null;\r\n if (!animatorIn) {\r\n animatorIn = prepareInAnimation();\r\n if (animatorIn) {\r\n currentAnimation = animatorIn.start();\r\n currentAnimation.done(function() {\r\n currentAnimation = null;\r\n end();\r\n runner.complete();\r\n });\r\n return currentAnimation;\r\n }\r\n }\r\n // in the event that there is no `in` animation\r\n end();\r\n runner.complete();\r\n });\r\n\r\n runner = new $$AnimateRunner({\r\n end: endFn,\r\n cancel: endFn\r\n });\r\n\r\n return runner;\r\n\r\n function endFn() {\r\n if (currentAnimation) {\r\n currentAnimation.end();\r\n }\r\n }\r\n }\r\n };\r\n\r\n function calculateAnchorStyles(anchor) {\r\n var styles = {};\r\n\r\n var coords = getDomNode(anchor).getBoundingClientRect();\r\n\r\n // we iterate directly since safari messes up and doesn't return\r\n // all the keys for the coords object when iterated\r\n forEach(['width','height','top','left'], function(key) {\r\n var value = coords[key];\r\n switch (key) {\r\n case 'top':\r\n value += bodyNode.scrollTop;\r\n break;\r\n case 'left':\r\n value += bodyNode.scrollLeft;\r\n break;\r\n }\r\n styles[key] = Math.floor(value) + 'px';\r\n });\r\n return styles;\r\n }\r\n\r\n function prepareOutAnimation() {\r\n var animator = $animateCss(clone, {\r\n addClass: NG_OUT_ANCHOR_CLASS_NAME,\r\n delay: true,\r\n from: calculateAnchorStyles(outAnchor)\r\n });\r\n\r\n // read the comment within `prepareRegularAnimation` to understand\r\n // why this check is necessary\r\n return animator.$$willAnimate ? animator : null;\r\n }\r\n\r\n function getClassVal(element) {\r\n return element.attr('class') || '';\r\n }\r\n\r\n function prepareInAnimation() {\r\n var endingClasses = filterCssClasses(getClassVal(inAnchor));\r\n var toAdd = getUniqueValues(endingClasses, startingClasses);\r\n var toRemove = getUniqueValues(startingClasses, endingClasses);\r\n\r\n var animator = $animateCss(clone, {\r\n to: calculateAnchorStyles(inAnchor),\r\n addClass: NG_IN_ANCHOR_CLASS_NAME + ' ' + toAdd,\r\n removeClass: NG_OUT_ANCHOR_CLASS_NAME + ' ' + toRemove,\r\n delay: true\r\n });\r\n\r\n // read the comment within `prepareRegularAnimation` to understand\r\n // why this check is necessary\r\n return animator.$$willAnimate ? animator : null;\r\n }\r\n\r\n function end() {\r\n clone.remove();\r\n outAnchor.removeClass(NG_ANIMATE_SHIM_CLASS_NAME);\r\n inAnchor.removeClass(NG_ANIMATE_SHIM_CLASS_NAME);\r\n }\r\n }\r\n\r\n function prepareFromToAnchorAnimation(from, to, classes, anchors) {\r\n var fromAnimation = prepareRegularAnimation(from, noop);\r\n var toAnimation = prepareRegularAnimation(to, noop);\r\n\r\n var anchorAnimations = [];\r\n forEach(anchors, function(anchor) {\r\n var outElement = anchor['out'];\r\n var inElement = anchor['in'];\r\n var animator = prepareAnchoredAnimation(classes, outElement, inElement);\r\n if (animator) {\r\n anchorAnimations.push(animator);\r\n }\r\n });\r\n\r\n // no point in doing anything when there are no elements to animate\r\n if (!fromAnimation && !toAnimation && anchorAnimations.length === 0) return;\r\n\r\n return {\r\n start: function() {\r\n var animationRunners = [];\r\n\r\n if (fromAnimation) {\r\n animationRunners.push(fromAnimation.start());\r\n }\r\n\r\n if (toAnimation) {\r\n animationRunners.push(toAnimation.start());\r\n }\r\n\r\n forEach(anchorAnimations, function(animation) {\r\n animationRunners.push(animation.start());\r\n });\r\n\r\n var runner = new $$AnimateRunner({\r\n end: endFn,\r\n cancel: endFn // CSS-driven animations cannot be cancelled, only ended\r\n });\r\n\r\n $$AnimateRunner.all(animationRunners, function(status) {\r\n runner.complete(status);\r\n });\r\n\r\n return runner;\r\n\r\n function endFn() {\r\n forEach(animationRunners, function(runner) {\r\n runner.end();\r\n });\r\n }\r\n }\r\n };\r\n }\r\n\r\n function prepareRegularAnimation(animationDetails) {\r\n var element = animationDetails.element;\r\n var options = animationDetails.options || {};\r\n\r\n if (animationDetails.structural) {\r\n options.event = animationDetails.event;\r\n options.structural = true;\r\n options.applyClassesEarly = true;\r\n\r\n // we special case the leave animation since we want to ensure that\r\n // the element is removed as soon as the animation is over. Otherwise\r\n // a flicker might appear or the element may not be removed at all\r\n if (animationDetails.event === 'leave') {\r\n options.onDone = options.domOperation;\r\n }\r\n }\r\n\r\n // We assign the preparationClasses as the actual animation event since\r\n // the internals of $animateCss will just suffix the event token values\r\n // with `-active` to trigger the animation.\r\n if (options.preparationClasses) {\r\n options.event = concatWithSpace(options.event, options.preparationClasses);\r\n }\r\n\r\n var animator = $animateCss(element, options);\r\n\r\n // the driver lookup code inside of $$animation attempts to spawn a\r\n // driver one by one until a driver returns a.$$willAnimate animator object.\r\n // $animateCss will always return an object, however, it will pass in\r\n // a flag as a hint as to whether an animation was detected or not\r\n return animator.$$willAnimate ? animator : null;\r\n }\r\n }];\r\n}];\r\n\r\n// TODO(matsko): use caching here to speed things up for detection\r\n// TODO(matsko): add documentation\r\n// by the time...\r\n\r\nvar $$AnimateJsProvider = ['$animateProvider', /** @this */ function($animateProvider) {\r\n this.$get = ['$injector', '$$AnimateRunner', '$$jqLite',\r\n function($injector, $$AnimateRunner, $$jqLite) {\r\n\r\n var applyAnimationClasses = applyAnimationClassesFactory($$jqLite);\r\n // $animateJs(element, 'enter');\r\n return function(element, event, classes, options) {\r\n var animationClosed = false;\r\n\r\n // the `classes` argument is optional and if it is not used\r\n // then the classes will be resolved from the element's className\r\n // property as well as options.addClass/options.removeClass.\r\n if (arguments.length === 3 && isObject(classes)) {\r\n options = classes;\r\n classes = null;\r\n }\r\n\r\n options = prepareAnimationOptions(options);\r\n if (!classes) {\r\n classes = element.attr('class') || '';\r\n if (options.addClass) {\r\n classes += ' ' + options.addClass;\r\n }\r\n if (options.removeClass) {\r\n classes += ' ' + options.removeClass;\r\n }\r\n }\r\n\r\n var classesToAdd = options.addClass;\r\n var classesToRemove = options.removeClass;\r\n\r\n // the lookupAnimations function returns a series of animation objects that are\r\n // matched up with one or more of the CSS classes. These animation objects are\r\n // defined via the module.animation factory function. If nothing is detected then\r\n // we don't return anything which then makes $animation query the next driver.\r\n var animations = lookupAnimations(classes);\r\n var before, after;\r\n if (animations.length) {\r\n var afterFn, beforeFn;\r\n if (event === 'leave') {\r\n beforeFn = 'leave';\r\n afterFn = 'afterLeave'; // TODO(matsko): get rid of this\r\n } else {\r\n beforeFn = 'before' + event.charAt(0).toUpperCase() + event.substr(1);\r\n afterFn = event;\r\n }\r\n\r\n if (event !== 'enter' && event !== 'move') {\r\n before = packageAnimations(element, event, options, animations, beforeFn);\r\n }\r\n after = packageAnimations(element, event, options, animations, afterFn);\r\n }\r\n\r\n // no matching animations\r\n if (!before && !after) return;\r\n\r\n function applyOptions() {\r\n options.domOperation();\r\n applyAnimationClasses(element, options);\r\n }\r\n\r\n function close() {\r\n animationClosed = true;\r\n applyOptions();\r\n applyAnimationStyles(element, options);\r\n }\r\n\r\n var runner;\r\n\r\n return {\r\n $$willAnimate: true,\r\n end: function() {\r\n if (runner) {\r\n runner.end();\r\n } else {\r\n close();\r\n runner = new $$AnimateRunner();\r\n runner.complete(true);\r\n }\r\n return runner;\r\n },\r\n start: function() {\r\n if (runner) {\r\n return runner;\r\n }\r\n\r\n runner = new $$AnimateRunner();\r\n var closeActiveAnimations;\r\n var chain = [];\r\n\r\n if (before) {\r\n chain.push(function(fn) {\r\n closeActiveAnimations = before(fn);\r\n });\r\n }\r\n\r\n if (chain.length) {\r\n chain.push(function(fn) {\r\n applyOptions();\r\n fn(true);\r\n });\r\n } else {\r\n applyOptions();\r\n }\r\n\r\n if (after) {\r\n chain.push(function(fn) {\r\n closeActiveAnimations = after(fn);\r\n });\r\n }\r\n\r\n runner.setHost({\r\n end: function() {\r\n endAnimations();\r\n },\r\n cancel: function() {\r\n endAnimations(true);\r\n }\r\n });\r\n\r\n $$AnimateRunner.chain(chain, onComplete);\r\n return runner;\r\n\r\n function onComplete(success) {\r\n close(success);\r\n runner.complete(success);\r\n }\r\n\r\n function endAnimations(cancelled) {\r\n if (!animationClosed) {\r\n (closeActiveAnimations || noop)(cancelled);\r\n onComplete(cancelled);\r\n }\r\n }\r\n }\r\n };\r\n\r\n function executeAnimationFn(fn, element, event, options, onDone) {\r\n var args;\r\n switch (event) {\r\n case 'animate':\r\n args = [element, options.from, options.to, onDone];\r\n break;\r\n\r\n case 'setClass':\r\n args = [element, classesToAdd, classesToRemove, onDone];\r\n break;\r\n\r\n case 'addClass':\r\n args = [element, classesToAdd, onDone];\r\n break;\r\n\r\n case 'removeClass':\r\n args = [element, classesToRemove, onDone];\r\n break;\r\n\r\n default:\r\n args = [element, onDone];\r\n break;\r\n }\r\n\r\n args.push(options);\r\n\r\n var value = fn.apply(fn, args);\r\n if (value) {\r\n if (isFunction(value.start)) {\r\n value = value.start();\r\n }\r\n\r\n if (value instanceof $$AnimateRunner) {\r\n value.done(onDone);\r\n } else if (isFunction(value)) {\r\n // optional onEnd / onCancel callback\r\n return value;\r\n }\r\n }\r\n\r\n return noop;\r\n }\r\n\r\n function groupEventedAnimations(element, event, options, animations, fnName) {\r\n var operations = [];\r\n forEach(animations, function(ani) {\r\n var animation = ani[fnName];\r\n if (!animation) return;\r\n\r\n // note that all of these animations will run in parallel\r\n operations.push(function() {\r\n var runner;\r\n var endProgressCb;\r\n\r\n var resolved = false;\r\n var onAnimationComplete = function(rejected) {\r\n if (!resolved) {\r\n resolved = true;\r\n (endProgressCb || noop)(rejected);\r\n runner.complete(!rejected);\r\n }\r\n };\r\n\r\n runner = new $$AnimateRunner({\r\n end: function() {\r\n onAnimationComplete();\r\n },\r\n cancel: function() {\r\n onAnimationComplete(true);\r\n }\r\n });\r\n\r\n endProgressCb = executeAnimationFn(animation, element, event, options, function(result) {\r\n var cancelled = result === false;\r\n onAnimationComplete(cancelled);\r\n });\r\n\r\n return runner;\r\n });\r\n });\r\n\r\n return operations;\r\n }\r\n\r\n function packageAnimations(element, event, options, animations, fnName) {\r\n var operations = groupEventedAnimations(element, event, options, animations, fnName);\r\n if (operations.length === 0) {\r\n var a, b;\r\n if (fnName === 'beforeSetClass') {\r\n a = groupEventedAnimations(element, 'removeClass', options, animations, 'beforeRemoveClass');\r\n b = groupEventedAnimations(element, 'addClass', options, animations, 'beforeAddClass');\r\n } else if (fnName === 'setClass') {\r\n a = groupEventedAnimations(element, 'removeClass', options, animations, 'removeClass');\r\n b = groupEventedAnimations(element, 'addClass', options, animations, 'addClass');\r\n }\r\n\r\n if (a) {\r\n operations = operations.concat(a);\r\n }\r\n if (b) {\r\n operations = operations.concat(b);\r\n }\r\n }\r\n\r\n if (operations.length === 0) return;\r\n\r\n // TODO(matsko): add documentation\r\n return function startAnimation(callback) {\r\n var runners = [];\r\n if (operations.length) {\r\n forEach(operations, function(animateFn) {\r\n runners.push(animateFn());\r\n });\r\n }\r\n\r\n if (runners.length) {\r\n $$AnimateRunner.all(runners, callback);\r\n } else {\r\n callback();\r\n }\r\n\r\n return function endFn(reject) {\r\n forEach(runners, function(runner) {\r\n if (reject) {\r\n runner.cancel();\r\n } else {\r\n runner.end();\r\n }\r\n });\r\n };\r\n };\r\n }\r\n };\r\n\r\n function lookupAnimations(classes) {\r\n classes = isArray(classes) ? classes : classes.split(' ');\r\n var matches = [], flagMap = {};\r\n for (var i = 0; i < classes.length; i++) {\r\n var klass = classes[i],\r\n animationFactory = $animateProvider.$$registeredAnimations[klass];\r\n if (animationFactory && !flagMap[klass]) {\r\n matches.push($injector.get(animationFactory));\r\n flagMap[klass] = true;\r\n }\r\n }\r\n return matches;\r\n }\r\n }];\r\n}];\r\n\r\nvar $$AnimateJsDriverProvider = ['$$animationProvider', /** @this */ function($$animationProvider) {\r\n $$animationProvider.drivers.push('$$animateJsDriver');\r\n this.$get = ['$$animateJs', '$$AnimateRunner', function($$animateJs, $$AnimateRunner) {\r\n return function initDriverFn(animationDetails) {\r\n if (animationDetails.from && animationDetails.to) {\r\n var fromAnimation = prepareAnimation(animationDetails.from);\r\n var toAnimation = prepareAnimation(animationDetails.to);\r\n if (!fromAnimation && !toAnimation) return;\r\n\r\n return {\r\n start: function() {\r\n var animationRunners = [];\r\n\r\n if (fromAnimation) {\r\n animationRunners.push(fromAnimation.start());\r\n }\r\n\r\n if (toAnimation) {\r\n animationRunners.push(toAnimation.start());\r\n }\r\n\r\n $$AnimateRunner.all(animationRunners, done);\r\n\r\n var runner = new $$AnimateRunner({\r\n end: endFnFactory(),\r\n cancel: endFnFactory()\r\n });\r\n\r\n return runner;\r\n\r\n function endFnFactory() {\r\n return function() {\r\n forEach(animationRunners, function(runner) {\r\n // at this point we cannot cancel animations for groups just yet. 1.5+\r\n runner.end();\r\n });\r\n };\r\n }\r\n\r\n function done(status) {\r\n runner.complete(status);\r\n }\r\n }\r\n };\r\n } else {\r\n return prepareAnimation(animationDetails);\r\n }\r\n };\r\n\r\n function prepareAnimation(animationDetails) {\r\n // TODO(matsko): make sure to check for grouped animations and delegate down to normal animations\r\n var element = animationDetails.element;\r\n var event = animationDetails.event;\r\n var options = animationDetails.options;\r\n var classes = animationDetails.classes;\r\n return $$animateJs(element, event, classes, options);\r\n }\r\n }];\r\n}];\r\n\r\nvar NG_ANIMATE_ATTR_NAME = 'data-ng-animate';\r\nvar NG_ANIMATE_PIN_DATA = '$ngAnimatePin';\r\nvar $$AnimateQueueProvider = ['$animateProvider', /** @this */ function($animateProvider) {\r\n var PRE_DIGEST_STATE = 1;\r\n var RUNNING_STATE = 2;\r\n var ONE_SPACE = ' ';\r\n\r\n var rules = this.rules = {\r\n skip: [],\r\n cancel: [],\r\n join: []\r\n };\r\n\r\n function getEventData(options) {\r\n return {\r\n addClass: options.addClass,\r\n removeClass: options.removeClass,\r\n from: options.from,\r\n to: options.to\r\n };\r\n }\r\n\r\n function makeTruthyCssClassMap(classString) {\r\n if (!classString) {\r\n return null;\r\n }\r\n\r\n var keys = classString.split(ONE_SPACE);\r\n var map = Object.create(null);\r\n\r\n forEach(keys, function(key) {\r\n map[key] = true;\r\n });\r\n return map;\r\n }\r\n\r\n function hasMatchingClasses(newClassString, currentClassString) {\r\n if (newClassString && currentClassString) {\r\n var currentClassMap = makeTruthyCssClassMap(currentClassString);\r\n return newClassString.split(ONE_SPACE).some(function(className) {\r\n return currentClassMap[className];\r\n });\r\n }\r\n }\r\n\r\n function isAllowed(ruleType, currentAnimation, previousAnimation) {\r\n return rules[ruleType].some(function(fn) {\r\n return fn(currentAnimation, previousAnimation);\r\n });\r\n }\r\n\r\n function hasAnimationClasses(animation, and) {\r\n var a = (animation.addClass || '').length > 0;\r\n var b = (animation.removeClass || '').length > 0;\r\n return and ? a && b : a || b;\r\n }\r\n\r\n rules.join.push(function(newAnimation, currentAnimation) {\r\n // if the new animation is class-based then we can just tack that on\r\n return !newAnimation.structural && hasAnimationClasses(newAnimation);\r\n });\r\n\r\n rules.skip.push(function(newAnimation, currentAnimation) {\r\n // there is no need to animate anything if no classes are being added and\r\n // there is no structural animation that will be triggered\r\n return !newAnimation.structural && !hasAnimationClasses(newAnimation);\r\n });\r\n\r\n rules.skip.push(function(newAnimation, currentAnimation) {\r\n // why should we trigger a new structural animation if the element will\r\n // be removed from the DOM anyway?\r\n return currentAnimation.event === 'leave' && newAnimation.structural;\r\n });\r\n\r\n rules.skip.push(function(newAnimation, currentAnimation) {\r\n // if there is an ongoing current animation then don't even bother running the class-based animation\r\n return currentAnimation.structural && currentAnimation.state === RUNNING_STATE && !newAnimation.structural;\r\n });\r\n\r\n rules.cancel.push(function(newAnimation, currentAnimation) {\r\n // there can never be two structural animations running at the same time\r\n return currentAnimation.structural && newAnimation.structural;\r\n });\r\n\r\n rules.cancel.push(function(newAnimation, currentAnimation) {\r\n // if the previous animation is already running, but the new animation will\r\n // be triggered, but the new animation is structural\r\n return currentAnimation.state === RUNNING_STATE && newAnimation.structural;\r\n });\r\n\r\n rules.cancel.push(function(newAnimation, currentAnimation) {\r\n // cancel the animation if classes added / removed in both animation cancel each other out,\r\n // but only if the current animation isn't structural\r\n\r\n if (currentAnimation.structural) return false;\r\n\r\n var nA = newAnimation.addClass;\r\n var nR = newAnimation.removeClass;\r\n var cA = currentAnimation.addClass;\r\n var cR = currentAnimation.removeClass;\r\n\r\n // early detection to save the global CPU shortage :)\r\n if ((isUndefined(nA) && isUndefined(nR)) || (isUndefined(cA) && isUndefined(cR))) {\r\n return false;\r\n }\r\n\r\n return hasMatchingClasses(nA, cR) || hasMatchingClasses(nR, cA);\r\n });\r\n\r\n this.$get = ['$$rAF', '$rootScope', '$rootElement', '$document', '$$Map',\r\n '$$animation', '$$AnimateRunner', '$templateRequest', '$$jqLite', '$$forceReflow',\r\n '$$isDocumentHidden',\r\n function($$rAF, $rootScope, $rootElement, $document, $$Map,\r\n $$animation, $$AnimateRunner, $templateRequest, $$jqLite, $$forceReflow,\r\n $$isDocumentHidden) {\r\n\r\n var activeAnimationsLookup = new $$Map();\r\n var disabledElementsLookup = new $$Map();\r\n var animationsEnabled = null;\r\n\r\n function removeFromDisabledElementsLookup(evt) {\r\n disabledElementsLookup.delete(evt.target);\r\n }\r\n\r\n function postDigestTaskFactory() {\r\n var postDigestCalled = false;\r\n return function(fn) {\r\n // we only issue a call to postDigest before\r\n // it has first passed. This prevents any callbacks\r\n // from not firing once the animation has completed\r\n // since it will be out of the digest cycle.\r\n if (postDigestCalled) {\r\n fn();\r\n } else {\r\n $rootScope.$$postDigest(function() {\r\n postDigestCalled = true;\r\n fn();\r\n });\r\n }\r\n };\r\n }\r\n\r\n // Wait until all directive and route-related templates are downloaded and\r\n // compiled. The $templateRequest.totalPendingRequests variable keeps track of\r\n // all of the remote templates being currently downloaded. If there are no\r\n // templates currently downloading then the watcher will still fire anyway.\r\n var deregisterWatch = $rootScope.$watch(\r\n function() { return $templateRequest.totalPendingRequests === 0; },\r\n function(isEmpty) {\r\n if (!isEmpty) return;\r\n deregisterWatch();\r\n\r\n // Now that all templates have been downloaded, $animate will wait until\r\n // the post digest queue is empty before enabling animations. By having two\r\n // calls to $postDigest calls we can ensure that the flag is enabled at the\r\n // very end of the post digest queue. Since all of the animations in $animate\r\n // use $postDigest, it's important that the code below executes at the end.\r\n // This basically means that the page is fully downloaded and compiled before\r\n // any animations are triggered.\r\n $rootScope.$$postDigest(function() {\r\n $rootScope.$$postDigest(function() {\r\n // we check for null directly in the event that the application already called\r\n // .enabled() with whatever arguments that it provided it with\r\n if (animationsEnabled === null) {\r\n animationsEnabled = true;\r\n }\r\n });\r\n });\r\n }\r\n );\r\n\r\n var callbackRegistry = Object.create(null);\r\n\r\n // remember that the `customFilter`/`classNameFilter` are set during the\r\n // provider/config stage therefore we can optimize here and setup helper functions\r\n var customFilter = $animateProvider.customFilter();\r\n var classNameFilter = $animateProvider.classNameFilter();\r\n var returnTrue = function() { return true; };\r\n\r\n var isAnimatableByFilter = customFilter || returnTrue;\r\n var isAnimatableClassName = !classNameFilter ? returnTrue : function(node, options) {\r\n var className = [node.getAttribute('class'), options.addClass, options.removeClass].join(' ');\r\n return classNameFilter.test(className);\r\n };\r\n\r\n var applyAnimationClasses = applyAnimationClassesFactory($$jqLite);\r\n\r\n function normalizeAnimationDetails(element, animation) {\r\n return mergeAnimationDetails(element, animation, {});\r\n }\r\n\r\n // IE9-11 has no method \"contains\" in SVG element and in Node.prototype. Bug #10259.\r\n var contains = window.Node.prototype.contains || /** @this */ function(arg) {\r\n // eslint-disable-next-line no-bitwise\r\n return this === arg || !!(this.compareDocumentPosition(arg) & 16);\r\n };\r\n\r\n function findCallbacks(targetParentNode, targetNode, event) {\r\n var matches = [];\r\n var entries = callbackRegistry[event];\r\n if (entries) {\r\n forEach(entries, function(entry) {\r\n if (contains.call(entry.node, targetNode)) {\r\n matches.push(entry.callback);\r\n } else if (event === 'leave' && contains.call(entry.node, targetParentNode)) {\r\n matches.push(entry.callback);\r\n }\r\n });\r\n }\r\n\r\n return matches;\r\n }\r\n\r\n function filterFromRegistry(list, matchContainer, matchCallback) {\r\n var containerNode = extractElementNode(matchContainer);\r\n return list.filter(function(entry) {\r\n var isMatch = entry.node === containerNode &&\r\n (!matchCallback || entry.callback === matchCallback);\r\n return !isMatch;\r\n });\r\n }\r\n\r\n function cleanupEventListeners(phase, node) {\r\n if (phase === 'close' && !node.parentNode) {\r\n // If the element is not attached to a parentNode, it has been removed by\r\n // the domOperation, and we can safely remove the event callbacks\r\n $animate.off(node);\r\n }\r\n }\r\n\r\n var $animate = {\r\n on: function(event, container, callback) {\r\n var node = extractElementNode(container);\r\n callbackRegistry[event] = callbackRegistry[event] || [];\r\n callbackRegistry[event].push({\r\n node: node,\r\n callback: callback\r\n });\r\n\r\n // Remove the callback when the element is removed from the DOM\r\n jqLite(container).on('$destroy', function() {\r\n var animationDetails = activeAnimationsLookup.get(node);\r\n\r\n if (!animationDetails) {\r\n // If there's an animation ongoing, the callback calling code will remove\r\n // the event listeners. If we'd remove here, the callbacks would be removed\r\n // before the animation ends\r\n $animate.off(event, container, callback);\r\n }\r\n });\r\n },\r\n\r\n off: function(event, container, callback) {\r\n if (arguments.length === 1 && !isString(arguments[0])) {\r\n container = arguments[0];\r\n for (var eventType in callbackRegistry) {\r\n callbackRegistry[eventType] = filterFromRegistry(callbackRegistry[eventType], container);\r\n }\r\n\r\n return;\r\n }\r\n\r\n var entries = callbackRegistry[event];\r\n if (!entries) return;\r\n\r\n callbackRegistry[event] = arguments.length === 1\r\n ? null\r\n : filterFromRegistry(entries, container, callback);\r\n },\r\n\r\n pin: function(element, parentElement) {\r\n assertArg(isElement(element), 'element', 'not an element');\r\n assertArg(isElement(parentElement), 'parentElement', 'not an element');\r\n element.data(NG_ANIMATE_PIN_DATA, parentElement);\r\n },\r\n\r\n push: function(element, event, options, domOperation) {\r\n options = options || {};\r\n options.domOperation = domOperation;\r\n return queueAnimation(element, event, options);\r\n },\r\n\r\n // this method has four signatures:\r\n // () - global getter\r\n // (bool) - global setter\r\n // (element) - element getter\r\n // (element, bool) - element setter\r\n enabled: function(element, bool) {\r\n var argCount = arguments.length;\r\n\r\n if (argCount === 0) {\r\n // () - Global getter\r\n bool = !!animationsEnabled;\r\n } else {\r\n var hasElement = isElement(element);\r\n\r\n if (!hasElement) {\r\n // (bool) - Global setter\r\n bool = animationsEnabled = !!element;\r\n } else {\r\n var node = getDomNode(element);\r\n\r\n if (argCount === 1) {\r\n // (element) - Element getter\r\n bool = !disabledElementsLookup.get(node);\r\n } else {\r\n // (element, bool) - Element setter\r\n if (!disabledElementsLookup.has(node)) {\r\n // The element is added to the map for the first time.\r\n // Create a listener to remove it on `$destroy` (to avoid memory leak).\r\n jqLite(element).on('$destroy', removeFromDisabledElementsLookup);\r\n }\r\n disabledElementsLookup.set(node, !bool);\r\n }\r\n }\r\n }\r\n\r\n return bool;\r\n }\r\n };\r\n\r\n return $animate;\r\n\r\n function queueAnimation(originalElement, event, initialOptions) {\r\n // we always make a copy of the options since\r\n // there should never be any side effects on\r\n // the input data when running `$animateCss`.\r\n var options = copy(initialOptions);\r\n\r\n var element = stripCommentsFromElement(originalElement);\r\n var node = getDomNode(element);\r\n var parentNode = node && node.parentNode;\r\n\r\n options = prepareAnimationOptions(options);\r\n\r\n // we create a fake runner with a working promise.\r\n // These methods will become available after the digest has passed\r\n var runner = new $$AnimateRunner();\r\n\r\n // this is used to trigger callbacks in postDigest mode\r\n var runInNextPostDigestOrNow = postDigestTaskFactory();\r\n\r\n if (isArray(options.addClass)) {\r\n options.addClass = options.addClass.join(' ');\r\n }\r\n\r\n if (options.addClass && !isString(options.addClass)) {\r\n options.addClass = null;\r\n }\r\n\r\n if (isArray(options.removeClass)) {\r\n options.removeClass = options.removeClass.join(' ');\r\n }\r\n\r\n if (options.removeClass && !isString(options.removeClass)) {\r\n options.removeClass = null;\r\n }\r\n\r\n if (options.from && !isObject(options.from)) {\r\n options.from = null;\r\n }\r\n\r\n if (options.to && !isObject(options.to)) {\r\n options.to = null;\r\n }\r\n\r\n // If animations are hard-disabled for the whole application there is no need to continue.\r\n // There are also situations where a directive issues an animation for a jqLite wrapper that\r\n // contains only comment nodes. In this case, there is no way we can perform an animation.\r\n if (!animationsEnabled ||\r\n !node ||\r\n !isAnimatableByFilter(node, event, initialOptions) ||\r\n !isAnimatableClassName(node, options)) {\r\n close();\r\n return runner;\r\n }\r\n\r\n var isStructural = ['enter', 'move', 'leave'].indexOf(event) >= 0;\r\n\r\n var documentHidden = $$isDocumentHidden();\r\n\r\n // This is a hard disable of all animations the element itself, therefore there is no need to\r\n // continue further past this point if not enabled\r\n // Animations are also disabled if the document is currently hidden (page is not visible\r\n // to the user), because browsers slow down or do not flush calls to requestAnimationFrame\r\n var skipAnimations = documentHidden || disabledElementsLookup.get(node);\r\n var existingAnimation = (!skipAnimations && activeAnimationsLookup.get(node)) || {};\r\n var hasExistingAnimation = !!existingAnimation.state;\r\n\r\n // there is no point in traversing the same collection of parent ancestors if a followup\r\n // animation will be run on the same element that already did all that checking work\r\n if (!skipAnimations && (!hasExistingAnimation || existingAnimation.state !== PRE_DIGEST_STATE)) {\r\n skipAnimations = !areAnimationsAllowed(node, parentNode, event);\r\n }\r\n\r\n if (skipAnimations) {\r\n // Callbacks should fire even if the document is hidden (regression fix for issue #14120)\r\n if (documentHidden) notifyProgress(runner, event, 'start', getEventData(options));\r\n close();\r\n if (documentHidden) notifyProgress(runner, event, 'close', getEventData(options));\r\n return runner;\r\n }\r\n\r\n if (isStructural) {\r\n closeChildAnimations(node);\r\n }\r\n\r\n var newAnimation = {\r\n structural: isStructural,\r\n element: element,\r\n event: event,\r\n addClass: options.addClass,\r\n removeClass: options.removeClass,\r\n close: close,\r\n options: options,\r\n runner: runner\r\n };\r\n\r\n if (hasExistingAnimation) {\r\n var skipAnimationFlag = isAllowed('skip', newAnimation, existingAnimation);\r\n if (skipAnimationFlag) {\r\n if (existingAnimation.state === RUNNING_STATE) {\r\n close();\r\n return runner;\r\n } else {\r\n mergeAnimationDetails(element, existingAnimation, newAnimation);\r\n return existingAnimation.runner;\r\n }\r\n }\r\n var cancelAnimationFlag = isAllowed('cancel', newAnimation, existingAnimation);\r\n if (cancelAnimationFlag) {\r\n if (existingAnimation.state === RUNNING_STATE) {\r\n // this will end the animation right away and it is safe\r\n // to do so since the animation is already running and the\r\n // runner callback code will run in async\r\n existingAnimation.runner.end();\r\n } else if (existingAnimation.structural) {\r\n // this means that the animation is queued into a digest, but\r\n // hasn't started yet. Therefore it is safe to run the close\r\n // method which will call the runner methods in async.\r\n existingAnimation.close();\r\n } else {\r\n // this will merge the new animation options into existing animation options\r\n mergeAnimationDetails(element, existingAnimation, newAnimation);\r\n\r\n return existingAnimation.runner;\r\n }\r\n } else {\r\n // a joined animation means that this animation will take over the existing one\r\n // so an example would involve a leave animation taking over an enter. Then when\r\n // the postDigest kicks in the enter will be ignored.\r\n var joinAnimationFlag = isAllowed('join', newAnimation, existingAnimation);\r\n if (joinAnimationFlag) {\r\n if (existingAnimation.state === RUNNING_STATE) {\r\n normalizeAnimationDetails(element, newAnimation);\r\n } else {\r\n applyGeneratedPreparationClasses($$jqLite, element, isStructural ? event : null, options);\r\n\r\n event = newAnimation.event = existingAnimation.event;\r\n options = mergeAnimationDetails(element, existingAnimation, newAnimation);\r\n\r\n //we return the same runner since only the option values of this animation will\r\n //be fed into the `existingAnimation`.\r\n return existingAnimation.runner;\r\n }\r\n }\r\n }\r\n } else {\r\n // normalization in this case means that it removes redundant CSS classes that\r\n // already exist (addClass) or do not exist (removeClass) on the element\r\n normalizeAnimationDetails(element, newAnimation);\r\n }\r\n\r\n // when the options are merged and cleaned up we may end up not having to do\r\n // an animation at all, therefore we should check this before issuing a post\r\n // digest callback. Structural animations will always run no matter what.\r\n var isValidAnimation = newAnimation.structural;\r\n if (!isValidAnimation) {\r\n // animate (from/to) can be quickly checked first, otherwise we check if any classes are present\r\n isValidAnimation = (newAnimation.event === 'animate' && Object.keys(newAnimation.options.to || {}).length > 0)\r\n || hasAnimationClasses(newAnimation);\r\n }\r\n\r\n if (!isValidAnimation) {\r\n close();\r\n clearElementAnimationState(node);\r\n return runner;\r\n }\r\n\r\n // the counter keeps track of cancelled animations\r\n var counter = (existingAnimation.counter || 0) + 1;\r\n newAnimation.counter = counter;\r\n\r\n markElementAnimationState(node, PRE_DIGEST_STATE, newAnimation);\r\n\r\n $rootScope.$$postDigest(function() {\r\n // It is possible that the DOM nodes inside `originalElement` have been replaced. This can\r\n // happen if the animated element is a transcluded clone and also has a `templateUrl`\r\n // directive on it. Therefore, we must recreate `element` in order to interact with the\r\n // actual DOM nodes.\r\n // Note: We still need to use the old `node` for certain things, such as looking up in\r\n // HashMaps where it was used as the key.\r\n\r\n element = stripCommentsFromElement(originalElement);\r\n\r\n var animationDetails = activeAnimationsLookup.get(node);\r\n var animationCancelled = !animationDetails;\r\n animationDetails = animationDetails || {};\r\n\r\n // if addClass/removeClass is called before something like enter then the\r\n // registered parent element may not be present. The code below will ensure\r\n // that a final value for parent element is obtained\r\n var parentElement = element.parent() || [];\r\n\r\n // animate/structural/class-based animations all have requirements. Otherwise there\r\n // is no point in performing an animation. The parent node must also be set.\r\n var isValidAnimation = parentElement.length > 0\r\n && (animationDetails.event === 'animate'\r\n || animationDetails.structural\r\n || hasAnimationClasses(animationDetails));\r\n\r\n // this means that the previous animation was cancelled\r\n // even if the follow-up animation is the same event\r\n if (animationCancelled || animationDetails.counter !== counter || !isValidAnimation) {\r\n // if another animation did not take over then we need\r\n // to make sure that the domOperation and options are\r\n // handled accordingly\r\n if (animationCancelled) {\r\n applyAnimationClasses(element, options);\r\n applyAnimationStyles(element, options);\r\n }\r\n\r\n // if the event changed from something like enter to leave then we do\r\n // it, otherwise if it's the same then the end result will be the same too\r\n if (animationCancelled || (isStructural && animationDetails.event !== event)) {\r\n options.domOperation();\r\n runner.end();\r\n }\r\n\r\n // in the event that the element animation was not cancelled or a follow-up animation\r\n // isn't allowed to animate from here then we need to clear the state of the element\r\n // so that any future animations won't read the expired animation data.\r\n if (!isValidAnimation) {\r\n clearElementAnimationState(node);\r\n }\r\n\r\n return;\r\n }\r\n\r\n // this combined multiple class to addClass / removeClass into a setClass event\r\n // so long as a structural event did not take over the animation\r\n event = !animationDetails.structural && hasAnimationClasses(animationDetails, true)\r\n ? 'setClass'\r\n : animationDetails.event;\r\n\r\n markElementAnimationState(node, RUNNING_STATE);\r\n var realRunner = $$animation(element, event, animationDetails.options);\r\n\r\n // this will update the runner's flow-control events based on\r\n // the `realRunner` object.\r\n runner.setHost(realRunner);\r\n notifyProgress(runner, event, 'start', getEventData(options));\r\n\r\n realRunner.done(function(status) {\r\n close(!status);\r\n var animationDetails = activeAnimationsLookup.get(node);\r\n if (animationDetails && animationDetails.counter === counter) {\r\n clearElementAnimationState(node);\r\n }\r\n notifyProgress(runner, event, 'close', getEventData(options));\r\n });\r\n });\r\n\r\n return runner;\r\n\r\n function notifyProgress(runner, event, phase, data) {\r\n runInNextPostDigestOrNow(function() {\r\n var callbacks = findCallbacks(parentNode, node, event);\r\n if (callbacks.length) {\r\n // do not optimize this call here to RAF because\r\n // we don't know how heavy the callback code here will\r\n // be and if this code is buffered then this can\r\n // lead to a performance regression.\r\n $$rAF(function() {\r\n forEach(callbacks, function(callback) {\r\n callback(element, phase, data);\r\n });\r\n cleanupEventListeners(phase, node);\r\n });\r\n } else {\r\n cleanupEventListeners(phase, node);\r\n }\r\n });\r\n runner.progress(event, phase, data);\r\n }\r\n\r\n function close(reject) {\r\n clearGeneratedClasses(element, options);\r\n applyAnimationClasses(element, options);\r\n applyAnimationStyles(element, options);\r\n options.domOperation();\r\n runner.complete(!reject);\r\n }\r\n }\r\n\r\n function closeChildAnimations(node) {\r\n var children = node.querySelectorAll('[' + NG_ANIMATE_ATTR_NAME + ']');\r\n forEach(children, function(child) {\r\n var state = parseInt(child.getAttribute(NG_ANIMATE_ATTR_NAME), 10);\r\n var animationDetails = activeAnimationsLookup.get(child);\r\n if (animationDetails) {\r\n switch (state) {\r\n case RUNNING_STATE:\r\n animationDetails.runner.end();\r\n /* falls through */\r\n case PRE_DIGEST_STATE:\r\n activeAnimationsLookup.delete(child);\r\n break;\r\n }\r\n }\r\n });\r\n }\r\n\r\n function clearElementAnimationState(node) {\r\n node.removeAttribute(NG_ANIMATE_ATTR_NAME);\r\n activeAnimationsLookup.delete(node);\r\n }\r\n\r\n /**\r\n * This fn returns false if any of the following is true:\r\n * a) animations on any parent element are disabled, and animations on the element aren't explicitly allowed\r\n * b) a parent element has an ongoing structural animation, and animateChildren is false\r\n * c) the element is not a child of the body\r\n * d) the element is not a child of the $rootElement\r\n */\r\n function areAnimationsAllowed(node, parentNode, event) {\r\n var bodyNode = $document[0].body;\r\n var rootNode = getDomNode($rootElement);\r\n\r\n var bodyNodeDetected = (node === bodyNode) || node.nodeName === 'HTML';\r\n var rootNodeDetected = (node === rootNode);\r\n var parentAnimationDetected = false;\r\n var elementDisabled = disabledElementsLookup.get(node);\r\n var animateChildren;\r\n\r\n var parentHost = jqLite.data(node, NG_ANIMATE_PIN_DATA);\r\n if (parentHost) {\r\n parentNode = getDomNode(parentHost);\r\n }\r\n\r\n while (parentNode) {\r\n if (!rootNodeDetected) {\r\n // AngularJS doesn't want to attempt to animate elements outside of the application\r\n // therefore we need to ensure that the rootElement is an ancestor of the current element\r\n rootNodeDetected = (parentNode === rootNode);\r\n }\r\n\r\n if (parentNode.nodeType !== ELEMENT_NODE) {\r\n // no point in inspecting the #document element\r\n break;\r\n }\r\n\r\n var details = activeAnimationsLookup.get(parentNode) || {};\r\n // either an enter, leave or move animation will commence\r\n // therefore we can't allow any animations to take place\r\n // but if a parent animation is class-based then that's ok\r\n if (!parentAnimationDetected) {\r\n var parentNodeDisabled = disabledElementsLookup.get(parentNode);\r\n\r\n if (parentNodeDisabled === true && elementDisabled !== false) {\r\n // disable animations if the user hasn't explicitly enabled animations on the\r\n // current element\r\n elementDisabled = true;\r\n // element is disabled via parent element, no need to check anything else\r\n break;\r\n } else if (parentNodeDisabled === false) {\r\n elementDisabled = false;\r\n }\r\n parentAnimationDetected = details.structural;\r\n }\r\n\r\n if (isUndefined(animateChildren) || animateChildren === true) {\r\n var value = jqLite.data(parentNode, NG_ANIMATE_CHILDREN_DATA);\r\n if (isDefined(value)) {\r\n animateChildren = value;\r\n }\r\n }\r\n\r\n // there is no need to continue traversing at this point\r\n if (parentAnimationDetected && animateChildren === false) break;\r\n\r\n if (!bodyNodeDetected) {\r\n // we also need to ensure that the element is or will be a part of the body element\r\n // otherwise it is pointless to even issue an animation to be rendered\r\n bodyNodeDetected = (parentNode === bodyNode);\r\n }\r\n\r\n if (bodyNodeDetected && rootNodeDetected) {\r\n // If both body and root have been found, any other checks are pointless,\r\n // as no animation data should live outside the application\r\n break;\r\n }\r\n\r\n if (!rootNodeDetected) {\r\n // If `rootNode` is not detected, check if `parentNode` is pinned to another element\r\n parentHost = jqLite.data(parentNode, NG_ANIMATE_PIN_DATA);\r\n if (parentHost) {\r\n // The pin target element becomes the next parent element\r\n parentNode = getDomNode(parentHost);\r\n continue;\r\n }\r\n }\r\n\r\n parentNode = parentNode.parentNode;\r\n }\r\n\r\n var allowAnimation = (!parentAnimationDetected || animateChildren) && elementDisabled !== true;\r\n return allowAnimation && rootNodeDetected && bodyNodeDetected;\r\n }\r\n\r\n function markElementAnimationState(node, state, details) {\r\n details = details || {};\r\n details.state = state;\r\n\r\n node.setAttribute(NG_ANIMATE_ATTR_NAME, state);\r\n\r\n var oldValue = activeAnimationsLookup.get(node);\r\n var newValue = oldValue\r\n ? extend(oldValue, details)\r\n : details;\r\n activeAnimationsLookup.set(node, newValue);\r\n }\r\n }];\r\n}];\r\n\r\n/** @this */\r\nvar $$AnimateCacheProvider = function() {\r\n\r\n var KEY = '$$ngAnimateParentKey';\r\n var parentCounter = 0;\r\n var cache = Object.create(null);\r\n\r\n this.$get = [function() {\r\n return {\r\n cacheKey: function(node, method, addClass, removeClass) {\r\n var parentNode = node.parentNode;\r\n var parentID = parentNode[KEY] || (parentNode[KEY] = ++parentCounter);\r\n var parts = [parentID, method, node.getAttribute('class')];\r\n if (addClass) {\r\n parts.push(addClass);\r\n }\r\n if (removeClass) {\r\n parts.push(removeClass);\r\n }\r\n return parts.join(' ');\r\n },\r\n\r\n containsCachedAnimationWithoutDuration: function(key) {\r\n var entry = cache[key];\r\n\r\n // nothing cached, so go ahead and animate\r\n // otherwise it should be a valid animation\r\n return (entry && !entry.isValid) || false;\r\n },\r\n\r\n flush: function() {\r\n cache = Object.create(null);\r\n },\r\n\r\n count: function(key) {\r\n var entry = cache[key];\r\n return entry ? entry.total : 0;\r\n },\r\n\r\n get: function(key) {\r\n var entry = cache[key];\r\n return entry && entry.value;\r\n },\r\n\r\n put: function(key, value, isValid) {\r\n if (!cache[key]) {\r\n cache[key] = { total: 1, value: value, isValid: isValid };\r\n } else {\r\n cache[key].total++;\r\n cache[key].value = value;\r\n }\r\n }\r\n };\r\n }];\r\n};\r\n\r\n/* exported $$AnimationProvider */\r\n\r\nvar $$AnimationProvider = ['$animateProvider', /** @this */ function($animateProvider) {\r\n var NG_ANIMATE_REF_ATTR = 'ng-animate-ref';\r\n\r\n var drivers = this.drivers = [];\r\n\r\n var RUNNER_STORAGE_KEY = '$$animationRunner';\r\n var PREPARE_CLASSES_KEY = '$$animatePrepareClasses';\r\n\r\n function setRunner(element, runner) {\r\n element.data(RUNNER_STORAGE_KEY, runner);\r\n }\r\n\r\n function removeRunner(element) {\r\n element.removeData(RUNNER_STORAGE_KEY);\r\n }\r\n\r\n function getRunner(element) {\r\n return element.data(RUNNER_STORAGE_KEY);\r\n }\r\n\r\n this.$get = ['$$jqLite', '$rootScope', '$injector', '$$AnimateRunner', '$$Map', '$$rAFScheduler', '$$animateCache',\r\n function($$jqLite, $rootScope, $injector, $$AnimateRunner, $$Map, $$rAFScheduler, $$animateCache) {\r\n\r\n var animationQueue = [];\r\n var applyAnimationClasses = applyAnimationClassesFactory($$jqLite);\r\n\r\n function sortAnimations(animations) {\r\n var tree = { children: [] };\r\n var i, lookup = new $$Map();\r\n\r\n // this is done first beforehand so that the map\r\n // is filled with a list of the elements that will be animated\r\n for (i = 0; i < animations.length; i++) {\r\n var animation = animations[i];\r\n lookup.set(animation.domNode, animations[i] = {\r\n domNode: animation.domNode,\r\n element: animation.element,\r\n fn: animation.fn,\r\n children: []\r\n });\r\n }\r\n\r\n for (i = 0; i < animations.length; i++) {\r\n processNode(animations[i]);\r\n }\r\n\r\n return flatten(tree);\r\n\r\n function processNode(entry) {\r\n if (entry.processed) return entry;\r\n entry.processed = true;\r\n\r\n var elementNode = entry.domNode;\r\n var parentNode = elementNode.parentNode;\r\n lookup.set(elementNode, entry);\r\n\r\n var parentEntry;\r\n while (parentNode) {\r\n parentEntry = lookup.get(parentNode);\r\n if (parentEntry) {\r\n if (!parentEntry.processed) {\r\n parentEntry = processNode(parentEntry);\r\n }\r\n break;\r\n }\r\n parentNode = parentNode.parentNode;\r\n }\r\n\r\n (parentEntry || tree).children.push(entry);\r\n return entry;\r\n }\r\n\r\n function flatten(tree) {\r\n var result = [];\r\n var queue = [];\r\n var i;\r\n\r\n for (i = 0; i < tree.children.length; i++) {\r\n queue.push(tree.children[i]);\r\n }\r\n\r\n var remainingLevelEntries = queue.length;\r\n var nextLevelEntries = 0;\r\n var row = [];\r\n\r\n for (i = 0; i < queue.length; i++) {\r\n var entry = queue[i];\r\n if (remainingLevelEntries <= 0) {\r\n remainingLevelEntries = nextLevelEntries;\r\n nextLevelEntries = 0;\r\n result.push(row);\r\n row = [];\r\n }\r\n row.push(entry);\r\n entry.children.forEach(function(childEntry) {\r\n nextLevelEntries++;\r\n queue.push(childEntry);\r\n });\r\n remainingLevelEntries--;\r\n }\r\n\r\n if (row.length) {\r\n result.push(row);\r\n }\r\n\r\n return result;\r\n }\r\n }\r\n\r\n // TODO(matsko): document the signature in a better way\r\n return function(element, event, options) {\r\n options = prepareAnimationOptions(options);\r\n var isStructural = ['enter', 'move', 'leave'].indexOf(event) >= 0;\r\n\r\n // there is no animation at the current moment, however\r\n // these runner methods will get later updated with the\r\n // methods leading into the driver's end/cancel methods\r\n // for now they just stop the animation from starting\r\n var runner = new $$AnimateRunner({\r\n end: function() { close(); },\r\n cancel: function() { close(true); }\r\n });\r\n\r\n if (!drivers.length) {\r\n close();\r\n return runner;\r\n }\r\n\r\n var classes = mergeClasses(element.attr('class'), mergeClasses(options.addClass, options.removeClass));\r\n var tempClasses = options.tempClasses;\r\n if (tempClasses) {\r\n classes += ' ' + tempClasses;\r\n options.tempClasses = null;\r\n }\r\n\r\n if (isStructural) {\r\n element.data(PREPARE_CLASSES_KEY, 'ng-' + event + PREPARE_CLASS_SUFFIX);\r\n }\r\n\r\n setRunner(element, runner);\r\n\r\n animationQueue.push({\r\n // this data is used by the postDigest code and passed into\r\n // the driver step function\r\n element: element,\r\n classes: classes,\r\n event: event,\r\n structural: isStructural,\r\n options: options,\r\n beforeStart: beforeStart,\r\n close: close\r\n });\r\n\r\n element.on('$destroy', handleDestroyedElement);\r\n\r\n // we only want there to be one function called within the post digest\r\n // block. This way we can group animations for all the animations that\r\n // were apart of the same postDigest flush call.\r\n if (animationQueue.length > 1) return runner;\r\n\r\n $rootScope.$$postDigest(function() {\r\n var animations = [];\r\n forEach(animationQueue, function(entry) {\r\n // the element was destroyed early on which removed the runner\r\n // form its storage. This means we can't animate this element\r\n // at all and it already has been closed due to destruction.\r\n if (getRunner(entry.element)) {\r\n animations.push(entry);\r\n } else {\r\n entry.close();\r\n }\r\n });\r\n\r\n // now any future animations will be in another postDigest\r\n animationQueue.length = 0;\r\n\r\n var groupedAnimations = groupAnimations(animations);\r\n var toBeSortedAnimations = [];\r\n\r\n forEach(groupedAnimations, function(animationEntry) {\r\n var element = animationEntry.from ? animationEntry.from.element : animationEntry.element;\r\n var extraClasses = options.addClass;\r\n\r\n extraClasses = (extraClasses ? (extraClasses + ' ') : '') + NG_ANIMATE_CLASSNAME;\r\n var cacheKey = $$animateCache.cacheKey(element[0], animationEntry.event, extraClasses, options.removeClass);\r\n\r\n toBeSortedAnimations.push({\r\n element: element,\r\n domNode: getDomNode(element),\r\n fn: function triggerAnimationStart() {\r\n var startAnimationFn, closeFn = animationEntry.close;\r\n\r\n // in the event that we've cached the animation status for this element\r\n // and it's in fact an invalid animation (something that has duration = 0)\r\n // then we should skip all the heavy work from here on\r\n if ($$animateCache.containsCachedAnimationWithoutDuration(cacheKey)) {\r\n closeFn();\r\n return;\r\n }\r\n\r\n // it's important that we apply the `ng-animate` CSS class and the\r\n // temporary classes before we do any driver invoking since these\r\n // CSS classes may be required for proper CSS detection.\r\n animationEntry.beforeStart();\r\n\r\n // in the event that the element was removed before the digest runs or\r\n // during the RAF sequencing then we should not trigger the animation.\r\n var targetElement = animationEntry.anchors\r\n ? (animationEntry.from.element || animationEntry.to.element)\r\n : animationEntry.element;\r\n\r\n if (getRunner(targetElement)) {\r\n var operation = invokeFirstDriver(animationEntry);\r\n if (operation) {\r\n startAnimationFn = operation.start;\r\n }\r\n }\r\n\r\n if (!startAnimationFn) {\r\n closeFn();\r\n } else {\r\n var animationRunner = startAnimationFn();\r\n animationRunner.done(function(status) {\r\n closeFn(!status);\r\n });\r\n updateAnimationRunners(animationEntry, animationRunner);\r\n }\r\n }\r\n });\r\n });\r\n\r\n // we need to sort each of the animations in order of parent to child\r\n // relationships. This ensures that the child classes are applied at the\r\n // right time.\r\n var finalAnimations = sortAnimations(toBeSortedAnimations);\r\n for (var i = 0; i < finalAnimations.length; i++) {\r\n var innerArray = finalAnimations[i];\r\n for (var j = 0; j < innerArray.length; j++) {\r\n var entry = innerArray[j];\r\n var element = entry.element;\r\n\r\n // the RAFScheduler code only uses functions\r\n finalAnimations[i][j] = entry.fn;\r\n\r\n // the first row of elements shouldn't have a prepare-class added to them\r\n // since the elements are at the top of the animation hierarchy and they\r\n // will be applied without a RAF having to pass...\r\n if (i === 0) {\r\n element.removeData(PREPARE_CLASSES_KEY);\r\n continue;\r\n }\r\n\r\n var prepareClassName = element.data(PREPARE_CLASSES_KEY);\r\n if (prepareClassName) {\r\n $$jqLite.addClass(element, prepareClassName);\r\n }\r\n }\r\n }\r\n\r\n $$rAFScheduler(finalAnimations);\r\n });\r\n\r\n return runner;\r\n\r\n // TODO(matsko): change to reference nodes\r\n function getAnchorNodes(node) {\r\n var SELECTOR = '[' + NG_ANIMATE_REF_ATTR + ']';\r\n var items = node.hasAttribute(NG_ANIMATE_REF_ATTR)\r\n ? [node]\r\n : node.querySelectorAll(SELECTOR);\r\n var anchors = [];\r\n forEach(items, function(node) {\r\n var attr = node.getAttribute(NG_ANIMATE_REF_ATTR);\r\n if (attr && attr.length) {\r\n anchors.push(node);\r\n }\r\n });\r\n return anchors;\r\n }\r\n\r\n function groupAnimations(animations) {\r\n var preparedAnimations = [];\r\n var refLookup = {};\r\n forEach(animations, function(animation, index) {\r\n var element = animation.element;\r\n var node = getDomNode(element);\r\n var event = animation.event;\r\n var enterOrMove = ['enter', 'move'].indexOf(event) >= 0;\r\n var anchorNodes = animation.structural ? getAnchorNodes(node) : [];\r\n\r\n if (anchorNodes.length) {\r\n var direction = enterOrMove ? 'to' : 'from';\r\n\r\n forEach(anchorNodes, function(anchor) {\r\n var key = anchor.getAttribute(NG_ANIMATE_REF_ATTR);\r\n refLookup[key] = refLookup[key] || {};\r\n refLookup[key][direction] = {\r\n animationID: index,\r\n element: jqLite(anchor)\r\n };\r\n });\r\n } else {\r\n preparedAnimations.push(animation);\r\n }\r\n });\r\n\r\n var usedIndicesLookup = {};\r\n var anchorGroups = {};\r\n forEach(refLookup, function(operations, key) {\r\n var from = operations.from;\r\n var to = operations.to;\r\n\r\n if (!from || !to) {\r\n // only one of these is set therefore we can't have an\r\n // anchor animation since all three pieces are required\r\n var index = from ? from.animationID : to.animationID;\r\n var indexKey = index.toString();\r\n if (!usedIndicesLookup[indexKey]) {\r\n usedIndicesLookup[indexKey] = true;\r\n preparedAnimations.push(animations[index]);\r\n }\r\n return;\r\n }\r\n\r\n var fromAnimation = animations[from.animationID];\r\n var toAnimation = animations[to.animationID];\r\n var lookupKey = from.animationID.toString();\r\n if (!anchorGroups[lookupKey]) {\r\n var group = anchorGroups[lookupKey] = {\r\n structural: true,\r\n beforeStart: function() {\r\n fromAnimation.beforeStart();\r\n toAnimation.beforeStart();\r\n },\r\n close: function() {\r\n fromAnimation.close();\r\n toAnimation.close();\r\n },\r\n classes: cssClassesIntersection(fromAnimation.classes, toAnimation.classes),\r\n from: fromAnimation,\r\n to: toAnimation,\r\n anchors: [] // TODO(matsko): change to reference nodes\r\n };\r\n\r\n // the anchor animations require that the from and to elements both have at least\r\n // one shared CSS class which effectively marries the two elements together to use\r\n // the same animation driver and to properly sequence the anchor animation.\r\n if (group.classes.length) {\r\n preparedAnimations.push(group);\r\n } else {\r\n preparedAnimations.push(fromAnimation);\r\n preparedAnimations.push(toAnimation);\r\n }\r\n }\r\n\r\n anchorGroups[lookupKey].anchors.push({\r\n 'out': from.element, 'in': to.element\r\n });\r\n });\r\n\r\n return preparedAnimations;\r\n }\r\n\r\n function cssClassesIntersection(a,b) {\r\n a = a.split(' ');\r\n b = b.split(' ');\r\n var matches = [];\r\n\r\n for (var i = 0; i < a.length; i++) {\r\n var aa = a[i];\r\n if (aa.substring(0,3) === 'ng-') continue;\r\n\r\n for (var j = 0; j < b.length; j++) {\r\n if (aa === b[j]) {\r\n matches.push(aa);\r\n break;\r\n }\r\n }\r\n }\r\n\r\n return matches.join(' ');\r\n }\r\n\r\n function invokeFirstDriver(animationDetails) {\r\n // we loop in reverse order since the more general drivers (like CSS and JS)\r\n // may attempt more elements, but custom drivers are more particular\r\n for (var i = drivers.length - 1; i >= 0; i--) {\r\n var driverName = drivers[i];\r\n var factory = $injector.get(driverName);\r\n var driver = factory(animationDetails);\r\n if (driver) {\r\n return driver;\r\n }\r\n }\r\n }\r\n\r\n function beforeStart() {\r\n tempClasses = (tempClasses ? (tempClasses + ' ') : '') + NG_ANIMATE_CLASSNAME;\r\n $$jqLite.addClass(element, tempClasses);\r\n\r\n var prepareClassName = element.data(PREPARE_CLASSES_KEY);\r\n if (prepareClassName) {\r\n $$jqLite.removeClass(element, prepareClassName);\r\n prepareClassName = null;\r\n }\r\n }\r\n\r\n function updateAnimationRunners(animation, newRunner) {\r\n if (animation.from && animation.to) {\r\n update(animation.from.element);\r\n update(animation.to.element);\r\n } else {\r\n update(animation.element);\r\n }\r\n\r\n function update(element) {\r\n var runner = getRunner(element);\r\n if (runner) runner.setHost(newRunner);\r\n }\r\n }\r\n\r\n function handleDestroyedElement() {\r\n var runner = getRunner(element);\r\n if (runner && (event !== 'leave' || !options.$$domOperationFired)) {\r\n runner.end();\r\n }\r\n }\r\n\r\n function close(rejected) {\r\n element.off('$destroy', handleDestroyedElement);\r\n removeRunner(element);\r\n\r\n applyAnimationClasses(element, options);\r\n applyAnimationStyles(element, options);\r\n options.domOperation();\r\n\r\n if (tempClasses) {\r\n $$jqLite.removeClass(element, tempClasses);\r\n }\r\n\r\n runner.complete(!rejected);\r\n }\r\n };\r\n }];\r\n}];\r\n\r\n/**\r\n * @ngdoc directive\r\n * @name ngAnimateSwap\r\n * @restrict A\r\n * @scope\r\n *\r\n * @description\r\n *\r\n * ngAnimateSwap is a animation-oriented directive that allows for the container to\r\n * be removed and entered in whenever the associated expression changes. A\r\n * common usecase for this directive is a rotating banner or slider component which\r\n * contains one image being present at a time. When the active image changes\r\n * then the old image will perform a `leave` animation and the new element\r\n * will be inserted via an `enter` animation.\r\n *\r\n * @animations\r\n * | Animation | Occurs |\r\n * |----------------------------------|--------------------------------------|\r\n * | {@link ng.$animate#enter enter} | when the new element is inserted to the DOM |\r\n * | {@link ng.$animate#leave leave} | when the old element is removed from the DOM |\r\n *\r\n * @example\r\n * \r\n * \r\n *
\r\n *
\r\n * {{ number }}\r\n *
\r\n *
\r\n *
\r\n * \r\n * angular.module('ngAnimateSwapExample', ['ngAnimate'])\r\n * .controller('AppCtrl', ['$scope', '$interval', function($scope, $interval) {\r\n * $scope.number = 0;\r\n * $interval(function() {\r\n * $scope.number++;\r\n * }, 1000);\r\n *\r\n * var colors = ['red','blue','green','yellow','orange'];\r\n * $scope.colorClass = function(number) {\r\n * return colors[number % colors.length];\r\n * };\r\n * }]);\r\n * \r\n * \r\n * .container {\r\n * height:250px;\r\n * width:250px;\r\n * position:relative;\r\n * overflow:hidden;\r\n * border:2px solid black;\r\n * }\r\n * .container .cell {\r\n * font-size:150px;\r\n * text-align:center;\r\n * line-height:250px;\r\n * position:absolute;\r\n * top:0;\r\n * left:0;\r\n * right:0;\r\n * border-bottom:2px solid black;\r\n * }\r\n * .swap-animation.ng-enter, .swap-animation.ng-leave {\r\n * transition:0.5s linear all;\r\n * }\r\n * .swap-animation.ng-enter {\r\n * top:-250px;\r\n * }\r\n * .swap-animation.ng-enter-active {\r\n * top:0px;\r\n * }\r\n * .swap-animation.ng-leave {\r\n * top:0px;\r\n * }\r\n * .swap-animation.ng-leave-active {\r\n * top:250px;\r\n * }\r\n * .red { background:red; }\r\n * .green { background:green; }\r\n * .blue { background:blue; }\r\n * .yellow { background:yellow; }\r\n * .orange { background:orange; }\r\n * \r\n *
\r\n */\r\nvar ngAnimateSwapDirective = ['$animate', function($animate) {\r\n return {\r\n restrict: 'A',\r\n transclude: 'element',\r\n terminal: true,\r\n priority: 600, // we use 600 here to ensure that the directive is caught before others\r\n link: function(scope, $element, attrs, ctrl, $transclude) {\r\n var previousElement, previousScope;\r\n scope.$watchCollection(attrs.ngAnimateSwap || attrs['for'], function(value) {\r\n if (previousElement) {\r\n $animate.leave(previousElement);\r\n }\r\n if (previousScope) {\r\n previousScope.$destroy();\r\n previousScope = null;\r\n }\r\n if (value || value === 0) {\r\n $transclude(function(clone, childScope) {\r\n previousElement = clone;\r\n previousScope = childScope;\r\n $animate.enter(clone, null, $element);\r\n });\r\n }\r\n });\r\n }\r\n };\r\n}];\r\n\r\n/**\r\n * @ngdoc module\r\n * @name ngAnimate\r\n * @description\r\n *\r\n * The `ngAnimate` module provides support for CSS-based animations (keyframes and transitions) as well as JavaScript-based animations via\r\n * callback hooks. Animations are not enabled by default, however, by including `ngAnimate` the animation hooks are enabled for an AngularJS app.\r\n *\r\n * ## Usage\r\n * Simply put, there are two ways to make use of animations when ngAnimate is used: by using **CSS** and **JavaScript**. The former works purely based\r\n * using CSS (by using matching CSS selectors/styles) and the latter triggers animations that are registered via `module.animation()`. For\r\n * both CSS and JS animations the sole requirement is to have a matching `CSS class` that exists both in the registered animation and within\r\n * the HTML element that the animation will be triggered on.\r\n *\r\n * ## Directive Support\r\n * The following directives are \"animation aware\":\r\n *\r\n * | Directive | Supported Animations |\r\n * |-------------------------------------------------------------------------------|---------------------------------------------------------------------------|\r\n * | {@link ng.directive:form#animations form / ngForm} | add and remove ({@link ng.directive:form#css-classes various classes}) |\r\n * | {@link ngAnimate.directive:ngAnimateSwap#animations ngAnimateSwap} | enter and leave |\r\n * | {@link ng.directive:ngClass#animations ngClass / {{class}​}} | add and remove |\r\n * | {@link ng.directive:ngClassEven#animations ngClassEven} | add and remove |\r\n * | {@link ng.directive:ngClassOdd#animations ngClassOdd} | add and remove |\r\n * | {@link ng.directive:ngHide#animations ngHide} | add and remove (the `ng-hide` class) |\r\n * | {@link ng.directive:ngIf#animations ngIf} | enter and leave |\r\n * | {@link ng.directive:ngInclude#animations ngInclude} | enter and leave |\r\n * | {@link module:ngMessages#animations ngMessage / ngMessageExp} | enter and leave |\r\n * | {@link module:ngMessages#animations ngMessages} | add and remove (the `ng-active`/`ng-inactive` classes) |\r\n * | {@link ng.directive:ngModel#animations ngModel} | add and remove ({@link ng.directive:ngModel#css-classes various classes}) |\r\n * | {@link ng.directive:ngRepeat#animations ngRepeat} | enter, leave, and move |\r\n * | {@link ng.directive:ngShow#animations ngShow} | add and remove (the `ng-hide` class) |\r\n * | {@link ng.directive:ngSwitch#animations ngSwitch} | enter and leave |\r\n * | {@link ngRoute.directive:ngView#animations ngView} | enter and leave |\r\n *\r\n * (More information can be found by visiting the documentation associated with each directive.)\r\n *\r\n * For a full breakdown of the steps involved during each animation event, refer to the\r\n * {@link ng.$animate `$animate` API docs}.\r\n *\r\n * ## CSS-based Animations\r\n *\r\n * CSS-based animations with ngAnimate are unique since they require no JavaScript code at all. By using a CSS class that we reference between our HTML\r\n * and CSS code we can create an animation that will be picked up by AngularJS when an underlying directive performs an operation.\r\n *\r\n * The example below shows how an `enter` animation can be made possible on an element using `ng-if`:\r\n *\r\n * ```html\r\n *
\r\n * Fade me in out\r\n *
\r\n * \r\n * \r\n * ```\r\n *\r\n * Notice the CSS class **fade**? We can now create the CSS transition code that references this class:\r\n *\r\n * ```css\r\n * /* The starting CSS styles for the enter animation */\r\n * .fade.ng-enter {\r\n * transition:0.5s linear all;\r\n * opacity:0;\r\n * }\r\n *\r\n * /* The finishing CSS styles for the enter animation */\r\n * .fade.ng-enter.ng-enter-active {\r\n * opacity:1;\r\n * }\r\n * ```\r\n *\r\n * The key thing to remember here is that, depending on the animation event (which each of the directives above trigger depending on what's going on) two\r\n * generated CSS classes will be applied to the element; in the example above we have `.ng-enter` and `.ng-enter-active`. For CSS transitions, the transition\r\n * code **must** be defined within the starting CSS class (in this case `.ng-enter`). The destination class is what the transition will animate towards.\r\n *\r\n * If for example we wanted to create animations for `leave` and `move` (ngRepeat triggers move) then we can do so using the same CSS naming conventions:\r\n *\r\n * ```css\r\n * /* now the element will fade out before it is removed from the DOM */\r\n * .fade.ng-leave {\r\n * transition:0.5s linear all;\r\n * opacity:1;\r\n * }\r\n * .fade.ng-leave.ng-leave-active {\r\n * opacity:0;\r\n * }\r\n * ```\r\n *\r\n * We can also make use of **CSS Keyframes** by referencing the keyframe animation within the starting CSS class:\r\n *\r\n * ```css\r\n * /* there is no need to define anything inside of the destination\r\n * CSS class since the keyframe will take charge of the animation */\r\n * .fade.ng-leave {\r\n * animation: my_fade_animation 0.5s linear;\r\n * -webkit-animation: my_fade_animation 0.5s linear;\r\n * }\r\n *\r\n * @keyframes my_fade_animation {\r\n * from { opacity:1; }\r\n * to { opacity:0; }\r\n * }\r\n *\r\n * @-webkit-keyframes my_fade_animation {\r\n * from { opacity:1; }\r\n * to { opacity:0; }\r\n * }\r\n * ```\r\n *\r\n * Feel free also mix transitions and keyframes together as well as any other CSS classes on the same element.\r\n *\r\n * ### CSS Class-based Animations\r\n *\r\n * Class-based animations (animations that are triggered via `ngClass`, `ngShow`, `ngHide` and some other directives) have a slightly different\r\n * naming convention. Class-based animations are basic enough that a standard transition or keyframe can be referenced on the class being added\r\n * and removed.\r\n *\r\n * For example if we wanted to do a CSS animation for `ngHide` then we place an animation on the `.ng-hide` CSS class:\r\n *\r\n * ```html\r\n *
\r\n * Show and hide me\r\n *
\r\n * \r\n *\r\n * \r\n * ```\r\n *\r\n * All that is going on here with ngShow/ngHide behind the scenes is the `.ng-hide` class is added/removed (when the hidden state is valid). Since\r\n * ngShow and ngHide are animation aware then we can match up a transition and ngAnimate handles the rest.\r\n *\r\n * In addition the addition and removal of the CSS class, ngAnimate also provides two helper methods that we can use to further decorate the animation\r\n * with CSS styles.\r\n *\r\n * ```html\r\n *
\r\n * Highlight this box\r\n *
\r\n * \r\n *\r\n * \r\n * ```\r\n *\r\n * We can also make use of CSS keyframes by placing them within the CSS classes.\r\n *\r\n *\r\n * ### CSS Staggering Animations\r\n * A Staggering animation is a collection of animations that are issued with a slight delay in between each successive operation resulting in a\r\n * curtain-like effect. The ngAnimate module (versions >=1.2) supports staggering animations and the stagger effect can be\r\n * performed by creating a **ng-EVENT-stagger** CSS class and attaching that class to the base CSS class used for\r\n * the animation. The style property expected within the stagger class can either be a **transition-delay** or an\r\n * **animation-delay** property (or both if your animation contains both transitions and keyframe animations).\r\n *\r\n * ```css\r\n * .my-animation.ng-enter {\r\n * /* standard transition code */\r\n * transition: 1s linear all;\r\n * opacity:0;\r\n * }\r\n * .my-animation.ng-enter-stagger {\r\n * /* this will have a 100ms delay between each successive leave animation */\r\n * transition-delay: 0.1s;\r\n *\r\n * /* As of 1.4.4, this must always be set: it signals ngAnimate\r\n * to not accidentally inherit a delay property from another CSS class */\r\n * transition-duration: 0s;\r\n *\r\n * /* if you are using animations instead of transitions you should configure as follows:\r\n * animation-delay: 0.1s;\r\n * animation-duration: 0s; */\r\n * }\r\n * .my-animation.ng-enter.ng-enter-active {\r\n * /* standard transition styles */\r\n * opacity:1;\r\n * }\r\n * ```\r\n *\r\n * Staggering animations work by default in ngRepeat (so long as the CSS class is defined). Outside of ngRepeat, to use staggering animations\r\n * on your own, they can be triggered by firing multiple calls to the same event on $animate. However, the restrictions surrounding this\r\n * are that each of the elements must have the same CSS className value as well as the same parent element. A stagger operation\r\n * will also be reset if one or more animation frames have passed since the multiple calls to `$animate` were fired.\r\n *\r\n * The following code will issue the **ng-leave-stagger** event on the element provided:\r\n *\r\n * ```js\r\n * var kids = parent.children();\r\n *\r\n * $animate.leave(kids[0]); //stagger index=0\r\n * $animate.leave(kids[1]); //stagger index=1\r\n * $animate.leave(kids[2]); //stagger index=2\r\n * $animate.leave(kids[3]); //stagger index=3\r\n * $animate.leave(kids[4]); //stagger index=4\r\n *\r\n * window.requestAnimationFrame(function() {\r\n * //stagger has reset itself\r\n * $animate.leave(kids[5]); //stagger index=0\r\n * $animate.leave(kids[6]); //stagger index=1\r\n *\r\n * $scope.$digest();\r\n * });\r\n * ```\r\n *\r\n * Stagger animations are currently only supported within CSS-defined animations.\r\n *\r\n * ### The `ng-animate` CSS class\r\n *\r\n * When ngAnimate is animating an element it will apply the `ng-animate` CSS class to the element for the duration of the animation.\r\n * This is a temporary CSS class and it will be removed once the animation is over (for both JavaScript and CSS-based animations).\r\n *\r\n * Therefore, animations can be applied to an element using this temporary class directly via CSS.\r\n *\r\n * ```css\r\n * .zipper.ng-animate {\r\n * transition:0.5s linear all;\r\n * }\r\n * .zipper.ng-enter {\r\n * opacity:0;\r\n * }\r\n * .zipper.ng-enter.ng-enter-active {\r\n * opacity:1;\r\n * }\r\n * .zipper.ng-leave {\r\n * opacity:1;\r\n * }\r\n * .zipper.ng-leave.ng-leave-active {\r\n * opacity:0;\r\n * }\r\n * ```\r\n *\r\n * (Note that the `ng-animate` CSS class is reserved and it cannot be applied on an element directly since ngAnimate will always remove\r\n * the CSS class once an animation has completed.)\r\n *\r\n *\r\n * ### The `ng-[event]-prepare` class\r\n *\r\n * This is a special class that can be used to prevent unwanted flickering / flash of content before\r\n * the actual animation starts. The class is added as soon as an animation is initialized, but removed\r\n * before the actual animation starts (after waiting for a $digest).\r\n * It is also only added for *structural* animations (`enter`, `move`, and `leave`).\r\n *\r\n * In practice, flickering can appear when nesting elements with structural animations such as `ngIf`\r\n * into elements that have class-based animations such as `ngClass`.\r\n *\r\n * ```html\r\n *
\r\n *
\r\n *
\r\n *
\r\n *
\r\n * ```\r\n *\r\n * It is possible that during the `enter` animation, the `.message` div will be briefly visible before it starts animating.\r\n * In that case, you can add styles to the CSS that make sure the element stays hidden before the animation starts:\r\n *\r\n * ```css\r\n * .message.ng-enter-prepare {\r\n * opacity: 0;\r\n * }\r\n * ```\r\n *\r\n * ### Animating between value changes\r\n *\r\n * Sometimes you need to animate between different expression states, whose values\r\n * don't necessary need to be known or referenced in CSS styles.\r\n * Unless possible with another {@link ngAnimate#directive-support \"animation aware\" directive},\r\n * that specific use case can always be covered with {@link ngAnimate.directive:ngAnimateSwap} as\r\n * can be seen in {@link ngAnimate.directive:ngAnimateSwap#examples this example}.\r\n *\r\n * Note that {@link ngAnimate.directive:ngAnimateSwap} is a *structural directive*, which means it\r\n * creates a new instance of the element (including any other/child directives it may have) and\r\n * links it to a new scope every time *swap* happens. In some cases this might not be desirable\r\n * (e.g. for performance reasons, or when you wish to retain internal state on the original\r\n * element instance).\r\n *\r\n * ## JavaScript-based Animations\r\n *\r\n * ngAnimate also allows for animations to be consumed by JavaScript code. The approach is similar to CSS-based animations (where there is a shared\r\n * CSS class that is referenced in our HTML code) but in addition we need to register the JavaScript animation on the module. By making use of the\r\n * `module.animation()` module function we can register the animation.\r\n *\r\n * Let's see an example of a enter/leave animation using `ngRepeat`:\r\n *\r\n * ```html\r\n *
\r\n * {{ item }}\r\n *
\r\n * ```\r\n *\r\n * See the **slide** CSS class? Let's use that class to define an animation that we'll structure in our module code by using `module.animation`:\r\n *\r\n * ```js\r\n * myModule.animation('.slide', [function() {\r\n * return {\r\n * // make note that other events (like addClass/removeClass)\r\n * // have different function input parameters\r\n * enter: function(element, doneFn) {\r\n * jQuery(element).fadeIn(1000, doneFn);\r\n *\r\n * // remember to call doneFn so that AngularJS\r\n * // knows that the animation has concluded\r\n * },\r\n *\r\n * move: function(element, doneFn) {\r\n * jQuery(element).fadeIn(1000, doneFn);\r\n * },\r\n *\r\n * leave: function(element, doneFn) {\r\n * jQuery(element).fadeOut(1000, doneFn);\r\n * }\r\n * }\r\n * }]);\r\n * ```\r\n *\r\n * The nice thing about JS-based animations is that we can inject other services and make use of advanced animation libraries such as\r\n * greensock.js and velocity.js.\r\n *\r\n * If our animation code class-based (meaning that something like `ngClass`, `ngHide` and `ngShow` triggers it) then we can still define\r\n * our animations inside of the same registered animation, however, the function input arguments are a bit different:\r\n *\r\n * ```html\r\n *
\r\n * this box is moody\r\n *
\r\n * \r\n * \r\n * \r\n * ```\r\n *\r\n * ```js\r\n * myModule.animation('.colorful', [function() {\r\n * return {\r\n * addClass: function(element, className, doneFn) {\r\n * // do some cool animation and call the doneFn\r\n * },\r\n * removeClass: function(element, className, doneFn) {\r\n * // do some cool animation and call the doneFn\r\n * },\r\n * setClass: function(element, addedClass, removedClass, doneFn) {\r\n * // do some cool animation and call the doneFn\r\n * }\r\n * }\r\n * }]);\r\n * ```\r\n *\r\n * ## CSS + JS Animations Together\r\n *\r\n * AngularJS 1.4 and higher has taken steps to make the amalgamation of CSS and JS animations more flexible. However, unlike earlier versions of AngularJS,\r\n * defining CSS and JS animations to work off of the same CSS class will not work anymore. Therefore the example below will only result in **JS animations taking\r\n * charge of the animation**:\r\n *\r\n * ```html\r\n *
\r\n * Slide in and out\r\n *
\r\n * ```\r\n *\r\n * ```js\r\n * myModule.animation('.slide', [function() {\r\n * return {\r\n * enter: function(element, doneFn) {\r\n * jQuery(element).slideIn(1000, doneFn);\r\n * }\r\n * }\r\n * }]);\r\n * ```\r\n *\r\n * ```css\r\n * .slide.ng-enter {\r\n * transition:0.5s linear all;\r\n * transform:translateY(-100px);\r\n * }\r\n * .slide.ng-enter.ng-enter-active {\r\n * transform:translateY(0);\r\n * }\r\n * ```\r\n *\r\n * Does this mean that CSS and JS animations cannot be used together? Do JS-based animations always have higher priority? We can make up for the\r\n * lack of CSS animations by using the `$animateCss` service to trigger our own tweaked-out, CSS-based animations directly from\r\n * our own JS-based animation code:\r\n *\r\n * ```js\r\n * myModule.animation('.slide', ['$animateCss', function($animateCss) {\r\n * return {\r\n * enter: function(element) {\r\n* // this will trigger `.slide.ng-enter` and `.slide.ng-enter-active`.\r\n * return $animateCss(element, {\r\n * event: 'enter',\r\n * structural: true\r\n * });\r\n * }\r\n * }\r\n * }]);\r\n * ```\r\n *\r\n * The nice thing here is that we can save bandwidth by sticking to our CSS-based animation code and we don't need to rely on a 3rd-party animation framework.\r\n *\r\n * The `$animateCss` service is very powerful since we can feed in all kinds of extra properties that will be evaluated and fed into a CSS transition or\r\n * keyframe animation. For example if we wanted to animate the height of an element while adding and removing classes then we can do so by providing that\r\n * data into `$animateCss` directly:\r\n *\r\n * ```js\r\n * myModule.animation('.slide', ['$animateCss', function($animateCss) {\r\n * return {\r\n * enter: function(element) {\r\n * return $animateCss(element, {\r\n * event: 'enter',\r\n * structural: true,\r\n * addClass: 'maroon-setting',\r\n * from: { height:0 },\r\n * to: { height: 200 }\r\n * });\r\n * }\r\n * }\r\n * }]);\r\n * ```\r\n *\r\n * Now we can fill in the rest via our transition CSS code:\r\n *\r\n * ```css\r\n * /* the transition tells ngAnimate to make the animation happen */\r\n * .slide.ng-enter { transition:0.5s linear all; }\r\n *\r\n * /* this extra CSS class will be absorbed into the transition\r\n * since the $animateCss code is adding the class */\r\n * .maroon-setting { background:red; }\r\n * ```\r\n *\r\n * And `$animateCss` will figure out the rest. Just make sure to have the `done()` callback fire the `doneFn` function to signal when the animation is over.\r\n *\r\n * To learn more about what's possible be sure to visit the {@link ngAnimate.$animateCss $animateCss service}.\r\n *\r\n * ## Animation Anchoring (via `ng-animate-ref`)\r\n *\r\n * ngAnimate in AngularJS 1.4 comes packed with the ability to cross-animate elements between\r\n * structural areas of an application (like views) by pairing up elements using an attribute\r\n * called `ng-animate-ref`.\r\n *\r\n * Let's say for example we have two views that are managed by `ng-view` and we want to show\r\n * that there is a relationship between two components situated in within these views. By using the\r\n * `ng-animate-ref` attribute we can identify that the two components are paired together and we\r\n * can then attach an animation, which is triggered when the view changes.\r\n *\r\n * Say for example we have the following template code:\r\n *\r\n * ```html\r\n * \r\n *
\r\n *
\r\n *\r\n * \r\n * \r\n * \r\n * \r\n *\r\n * \r\n * \r\n * ```\r\n *\r\n * Now, when the view changes (once the link is clicked), ngAnimate will examine the\r\n * HTML contents to see if there is a match reference between any components in the view\r\n * that is leaving and the view that is entering. It will scan both the view which is being\r\n * removed (leave) and inserted (enter) to see if there are any paired DOM elements that\r\n * contain a matching ref value.\r\n *\r\n * The two images match since they share the same ref value. ngAnimate will now create a\r\n * transport element (which is a clone of the first image element) and it will then attempt\r\n * to animate to the position of the second image element in the next view. For the animation to\r\n * work a special CSS class called `ng-anchor` will be added to the transported element.\r\n *\r\n * We can now attach a transition onto the `.banner.ng-anchor` CSS class and then\r\n * ngAnimate will handle the entire transition for us as well as the addition and removal of\r\n * any changes of CSS classes between the elements:\r\n *\r\n * ```css\r\n * .banner.ng-anchor {\r\n * /* this animation will last for 1 second since there are\r\n * two phases to the animation (an `in` and an `out` phase) */\r\n * transition:0.5s linear all;\r\n * }\r\n * ```\r\n *\r\n * We also **must** include animations for the views that are being entered and removed\r\n * (otherwise anchoring wouldn't be possible since the new view would be inserted right away).\r\n *\r\n * ```css\r\n * .view-animation.ng-enter, .view-animation.ng-leave {\r\n * transition:0.5s linear all;\r\n * position:fixed;\r\n * left:0;\r\n * top:0;\r\n * width:100%;\r\n * }\r\n * .view-animation.ng-enter {\r\n * transform:translateX(100%);\r\n * }\r\n * .view-animation.ng-leave,\r\n * .view-animation.ng-enter.ng-enter-active {\r\n * transform:translateX(0%);\r\n * }\r\n * .view-animation.ng-leave.ng-leave-active {\r\n * transform:translateX(-100%);\r\n * }\r\n * ```\r\n *\r\n * Now we can jump back to the anchor animation. When the animation happens, there are two stages that occur:\r\n * an `out` and an `in` stage. The `out` stage happens first and that is when the element is animated away\r\n * from its origin. Once that animation is over then the `in` stage occurs which animates the\r\n * element to its destination. The reason why there are two animations is to give enough time\r\n * for the enter animation on the new element to be ready.\r\n *\r\n * The example above sets up a transition for both the in and out phases, but we can also target the out or\r\n * in phases directly via `ng-anchor-out` and `ng-anchor-in`.\r\n *\r\n * ```css\r\n * .banner.ng-anchor-out {\r\n * transition: 0.5s linear all;\r\n *\r\n * /* the scale will be applied during the out animation,\r\n * but will be animated away when the in animation runs */\r\n * transform: scale(1.2);\r\n * }\r\n *\r\n * .banner.ng-anchor-in {\r\n * transition: 1s linear all;\r\n * }\r\n * ```\r\n *\r\n *\r\n *\r\n *\r\n * ### Anchoring Demo\r\n *\r\n \r\n \r\n Home\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n angular.module('anchoringExample', ['ngAnimate', 'ngRoute'])\r\n .config(['$routeProvider', function($routeProvider) {\r\n $routeProvider.when('/', {\r\n templateUrl: 'home.html',\r\n controller: 'HomeController as home'\r\n });\r\n $routeProvider.when('/profile/:id', {\r\n templateUrl: 'profile.html',\r\n controller: 'ProfileController as profile'\r\n });\r\n }])\r\n .run(['$rootScope', function($rootScope) {\r\n $rootScope.records = [\r\n { id: 1, title: 'Miss Beulah Roob' },\r\n { id: 2, title: 'Trent Morissette' },\r\n { id: 3, title: 'Miss Ava Pouros' },\r\n { id: 4, title: 'Rod Pouros' },\r\n { id: 5, title: 'Abdul Rice' },\r\n { id: 6, title: 'Laurie Rutherford Sr.' },\r\n { id: 7, title: 'Nakia McLaughlin' },\r\n { id: 8, title: 'Jordon Blanda DVM' },\r\n { id: 9, title: 'Rhoda Hand' },\r\n { id: 10, title: 'Alexandrea Sauer' }\r\n ];\r\n }])\r\n .controller('HomeController', [function() {\r\n //empty\r\n }])\r\n .controller('ProfileController', ['$rootScope', '$routeParams',\r\n function ProfileController($rootScope, $routeParams) {\r\n var index = parseInt($routeParams.id, 10);\r\n var record = $rootScope.records[index - 1];\r\n\r\n this.title = record.title;\r\n this.id = record.id;\r\n }]);\r\n \r\n \r\n

Welcome to the home page

\r\n

Please click on an element

\r\n \r\n {{ record.title }}\r\n \r\n
\r\n \r\n
\r\n {{ profile.title }}\r\n
\r\n
\r\n \r\n .record {\r\n display:block;\r\n font-size:20px;\r\n }\r\n .profile {\r\n background:black;\r\n color:white;\r\n font-size:100px;\r\n }\r\n .view-container {\r\n position:relative;\r\n }\r\n .view-container > .view.ng-animate {\r\n position:absolute;\r\n top:0;\r\n left:0;\r\n width:100%;\r\n min-height:500px;\r\n }\r\n .view.ng-enter, .view.ng-leave,\r\n .record.ng-anchor {\r\n transition:0.5s linear all;\r\n }\r\n .view.ng-enter {\r\n transform:translateX(100%);\r\n }\r\n .view.ng-enter.ng-enter-active, .view.ng-leave {\r\n transform:translateX(0%);\r\n }\r\n .view.ng-leave.ng-leave-active {\r\n transform:translateX(-100%);\r\n }\r\n .record.ng-anchor-out {\r\n background:red;\r\n }\r\n \r\n
\r\n *\r\n * ### How is the element transported?\r\n *\r\n * When an anchor animation occurs, ngAnimate will clone the starting element and position it exactly where the starting\r\n * element is located on screen via absolute positioning. The cloned element will be placed inside of the root element\r\n * of the application (where ng-app was defined) and all of the CSS classes of the starting element will be applied. The\r\n * element will then animate into the `out` and `in` animations and will eventually reach the coordinates and match\r\n * the dimensions of the destination element. During the entire animation a CSS class of `.ng-animate-shim` will be applied\r\n * to both the starting and destination elements in order to hide them from being visible (the CSS styling for the class\r\n * is: `visibility:hidden`). Once the anchor reaches its destination then it will be removed and the destination element\r\n * will become visible since the shim class will be removed.\r\n *\r\n * ### How is the morphing handled?\r\n *\r\n * CSS Anchoring relies on transitions and keyframes and the internal code is intelligent enough to figure out\r\n * what CSS classes differ between the starting element and the destination element. These different CSS classes\r\n * will be added/removed on the anchor element and a transition will be applied (the transition that is provided\r\n * in the anchor class). Long story short, ngAnimate will figure out what classes to add and remove which will\r\n * make the transition of the element as smooth and automatic as possible. Be sure to use simple CSS classes that\r\n * do not rely on DOM nesting structure so that the anchor element appears the same as the starting element (since\r\n * the cloned element is placed inside of root element which is likely close to the body element).\r\n *\r\n * Note that if the root element is on the `` element then the cloned node will be placed inside of body.\r\n *\r\n *\r\n * ## Using $animate in your directive code\r\n *\r\n * So far we've explored how to feed in animations into an AngularJS application, but how do we trigger animations within our own directives in our application?\r\n * By injecting the `$animate` service into our directive code, we can trigger structural and class-based hooks which can then be consumed by animations. Let's\r\n * imagine we have a greeting box that shows and hides itself when the data changes\r\n *\r\n * ```html\r\n * Hi there\r\n * ```\r\n *\r\n * ```js\r\n * ngModule.directive('greetingBox', ['$animate', function($animate) {\r\n * return function(scope, element, attrs) {\r\n * attrs.$observe('active', function(value) {\r\n * value ? $animate.addClass(element, 'on') : $animate.removeClass(element, 'on');\r\n * });\r\n * });\r\n * }]);\r\n * ```\r\n *\r\n * Now the `on` CSS class is added and removed on the greeting box component. Now if we add a CSS class on top of the greeting box element\r\n * in our HTML code then we can trigger a CSS or JS animation to happen.\r\n *\r\n * ```css\r\n * /* normally we would create a CSS class to reference on the element */\r\n * greeting-box.on { transition:0.5s linear all; background:green; color:white; }\r\n * ```\r\n *\r\n * The `$animate` service contains a variety of other methods like `enter`, `leave`, `animate` and `setClass`. To learn more about what's\r\n * possible be sure to visit the {@link ng.$animate $animate service API page}.\r\n *\r\n *\r\n * ## Callbacks and Promises\r\n *\r\n * When `$animate` is called it returns a promise that can be used to capture when the animation has ended. Therefore if we were to trigger\r\n * an animation (within our directive code) then we can continue performing directive and scope related activities after the animation has\r\n * ended by chaining onto the returned promise that animation method returns.\r\n *\r\n * ```js\r\n * // somewhere within the depths of the directive\r\n * $animate.enter(element, parent).then(function() {\r\n * //the animation has completed\r\n * });\r\n * ```\r\n *\r\n * (Note that earlier versions of AngularJS prior to v1.4 required the promise code to be wrapped using `$scope.$apply(...)`. This is not the case\r\n * anymore.)\r\n *\r\n * In addition to the animation promise, we can also make use of animation-related callbacks within our directives and controller code by registering\r\n * an event listener using the `$animate` service. Let's say for example that an animation was triggered on our view\r\n * routing controller to hook into that:\r\n *\r\n * ```js\r\n * ngModule.controller('HomePageController', ['$animate', function($animate) {\r\n * $animate.on('enter', ngViewElement, function(element) {\r\n * // the animation for this route has completed\r\n * }]);\r\n * }])\r\n * ```\r\n *\r\n * (Note that you will need to trigger a digest within the callback to get AngularJS to notice any scope-related changes.)\r\n */\r\n\r\nvar copy;\r\nvar extend;\r\nvar forEach;\r\nvar isArray;\r\nvar isDefined;\r\nvar isElement;\r\nvar isFunction;\r\nvar isObject;\r\nvar isString;\r\nvar isUndefined;\r\nvar jqLite;\r\nvar noop;\r\n\r\n/**\r\n * @ngdoc service\r\n * @name $animate\r\n * @kind object\r\n *\r\n * @description\r\n * The ngAnimate `$animate` service documentation is the same for the core `$animate` service.\r\n *\r\n * Click here {@link ng.$animate to learn more about animations with `$animate`}.\r\n */\r\nangular.module('ngAnimate', [], function initAngularHelpers() {\r\n // Access helpers from AngularJS core.\r\n // Do it inside a `config` block to ensure `window.angular` is available.\r\n noop = angular.noop;\r\n copy = angular.copy;\r\n extend = angular.extend;\r\n jqLite = angular.element;\r\n forEach = angular.forEach;\r\n isArray = angular.isArray;\r\n isString = angular.isString;\r\n isObject = angular.isObject;\r\n isUndefined = angular.isUndefined;\r\n isDefined = angular.isDefined;\r\n isFunction = angular.isFunction;\r\n isElement = angular.isElement;\r\n})\r\n .info({ angularVersion: '1.7.5' })\r\n .directive('ngAnimateSwap', ngAnimateSwapDirective)\r\n\r\n .directive('ngAnimateChildren', $$AnimateChildrenDirective)\r\n .factory('$$rAFScheduler', $$rAFSchedulerFactory)\r\n\r\n .provider('$$animateQueue', $$AnimateQueueProvider)\r\n .provider('$$animateCache', $$AnimateCacheProvider)\r\n .provider('$$animation', $$AnimationProvider)\r\n\r\n .provider('$animateCss', $AnimateCssProvider)\r\n .provider('$$animateCssDriver', $$AnimateCssDriverProvider)\r\n\r\n .provider('$$animateJs', $$AnimateJsProvider)\r\n .provider('$$animateJsDriver', $$AnimateJsDriverProvider);\r\n\r\n\r\n})(window, window.angular);\r\n","/**\r\n * @license AngularJS v1.7.5\r\n * (c) 2010-2018 Google, Inc. http://angularjs.org\r\n * License: MIT\r\n */\r\n(function(window, angular) {'use strict';\r\n\r\n/* global shallowCopy: true */\r\n\r\n/**\r\n * Creates a shallow copy of an object, an array or a primitive.\r\n *\r\n * Assumes that there are no proto properties for objects.\r\n */\r\nfunction shallowCopy(src, dst) {\r\n if (isArray(src)) {\r\n dst = dst || [];\r\n\r\n for (var i = 0, ii = src.length; i < ii; i++) {\r\n dst[i] = src[i];\r\n }\r\n } else if (isObject(src)) {\r\n dst = dst || {};\r\n\r\n for (var key in src) {\r\n if (!(key.charAt(0) === '$' && key.charAt(1) === '$')) {\r\n dst[key] = src[key];\r\n }\r\n }\r\n }\r\n\r\n return dst || src;\r\n}\r\n\r\n/* global routeToRegExp: true */\r\n\r\n/**\r\n * @param {string} path - The path to parse. (It is assumed to have query and hash stripped off.)\r\n * @param {Object} opts - Options.\r\n * @return {Object} - An object containing an array of path parameter names (`keys`) and a regular\r\n * expression (`regexp`) that can be used to identify a matching URL and extract the path\r\n * parameter values.\r\n *\r\n * @description\r\n * Parses the given path, extracting path parameter names and a regular expression to match URLs.\r\n *\r\n * Originally inspired by `pathRexp` in `visionmedia/express/lib/utils.js`.\r\n */\r\nfunction routeToRegExp(path, opts) {\r\n var keys = [];\r\n\r\n var pattern = path\r\n .replace(/([().])/g, '\\\\$1')\r\n .replace(/(\\/)?:(\\w+)(\\*\\?|[?*])?/g, function(_, slash, key, option) {\r\n var optional = option === '?' || option === '*?';\r\n var star = option === '*' || option === '*?';\r\n keys.push({name: key, optional: optional});\r\n slash = slash || '';\r\n return (\r\n (optional ? '(?:' + slash : slash + '(?:') +\r\n (star ? '(.+?)' : '([^/]+)') +\r\n (optional ? '?)?' : ')')\r\n );\r\n })\r\n .replace(/([/$*])/g, '\\\\$1');\r\n\r\n if (opts.ignoreTrailingSlashes) {\r\n pattern = pattern.replace(/\\/+$/, '') + '/*';\r\n }\r\n\r\n return {\r\n keys: keys,\r\n regexp: new RegExp(\r\n '^' + pattern + '(?:[?#]|$)',\r\n opts.caseInsensitiveMatch ? 'i' : ''\r\n )\r\n };\r\n}\r\n\r\n/* global routeToRegExp: false */\r\n/* global shallowCopy: false */\r\n\r\n// `isArray` and `isObject` are necessary for `shallowCopy()` (included via `src/shallowCopy.js`).\r\n// They are initialized inside the `$RouteProvider`, to ensure `window.angular` is available.\r\nvar isArray;\r\nvar isObject;\r\nvar isDefined;\r\nvar noop;\r\n\r\n/**\r\n * @ngdoc module\r\n * @name ngRoute\r\n * @description\r\n *\r\n * The `ngRoute` module provides routing and deeplinking services and directives for AngularJS apps.\r\n *\r\n * ## Example\r\n * See {@link ngRoute.$route#examples $route} for an example of configuring and using `ngRoute`.\r\n *\r\n */\r\n/* global -ngRouteModule */\r\nvar ngRouteModule = angular.\r\n module('ngRoute', []).\r\n info({ angularVersion: '1.7.5' }).\r\n provider('$route', $RouteProvider).\r\n // Ensure `$route` will be instantiated in time to capture the initial `$locationChangeSuccess`\r\n // event (unless explicitly disabled). This is necessary in case `ngView` is included in an\r\n // asynchronously loaded template.\r\n run(instantiateRoute);\r\nvar $routeMinErr = angular.$$minErr('ngRoute');\r\nvar isEagerInstantiationEnabled;\r\n\r\n\r\n/**\r\n * @ngdoc provider\r\n * @name $routeProvider\r\n * @this\r\n *\r\n * @description\r\n *\r\n * Used for configuring routes.\r\n *\r\n * ## Example\r\n * See {@link ngRoute.$route#examples $route} for an example of configuring and using `ngRoute`.\r\n *\r\n * ## Dependencies\r\n * Requires the {@link ngRoute `ngRoute`} module to be installed.\r\n */\r\nfunction $RouteProvider() {\r\n isArray = angular.isArray;\r\n isObject = angular.isObject;\r\n isDefined = angular.isDefined;\r\n noop = angular.noop;\r\n\r\n function inherit(parent, extra) {\r\n return angular.extend(Object.create(parent), extra);\r\n }\r\n\r\n var routes = {};\r\n\r\n /**\r\n * @ngdoc method\r\n * @name $routeProvider#when\r\n *\r\n * @param {string} path Route path (matched against `$location.path`). If `$location.path`\r\n * contains redundant trailing slash or is missing one, the route will still match and the\r\n * `$location.path` will be updated to add or drop the trailing slash to exactly match the\r\n * route definition.\r\n *\r\n * * `path` can contain named groups starting with a colon: e.g. `:name`. All characters up\r\n * to the next slash are matched and stored in `$routeParams` under the given `name`\r\n * when the route matches.\r\n * * `path` can contain named groups starting with a colon and ending with a star:\r\n * e.g.`:name*`. All characters are eagerly stored in `$routeParams` under the given `name`\r\n * when the route matches.\r\n * * `path` can contain optional named groups with a question mark: e.g.`:name?`.\r\n *\r\n * For example, routes like `/color/:color/largecode/:largecode*\\/edit` will match\r\n * `/color/brown/largecode/code/with/slashes/edit` and extract:\r\n *\r\n * * `color: brown`\r\n * * `largecode: code/with/slashes`.\r\n *\r\n *\r\n * @param {Object} route Mapping information to be assigned to `$route.current` on route\r\n * match.\r\n *\r\n * Object properties:\r\n *\r\n * - `controller` – `{(string|Function)=}` – Controller fn that should be associated with\r\n * newly created scope or the name of a {@link angular.Module#controller registered\r\n * controller} if passed as a string.\r\n * - `controllerAs` – `{string=}` – An identifier name for a reference to the controller.\r\n * If present, the controller will be published to scope under the `controllerAs` name.\r\n * - `template` – `{(string|Function)=}` – html template as a string or a function that\r\n * returns an html template as a string which should be used by {@link\r\n * ngRoute.directive:ngView ngView} or {@link ng.directive:ngInclude ngInclude} directives.\r\n * This property takes precedence over `templateUrl`.\r\n *\r\n * If `template` is a function, it will be called with the following parameters:\r\n *\r\n * - `{Array.}` - route parameters extracted from the current\r\n * `$location.path()` by applying the current route\r\n *\r\n * One of `template` or `templateUrl` is required.\r\n *\r\n * - `templateUrl` – `{(string|Function)=}` – path or function that returns a path to an html\r\n * template that should be used by {@link ngRoute.directive:ngView ngView}.\r\n *\r\n * If `templateUrl` is a function, it will be called with the following parameters:\r\n *\r\n * - `{Array.}` - route parameters extracted from the current\r\n * `$location.path()` by applying the current route\r\n *\r\n * One of `templateUrl` or `template` is required.\r\n *\r\n * - `resolve` - `{Object.=}` - An optional map of dependencies which should\r\n * be injected into the controller. If any of these dependencies are promises, the router\r\n * will wait for them all to be resolved or one to be rejected before the controller is\r\n * instantiated.\r\n * If all the promises are resolved successfully, the values of the resolved promises are\r\n * injected and {@link ngRoute.$route#$routeChangeSuccess $routeChangeSuccess} event is\r\n * fired. If any of the promises are rejected the\r\n * {@link ngRoute.$route#$routeChangeError $routeChangeError} event is fired.\r\n * For easier access to the resolved dependencies from the template, the `resolve` map will\r\n * be available on the scope of the route, under `$resolve` (by default) or a custom name\r\n * specified by the `resolveAs` property (see below). This can be particularly useful, when\r\n * working with {@link angular.Module#component components} as route templates.
\r\n *
\r\n * **Note:** If your scope already contains a property with this name, it will be hidden\r\n * or overwritten. Make sure, you specify an appropriate name for this property, that\r\n * does not collide with other properties on the scope.\r\n *
\r\n * The map object is:\r\n *\r\n * - `key` – `{string}`: a name of a dependency to be injected into the controller.\r\n * - `factory` - `{string|Function}`: If `string` then it is an alias for a service.\r\n * Otherwise if function, then it is {@link auto.$injector#invoke injected}\r\n * and the return value is treated as the dependency. If the result is a promise, it is\r\n * resolved before its value is injected into the controller. Be aware that\r\n * `ngRoute.$routeParams` will still refer to the previous route within these resolve\r\n * functions. Use `$route.current.params` to access the new route parameters, instead.\r\n *\r\n * - `resolveAs` - `{string=}` - The name under which the `resolve` map will be available on\r\n * the scope of the route. If omitted, defaults to `$resolve`.\r\n *\r\n * - `redirectTo` – `{(string|Function)=}` – value to update\r\n * {@link ng.$location $location} path with and trigger route redirection.\r\n *\r\n * If `redirectTo` is a function, it will be called with the following parameters:\r\n *\r\n * - `{Object.}` - route parameters extracted from the current\r\n * `$location.path()` by applying the current route templateUrl.\r\n * - `{string}` - current `$location.path()`\r\n * - `{Object}` - current `$location.search()`\r\n *\r\n * The custom `redirectTo` function is expected to return a string which will be used\r\n * to update `$location.url()`. If the function throws an error, no further processing will\r\n * take place and the {@link ngRoute.$route#$routeChangeError $routeChangeError} event will\r\n * be fired.\r\n *\r\n * Routes that specify `redirectTo` will not have their controllers, template functions\r\n * or resolves called, the `$location` will be changed to the redirect url and route\r\n * processing will stop. The exception to this is if the `redirectTo` is a function that\r\n * returns `undefined`. In this case the route transition occurs as though there was no\r\n * redirection.\r\n *\r\n * - `resolveRedirectTo` – `{Function=}` – a function that will (eventually) return the value\r\n * to update {@link ng.$location $location} URL with and trigger route redirection. In\r\n * contrast to `redirectTo`, dependencies can be injected into `resolveRedirectTo` and the\r\n * return value can be either a string or a promise that will be resolved to a string.\r\n *\r\n * Similar to `redirectTo`, if the return value is `undefined` (or a promise that gets\r\n * resolved to `undefined`), no redirection takes place and the route transition occurs as\r\n * though there was no redirection.\r\n *\r\n * If the function throws an error or the returned promise gets rejected, no further\r\n * processing will take place and the\r\n * {@link ngRoute.$route#$routeChangeError $routeChangeError} event will be fired.\r\n *\r\n * `redirectTo` takes precedence over `resolveRedirectTo`, so specifying both on the same\r\n * route definition, will cause the latter to be ignored.\r\n *\r\n * - `[reloadOnUrl=true]` - `{boolean=}` - reload route when any part of the URL changes\r\n * (including the path) even if the new URL maps to the same route.\r\n *\r\n * If the option is set to `false` and the URL in the browser changes, but the new URL maps\r\n * to the same route, then a `$routeUpdate` event is broadcasted on the root scope (without\r\n * reloading the route).\r\n *\r\n * - `[reloadOnSearch=true]` - `{boolean=}` - reload route when only `$location.search()`\r\n * or `$location.hash()` changes.\r\n *\r\n * If the option is set to `false` and the URL in the browser changes, then a `$routeUpdate`\r\n * event is broadcasted on the root scope (without reloading the route).\r\n *\r\n *
\r\n * **Note:** This option has no effect if `reloadOnUrl` is set to `false`.\r\n *
\r\n *\r\n * - `[caseInsensitiveMatch=false]` - `{boolean=}` - match routes without being case sensitive\r\n *\r\n * If the option is set to `true`, then the particular route can be matched without being\r\n * case sensitive\r\n *\r\n * @returns {Object} self\r\n *\r\n * @description\r\n * Adds a new route definition to the `$route` service.\r\n */\r\n this.when = function(path, route) {\r\n //copy original route object to preserve params inherited from proto chain\r\n var routeCopy = shallowCopy(route);\r\n if (angular.isUndefined(routeCopy.reloadOnUrl)) {\r\n routeCopy.reloadOnUrl = true;\r\n }\r\n if (angular.isUndefined(routeCopy.reloadOnSearch)) {\r\n routeCopy.reloadOnSearch = true;\r\n }\r\n if (angular.isUndefined(routeCopy.caseInsensitiveMatch)) {\r\n routeCopy.caseInsensitiveMatch = this.caseInsensitiveMatch;\r\n }\r\n routes[path] = angular.extend(\r\n routeCopy,\r\n {originalPath: path},\r\n path && routeToRegExp(path, routeCopy)\r\n );\r\n\r\n // create redirection for trailing slashes\r\n if (path) {\r\n var redirectPath = (path[path.length - 1] === '/')\r\n ? path.substr(0, path.length - 1)\r\n : path + '/';\r\n\r\n routes[redirectPath] = angular.extend(\r\n {originalPath: path, redirectTo: path},\r\n routeToRegExp(redirectPath, routeCopy)\r\n );\r\n }\r\n\r\n return this;\r\n };\r\n\r\n /**\r\n * @ngdoc property\r\n * @name $routeProvider#caseInsensitiveMatch\r\n * @description\r\n *\r\n * A boolean property indicating if routes defined\r\n * using this provider should be matched using a case insensitive\r\n * algorithm. Defaults to `false`.\r\n */\r\n this.caseInsensitiveMatch = false;\r\n\r\n /**\r\n * @ngdoc method\r\n * @name $routeProvider#otherwise\r\n *\r\n * @description\r\n * Sets route definition that will be used on route change when no other route definition\r\n * is matched.\r\n *\r\n * @param {Object|string} params Mapping information to be assigned to `$route.current`.\r\n * If called with a string, the value maps to `redirectTo`.\r\n * @returns {Object} self\r\n */\r\n this.otherwise = function(params) {\r\n if (typeof params === 'string') {\r\n params = {redirectTo: params};\r\n }\r\n this.when(null, params);\r\n return this;\r\n };\r\n\r\n /**\r\n * @ngdoc method\r\n * @name $routeProvider#eagerInstantiationEnabled\r\n * @kind function\r\n *\r\n * @description\r\n * Call this method as a setter to enable/disable eager instantiation of the\r\n * {@link ngRoute.$route $route} service upon application bootstrap. You can also call it as a\r\n * getter (i.e. without any arguments) to get the current value of the\r\n * `eagerInstantiationEnabled` flag.\r\n *\r\n * Instantiating `$route` early is necessary for capturing the initial\r\n * {@link ng.$location#$locationChangeStart $locationChangeStart} event and navigating to the\r\n * appropriate route. Usually, `$route` is instantiated in time by the\r\n * {@link ngRoute.ngView ngView} directive. Yet, in cases where `ngView` is included in an\r\n * asynchronously loaded template (e.g. in another directive's template), the directive factory\r\n * might not be called soon enough for `$route` to be instantiated _before_ the initial\r\n * `$locationChangeSuccess` event is fired. Eager instantiation ensures that `$route` is always\r\n * instantiated in time, regardless of when `ngView` will be loaded.\r\n *\r\n * The default value is true.\r\n *\r\n * **Note**:
\r\n * You may want to disable the default behavior when unit-testing modules that depend on\r\n * `ngRoute`, in order to avoid an unexpected request for the default route's template.\r\n *\r\n * @param {boolean=} enabled - If provided, update the internal `eagerInstantiationEnabled` flag.\r\n *\r\n * @returns {*} The current value of the `eagerInstantiationEnabled` flag if used as a getter or\r\n * itself (for chaining) if used as a setter.\r\n */\r\n isEagerInstantiationEnabled = true;\r\n this.eagerInstantiationEnabled = function eagerInstantiationEnabled(enabled) {\r\n if (isDefined(enabled)) {\r\n isEagerInstantiationEnabled = enabled;\r\n return this;\r\n }\r\n\r\n return isEagerInstantiationEnabled;\r\n };\r\n\r\n\r\n this.$get = ['$rootScope',\r\n '$location',\r\n '$routeParams',\r\n '$q',\r\n '$injector',\r\n '$templateRequest',\r\n '$sce',\r\n '$browser',\r\n function($rootScope, $location, $routeParams, $q, $injector, $templateRequest, $sce, $browser) {\r\n\r\n /**\r\n * @ngdoc service\r\n * @name $route\r\n * @requires $location\r\n * @requires $routeParams\r\n *\r\n * @property {Object} current Reference to the current route definition.\r\n * The route definition contains:\r\n *\r\n * - `controller`: The controller constructor as defined in the route definition.\r\n * - `locals`: A map of locals which is used by {@link ng.$controller $controller} service for\r\n * controller instantiation. The `locals` contain\r\n * the resolved values of the `resolve` map. Additionally the `locals` also contain:\r\n *\r\n * - `$scope` - The current route scope.\r\n * - `$template` - The current route template HTML.\r\n *\r\n * The `locals` will be assigned to the route scope's `$resolve` property. You can override\r\n * the property name, using `resolveAs` in the route definition. See\r\n * {@link ngRoute.$routeProvider $routeProvider} for more info.\r\n *\r\n * @property {Object} routes Object with all route configuration Objects as its properties.\r\n *\r\n * @description\r\n * `$route` is used for deep-linking URLs to controllers and views (HTML partials).\r\n * It watches `$location.url()` and tries to map the path to an existing route definition.\r\n *\r\n * Requires the {@link ngRoute `ngRoute`} module to be installed.\r\n *\r\n * You can define routes through {@link ngRoute.$routeProvider $routeProvider}'s API.\r\n *\r\n * The `$route` service is typically used in conjunction with the\r\n * {@link ngRoute.directive:ngView `ngView`} directive and the\r\n * {@link ngRoute.$routeParams `$routeParams`} service.\r\n *\r\n * @example\r\n * This example shows how changing the URL hash causes the `$route` to match a route against the\r\n * URL, and the `ngView` pulls in the partial.\r\n *\r\n * \r\n * \r\n *
\r\n * Choose:\r\n * Moby |\r\n * Moby: Ch1 |\r\n * Gatsby |\r\n * Gatsby: Ch4 |\r\n * Scarlet Letter
\r\n *\r\n *
\r\n *\r\n *
\r\n *\r\n *
$location.path() = {{$location.path()}}
\r\n *
$route.current.templateUrl = {{$route.current.templateUrl}}
\r\n *
$route.current.params = {{$route.current.params}}
\r\n *
$route.current.scope.name = {{$route.current.scope.name}}
\r\n *
$routeParams = {{$routeParams}}
\r\n *
\r\n *
\r\n *\r\n * \r\n * controller: {{name}}
\r\n * Book Id: {{params.bookId}}
\r\n *
\r\n *\r\n * \r\n * controller: {{name}}
\r\n * Book Id: {{params.bookId}}
\r\n * Chapter Id: {{params.chapterId}}\r\n *
\r\n *\r\n * \r\n * angular.module('ngRouteExample', ['ngRoute'])\r\n *\r\n * .controller('MainController', function($scope, $route, $routeParams, $location) {\r\n * $scope.$route = $route;\r\n * $scope.$location = $location;\r\n * $scope.$routeParams = $routeParams;\r\n * })\r\n *\r\n * .controller('BookController', function($scope, $routeParams) {\r\n * $scope.name = 'BookController';\r\n * $scope.params = $routeParams;\r\n * })\r\n *\r\n * .controller('ChapterController', function($scope, $routeParams) {\r\n * $scope.name = 'ChapterController';\r\n * $scope.params = $routeParams;\r\n * })\r\n *\r\n * .config(function($routeProvider, $locationProvider) {\r\n * $routeProvider\r\n * .when('/Book/:bookId', {\r\n * templateUrl: 'book.html',\r\n * controller: 'BookController',\r\n * resolve: {\r\n * // I will cause a 1 second delay\r\n * delay: function($q, $timeout) {\r\n * var delay = $q.defer();\r\n * $timeout(delay.resolve, 1000);\r\n * return delay.promise;\r\n * }\r\n * }\r\n * })\r\n * .when('/Book/:bookId/ch/:chapterId', {\r\n * templateUrl: 'chapter.html',\r\n * controller: 'ChapterController'\r\n * });\r\n *\r\n * // configure html5 to get links working on jsfiddle\r\n * $locationProvider.html5Mode(true);\r\n * });\r\n *\r\n * \r\n *\r\n * \r\n * it('should load and compile correct template', function() {\r\n * element(by.linkText('Moby: Ch1')).click();\r\n * var content = element(by.css('[ng-view]')).getText();\r\n * expect(content).toMatch(/controller: ChapterController/);\r\n * expect(content).toMatch(/Book Id: Moby/);\r\n * expect(content).toMatch(/Chapter Id: 1/);\r\n *\r\n * element(by.partialLinkText('Scarlet')).click();\r\n *\r\n * content = element(by.css('[ng-view]')).getText();\r\n * expect(content).toMatch(/controller: BookController/);\r\n * expect(content).toMatch(/Book Id: Scarlet/);\r\n * });\r\n * \r\n *
\r\n */\r\n\r\n /**\r\n * @ngdoc event\r\n * @name $route#$routeChangeStart\r\n * @eventType broadcast on root scope\r\n * @description\r\n * Broadcasted before a route change. At this point the route services starts\r\n * resolving all of the dependencies needed for the route change to occur.\r\n * Typically this involves fetching the view template as well as any dependencies\r\n * defined in `resolve` route property. Once all of the dependencies are resolved\r\n * `$routeChangeSuccess` is fired.\r\n *\r\n * The route change (and the `$location` change that triggered it) can be prevented\r\n * by calling `preventDefault` method of the event. See {@link ng.$rootScope.Scope#$on}\r\n * for more details about event object.\r\n *\r\n * @param {Object} angularEvent Synthetic event object.\r\n * @param {Route} next Future route information.\r\n * @param {Route} current Current route information.\r\n */\r\n\r\n /**\r\n * @ngdoc event\r\n * @name $route#$routeChangeSuccess\r\n * @eventType broadcast on root scope\r\n * @description\r\n * Broadcasted after a route change has happened successfully.\r\n * The `resolve` dependencies are now available in the `current.locals` property.\r\n *\r\n * {@link ngRoute.directive:ngView ngView} listens for the directive\r\n * to instantiate the controller and render the view.\r\n *\r\n * @param {Object} angularEvent Synthetic event object.\r\n * @param {Route} current Current route information.\r\n * @param {Route|Undefined} previous Previous route information, or undefined if current is\r\n * first route entered.\r\n */\r\n\r\n /**\r\n * @ngdoc event\r\n * @name $route#$routeChangeError\r\n * @eventType broadcast on root scope\r\n * @description\r\n * Broadcasted if a redirection function fails or any redirection or resolve promises are\r\n * rejected.\r\n *\r\n * @param {Object} angularEvent Synthetic event object\r\n * @param {Route} current Current route information.\r\n * @param {Route} previous Previous route information.\r\n * @param {Route} rejection The thrown error or the rejection reason of the promise. Usually\r\n * the rejection reason is the error that caused the promise to get rejected.\r\n */\r\n\r\n /**\r\n * @ngdoc event\r\n * @name $route#$routeUpdate\r\n * @eventType broadcast on root scope\r\n * @description\r\n * Broadcasted if the same instance of a route (including template, controller instance,\r\n * resolved dependencies, etc.) is being reused. This can happen if either `reloadOnSearch` or\r\n * `reloadOnUrl` has been set to `false`.\r\n *\r\n * @param {Object} angularEvent Synthetic event object\r\n * @param {Route} current Current/previous route information.\r\n */\r\n\r\n var forceReload = false,\r\n preparedRoute,\r\n preparedRouteIsUpdateOnly,\r\n $route = {\r\n routes: routes,\r\n\r\n /**\r\n * @ngdoc method\r\n * @name $route#reload\r\n *\r\n * @description\r\n * Causes `$route` service to reload the current route even if\r\n * {@link ng.$location $location} hasn't changed.\r\n *\r\n * As a result of that, {@link ngRoute.directive:ngView ngView}\r\n * creates new scope and reinstantiates the controller.\r\n */\r\n reload: function() {\r\n forceReload = true;\r\n\r\n var fakeLocationEvent = {\r\n defaultPrevented: false,\r\n preventDefault: function fakePreventDefault() {\r\n this.defaultPrevented = true;\r\n forceReload = false;\r\n }\r\n };\r\n\r\n $rootScope.$evalAsync(function() {\r\n prepareRoute(fakeLocationEvent);\r\n if (!fakeLocationEvent.defaultPrevented) commitRoute();\r\n });\r\n },\r\n\r\n /**\r\n * @ngdoc method\r\n * @name $route#updateParams\r\n *\r\n * @description\r\n * Causes `$route` service to update the current URL, replacing\r\n * current route parameters with those specified in `newParams`.\r\n * Provided property names that match the route's path segment\r\n * definitions will be interpolated into the location's path, while\r\n * remaining properties will be treated as query params.\r\n *\r\n * @param {!Object} newParams mapping of URL parameter names to values\r\n */\r\n updateParams: function(newParams) {\r\n if (this.current && this.current.$$route) {\r\n newParams = angular.extend({}, this.current.params, newParams);\r\n $location.path(interpolate(this.current.$$route.originalPath, newParams));\r\n // interpolate modifies newParams, only query params are left\r\n $location.search(newParams);\r\n } else {\r\n throw $routeMinErr('norout', 'Tried updating route with no current route');\r\n }\r\n }\r\n };\r\n\r\n $rootScope.$on('$locationChangeStart', prepareRoute);\r\n $rootScope.$on('$locationChangeSuccess', commitRoute);\r\n\r\n return $route;\r\n\r\n /////////////////////////////////////////////////////\r\n\r\n /**\r\n * @param on {string} current url\r\n * @param route {Object} route regexp to match the url against\r\n * @return {?Object}\r\n *\r\n * @description\r\n * Check if the route matches the current url.\r\n *\r\n * Inspired by match in\r\n * visionmedia/express/lib/router/router.js.\r\n */\r\n function switchRouteMatcher(on, route) {\r\n var keys = route.keys,\r\n params = {};\r\n\r\n if (!route.regexp) return null;\r\n\r\n var m = route.regexp.exec(on);\r\n if (!m) return null;\r\n\r\n for (var i = 1, len = m.length; i < len; ++i) {\r\n var key = keys[i - 1];\r\n\r\n var val = m[i];\r\n\r\n if (key && val) {\r\n params[key.name] = val;\r\n }\r\n }\r\n return params;\r\n }\r\n\r\n function prepareRoute($locationEvent) {\r\n var lastRoute = $route.current;\r\n\r\n preparedRoute = parseRoute();\r\n preparedRouteIsUpdateOnly = isNavigationUpdateOnly(preparedRoute, lastRoute);\r\n\r\n if (!preparedRouteIsUpdateOnly && (lastRoute || preparedRoute)) {\r\n if ($rootScope.$broadcast('$routeChangeStart', preparedRoute, lastRoute).defaultPrevented) {\r\n if ($locationEvent) {\r\n $locationEvent.preventDefault();\r\n }\r\n }\r\n }\r\n }\r\n\r\n function commitRoute() {\r\n var lastRoute = $route.current;\r\n var nextRoute = preparedRoute;\r\n\r\n if (preparedRouteIsUpdateOnly) {\r\n lastRoute.params = nextRoute.params;\r\n angular.copy(lastRoute.params, $routeParams);\r\n $rootScope.$broadcast('$routeUpdate', lastRoute);\r\n } else if (nextRoute || lastRoute) {\r\n forceReload = false;\r\n $route.current = nextRoute;\r\n\r\n var nextRoutePromise = $q.resolve(nextRoute);\r\n\r\n $browser.$$incOutstandingRequestCount('$route');\r\n\r\n nextRoutePromise.\r\n then(getRedirectionData).\r\n then(handlePossibleRedirection).\r\n then(function(keepProcessingRoute) {\r\n return keepProcessingRoute && nextRoutePromise.\r\n then(resolveLocals).\r\n then(function(locals) {\r\n // after route change\r\n if (nextRoute === $route.current) {\r\n if (nextRoute) {\r\n nextRoute.locals = locals;\r\n angular.copy(nextRoute.params, $routeParams);\r\n }\r\n $rootScope.$broadcast('$routeChangeSuccess', nextRoute, lastRoute);\r\n }\r\n });\r\n }).catch(function(error) {\r\n if (nextRoute === $route.current) {\r\n $rootScope.$broadcast('$routeChangeError', nextRoute, lastRoute, error);\r\n }\r\n }).finally(function() {\r\n // Because `commitRoute()` is called from a `$rootScope.$evalAsync` block (see\r\n // `$locationWatch`), this `$$completeOutstandingRequest()` call will not cause\r\n // `outstandingRequestCount` to hit zero. This is important in case we are redirecting\r\n // to a new route which also requires some asynchronous work.\r\n\r\n $browser.$$completeOutstandingRequest(noop, '$route');\r\n });\r\n }\r\n }\r\n\r\n function getRedirectionData(route) {\r\n var data = {\r\n route: route,\r\n hasRedirection: false\r\n };\r\n\r\n if (route) {\r\n if (route.redirectTo) {\r\n if (angular.isString(route.redirectTo)) {\r\n data.path = interpolate(route.redirectTo, route.params);\r\n data.search = route.params;\r\n data.hasRedirection = true;\r\n } else {\r\n var oldPath = $location.path();\r\n var oldSearch = $location.search();\r\n var newUrl = route.redirectTo(route.pathParams, oldPath, oldSearch);\r\n\r\n if (angular.isDefined(newUrl)) {\r\n data.url = newUrl;\r\n data.hasRedirection = true;\r\n }\r\n }\r\n } else if (route.resolveRedirectTo) {\r\n return $q.\r\n resolve($injector.invoke(route.resolveRedirectTo)).\r\n then(function(newUrl) {\r\n if (angular.isDefined(newUrl)) {\r\n data.url = newUrl;\r\n data.hasRedirection = true;\r\n }\r\n\r\n return data;\r\n });\r\n }\r\n }\r\n\r\n return data;\r\n }\r\n\r\n function handlePossibleRedirection(data) {\r\n var keepProcessingRoute = true;\r\n\r\n if (data.route !== $route.current) {\r\n keepProcessingRoute = false;\r\n } else if (data.hasRedirection) {\r\n var oldUrl = $location.url();\r\n var newUrl = data.url;\r\n\r\n if (newUrl) {\r\n $location.\r\n url(newUrl).\r\n replace();\r\n } else {\r\n newUrl = $location.\r\n path(data.path).\r\n search(data.search).\r\n replace().\r\n url();\r\n }\r\n\r\n if (newUrl !== oldUrl) {\r\n // Exit out and don't process current next value,\r\n // wait for next location change from redirect\r\n keepProcessingRoute = false;\r\n }\r\n }\r\n\r\n return keepProcessingRoute;\r\n }\r\n\r\n function resolveLocals(route) {\r\n if (route) {\r\n var locals = angular.extend({}, route.resolve);\r\n angular.forEach(locals, function(value, key) {\r\n locals[key] = angular.isString(value) ?\r\n $injector.get(value) :\r\n $injector.invoke(value, null, null, key);\r\n });\r\n var template = getTemplateFor(route);\r\n if (angular.isDefined(template)) {\r\n locals['$template'] = template;\r\n }\r\n return $q.all(locals);\r\n }\r\n }\r\n\r\n function getTemplateFor(route) {\r\n var template, templateUrl;\r\n if (angular.isDefined(template = route.template)) {\r\n if (angular.isFunction(template)) {\r\n template = template(route.params);\r\n }\r\n } else if (angular.isDefined(templateUrl = route.templateUrl)) {\r\n if (angular.isFunction(templateUrl)) {\r\n templateUrl = templateUrl(route.params);\r\n }\r\n if (angular.isDefined(templateUrl)) {\r\n route.loadedTemplateUrl = $sce.valueOf(templateUrl);\r\n template = $templateRequest(templateUrl);\r\n }\r\n }\r\n return template;\r\n }\r\n\r\n /**\r\n * @returns {Object} the current active route, by matching it against the URL\r\n */\r\n function parseRoute() {\r\n // Match a route\r\n var params, match;\r\n angular.forEach(routes, function(route, path) {\r\n if (!match && (params = switchRouteMatcher($location.path(), route))) {\r\n match = inherit(route, {\r\n params: angular.extend({}, $location.search(), params),\r\n pathParams: params});\r\n match.$$route = route;\r\n }\r\n });\r\n // No route matched; fallback to \"otherwise\" route\r\n return match || routes[null] && inherit(routes[null], {params: {}, pathParams:{}});\r\n }\r\n\r\n /**\r\n * @param {Object} newRoute - The new route configuration (as returned by `parseRoute()`).\r\n * @param {Object} oldRoute - The previous route configuration (as returned by `parseRoute()`).\r\n * @returns {boolean} Whether this is an \"update-only\" navigation, i.e. the URL maps to the same\r\n * route and it can be reused (based on the config and the type of change).\r\n */\r\n function isNavigationUpdateOnly(newRoute, oldRoute) {\r\n // IF this is not a forced reload\r\n return !forceReload\r\n // AND both `newRoute`/`oldRoute` are defined\r\n && newRoute && oldRoute\r\n // AND they map to the same Route Definition Object\r\n && (newRoute.$$route === oldRoute.$$route)\r\n // AND `reloadOnUrl` is disabled\r\n && (!newRoute.reloadOnUrl\r\n // OR `reloadOnSearch` is disabled\r\n || (!newRoute.reloadOnSearch\r\n // AND both routes have the same path params\r\n && angular.equals(newRoute.pathParams, oldRoute.pathParams)\r\n )\r\n );\r\n }\r\n\r\n /**\r\n * @returns {string} interpolation of the redirect path with the parameters\r\n */\r\n function interpolate(string, params) {\r\n var result = [];\r\n angular.forEach((string || '').split(':'), function(segment, i) {\r\n if (i === 0) {\r\n result.push(segment);\r\n } else {\r\n var segmentMatch = segment.match(/(\\w+)(?:[?*])?(.*)/);\r\n var key = segmentMatch[1];\r\n result.push(params[key]);\r\n result.push(segmentMatch[2] || '');\r\n delete params[key];\r\n }\r\n });\r\n return result.join('');\r\n }\r\n }];\r\n}\r\n\r\ninstantiateRoute.$inject = ['$injector'];\r\nfunction instantiateRoute($injector) {\r\n if (isEagerInstantiationEnabled) {\r\n // Instantiate `$route`\r\n $injector.get('$route');\r\n }\r\n}\r\n\r\nngRouteModule.provider('$routeParams', $RouteParamsProvider);\r\n\r\n\r\n/**\r\n * @ngdoc service\r\n * @name $routeParams\r\n * @requires $route\r\n * @this\r\n *\r\n * @description\r\n * The `$routeParams` service allows you to retrieve the current set of route parameters.\r\n *\r\n * Requires the {@link ngRoute `ngRoute`} module to be installed.\r\n *\r\n * The route parameters are a combination of {@link ng.$location `$location`}'s\r\n * {@link ng.$location#search `search()`} and {@link ng.$location#path `path()`}.\r\n * The `path` parameters are extracted when the {@link ngRoute.$route `$route`} path is matched.\r\n *\r\n * In case of parameter name collision, `path` params take precedence over `search` params.\r\n *\r\n * The service guarantees that the identity of the `$routeParams` object will remain unchanged\r\n * (but its properties will likely change) even when a route change occurs.\r\n *\r\n * Note that the `$routeParams` are only updated *after* a route change completes successfully.\r\n * This means that you cannot rely on `$routeParams` being correct in route resolve functions.\r\n * Instead you can use `$route.current.params` to access the new route's parameters.\r\n *\r\n * @example\r\n * ```js\r\n * // Given:\r\n * // URL: http://server.com/index.html#/Chapter/1/Section/2?search=moby\r\n * // Route: /Chapter/:chapterId/Section/:sectionId\r\n * //\r\n * // Then\r\n * $routeParams ==> {chapterId:'1', sectionId:'2', search:'moby'}\r\n * ```\r\n */\r\nfunction $RouteParamsProvider() {\r\n this.$get = function() { return {}; };\r\n}\r\n\r\nngRouteModule.directive('ngView', ngViewFactory);\r\nngRouteModule.directive('ngView', ngViewFillContentFactory);\r\n\r\n\r\n/**\r\n * @ngdoc directive\r\n * @name ngView\r\n * @restrict ECA\r\n *\r\n * @description\r\n * `ngView` is a directive that complements the {@link ngRoute.$route $route} service by\r\n * including the rendered template of the current route into the main layout (`index.html`) file.\r\n * Every time the current route changes, the included view changes with it according to the\r\n * configuration of the `$route` service.\r\n *\r\n * Requires the {@link ngRoute `ngRoute`} module to be installed.\r\n *\r\n * @animations\r\n * | Animation | Occurs |\r\n * |----------------------------------|-------------------------------------|\r\n * | {@link ng.$animate#enter enter} | when the new element is inserted to the DOM |\r\n * | {@link ng.$animate#leave leave} | when the old element is removed from to the DOM |\r\n *\r\n * The enter and leave animation occur concurrently.\r\n *\r\n * @scope\r\n * @priority 400\r\n * @param {string=} onload Expression to evaluate whenever the view updates.\r\n *\r\n * @param {string=} autoscroll Whether `ngView` should call {@link ng.$anchorScroll\r\n * $anchorScroll} to scroll the viewport after the view is updated.\r\n *\r\n * - If the attribute is not set, disable scrolling.\r\n * - If the attribute is set without value, enable scrolling.\r\n * - Otherwise enable scrolling only if the `autoscroll` attribute value evaluated\r\n * as an expression yields a truthy value.\r\n * @example\r\n \r\n \r\n
\r\n Choose:\r\n Moby |\r\n Moby: Ch1 |\r\n Gatsby |\r\n Gatsby: Ch4 |\r\n Scarlet Letter
\r\n\r\n
\r\n
\r\n
\r\n
\r\n\r\n
$location.path() = {{main.$location.path()}}
\r\n
$route.current.templateUrl = {{main.$route.current.templateUrl}}
\r\n
$route.current.params = {{main.$route.current.params}}
\r\n
$routeParams = {{main.$routeParams}}
\r\n
\r\n
\r\n\r\n \r\n
\r\n controller: {{book.name}}
\r\n Book Id: {{book.params.bookId}}
\r\n
\r\n
\r\n\r\n \r\n
\r\n controller: {{chapter.name}}
\r\n Book Id: {{chapter.params.bookId}}
\r\n Chapter Id: {{chapter.params.chapterId}}\r\n
\r\n
\r\n\r\n \r\n .view-animate-container {\r\n position:relative;\r\n height:100px!important;\r\n background:white;\r\n border:1px solid black;\r\n height:40px;\r\n overflow:hidden;\r\n }\r\n\r\n .view-animate {\r\n padding:10px;\r\n }\r\n\r\n .view-animate.ng-enter, .view-animate.ng-leave {\r\n transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 1.5s;\r\n\r\n display:block;\r\n width:100%;\r\n border-left:1px solid black;\r\n\r\n position:absolute;\r\n top:0;\r\n left:0;\r\n right:0;\r\n bottom:0;\r\n padding:10px;\r\n }\r\n\r\n .view-animate.ng-enter {\r\n left:100%;\r\n }\r\n .view-animate.ng-enter.ng-enter-active {\r\n left:0;\r\n }\r\n .view-animate.ng-leave.ng-leave-active {\r\n left:-100%;\r\n }\r\n \r\n\r\n \r\n angular.module('ngViewExample', ['ngRoute', 'ngAnimate'])\r\n .config(['$routeProvider', '$locationProvider',\r\n function($routeProvider, $locationProvider) {\r\n $routeProvider\r\n .when('/Book/:bookId', {\r\n templateUrl: 'book.html',\r\n controller: 'BookCtrl',\r\n controllerAs: 'book'\r\n })\r\n .when('/Book/:bookId/ch/:chapterId', {\r\n templateUrl: 'chapter.html',\r\n controller: 'ChapterCtrl',\r\n controllerAs: 'chapter'\r\n });\r\n\r\n $locationProvider.html5Mode(true);\r\n }])\r\n .controller('MainCtrl', ['$route', '$routeParams', '$location',\r\n function MainCtrl($route, $routeParams, $location) {\r\n this.$route = $route;\r\n this.$location = $location;\r\n this.$routeParams = $routeParams;\r\n }])\r\n .controller('BookCtrl', ['$routeParams', function BookCtrl($routeParams) {\r\n this.name = 'BookCtrl';\r\n this.params = $routeParams;\r\n }])\r\n .controller('ChapterCtrl', ['$routeParams', function ChapterCtrl($routeParams) {\r\n this.name = 'ChapterCtrl';\r\n this.params = $routeParams;\r\n }]);\r\n\r\n \r\n\r\n \r\n it('should load and compile correct template', function() {\r\n element(by.linkText('Moby: Ch1')).click();\r\n var content = element(by.css('[ng-view]')).getText();\r\n expect(content).toMatch(/controller: ChapterCtrl/);\r\n expect(content).toMatch(/Book Id: Moby/);\r\n expect(content).toMatch(/Chapter Id: 1/);\r\n\r\n element(by.partialLinkText('Scarlet')).click();\r\n\r\n content = element(by.css('[ng-view]')).getText();\r\n expect(content).toMatch(/controller: BookCtrl/);\r\n expect(content).toMatch(/Book Id: Scarlet/);\r\n });\r\n \r\n
\r\n */\r\n\r\n\r\n/**\r\n * @ngdoc event\r\n * @name ngView#$viewContentLoaded\r\n * @eventType emit on the current ngView scope\r\n * @description\r\n * Emitted every time the ngView content is reloaded.\r\n */\r\nngViewFactory.$inject = ['$route', '$anchorScroll', '$animate'];\r\nfunction ngViewFactory($route, $anchorScroll, $animate) {\r\n return {\r\n restrict: 'ECA',\r\n terminal: true,\r\n priority: 400,\r\n transclude: 'element',\r\n link: function(scope, $element, attr, ctrl, $transclude) {\r\n var currentScope,\r\n currentElement,\r\n previousLeaveAnimation,\r\n autoScrollExp = attr.autoscroll,\r\n onloadExp = attr.onload || '';\r\n\r\n scope.$on('$routeChangeSuccess', update);\r\n update();\r\n\r\n function cleanupLastView() {\r\n if (previousLeaveAnimation) {\r\n $animate.cancel(previousLeaveAnimation);\r\n previousLeaveAnimation = null;\r\n }\r\n\r\n if (currentScope) {\r\n currentScope.$destroy();\r\n currentScope = null;\r\n }\r\n if (currentElement) {\r\n previousLeaveAnimation = $animate.leave(currentElement);\r\n previousLeaveAnimation.done(function(response) {\r\n if (response !== false) previousLeaveAnimation = null;\r\n });\r\n currentElement = null;\r\n }\r\n }\r\n\r\n function update() {\r\n var locals = $route.current && $route.current.locals,\r\n template = locals && locals.$template;\r\n\r\n if (angular.isDefined(template)) {\r\n var newScope = scope.$new();\r\n var current = $route.current;\r\n\r\n // Note: This will also link all children of ng-view that were contained in the original\r\n // html. If that content contains controllers, ... they could pollute/change the scope.\r\n // However, using ng-view on an element with additional content does not make sense...\r\n // Note: We can't remove them in the cloneAttchFn of $transclude as that\r\n // function is called before linking the content, which would apply child\r\n // directives to non existing elements.\r\n var clone = $transclude(newScope, function(clone) {\r\n $animate.enter(clone, null, currentElement || $element).done(function onNgViewEnter(response) {\r\n if (response !== false && angular.isDefined(autoScrollExp)\r\n && (!autoScrollExp || scope.$eval(autoScrollExp))) {\r\n $anchorScroll();\r\n }\r\n });\r\n cleanupLastView();\r\n });\r\n\r\n currentElement = clone;\r\n currentScope = current.scope = newScope;\r\n currentScope.$emit('$viewContentLoaded');\r\n currentScope.$eval(onloadExp);\r\n } else {\r\n cleanupLastView();\r\n }\r\n }\r\n }\r\n };\r\n}\r\n\r\n// This directive is called during the $transclude call of the first `ngView` directive.\r\n// It will replace and compile the content of the element with the loaded template.\r\n// We need this directive so that the element content is already filled when\r\n// the link function of another directive on the same element as ngView\r\n// is called.\r\nngViewFillContentFactory.$inject = ['$compile', '$controller', '$route'];\r\nfunction ngViewFillContentFactory($compile, $controller, $route) {\r\n return {\r\n restrict: 'ECA',\r\n priority: -400,\r\n link: function(scope, $element) {\r\n var current = $route.current,\r\n locals = current.locals;\r\n\r\n $element.html(locals.$template);\r\n\r\n var link = $compile($element.contents());\r\n\r\n if (current.controller) {\r\n locals.$scope = scope;\r\n var controller = $controller(current.controller, locals);\r\n if (current.controllerAs) {\r\n scope[current.controllerAs] = controller;\r\n }\r\n $element.data('$ngControllerController', controller);\r\n $element.children().data('$ngControllerController', controller);\r\n }\r\n scope[current.resolveAs || '$resolve'] = locals;\r\n\r\n link(scope);\r\n }\r\n };\r\n}\r\n\r\n\r\n})(window, window.angular);\r\n","(function () {\nangular.module(\"gulp-routes\", [])\n.constant(\"Routes\", [\n {\n \"Name\": \"CategoryMessage\",\n \"Controller\": \"CategoryMessage\",\n \"Action\": \"Show\",\n \"fr\": {\n \"URL\": \"{categoryName}-cmsg-{categoryId:int}\"\n },\n \"en\": {\n \"URL\": \"{categoryName}-cmsg-{categoryId:int}\"\n }\n },\n {\n \"Name\": \"CategoryMessagePage\",\n \"Controller\": \"CategoryMessage\",\n \"Action\": \"ShowPage\",\n \"fr\": {\n \"URL\": \"{categoryName}-cmsg-{categoryId:int}-{page:int}\"\n },\n \"en\": {\n \"URL\": \"{categoryName}-cmsg-{categoryId:int}-{page:int}\"\n }\n },\n {\n \"Name\": \"Product\",\n \"Controller\": \"Product\",\n \"Action\": \"Show\",\n \"fr\": {\n \"URL\": \"{productName}-p-{productId:int}\"\n },\n \"en\": {\n \"URL\": \"{productName}-p-{productId:int}\"\n }\n },\n {\n \"Name\": \"Product1Attribute\",\n \"Controller\": \"Product\",\n \"Action\": \"Show1Attribute\",\n \"fr\": {\n \"URL\": \"{productName}-p-{productId:int}/{keyAttribute1}\"\n },\n \"en\": {\n \"URL\": \"{productName}-p-{productId:int}/{keyAttribute1}\"\n }\n },\n {\n \"Name\": \"Product2Attributes\",\n \"Controller\": \"Product\",\n \"Action\": \"Show2Attributes\",\n \"fr\": {\n \"URL\": \"{productName}-p-{productId:int}/{keyAttribute1}/{keyAttribute2}\"\n },\n \"en\": {\n \"URL\": \"{productName}-p-{productId:int}/{keyAttribute1}/{keyAttribute2}\"\n }\n },\n {\n \"Name\": \"Product3Attributes\",\n \"Controller\": \"Product\",\n \"Action\": \"Show3Attributes\",\n \"fr\": {\n \"URL\": \"{productName}-p-{productId:int}/{keyAttribute1}/{keyAttribute2}/{keyAttribute3}\"\n },\n \"en\": {\n \"URL\": \"{productName}-p-{productId:int}/{keyAttribute1}/{keyAttribute2}/{keyAttribute3}\"\n }\n },\n {\n \"Name\": \"ProductWithElasticSearch\",\n \"Controller\": \"Product\",\n \"Action\": \"ShowWithElasticSearch\",\n \"fr\": {\n \"URL\": \"{productName}-p-{productId:int}/es/{query}\"\n },\n \"en\": {\n \"URL\": \"{productName}-p-{productId:int}/es/{query}\"\n }\n },\n {\n \"Name\": \"Product1AttributeWithElasticSearch\",\n \"Controller\": \"Product\",\n \"Action\": \"Show1AttributeWithElasticSearch\",\n \"fr\": {\n \"URL\": \"{productName}-p-{productId:int}/{keyAttribute1}/es/{query}\"\n },\n \"en\": {\n \"URL\": \"{productName}-p-{productId:int}/{keyAttribute1}/es/{query}\"\n }\n },\n {\n \"Name\": \"Product2AttributesWithElasticSearch\",\n \"Controller\": \"Product\",\n \"Action\": \"Show2AttributesWithElasticSearch\",\n \"fr\": {\n \"URL\": \"{productName}-p-{productId:int}/{keyAttribute1}/{keyAttribute2}/es/{query}\"\n },\n \"en\": {\n \"URL\": \"{productName}-p-{productId:int}/{keyAttribute1}/{keyAttribute2}/es/{query}\"\n }\n },\n {\n \"Name\": \"Product3AttributesWithElasticSearch\",\n \"Controller\": \"Product\",\n \"Action\": \"Show3AttributesWithElasticSearch\",\n \"fr\": {\n \"URL\": \"{productName}-p-{productId:int}/{keyAttribute1}/{keyAttribute2}/{keyAttribute3}/es/{query}\"\n },\n \"en\": {\n \"URL\": \"{productName}-p-{productId:int}/{keyAttribute1}/{keyAttribute2}/{keyAttribute3}/es/{query}\"\n }\n },\n {\n \"Name\": \"Cart\",\n \"Controller\": \"Cart\",\n \"Action\": \"Index\",\n \"fr\": {\n \"URL\": \"panier\"\n },\n \"en\": {\n \"URL\": \"cart\"\n }\n },\n {\n \"Name\": \"CartOutdated\",\n \"Controller\": \"Cart\",\n \"Action\": \"Index\",\n \"fr\": {\n \"URL\": \"panier-expire\"\n },\n \"en\": {\n \"URL\": \"outdated-cart\"\n }\n },\n {\n \"Name\": \"CartIdentification\",\n \"Controller\": \"Cart\",\n \"Action\": \"Index\",\n \"fr\": {\n \"URL\": \"panier/identification\"\n },\n \"en\": {\n \"URL\": \"cart/authentification\"\n }\n },\n {\n \"Name\": \"CartShipping\",\n \"Controller\": \"Cart\",\n \"Action\": \"Index\",\n \"fr\": {\n \"URL\": \"panier/livraison\"\n },\n \"en\": {\n \"URL\": \"cart/delivery\"\n }\n },\n {\n \"Name\": \"CartPayment\",\n \"Controller\": \"Cart\",\n \"Action\": \"Index\",\n \"fr\": {\n \"URL\": \"panier/paiement\"\n },\n \"en\": {\n \"URL\": \"cart/payment\"\n }\n },\n {\n \"Name\": \"CartValidation\",\n \"Controller\": \"Cart\",\n \"Action\": \"Index\",\n \"fr\": {\n \"URL\": \"panier/validation\"\n },\n \"en\": {\n \"URL\": \"cart/validation\"\n }\n },\n {\n \"Name\": \"CartOnePageCheckout\",\n \"Controller\": \"Cart\",\n \"Action\": \"Index\",\n \"fr\": {\n \"URL\": \"commander\"\n },\n \"en\": {\n \"URL\": \"checkout\"\n }\n },\n {\n \"Name\": \"CartOnePageCheckoutPayment\",\n \"Controller\": \"Cart\",\n \"Action\": \"Index\",\n \"fr\": {\n \"URL\": \"retour-paiement\"\n },\n \"en\": {\n \"URL\": \"back-to-payment\"\n }\n },\n {\n \"Name\": \"CartPaymentAction\",\n \"Controller\": \"Payment\",\n \"Action\": \"Payment\",\n \"fr\": {\n \"URL\": \"paiement\"\n },\n \"en\": {\n \"URL\": \"payment\"\n }\n },\n {\n \"Name\": \"CartRecognition\",\n \"Controller\": \"Cart\",\n \"Action\": \"Recognition\",\n \"fr\": {\n \"URL\": \"reconnaissance-panier/{idFolder:int}/{token}\"\n },\n \"en\": {\n \"URL\": \"cart-recognition/{idFolder:int}/{token}\"\n }\n },\n {\n \"Name\": \"QuickOrder\",\n \"Controller\": \"Cart\",\n \"Action\": \"QuickOrder\",\n \"fr\": {\n \"URL\": \"commande-par-reference\"\n },\n \"en\": {\n \"URL\": \"order-by-reference\"\n }\n },\n {\n \"Name\": \"Login\",\n \"Controller\": \"Authentication\",\n \"Action\": \"Login\",\n \"fr\": {\n \"URL\": \"identification\"\n },\n \"en\": {\n \"URL\": \"authentication\"\n }\n },\n {\n \"Name\": \"LoginFromFacebook\",\n \"Controller\": \"Authentication\",\n \"Action\": \"LoginFromFacebook\",\n \"fr\": {\n \"URL\": \"identification-facebook\"\n },\n \"en\": {\n \"URL\": \"authentication-facebook\"\n }\n },\n {\n \"Name\": \"AccountHome\",\n \"Controller\": \"AccountHome\",\n \"Action\": \"AccountHome\",\n \"fr\": {\n \"URL\": \"mon-compte\"\n },\n \"en\": {\n \"URL\": \"my-account\"\n }\n },\n {\n \"Name\": \"AccountPasswordReset\",\n \"Controller\": \"AccountPasswordReset\",\n \"Action\": \"AccountPasswordReset\",\n \"fr\": {\n \"URL\": \"mot-de-passe\"\n },\n \"en\": {\n \"URL\": \"password\"\n }\n },\n {\n \"Name\": \"AccountOrderTracking\",\n \"Controller\": \"AccountOrderTracking\",\n \"Action\": \"AccountOrderTracking\",\n \"fr\": {\n \"URL\": \"suivi-de-commande\"\n },\n \"en\": {\n \"URL\": \"order-tracking\"\n }\n },\n {\n \"Name\": \"AccountInvoices\",\n \"Controller\": \"AccountInvoices\",\n \"Action\": \"AccountInvoices\",\n \"fr\": {\n \"URL\": \"factures\"\n },\n \"en\": {\n \"URL\": \"invoices\"\n }\n },\n {\n \"Name\": \"AccountClaim\",\n \"Controller\": \"AccountClaim\",\n \"Action\": \"AccountClaim\",\n \"fr\": {\n \"URL\": \"reclamation\"\n },\n \"en\": {\n \"URL\": \"claim\"\n }\n },\n {\n \"Name\": \"AccountReturns\",\n \"Controller\": \"AccountReturns\",\n \"Action\": \"AccountReturns\",\n \"fr\": {\n \"URL\": \"retours\"\n },\n \"en\": {\n \"URL\": \"returns\"\n }\n },\n {\n \"Name\": \"AccountSavedCarts\",\n \"Controller\": \"AccountSavedCarts\",\n \"Action\": \"AccountSavedCarts\",\n \"fr\": {\n \"URL\": \"paniers-sauvegardes\"\n },\n \"en\": {\n \"URL\": \"saved-cart\"\n }\n },\n {\n \"Name\": \"AccountNumericProducts\",\n \"Controller\": \"AccountNumericProducts\",\n \"Action\": \"Index\",\n \"fr\": {\n \"URL\": \"produits-numeriques\"\n },\n \"en\": {\n \"URL\": \"digital-products\"\n }\n },\n {\n \"Name\": \"AccountVouchers\",\n \"Controller\": \"AccountVouchers\",\n \"Action\": \"Index\",\n \"fr\": {\n \"URL\": \"bons-d-achat\"\n },\n \"en\": {\n \"URL\": \"vouchers\"\n }\n },\n {\n \"Name\": \"AccountLoyaltyPoints\",\n \"Controller\": \"AccountLoyaltyPoints\",\n \"Action\": \"AccountLoyaltyPoints\",\n \"fr\": {\n \"URL\": \"points-fidelite\"\n },\n \"en\": {\n \"URL\": \"loyalty-point\"\n }\n },\n {\n \"Name\": \"AccountWishList\",\n \"Controller\": \"AccountWishList\",\n \"Action\": \"WishList\",\n \"fr\": {\n \"URL\": \"liste-de-souhaits\"\n },\n \"en\": {\n \"URL\": \"wish-list\"\n }\n },\n {\n \"Name\": \"AccountMultiWishList\",\n \"Controller\": \"AccountWishList\",\n \"Action\": \"WishList\",\n \"fr\": {\n \"URL\": \"mes-listes-de-souhaits\"\n },\n \"en\": {\n \"URL\": \"my-wish-list\"\n }\n },\n {\n \"Name\": \"AccountQuotations\",\n \"Controller\": \"AccountQuotation\",\n \"Action\": \"Account\",\n \"fr\": {\n \"URL\": \"devis\"\n },\n \"en\": {\n \"URL\": \"quote\"\n }\n },\n {\n \"Name\": \"AccountAdvancedQuotations\",\n \"Controller\": \"AccountQuotation\",\n \"Action\": \"Account\",\n \"fr\": {\n \"URL\": \"mes-devis\"\n },\n \"en\": {\n \"URL\": \"my-quote\"\n }\n },\n {\n \"Name\": \"AccountCredits\",\n \"Controller\": \"AccountCredits\",\n \"Action\": \"Show\",\n \"fr\": {\n \"URL\": \"avoirs\"\n },\n \"en\": {\n \"URL\": \"credit-note\"\n }\n },\n {\n \"Name\": \"AccountSponsorShip\",\n \"Controller\": \"AccountSponsorShip\",\n \"Action\": \"AccountSponsorShip\",\n \"fr\": {\n \"URL\": \"parrainage\"\n },\n \"en\": {\n \"URL\": \"sponsorship\"\n }\n },\n {\n \"Name\": \"Search\",\n \"Controller\": \"Search\",\n \"Action\": \"Search\",\n \"fr\": {\n \"URL\": \"recherche\"\n },\n \"en\": {\n \"URL\": \"research\"\n }\n },\n {\n \"Name\": \"SearchAngular\",\n \"Controller\": \"Search\",\n \"Action\": \"Search\",\n \"fr\": {\n \"URL\": \"recherche/{q}\"\n },\n \"en\": {\n \"URL\": \"research/{q}\"\n }\n },\n {\n \"Name\": \"SearchPageAngular\",\n \"Controller\": \"Search\",\n \"Action\": \"Search\",\n \"fr\": {\n \"URL\": \"recherche/{q}/{p:int}\"\n },\n \"en\": {\n \"URL\": \"research/{q}/{p:int}\"\n }\n },\n {\n \"Name\": \"SortedSearchPageAngular\",\n \"Controller\": \"Search\",\n \"Action\": \"Search\",\n \"fr\": {\n \"URL\": \"recherche/{q}/{p:int}/{sort:alpha}\"\n },\n \"en\": {\n \"URL\": \"research/{q}/{p:int}/{sort:alpha}\"\n }\n },\n {\n \"Name\": \"SortedSearchAngular\",\n \"Controller\": \"Search\",\n \"Action\": \"Search\",\n \"fr\": {\n \"URL\": \"recherche/{q}/{sort:alpha}\"\n },\n \"en\": {\n \"URL\": \"research/{q}/{sort:alpha}\"\n }\n },\n {\n \"Name\": \"SearchProducts\",\n \"Controller\": \"Search\",\n \"Action\": \"SearchProducts\",\n \"fr\": {\n \"URL\": \"produits\"\n },\n \"en\": {\n \"URL\": \"products\"\n }\n },\n {\n \"Name\": \"SearchProductsPageAngular\",\n \"Controller\": \"Search\",\n \"Action\": \"SearchProducts\",\n \"fr\": {\n \"URL\": \"produits/{p:int}\"\n },\n \"en\": {\n \"URL\": \"products/{p:int}\"\n }\n },\n {\n \"Name\": \"SortedSearchProductsAngular\",\n \"Controller\": \"Search\",\n \"Action\": \"SearchProducts\",\n \"fr\": {\n \"URL\": \"produits/{sort:alpha}\"\n },\n \"en\": {\n \"URL\": \"products/{sort:alpha}\"\n }\n },\n {\n \"Name\": \"SortedSearchProductsPageAngular\",\n \"Controller\": \"Search\",\n \"Action\": \"SearchProducts\",\n \"fr\": {\n \"URL\": \"produits/{p:int}/{sort:alpha}\"\n },\n \"en\": {\n \"URL\": \"products/{p:int}/{sort:alpha}\"\n }\n },\n {\n \"Name\": \"StoresWebsite\",\n \"Controller\": \"Stores\",\n \"Action\": \"StoresWebsite\",\n \"fr\": {\n \"URL\": \"liste-magasins\"\n },\n \"en\": {\n \"URL\": \"stores-list\"\n }\n },\n {\n \"Name\": \"Contact\",\n \"Controller\": \"Form\",\n \"Action\": \"Contact\",\n \"fr\": {\n \"URL\": \"contact\"\n },\n \"en\": {\n \"URL\": \"contact\"\n }\n },\n {\n \"Name\": \"MessageCatalogRequest\",\n \"Controller\": \"Message\",\n \"Action\": \"CatalogRequest\",\n \"fr\": {\n \"URL\": \"Message/Catalogue\"\n },\n \"en\": {\n \"URL\": \"Message/Catalog\"\n }\n },\n {\n \"Name\": \"MessageContact\",\n \"Controller\": \"Message\",\n \"Action\": \"Contact\",\n \"fr\": {\n \"URL\": \"Message/Contact\"\n },\n \"en\": {\n \"URL\": \"Message/Contact\"\n }\n },\n {\n \"Name\": \"MessageAccountClaim\",\n \"Controller\": \"Message\",\n \"Action\": \"Claim\",\n \"fr\": {\n \"URL\": \"Message/Claim\"\n },\n \"en\": {\n \"URL\": \"Message/Claim\"\n }\n },\n {\n \"Name\": \"MessageContactAdd\",\n \"Controller\": \"Message\",\n \"Action\": \"AddContact\",\n \"fr\": {\n \"URL\": \"Message/Add/Contact\"\n },\n \"en\": {\n \"URL\": \"Message/Add/Contact\"\n }\n },\n {\n \"Name\": \"MessageCatalogRequestAdd\",\n \"Controller\": \"Message\",\n \"Action\": \"AddCatalogRequest\",\n \"fr\": {\n \"URL\": \"Message/Add/CatalogRequest\"\n },\n \"en\": {\n \"URL\": \"Message/Add/CatalogRequest\"\n }\n },\n {\n \"Name\": \"MessageAccountClaimAdd\",\n \"Controller\": \"Message\",\n \"Action\": \"AddClaim\",\n \"fr\": {\n \"URL\": \"Message/Add/Reclamation\"\n },\n \"en\": {\n \"URL\": \"Message/Add/Claim\"\n }\n },\n {\n \"Name\": \"CartQuotationPaymentList\",\n \"Controller\": \"Payment\",\n \"Action\": \"PaymentListQuotation\",\n \"fr\": {\n \"URL\": \"devis/choix-paiement/{idFolder:int}\"\n },\n \"en\": {\n \"URL\": \"quote/payment-choice/{idFolder:int}\"\n }\n },\n {\n \"Name\": \"PaymentListAdvance\",\n \"Controller\": \"Payment\",\n \"Action\": \"PaymentListAdvance\",\n \"fr\": {\n \"URL\": \"acompte/choix-paiement/{idFolder:int}/{idAdvance:int}\"\n },\n \"en\": {\n \"URL\": \"advance/payment-choice/{idFolder:int}/{idAdvance:int}\"\n }\n },\n {\n \"Name\": \"SellerPage\",\n \"Controller\": \"Seller\",\n \"Action\": \"Seller\",\n \"fr\": {\n \"URL\": \"{sellerName}-v-{sellerId:int}/{keyMessageType?}\"\n },\n \"en\": {\n \"URL\": \"{sellerName}-v-{sellerId:int}/{keyMessageType?}\"\n }\n },\n {\n \"Name\": \"AdvancedReviewsForm\",\n \"Controller\": \"AccountAdvancedReviews\",\n \"Action\": \"Form\",\n \"fr\": {\n \"URL\": \"avis-articles/{token}\"\n },\n \"en\": {\n \"URL\": \"product-reviews/{token}\"\n }\n },\n {\n \"Name\": \"AccountAdvancedReviews\",\n \"Controller\": \"AccountAdvancedReviews\",\n \"Action\": \"AccountAdvancedReviews\",\n \"fr\": {\n \"URL\": \"avis-articles\"\n },\n \"en\": {\n \"URL\": \"product-reviews\"\n }\n },\n {\n \"Name\": \"AccountDedicatedProducts\",\n \"Controller\": \"AccountDedicatedProducts\",\n \"Action\": \"Show\",\n \"fr\": {\n \"URL\": \"produits-personnalises\"\n },\n \"en\": {\n \"URL\": \"dedicated-products\"\n }\n },\n {\n \"Name\": \"UpdateLineQuantityCart\",\n \"Controller\": \"Cart\",\n \"Action\": \"UpdateLineQuantityCart\",\n \"fr\": {\n \"URL\": \"UpdateLineQuantityCart/{idLine:int}/{RemovedQuantity:int}\"\n },\n \"en\": {\n \"URL\": \"UpdateLineQuantityCart/{idLine:int}/{RemovedQuantity:int}\"\n }\n },\n {\n \"Name\": \"SortedCategoryPage\",\n \"Controller\": \"CategoryOverride\",\n \"Action\": \"ShowSortedPage\",\n \"fr\": {\n \"URL\": \"{categoryName}-c-{categoryId:int}-{page:int}/{sortType:alpha}\"\n }\n },\n {\n \"Name\": \"SortedCategory\",\n \"Controller\": \"CategoryOverride\",\n \"Action\": \"ShowSorted\",\n \"fr\": {\n \"URL\": \"{categoryName}-c-{categoryId:int}/{sortType:alpha}\"\n }\n },\n {\n \"Name\": \"CategoryPage\",\n \"Controller\": \"CategoryOverride\",\n \"Action\": \"ShowPage\",\n \"fr\": {\n \"URL\": \"{categoryName}-c-{categoryId:int}-{page:int}\"\n }\n },\n {\n \"Name\": \"Category\",\n \"Controller\": \"CategoryOverride\",\n \"Action\": \"Show\",\n \"fr\": {\n \"URL\": \"{categoryName}-c-{categoryId:int}\"\n }\n },\n {\n \"Name\": \"CategoryWithElasticSearch\",\n \"Controller\": \"CategoryOverride\",\n \"Action\": \"ShowWithElasticSearch\",\n \"fr\": {\n \"URL\": \"{categoryName}-c-{categoryId:int}/es/{query}\"\n }\n },\n {\n \"Name\": \"SortedCategoryPageWithElasticSearch\",\n \"Controller\": \"CategoryOverride\",\n \"Action\": \"ShowSortedPageWithElasticSearch\",\n \"fr\": {\n \"URL\": \"{categoryName}-c-{categoryId:int}/es/{query}-{page:int}/{sortType:alpha}\"\n }\n },\n {\n \"Name\": \"Candidature\",\n \"Controller\": \"CandidatureOverride\",\n \"Action\": \"Candidature\",\n \"fr\": {\n \"URL\": \"candidature\"\n }\n },\n {\n \"Name\": \"CategoryRecrutement\",\n \"Controller\": \"CategoryRecrutement\",\n \"Action\": \"ShowRecrutement\",\n \"fr\": {\n \"URL\": \"{categoryName}-a-{categoryId:int}\"\n }\n },\n {\n \"Name\": \"CategoryRecrutementPage\",\n \"Controller\": \"CategoryRecrutement\",\n \"Action\": \"ShowPageRecrutement\",\n \"fr\": {\n \"URL\": \"{categoryName}-a-{categoryId:int}-{page:int}\"\n }\n },\n {\n \"Name\": \"Stores\",\n \"Controller\": \"StoresOverride\",\n \"Action\": \"Stores\",\n \"fr\": {\n \"URL\": \"trouver-ma-boutique\"\n }\n },\n {\n \"Name\": \"StoresDetail\",\n \"Controller\": \"StoresOverride\",\n \"Action\": \"StoresDetail\",\n \"fr\": {\n \"URL\": \"{storeName}-b-{storeId:int}\"\n }\n },\n {\n \"Name\": \"AccountUpdate\",\n \"Controller\": \"AccountUpdateOverride\",\n \"Action\": \"AccountUpdate\",\n \"fr\": {\n \"URL\": \"informations-personnelles\"\n },\n \"en\": {\n \"URL\": \"profile\",\n \"NGRoute\": \"/profile\"\n }\n },\n {\n \"Name\": \"AccountGiftCards\",\n \"Controller\": \"AccountGiftCards\",\n \"Action\": \"AccountGiftCards\",\n \"fr\": {\n \"URL\": \"bons-de-reduction\"\n }\n },\n {\n \"Name\": \"AccountCreatePrivate\",\n \"Controller\": \"AccountCreateOverride\",\n \"Action\": \"CreatePrivate\",\n \"fr\": {\n \"URL\": \"club-gourmand-creation\"\n }\n },\n {\n \"Name\": \"PrivateAccessDenied\",\n \"Controller\": \"Static\",\n \"Action\": \"Show\",\n \"fr\": {\n \"URL\": \"club-gourmand-acces-refuse\"\n }\n },\n {\n \"Name\": \"CatalogRequest\",\n \"Controller\": \"\",\n \"Action\": \"\",\n \"fr\": {\n \"URL\": \"\"\n }\n },\n {\n \"Name\": \"MTYLoginSelfscanning\",\n \"Controller\": \"MTYSelfscanning\",\n \"Action\": \"LoginSelfscanning\",\n \"fr\": {\n \"URL\": \"selfscanning/login\"\n },\n \"en\": {\n \"URL\": \"selfscanning/login\"\n }\n }\n]);\n})();\n","(function (ng) {\n'use strict';\nng.module('gulp-dependencies', ['app.account-create','app.authentication','app.autocomplete','app.category','app.category.background','app.category.filters','app.category.service','app.club-gourmand','app.comparator','app.footer','app.form','app.home','app.modal-account-update','app.password-revovery','app.payment-error','app.product','app.product-attributes','app.product-gallery','app.product-inspirations','app.product-kit','app.product-share','app.product.customization','app.product.price','app.product.reviews','app.product.service','app.searchfinder','app.service.compare','app.store-detail','app.stores','app.stores-service','app.switch','compare.checkbox','directive.infos-store','main.nav','minilogin','module.modal-store-choice','module.modal-store-map','newsletter','service.authentication','top.promos']);\n})(angular);","angular.module(\"gulp-templates\", []).run([\"$templateCache\", function($templateCache) {$templateCache.put(\"component.addtocart-quantity.tpl\",\"
0 || $ctrl.isCartButton || $ctrl.isModalButton\\\" ng-class=\\\"$ctrl.btnClass\\\" ng-disabled=\\\"$ctrl.tooltipActive()\\\" uib-tooltip=\\\"{{ $ctrl.tooltip }}\\\" tooltip-trigger=\\\"{{ $ctrl.device.isTouch ? \\'\\\\\\'outsideClick\\\\\\'\\' : \\'\\\\\\'mouseenter\\\\\\'\\' }}\\\" tooltip-append-to-body=\\\"true\\\" tooltip-enable=\\\"$ctrl.tooltipActive()\\\" ng-click=\\\"$ctrl.plus()\\\">
0 || $ctrl.isCartButton || $ctrl.isModalButton\\\">
15 ?\\'glyphicon-remove warning-color\\' : \\'glyphicon-ok success-color\\' \\\" ng-if=\\\"!$ctrl.isCartButton && $ctrl.isInCart && !$ctrl.showLoader\\\">
14 && $ctrl.gtmCategory != \\'product list\\'\\\">La quantité maximale commandable est atteinte.
\");\n$templateCache.put(\"component.addtocart.tpl\",\"
\");\n$templateCache.put(\"component.delete-cart-item.tpl\",\"\");\n$templateCache.put(\"component.input-quantity.tpl\",\"
\");\n$templateCache.put(\"component.modify-cart-item.tpl\",\"\");\n$templateCache.put(\"directive.video-player.tpl\",\"
\");\n$templateCache.put(\"rzslider.tpl\",\"
\");\n$templateCache.put(\"toast.tpl\",\"
{{::title}}
{{::message}}
\");\n$templateCache.put(\"toast_addtocart.tpl\",\"
{{::title}}
{{::message}}
\");\n$templateCache.put(\"toast_message.tpl\",\"
{{::title}}
{{::message}}
\");\n$templateCache.put(\"toast_progressbar.tpl\",\"
\");\n$templateCache.put(\"toast_authentication.tpl\",\"
{{::title}}
{{::message}}
\");\n$templateCache.put(\"autocomplete-select.tpl\",\"\");\n$templateCache.put(\"toast_comparator.tpl\",\"
{{::title}}
{{::message}}
\");}]);","(function () {\nangular.module(\"gulp-client\", [])\n.constant(\"DefaultLocalization\", \"fr\");\n})();\n","/*\r\n*\r\n* Version : 1.0.0\r\n* 04/09/2016 - 10h18\r\n*\r\n*! Octave Web7 !*/\r\n\r\n(function () {\r\n 'use strict';\r\n\r\n angular.module('app', [\r\n 'gulp-mty-dependencies',\r\n /* /angular */\r\n 'ngSanitize',\r\n 'ngAnimate',\r\n 'ngCookies',\r\n 'ngRoute',\r\n\r\n /* /lib */\r\n 'ui.bootstrap',\r\n 'module.lazy-img',\r\n 'toastr',\r\n 'bootstrap.angular.validation',\r\n 'AngularGM',\r\n 'smoothScroll',\r\n 'module.spinner',\r\n\r\n /* /components */\r\n 'component.input.quantity',\r\n 'component.addtocart',\r\n 'component.addtocart-quantity',\r\n 'component.delete-cart-item',\r\n 'component.modify-cart-item',\r\n\r\n /* /modules */\r\n 'infinite-scroll',\r\n 'module.owl-carousel',\r\n 'module.products-grid',\r\n 'module.modal',\r\n 'module.modal-controllers',\r\n\r\n /* /directives */\r\n 'directive.mini-cart',\r\n 'directive.page-head',\r\n 'directives.breadcrumb',\r\n 'directive.collapse-menu',\r\n 'directives.form',\r\n 'directive.bootstrap-select',\r\n 'directive.clear-uib-tab',\r\n 'directive.video-player',\r\n 'directive.flip',\r\n 'directive.truncate',\r\n 'directive.contentonly',\r\n 'directive.back-to-top',\r\n 'directive.cookies-info',\r\n 'directive.cdn',\r\n 'directive.sticky',\r\n\r\n 'directive.fix-ie',\r\n\r\n /* /services */\r\n 'service.app',\r\n 'service.account',\r\n 'service.http',\r\n 'service.window-events',\r\n 'service.responsive',\r\n 'service.cdn',\r\n 'service.date',\r\n 'service.gtm',\r\n 'service.gmap',\r\n 'service.load',\r\n\r\n /* /filters */\r\n 'filter.price',\r\n 'filter.discount',\r\n 'filter.format',\r\n 'filter.phone',\r\n 'filter.truncate-date',\r\n\r\n 'gulp-client',\r\n 'gulp-dependencies',\r\n 'gulp-routes',\r\n 'gulp-templates',\r\n\r\n 'directive.debug'\r\n ])\r\n\r\n /* Ne pas modifier, Gulp > master.min.js */\r\n .constant('Environment', 'dev')\r\n\r\n /* @ngInject */\r\n .controller('mainController', [\"$scope\", \"$timeout\", \"$templateCache\", \"DeviceService\", \"HttpService\", function ($scope, $timeout, $templateCache, DeviceService, HttpService) {\r\n var ctrl = this;\r\n\r\n setTimeout(function () {\r\n loadModalAddToCart();\r\n });\r\n\r\n $scope.$on('pageTitle', function (event, checkout) {\r\n $timeout(function () {\r\n ctrl.checkout = checkout;\r\n });\r\n });\r\n\r\n $scope.$on('contentOnly', function (event, contentonly) {\r\n $timeout(function () {\r\n ctrl.contentonly = contentonly;\r\n });\r\n });\r\n\r\n $scope.showPageLoader = false;\r\n $scope.$on('showPageLoader', function (event, value) {\r\n $scope.showPageLoader = value;\r\n });\r\n\r\n $scope.device = {};\r\n\r\n $scope.device.size = DeviceService.getSize($scope, function (size) {\r\n $scope.device.size = size;\r\n $scope.$emit('lazyImg:refresh');\r\n });\r\n\r\n $scope.device.xxs = DeviceService.onChange($scope, 'xxs', function (match) {\r\n $scope.device.xxs = match;\r\n });\r\n $scope.device.xs = DeviceService.onChange($scope, 'xs', function (match) {\r\n $scope.device.xs = match;\r\n });\r\n $scope.device.sm = DeviceService.onChange($scope, 'sm', function (match) {\r\n $scope.device.sm = match;\r\n });\r\n $scope.device.md = DeviceService.onChange($scope, 'md', function (match) {\r\n $scope.device.md = match;\r\n });\r\n $scope.device.lg = DeviceService.onChange($scope, 'lg', function (match) {\r\n $scope.device.lg = match;\r\n });\r\n\r\n $scope.device.desktop = DeviceService.onChange($scope, 'md, lg', function (match) {\r\n $scope.device.desktop = match;\r\n });\r\n $scope.device.mobile = DeviceService.onChange($scope, 'xxs, xs', function (match) {\r\n $scope.device.mobile = match;\r\n });\r\n\r\n $scope.device.isTouch = DeviceService.isTouch();\r\n\r\n $scope.device.isIe = DeviceService.isIE().isIE;\r\n $scope.device.ieVersion = DeviceService.isIE().isIE ? 'ie' + DeviceService.isIE().version : null;\r\n\r\n DeviceService.isWebp().then(function (result) {\r\n $scope.device.webp = result;\r\n });\r\n\r\n function loadModalAddToCart() {\r\n HttpService.get({\r\n url: '/Template/Modal/ModalAddToCart',\r\n cache: true\r\n })\r\n .then(function (data) {\r\n $templateCache.put('/Template/Modal/ModalAddToCart', data);\r\n })\r\n .catch(function (error) {\r\n console.error(error);\r\n });\r\n }\r\n\r\n }])\r\n\r\n /* @ngInject */\r\n .config([\"$compileProvider\", \"Environment\", function ($compileProvider, Environment) {\r\n // $qProvider.errorOnUnhandledRejections(false);\r\n $compileProvider.commentDirectivesEnabled(false);\r\n $compileProvider.cssClassDirectivesEnabled(false);\r\n if (Environment === 'prod') {\r\n $compileProvider.debugInfoEnabled(false);\r\n }\r\n }])\r\n\r\n /* @ngInject */\r\n .config([\"lazyImgConfigProvider\", function (lazyImgConfigProvider) {\r\n lazyImgConfigProvider.setOptions({\r\n offset: 300,\r\n errorClass: 'error',\r\n successClass: 'loaded',\r\n inViewFunction: function (image, inView) {\r\n var scope = image.$elem.data('scope');\r\n if (scope && angular.isFunction(scope[image.inViewFunction])) {\r\n scope[image.inViewFunction](inView);\r\n }\r\n }\r\n });\r\n }])\r\n\r\n /* @ngInject */\r\n .config([\"usSpinnerConfigProvider\", function (usSpinnerConfigProvider) {\r\n usSpinnerConfigProvider.setDefaults({\r\n color: '#222',\r\n lines: 9,\r\n length: 0,\r\n width: 10,\r\n radius: 16,\r\n opacity: 0,\r\n speed: 2,\r\n trail: 60\r\n });\r\n usSpinnerConfigProvider.setTheme('small', {\r\n lines: 9,\r\n length: 0,\r\n width: 8,\r\n radius: 12\r\n });\r\n usSpinnerConfigProvider.setTheme('micro', {\r\n lines: 7,\r\n length: 0,\r\n width: 4,\r\n radius: 6\r\n });\r\n usSpinnerConfigProvider.setDelay(100);\r\n }])\r\n\r\n /* @ngInject */\r\n .config([\"toastrConfig\", function (toastrConfig) {\r\n angular.extend(toastrConfig, {\r\n timeOut: 3000,\r\n closeButton: true,\r\n closeHtml: '',\r\n iconClasses: {\r\n success: ['success', 'glyphicon glyphicon-ok'],\r\n error: ['error', 'glyphicon glyphicon-exclamation-sign'],\r\n info: ['info', 'glyphicon glyphicon-info-sign'],\r\n warning: ['warning', 'glyphicon glyphicon-exclamation-sign']\r\n },\r\n templates: {\r\n toast: 'toast.tpl',\r\n progressbar: 'toast_progressbar.tpl'\r\n }\r\n });\r\n }])\r\n\r\n /* @ngInject */\r\n .config([\"bsValidationConfigProvider\", function (bsValidationConfigProvider) {\r\n bsValidationConfigProvider.global.setValidateFieldsOn(['blur', 'submit']);\r\n bsValidationConfigProvider.global.setDisplayErrorsAs('tooltip');\r\n bsValidationConfigProvider.global.tooltipAppendToBody = false;\r\n bsValidationConfigProvider.global.errorMessagePrefix = '  ';\r\n }])\r\n\r\n .config([\"dropzoneOpsProvider\", function (dropzoneOpsProvider) {\r\n dropzoneOpsProvider.setOptions({\r\n url: '/Upload',\r\n uploadMultiple: true,\r\n parallelUploads: 10,\r\n maxFilesize: '4',\r\n addRemoveLinks: true,\r\n renameFilename: function (name) {\r\n return new Date().getTime() + '_!_' + name;\r\n },\r\n dictRemoveFile: ''\r\n });\r\n }])\r\n\r\n /* @ngInject */\r\n .run([\"AppService\", \"bsValidationConfig\", function (AppService, bsValidationConfig) {\r\n\r\n AppService.getParams();\r\n\r\n AppService.getTranslate()\r\n .then(function (translate) {\r\n _.each(translate.forms, function (value, key) {\r\n translate.forms[key] = value.replace('{validValue}', '{{validValue}}').replace('{matchName}', '{{matchName}}');\r\n });\r\n bsValidationConfig.setMessages(translate.forms);\r\n })\r\n .catch(function (error) {\r\n console.error(error);\r\n });\r\n\r\n window.onunload = function () { };\r\n\r\n PointerEventsPolyfill.initialize({});\r\n }]);\r\n\r\n angular.element(function () {\r\n angular.bootstrap(document, ['app'], {\r\n strictDi: true\r\n });\r\n });\r\n\r\n /* Ne pas modifier, Gulp > service-worker.js */\r\n var hasServiceWorker = true;\r\n\r\n if (hasServiceWorker && 'serviceWorker' in navigator) {\r\n window.addEventListener('load', function () {\r\n\r\n navigator.serviceWorker.getRegistrations().then(function (registrations) {\r\n registrations.forEach(function (registration) {\r\n if (registration.active && !registration.active.scriptURL.includes('service-worker.js')) {\r\n console.log('unregister', registration);\r\n registration.unregister()\r\n .then(function () {\r\n return self.clients.matchAll();\r\n })\r\n .then(function (clients) {\r\n clients.forEach(function (client) {\r\n client.navigate(client.url);\r\n });\r\n });\r\n }\r\n });\r\n });\r\n\r\n navigator.serviceWorker.register('/service-worker.js').then(function (registration) {\r\n console.log('ServiceWorker registration success scope:', registration.scope);\r\n }).catch(function (err) {\r\n console.log('ServiceWorker registration failed:', err);\r\n });\r\n });\r\n }\r\n\r\n angular.module('gulp-mty-dependencies', []);\r\n})();\r\n","(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('component.addtocart-quantity', [])\r\n\r\n .component('buttonAddToCartQuantity', {\r\n require: {\r\n productCtrl: '?^^productDetail'\r\n },\r\n bindings: {\r\n isProductButton: ' 0;\r\n ctrl.showLoader = false;\r\n ctrl.ready = true;\r\n if (ctrl.isProductButton) {\r\n ctrl.productCtrl.setInputQuantity(value);\r\n }\r\n }\r\n\r\n function setValue(val) {\r\n watchValue();\r\n var isMax = 15;\r\n\r\n if (val === 0) return 0;\r\n\r\n if (val === '') {\r\n return val;\r\n }\r\n val = parseInt(val);\r\n\r\n if (isNaN(val)) return min;\r\n\r\n if (min !== undefined && min > val) {\r\n return 0;\r\n }\r\n\r\n if (step !== 1) {\r\n var inc = double(val - ctrl.cartQuantity),\r\n rest = double(double((ctrl.cartQuantity + inc) * 100) % double(ctrl.step * 100)) / 100;\r\n inc = double(inc - rest);\r\n if (double(ctrl.cartQuantity + inc) < ctrl.min) {\r\n inc = double(inc + ctrl.step);\r\n }\r\n val = double(ctrl.cartQuantity + inc);\r\n }\r\n\r\n // Si la quantité par produit est > 15 \r\n // alors on la remet à 15 \r\n // (En prévention du temps de maj entre \r\n // l'input et le panier qui peut provoquer des bugs)\r\n if (val > isMax) {\r\n val = 15;\r\n }\r\n\r\n return val;\r\n }\r\n\r\n function watchValue() {\r\n if (ctrl.isChanged) return;\r\n ctrl.isChanged = true;\r\n unwatch = $scope.$watch('$ctrl.quantity', changedValue);\r\n }\r\n\r\n // eslint-disable-next-line\r\n function changedValue(qty, old, scope, delay) {\r\n delay = delay || 800;\r\n ctrl.active = ctrl.quantity > 0 || ctrl.quantity === '';\r\n $timeout.cancel(addTimeout);\r\n\r\n if (ctrl.quantity === '' || ctrl.quantity === ctrl.cartQuantity) return false;\r\n\r\n addTimeout = $timeout(function () {\r\n if (ctrl.isModalButton && ctrl.modalItem) {\r\n ctrl.price.prices = ctrl.modalItem.prices;\r\n ctrl.modalItem.Price = AppService.getProductPrice(ctrl.price, ctrl.quantity);\r\n ctrl.modalItem.quantity = ctrl.quantity;\r\n if (ctrl.quantity === 0) {\r\n ModalService.close();\r\n }\r\n }\r\n var inc = ctrl.quantity - ctrl.cartQuantity;\r\n ctrl.cartQuantity = inc;\r\n if (typeof ctrl.action !== 'undefined') {\r\n ctrl.addToCart(ctrl.action({ qty: ctrl.quantity, inc: inc }), ctrl.quantity);\r\n } else {\r\n ctrl.addToCart(getProductsToAdd(ctrl.quantity, inc), ctrl.quantity);\r\n }\r\n addTimeout = null;\r\n }, delay, false);\r\n }\r\n\r\n function getProductsToAdd(qty, inc) {\r\n return [\r\n {\r\n idLine: ctrl.idLine,\r\n Comment: ctrl.commentLine || '',\r\n idProduct: ctrl.id,\r\n Price: AppService.getProductPrice(ctrl.price, qty),\r\n costTTC: 0,\r\n costHT: 0,\r\n showTTCPrice: showTTCPrice,\r\n quantity: inc,\r\n designation: ctrl.designation,\r\n img: ctrl.img,\r\n URL: ctrl.url\r\n }\r\n ];\r\n }\r\n\r\n function addToCart(products, quantity) {\r\n ctrl.showLoader = true;\r\n ctrl.posLoader = ctrl.cartQuantity < 0 ? 'left' : '';\r\n\r\n if (!ctrl.isCartButton && !ctrl.isInCart && $location.path() !== '/' + RoutesService.getUrlByName('Cart')) {\r\n ModalService.close();\r\n ModalService.show(\r\n '/Template/Modal/ModalAddToCart',\r\n products,\r\n null,\r\n 'modalAddToCartCtrl',\r\n null,\r\n null,\r\n {\r\n cartLink: '/' + RoutesService.getUrlByName('Cart')\r\n }\r\n );\r\n } else {\r\n if (!ctrl.isModalButton) {\r\n ModalService.close();\r\n }\r\n var mess = quantity === 0 ? ctrl.titleDeleteOk : ctrl.titleModifyOk;\r\n toastr.success(ctrl.designation, mess, {\r\n allowHtml: true,\r\n extraData: {\r\n template: 'toast_addtocart.tpl',\r\n data: {\r\n img: products[0].img\r\n }\r\n }\r\n });\r\n }\r\n\r\n if (quantity === 0) {\r\n GtmService.removeFromCart(products[0].idProduct);\r\n }\r\n\r\n AppService.addToCart(products, quantity)\r\n .then(function (response) {\r\n ctrl.showLoader = false;\r\n if (response.status === 'OK') {\r\n AppService.updateParams(response.results);\r\n\r\n if (quantity > 0) {\r\n GtmService.addToCart(products[0].idProduct, response.results.Cart.Products, ctrl.gtmCategory);\r\n }\r\n } else {\r\n AppService.getTranslate()\r\n .then(function (translate) {\r\n toastr.warning(translate.errors.TryLater, translate.errors.ErrorHasOccurred, {\r\n allowHtml: true,\r\n extraData: {\r\n template: 'toast_message.tpl'\r\n }\r\n });\r\n });\r\n }\r\n })\r\n .catch(function (error) {\r\n console.error(error);\r\n });\r\n }\r\n\r\n }]\r\n });\r\n})();\r\n","(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('component.addtocart', [])\r\n\r\n .component('buttonAddToCart', {\r\n require: {\r\n productCtrl: '?^^productDetail',\r\n comparatorCtrl: '?^^comparator'\r\n },\r\n bindings: {\r\n isProductButton: '.\r\n **/\r\n\r\n(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('component.input.quantity', [])\r\n\r\n .component('inputQuantity', {\r\n require: {\r\n productCtrl: '?^^productDetail'\r\n },\r\n bindings: {\r\n id: ' val) {\r\n val = ctrl.min;\r\n return val;\r\n }\r\n return val;\r\n }\r\n val = ctrl.min || 0;\r\n return val;\r\n\r\n }\r\n\r\n }]\r\n });\r\n\r\n})();\r\n","(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('component.modify-cart-item', [])\r\n\r\n .component('buttonModifyCartItem', {\r\n require: {\r\n productCtrl: '?^^productDetail'\r\n },\r\n bindings: {\r\n size: '@?',\r\n btnClass: '@',\r\n isPrimary: '<',\r\n addToCartActive: '<',\r\n allowAddToCart: '<',\r\n titleAdd: '@?',\r\n titleAlert: '@?',\r\n titleModifyOk: '@?',\r\n tooltip: '@',\r\n modalCtrl: '<',\r\n device: '<'\r\n },\r\n templateUrl: 'component.modify-cart-item.tpl',\r\n /* @ngInject */\r\n controller: [\"toastr\", \"AppService\", \"ModalService\", function (toastr, AppService, ModalService) {\r\n var ctrl = this;\r\n\r\n ctrl.addToCart = function () {\r\n var products = ctrl.productCtrl.getProductsToAdd(ctrl.modalCtrl.quantity, 0);\r\n products[0].idLine = ctrl.modalCtrl.idLine;\r\n\r\n ctrl.modalCtrl.showLoader = true;\r\n AppService.addToCart(products)\r\n .then(function (response) {\r\n ctrl.modalCtrl.showLoader = false;\r\n if (response.status === 'OK') {\r\n AppService.updateParams(response.results);\r\n toastr.success(ctrl.designation, ctrl.titleModifyOk, {\r\n allowHtml: true,\r\n extraData: {\r\n template: 'toast_addtocart.tpl',\r\n data: {\r\n img: products[0].img\r\n }\r\n }\r\n });\r\n ModalService.close();\r\n } else {\r\n AppService.getTranslate()\r\n .then(function (translate) {\r\n toastr.warning(translate.errors.TryLater, translate.errors.ErrorHasOccurred, {\r\n allowHtml: true,\r\n extraData: {\r\n template: 'toast_message.tpl'\r\n }\r\n });\r\n })\r\n .catch(function (error) {\r\n console.error(error);\r\n });\r\n }\r\n });\r\n };\r\n\r\n }]\r\n });\r\n\r\n})();\r\n","(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('directive.back-to-top', [])\r\n\r\n .directive('backToTop', function () {\r\n return {\r\n restrict: 'A',\r\n controllerAs: 'backToTopCtrl',\r\n /* @ngInject */\r\n controller: [\"$scope\", \"$window\", function ($scope, $window) {\r\n var ctrl = this;\r\n ctrl.active = false;\r\n\r\n $window.addEventListener('scroll', _.debounce(handler, 1000));\r\n\r\n function handler() {\r\n var sc = isNaN(window.pageYOffset) ? document.documentElement.scrollTop : window.pageYOffset;\r\n $scope.$apply(function () {\r\n ctrl.active = sc > $window.innerHeight ? true : false;\r\n });\r\n }\r\n }]\r\n };\r\n\r\n });\r\n\r\n})();\r\n","/*\r\n * Bootstrap Select directive\r\n * Version 1.0.0\r\n * Octave\r\n **/\r\n\r\n(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('directive.bootstrap-select', [])\r\n\r\n /* @ngInject */\r\n .factory('SelectpickerService', function () {\r\n var _mobile,\r\n load,\r\n queue = [];\r\n\r\n var service = {\r\n add: add\r\n };\r\n return service;\r\n\r\n ////////////\r\n\r\n function add(element, mobile) {\r\n _mobile = mobile;\r\n if (angular.isUndefined($.fn.selectpicker)) {\r\n queue.push(element);\r\n if (!load) {\r\n load = true;\r\n $.ajax({\r\n url: '/js/bootstrap-select.min.js',\r\n dataType: 'script',\r\n cache: true,\r\n success: function () {\r\n start();\r\n }\r\n });\r\n }\r\n } else {\r\n init(element);\r\n }\r\n }\r\n\r\n function start() {\r\n _.each(queue, function (element) {\r\n init(element);\r\n });\r\n }\r\n\r\n function init(element) {\r\n element.selectpicker({\r\n mobile: _mobile\r\n });\r\n }\r\n })\r\n\r\n /* @ngInject */\r\n .directive('selectpicker', [\"$timeout\", \"SelectpickerService\", function ($timeout, SelectpickerService) {\r\n return {\r\n restrict: 'A',\r\n scope: false,\r\n link: function (scope, element, attrs) {\r\n scope.$eval(attrs.ngModel + '=\"' + element.val() + '\"');\r\n\r\n SelectpickerService.add(element, scope.device ? scope.device.mobile : false);\r\n\r\n if (attrs.ngModel) {\r\n var unwatch = scope.$watch(attrs.ngModel, function () {\r\n $timeout(function () {\r\n if (angular.isDefined(element.selectpicker)) {\r\n element.selectpicker('refresh');\r\n }\r\n });\r\n }, true);\r\n }\r\n\r\n scope.$on('$destroy', function () {\r\n if (angular.isDefined(element.selectpicker)) {\r\n element.selectpicker('destroy');\r\n }\r\n if (unwatch) {\r\n unwatch();\r\n }\r\n });\r\n }\r\n };\r\n }]);\r\n\r\n})();\r\n","(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('app.bxslider', [])\r\n\r\n /* @ngInject */\r\n .factory('BxsliderService', [\"WindowEventsService\", function (WindowEventsService) {\r\n var load,\r\n queue = [];\r\n\r\n var service = {\r\n add: add\r\n };\r\n return service;\r\n\r\n ////////////\r\n\r\n function add(element, scope) {\r\n if (angular.isUndefined($.fn.bxSlider)) {\r\n queue.push({ element: element, scope: scope });\r\n if (!load) {\r\n load = true;\r\n $.ajax({\r\n url: '/js/jquery.bxslider.min.js',\r\n dataType: 'script',\r\n cache: true,\r\n success: function () {\r\n start();\r\n }\r\n });\r\n }\r\n } else {\r\n init(element, scope);\r\n }\r\n }\r\n\r\n function start() {\r\n _.each(queue, function (item) {\r\n init(item.element, item.scope);\r\n });\r\n }\r\n\r\n function init(element, scope) {\r\n WindowEventsService.listen(true, 'resize', initBxSlider, 500);\r\n\r\n scope.$on('$destroy', function () {\r\n WindowEventsService.listen(false, 'resize', initBxSlider);\r\n if (scope.slider) {\r\n scope.slider.destroySlider();\r\n }\r\n });\r\n\r\n initBxSlider();\r\n\r\n function initBxSlider() {\r\n\r\n if (scope.slider) {\r\n scope.slider.destroySlider();\r\n element.hide().parent().css({\r\n 'height': '',\r\n 'width': ''\r\n });\r\n element.find('.bx-prev, .bx-next').remove();\r\n }\r\n if (scope.device && scope.device.mobile) return;\r\n\r\n setTimeout(function () {\r\n /* var nb = 5;\r\n nb = scope.device.md ? 4 : nb;\r\n nb = scope.device.sm ? 3 : nb; */\r\n\r\n var margin = 15,\r\n sc = element.closest('.d-table-cell');\r\n\r\n var width = Math.floor(sc.innerWidth()) - margin,\r\n height = Math.floor(sc.parent().height()),\r\n nb = Math.floor(height / width);\r\n\r\n /* var height = $('#mainPicture').width() * 1.5 - 100,\r\n width = (height - (nb - 1) * margin) * 0.67 / nb);\r\n width = width > sc.width() ? sc.width() - 1 : width; */\r\n\r\n element.show().parent().css({\r\n 'height': height,\r\n 'width': width\r\n });\r\n\r\n scope.slider = element.bxSlider({\r\n mode: 'vertical',\r\n minSlides: nb,\r\n responsive: false,\r\n slideMargin: margin,\r\n slideWidth: width,\r\n pager: false,\r\n prevSelector: '.bxslider-prev',\r\n nextSelector: '.bxslider-next',\r\n prevText: '',\r\n nextText: '',\r\n moveSlides: 1,\r\n infiniteLoop: false,\r\n preventDefaultSwipeX: false,\r\n preventDefaultSwipeY: true,\r\n hideControlOnEnd: true,\r\n onSliderLoad: function () {\r\n element.show().parent().css({\r\n 'height': height\r\n }).closest('.bxslider-container').addClass('in');\r\n }\r\n });\r\n }, 100);\r\n }\r\n }\r\n }])\r\n\r\n /* @ngInject */\r\n .directive('bxslider', [\"BxsliderService\", function (BxsliderService) {\r\n return {\r\n restrict: 'A',\r\n scope: {\r\n device: '<'\r\n },\r\n link: function (scope, element) {\r\n if (scope.device && scope.device.mobile) return;\r\n\r\n BxsliderService.add(element, scope);\r\n }\r\n };\r\n }]);\r\n\r\n})();\r\n","(function () {\r\n 'use strict';\r\n angular\r\n .module('directive.cdn', [])\r\n /* @ngInject */\r\n .directive('cdn', [\"CdnService\", function (CdnService) {\r\n return {\r\n restrict: 'A',\r\n priority: 100,\r\n scope: {\r\n cdnResponsiveSize: '@?',\r\n cdnSizes: '',\r\n controllerAs: 'debugCtrl',\r\n /* @ngInject */\r\n controller: [\"$scope\", \"$document\", function ($scope, $document) {\r\n var ctrl = this,\r\n ctrlKey = false,\r\n altKey = false,\r\n active = false;\r\n\r\n ctrl.isMenuCollapse = false;\r\n ctrl.toggleMenuCollapse = function () {\r\n ctrl.isMenuCollapse = !ctrl.isMenuCollapse;\r\n };\r\n\r\n $document.on('keydown', function (event) {\r\n if (event.ctrlKey) ctrlKey = true;\r\n if (event.altKey) altKey = true;\r\n if (ctrlKey && altKey && event.keyCode === 68) {\r\n active = !active;\r\n $scope.$apply(function () {\r\n ctrl.template = active ? '/Template/Debug/Index' : '';\r\n });\r\n }\r\n });\r\n $document.on('keyup', function () {\r\n ctrlKey = altKey = false;\r\n });\r\n }]\r\n };\r\n\r\n });\r\n\r\n})();\r\n","(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('directive.fix-ie', [])\r\n\r\n /* @ngInject */\r\n .directive('fixIeHeight', [\"WindowEventsService\", function (WindowEventsService) {\r\n return {\r\n restrict: 'A',\r\n link: function (scope, element, attrs) {\r\n if (scope.device.ieVersion !== 'ie11') return;\r\n\r\n var level = angular.isDefined(attrs.level) ? attrs.level : '1';\r\n\r\n setTimeout(function () {\r\n WindowEventsService.listen(true, 'resize', resize, 500);\r\n });\r\n\r\n scope.$on('$destroy', function () {\r\n WindowEventsService.listen(false, 'resize', resize);\r\n });\r\n\r\n resize();\r\n\r\n function resize() {\r\n element.css('height', '');\r\n if (attrs.fixIeHeight !== '' && scope.device[attrs.fixIeHeight]) {\r\n setTimeout(function () {\r\n var $parent = element.parent();\r\n if (level === '2') $parent = $parent.parent();\r\n if (level === '3') $parent = $parent.parent();\r\n element.height($parent.innerHeight());\r\n }, 100);\r\n }\r\n }\r\n }\r\n };\r\n\r\n }]);\r\n\r\n})();\r\n","(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('directive.flip', [])\r\n\r\n /* @ngInject */\r\n .directive('flip', [\"$timeout\", function ($timeout) {\r\n return {\r\n restrict: 'A',\r\n scope: true,\r\n link: function (scope, element, attrs) {\r\n\r\n var flip = attrs.flip;\r\n\r\n setTimeout(resize);\r\n\r\n scope.toggle = function () {\r\n scope.flipped = !scope.flipped;\r\n resize();\r\n };\r\n\r\n scope.$on('toggle_' + flip, function () {\r\n scope.toggle();\r\n });\r\n\r\n scope.$on('flipBack_' + flip, function () {\r\n scope.flipped = true;\r\n scope.direct = true;\r\n $timeout(function () {\r\n scope.direct = false;\r\n }, 500);\r\n });\r\n\r\n scope.$on('resize_' + flip, function () {\r\n setTimeout(resize);\r\n });\r\n\r\n scope.$on('watchResize', function () {\r\n var time = new Date().getTime();\r\n var inter = setInterval(function () {\r\n resize();\r\n var ntime = new Date().getTime();\r\n if (ntime > time + 700) {\r\n clearInterval(inter);\r\n }\r\n }, 50);\r\n });\r\n\r\n function resize() {\r\n scope.$emit('resized');\r\n var selector = !scope.flipped ? '.front' : '.back',\r\n height = Math.floor(element.find(selector).children().outerHeight(true)) + 1;\r\n element.css('min-height', height);\r\n }\r\n\r\n }\r\n };\r\n\r\n }]);\r\n\r\n})();\r\n","(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('directive.mini-cart', [])\r\n\r\n .directive('miniCart', function () {\r\n return {\r\n restrict: 'E',\r\n /* @ngInject */\r\n controller: [\"$scope\", \"$element\", \"AppService\", \"RoutesService\", \"ModalService\", \"GtmService\", function ($scope, $element, AppService, RoutesService, ModalService, GtmService) {\r\n var ctrl = this;\r\n\r\n // Translate\r\n var tplTranslate = {};\r\n $element.children('.translate').children().each(function () {\r\n var $this = $(this);\r\n tplTranslate[$this.attr('key')] = $this.html();\r\n });\r\n\r\n getCart();\r\n\r\n ctrl.emptyCart = function () {\r\n ModalService.show(\r\n '/Template/Cart/ModalClearCartConfirm',\r\n {},\r\n null,\r\n 'clearCartConfirmModalCtrl'\r\n );\r\n };\r\n\r\n ctrl.remove = function (line) {\r\n ModalService.show(\r\n '/Template/Cart/ModalDeleteConfirm',\r\n {\r\n action: function () {\r\n AppService.deleteLine(line.IDLine, line.Product.Designation, line.Product.IDPicture, tplTranslate.titleDeleteOk);\r\n\r\n GtmService.removeFromCart(line.IDProduct);\r\n }\r\n },\r\n null,\r\n 'deleteConfirmModalCtrl'\r\n );\r\n };\r\n\r\n $scope.$on('cartUpdate', function () {\r\n getCart();\r\n });\r\n $scope.$on('cartUpdateWithRefresh', function () {\r\n getCart(true);\r\n });\r\n\r\n function getCart(withRefresh) {\r\n AppService.getParams(withRefresh)\r\n .then(function (params) {\r\n ctrl.hasCart = params.HasCart && (params.Cart && params.Cart.Products && params.Cart.Products.length);\r\n ctrl.cartLink = !ctrl.hasCart ? '' : '/' + RoutesService.getUrlByName('Cart');\r\n ctrl.showTTCPrice = params.Visitor.CardType.ShowTTCPrice;\r\n ctrl.count = 0;\r\n if (ctrl.hasCart) {\r\n ctrl.data = params.Cart;\r\n var count = 0;\r\n _.each(ctrl.data.Products, function (line) {\r\n count += line.Quantity;\r\n });\r\n ctrl.count = count;\r\n }\r\n })\r\n .catch(function (error) {\r\n console.error(error);\r\n });\r\n }\r\n }],\r\n controllerAs: 'miniCartCtrl'\r\n };\r\n })\r\n\r\n /* @ngInject */\r\n .controller('deleteConfirmModalCtrl', [\"data\", \"device\", \"options\", \"ModalService\", function (data, device, options, ModalService) {\r\n var ctrl = this;\r\n\r\n ctrl.submit = function () {\r\n ModalService.close();\r\n data.action();\r\n };\r\n ctrl.cancel = function () {\r\n ModalService.close();\r\n if (data.cancel) data.cancel();\r\n };\r\n\r\n }])\r\n\r\n /* @ngInject */\r\n .controller('clearCartConfirmModalCtrl', [\"data\", \"$rootScope\", \"HttpService\", \"AppService\", \"ModalService\", \"GtmService\", \"toastr\", function (data, $rootScope, HttpService, AppService, ModalService, GtmService, toastr) {\r\n var ctrl = this;\r\n\r\n ctrl.submit = function () {\r\n AppService.getParams()\r\n .then(function (params) {\r\n gtmEmptyCart(_.cloneDeep(params.Cart.Products));\r\n emptyCart();\r\n })\r\n .catch(function (error) {\r\n console.error(error);\r\n });\r\n };\r\n\r\n function gtmEmptyCart(cartLines) {\r\n _.each(cartLines, function (line) {\r\n GtmService.removeFromCart(line.IDProduct);\r\n });\r\n }\r\n\r\n function emptyCart() {\r\n ModalService.close();\r\n $rootScope.$broadcast('showPageLoader', true);\r\n HttpService.post({\r\n url: 'Cart/ClearCart',\r\n data: {}\r\n })\r\n .then(function (response) {\r\n AppService.getTranslate()\r\n .then(function (translate) {\r\n if (response.status === 'OK') {\r\n AppService.updateParams(response.results);\r\n toastr.success('', translate.messages.ClearCartOK, {\r\n allowHtml: true,\r\n extraData: {\r\n template: 'toast_message.tpl'\r\n }\r\n });\r\n if (data.action) data.action();\r\n } else {\r\n toastr.warning(translate.errors.TryLater, translate.errors.ErrorHasOccurred, {\r\n allowHtml: true,\r\n extraData: {\r\n template: 'toast_message.tpl'\r\n }\r\n });\r\n }\r\n $rootScope.$broadcast('showPageLoader', false);\r\n })\r\n .catch(function (error) {\r\n console.error(error);\r\n });\r\n })\r\n .catch(function (error) {\r\n console.error(error);\r\n });\r\n }\r\n }]);\r\n\r\n})();\r\n","(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('directive.page-head', [])\r\n\r\n /* @ngInject */\r\n .directive('pageTitle', [\"$window\", function ($window) {\r\n return {\r\n restrict: 'E',\r\n scope: {\r\n title: '@',\r\n checkout: '@?'\r\n },\r\n link: function (scope, element) {\r\n if (scope.checkout && scope.checkout === 'true') {\r\n $(document.body).addClass('checkout');\r\n } else {\r\n $(document.body).removeClass('checkout');\r\n }\r\n scope.$emit('pageTitle', scope.checkout && scope.checkout === 'true');\r\n $window.document.title = scope.title;\r\n }\r\n };\r\n }])\r\n\r\n /* @ngInject */\r\n .directive('pageMetaDescription', function () {\r\n return {\r\n restrict: 'E',\r\n scope: {\r\n content: '@'\r\n },\r\n link: function (scope, element) {\r\n $('meta[name=\"description\"]').attr('content', scope.content);\r\n }\r\n };\r\n });\r\n\r\n})();\r\n","(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('directive.sticky', [])\r\n\r\n /* @ngInject */\r\n .directive('sticky', function () {\r\n return {\r\n restrict: 'A',\r\n link: function (scope, element, attrs) {\r\n if (!window.IntersectionObserver) return;\r\n\r\n var _element = element[0];\r\n var observer = addObserver();\r\n var _sentinel;\r\n\r\n if (angular.isDefined(attrs.enable)) {\r\n scope.$watch(attrs.enable, function (value) {\r\n if (angular.isUndefined(value)) return;\r\n value ? stick() : unstick();\r\n });\r\n } else {\r\n stick();\r\n }\r\n\r\n function stick() {\r\n if (!_sentinel) {\r\n var div = document.createElement('div');\r\n div.id = '_element.id' + '_top';\r\n _sentinel = _element.parentNode.insertBefore(div, _element);\r\n }\r\n _element.classList.add('sticky');\r\n observer.observe(_sentinel);\r\n }\r\n\r\n function unstick() {\r\n _sentinel && observer.unobserve(_sentinel);\r\n _element.classList.remove('is-sticky');\r\n _element.classList.remove('sticky');\r\n }\r\n\r\n function addObserver() {\r\n return new IntersectionObserver(function (records) {\r\n _.each(records, function (record) {\r\n var targetInfo = record.boundingClientRect;\r\n var rootBoundsInfo = record.rootBounds;\r\n if (rootBoundsInfo) {\r\n if (targetInfo.bottom < rootBoundsInfo.top) {\r\n toggle(true);\r\n } else if (targetInfo.bottom >= rootBoundsInfo.top && targetInfo.bottom < rootBoundsInfo.bottom) {\r\n toggle(false);\r\n }\r\n }\r\n });\r\n }, { threshold: [0], root: null });\r\n }\r\n\r\n function toggle(value) {\r\n _element.classList.toggle('is-sticky', value);\r\n }\r\n }\r\n };\r\n });\r\n\r\n})();\r\n","(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('directive.truncate', [])\r\n\r\n /* @ngInject */\r\n .factory('TruncateService', function () {\r\n var load,\r\n queue = [];\r\n\r\n var service = {\r\n add: add\r\n };\r\n return service;\r\n\r\n ////////////\r\n\r\n function add(element, scope) {\r\n if (angular.isUndefined($.fn.dotdotdot)) {\r\n queue.push({ element: element, scope: scope });\r\n if (!load) {\r\n load = true;\r\n $.ajax({\r\n url: '/js/jquery.dotdotdot.min.js',\r\n dataType: 'script',\r\n cache: true,\r\n success: function () {\r\n start();\r\n }\r\n });\r\n }\r\n } else {\r\n init(element, scope);\r\n }\r\n }\r\n\r\n function start() {\r\n _.each(queue, function (item) {\r\n init(item.element, item.scope);\r\n });\r\n }\r\n\r\n function init(element, scope) {\r\n var initPlugin = function () {\r\n setTimeout(function () {\r\n element.dotdotdot({\r\n height: scope.maxHeight,\r\n watch: 'window',\r\n after: 'a.readmore',\r\n callback: function () {\r\n $(this).addClass('active');\r\n }\r\n });\r\n });\r\n };\r\n\r\n angular.element(document).ready(initPlugin);\r\n }\r\n })\r\n\r\n /* @ngInject */\r\n .directive('truncate', [\"TruncateService\", function (TruncateService) {\r\n return {\r\n scope: {\r\n maxHeight: '<'\r\n },\r\n restrict: 'A',\r\n link: function (scope, element) {\r\n if (window.isBot) return;\r\n\r\n TruncateService.add(element, scope);\r\n }\r\n };\r\n }]);\r\n\r\n})();\r\n","(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('directive.video-player', [])\r\n\r\n /* @ngInject */\r\n .factory('VideoPlayerService', [\"$timeout\", function ($timeout) {\r\n var load,\r\n queue = [];\r\n\r\n var service = {\r\n add: add\r\n };\r\n return service;\r\n\r\n ////////////\r\n\r\n function add(element, scope) {\r\n if (angular.isUndefined($.fn.pPlayer)) {\r\n queue.push({ element: element, scope: scope });\r\n if (!load) {\r\n load = true;\r\n $.ajax({\r\n url: '/js/jquery.pplayer.min.js',\r\n dataType: 'script',\r\n cache: true,\r\n success: function () {\r\n start();\r\n }\r\n });\r\n }\r\n } else {\r\n init(element, scope);\r\n }\r\n }\r\n\r\n function start() {\r\n _.each(queue, function (item) {\r\n init(item.element, item.scope);\r\n });\r\n }\r\n\r\n function init(element, scope) {\r\n var id = getYouTubeIdFromUrl(scope.url);\r\n element.children('.player').pPlayer({\r\n youtubeVideoId: id,\r\n autoplay: scope.autoplay ? 1 : 0,\r\n adapter: 'Youtube',\r\n showinfo: 0,\r\n features: [ 'playpause', 'progress', 'timer', 'quality', 'mute', 'fullscreen' ],\r\n resizeVideo: false,\r\n afterInit: function () {\r\n $timeout(function () {\r\n scope.showLoader = false;\r\n });\r\n var $mainVideo = element.parent().parent();\r\n if ($mainVideo.hasClass('main-video')) {\r\n $mainVideo.children('.inner').addClass('in');\r\n }\r\n }\r\n });\r\n }\r\n\r\n function getYouTubeIdFromUrl(youtubeUrl) {\r\n var regExp = /^.*(youtu.be\\/|v\\/|u\\/\\w\\/|embed\\/|watch\\?v=)([^#\\&\\?]*).*/;\r\n var match = youtubeUrl.match(regExp);\r\n if (match && match[2].length === 11) {\r\n return match[2];\r\n }\r\n return false;\r\n }\r\n }])\r\n\r\n /* @ngInject */\r\n .directive('videoPlayer', [\"VideoPlayerService\", function (VideoPlayerService) {\r\n return {\r\n restrict: 'E',\r\n scope: {\r\n url: '@',\r\n autoplay: '<'\r\n },\r\n templateUrl: 'directive.video-player.tpl',\r\n link: function (scope, element) {\r\n scope.showLoader = true;\r\n VideoPlayerService.add(element, scope);\r\n }\r\n };\r\n }]);\r\n\r\n})();\r\n","(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('directives.breadcrumb', [])\r\n\r\n /* @ngInject */\r\n .directive('breadcrumb', function () {\r\n return {\r\n restrict: 'A',\r\n link: function (scope, element) {\r\n $('#navMenu, #navSecondary, #navAside').find('li.active').removeClass('active');\r\n\r\n var $items = element.find('.item'),\r\n i,\r\n len = $items.length;\r\n\r\n for (i = 0; i < len; i++) {\r\n var id = $($items[i]).data('id');\r\n $('#navMenu, #navSecondary, #navAside').find('li[data-id=\"' + id + '\"]').addClass('active');\r\n }\r\n }\r\n };\r\n })\r\n\r\n /* @ngInject */\r\n .directive('breadcrumbAccount', [\"$timeout\", function ($timeout) {\r\n return {\r\n restrict: 'A',\r\n link: function (scope, element) {\r\n $('#navMenu, #navSecondary, #navAside').find('li.active').removeClass('active');\r\n\r\n var $items = element.find('.item-3'),\r\n i,\r\n len = $items.length;\r\n\r\n for (i = 0; i < len; i++) {\r\n var menu = $($items[i]).data('menu');\r\n $timeout(addActive, 0, true, menu);\r\n }\r\n }\r\n };\r\n\r\n // Functions\r\n\r\n function addActive(menu) {\r\n $('#navAside').find('li[data-menu=\"' + menu + '\"]').addClass('active');\r\n }\r\n\r\n }]);\r\n\r\n})();\r\n","/*\r\n * Input directive\r\n * Version 1.0.0\r\n * Octave\r\n * Modified from .\r\n **/\r\n\r\n(function () {\r\n 'use strict';\r\n\r\n noZoomDirective.$inject = [\"$document\"];\r\n angular\r\n .module('directives.form', [])\r\n\r\n /* @ngInject */\r\n .directive('rbInput', function () {\r\n\r\n var template = ['',\r\n '',\r\n '',\r\n '',\r\n ''\r\n ].join('');\r\n\r\n return {\r\n restrict: 'A',\r\n /* require: 'ngModel',*/\r\n priority: 200,\r\n scope: {\r\n theme: '@',\r\n label: '@?',\r\n icon: '@',\r\n color: '@',\r\n ngRequired: '='\r\n /* ngRequired: '@valRequired',\r\n ngPattern: '@',\r\n ngMinlength: '=valMinlengthMin',\r\n ngMaxlength: '=',\r\n ngChange: '&ngChange',\r\n ngTrim: '=',\r\n ngModel: '=',\r\n trigger : '@focus'*/\r\n },\r\n link: function (scope, element, attrs) {\r\n\r\n var $wrapper = angular.element(template);\r\n element.after($wrapper);\r\n $wrapper.prepend(element);\r\n\r\n scope.input = element;\r\n\r\n // Default options\r\n attrs.theme = attrs.theme || 'default';\r\n attrs.type = attrs.type || 'text';\r\n attrs.color = attrs.color || '1';\r\n var optRequired = attrs.optRequired === 'true' ? ' opt-required' : '';\r\n\r\n var inputClass = 'input-filled';\r\n\r\n element\r\n .addClass('form-control input-field input-field-' + attrs.theme)\r\n .parent().addClass('input-' + attrs.theme + optRequired);\r\n\r\n var $label = element.parent().find('label');\r\n $label\r\n .attr('for', attrs.id)\r\n .addClass('input-label-' + attrs.theme)\r\n .find('.input-label-content').addClass('input-label-content-' + attrs.theme);\r\n\r\n if (angular.isDefined(attrs.label)) {\r\n if (attrs.required && attrs.noStar === undefined) {\r\n scope.label = scope.label + ' *';\r\n }\r\n $label.find('.input-label-content').html(scope.label);\r\n }\r\n\r\n if (angular.isDefined(attrs.placeholder)) {\r\n if (attrs.required && attrs.noStar === undefined) {\r\n element.attr('placeholder', attrs.placeholder + ' *');\r\n }\r\n }\r\n\r\n if (attrs.required && angular.isDefined(attrs.noStar)) {\r\n $wrapper.parent().addClass('is-required')\r\n }\r\n\r\n if (scope.icon && scope.icon !== '') {\r\n element.addClass('with-icon');\r\n $label.prepend('');\r\n }\r\n\r\n onInputChange();\r\n scope.input.on('focus', onInputFocus);\r\n scope.input.on('blur', onInputBlur);\r\n\r\n // To detect browser autofill\r\n scope.input.on('change', onInputChange);\r\n\r\n if (angular.isDefined(attrs.ngRequired)) {\r\n scope.$watch(function () { return scope.ngRequired; }, function (value) {\r\n if (angular.isDefined(attrs.label)) {\r\n if (attrs.noStar === undefined) {\r\n scope.label = !value ? attrs.label : attrs.label + ' *';\r\n }\r\n $label.find('.input-label-content').html(scope.label);\r\n }\r\n });\r\n }\r\n\r\n scope.$watch(function () { return scope.input.val(); }, function () {\r\n onInputChange();\r\n });\r\n\r\n function onInputChange() {\r\n if (scope.input.val().trim() !== '') addClass();\r\n }\r\n\r\n function onInputFocus() {\r\n addClass();\r\n }\r\n\r\n function onInputBlur() {\r\n if (scope.input.val().trim() === '') removeClass();\r\n }\r\n\r\n function addClass() {\r\n $wrapper.addClass(inputClass);\r\n }\r\n\r\n function removeClass() {\r\n $wrapper.removeClass(inputClass);\r\n }\r\n }\r\n };\r\n })\r\n\r\n /* @ngInject */\r\n .directive('ngModelInit', [\"$parse\", function ($parse) {\r\n return {\r\n restrict: 'A',\r\n require: 'ngModel',\r\n link: function (scope, element, attrs) {\r\n var value = attrs.ngModelInit || attrs.value || element.text();\r\n value = String(value).toLowerCase() === 'false' ? false : value;\r\n value = String(value).toLowerCase() === 'true' ? true : value;\r\n $parse(attrs.ngModel).assign(scope, value);\r\n }\r\n };\r\n }])\r\n\r\n .directive('input', noZoomDirective)\r\n .directive('textarea', noZoomDirective)\r\n .directive('select', noZoomDirective);\r\n\r\n /* @ngInject */\r\n function noZoomDirective($document) {\r\n var maxScale = ',maximum-scale=';\r\n\r\n var viewport = _.find($document[0].getElementsByTagName('meta'), function (tag) {\r\n return tag.name === 'viewport';\r\n });\r\n var content = viewport.content;\r\n\r\n function changeViewport(event) {\r\n if (event.type === 'blur') {\r\n viewport.content = content;\r\n } else {\r\n viewport.content = content + maxScale + 1;\r\n }\r\n }\r\n\r\n return {\r\n link: function (scope, element) {\r\n element.on('focus blur', changeViewport);\r\n }\r\n };\r\n }\r\n\r\n})();\r\n","(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('filter.discount', [])\r\n\r\n /* @ngInject */\r\n .filter('discount', [\"AppService\", function (AppService) {\r\n var params = null;\r\n\r\n function discountFilter(value) {\r\n if (value === null) return value;\r\n\r\n if (params !== null) {\r\n return !angular.isFunction(params.then) ? getDiscountFilter(value) : undefined;\r\n }\r\n params = AppService.getParams()\r\n .then(function (data) {\r\n params = data;\r\n })\r\n .catch(function (error) {\r\n console.error(error);\r\n });\r\n }\r\n\r\n function getDiscountFilter(value) {\r\n if (!angular.isFunction(format)) return value;\r\n\r\n var loc = params.Localization,\r\n template = loc.DiscountHTMLFormat,\r\n render = template.replace('[%amount%]', format(loc.DiscountFormat, parseFloat(value)))\r\n .replace(',', '##DiscountTSep##')\r\n .replace('.', loc.DiscountDecimalSeparator)\r\n .replace('##DiscountTSep##', loc.DiscountThousandSeparator);\r\n return render;\r\n }\r\n\r\n discountFilter.$stateful = true;\r\n return discountFilter;\r\n }]);\r\n\r\n})();\r\n","(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('filter.format', [])\r\n\r\n /* @ngInject */\r\n .filter('format', function () {\r\n return function (value) {\r\n if (!value) return value;\r\n if (arguments.length > 1) {\r\n var str = value;\r\n for (var i = 1; i < arguments.length; i++) {\r\n var reg = new RegExp('\\\\{' + (i - 1) + '\\\\}');\r\n str = str.replace(reg, arguments[i]);\r\n }\r\n return str;\r\n }\r\n return value;\r\n };\r\n });\r\n\r\n})();\r\n","(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('filter.phone', [])\r\n\r\n .filter('phoneNumber', function () {\r\n return function (num) {\r\n return _.replace(num, /\\./g, ' ');\r\n };\r\n });\r\n\r\n})();\r\n","(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('filter.price', [])\r\n\r\n /* @ngInject */\r\n .filter('price', [\"AppService\", function (AppService) {\r\n var params = null;\r\n\r\n function priceFilter(prices, str, ttc) {\r\n if (prices === null || angular.isUndefined(prices) || (!angular.isObject(prices) && isNaN(prices))) return prices;\r\n ttc = ttc === 'ht' ? false : true;\r\n\r\n if (params !== null) {\r\n return !angular.isFunction(params.then) ? getPriceFilter(prices, str, ttc) : undefined;\r\n }\r\n params = AppService.getParams()\r\n .then(function (data) {\r\n params = data;\r\n })\r\n .catch(function (error) {\r\n console.error(error);\r\n });\r\n }\r\n\r\n function getPriceFilter(prices, str, ttc) {\r\n if (!angular.isFunction(format)) return prices;\r\n\r\n var loc = params.Localization,\r\n value,\r\n template = params.Visitor.CardType.ShowTTCPrice ? loc.PriceHTMLFormatVATincluded : loc.PriceHTMLFormatVATexcluded;\r\n\r\n switch (str) {\r\n case 'value':\r\n case 'round-value':\r\n value = prices;\r\n template = ttc ? loc.PriceHTMLFormatVATincluded : loc.PriceHTMLFormatVATexcluded;\r\n break;\r\n case 'amount-price':\r\n value = params.Visitor.CardType.ShowTTCPrice ? prices.TTCAmount : prices.HTAmount;\r\n break;\r\n case 'final-price':\r\n value = params.Visitor.CardType.ShowTTCPrice ? prices.TTCDiscountedPrice : prices.HTDiscountedPrice;\r\n break;\r\n case 'total-price':\r\n value = params.Visitor.CardType.ShowTTCPrice ? prices.TTCTotalPrice : prices.HTTotalPrice;\r\n break;\r\n default:\r\n value = params.Visitor.CardType.ShowTTCPrice ? prices.TTCPrice : prices.HTPrice;\r\n }\r\n if (angular.isUndefined(value)) return;\r\n\r\n var strMontant = format(loc.PriceFormat, parseFloat(value)),\r\n separatorIndex = strMontant.indexOf('.');\r\n\r\n if (str === 'round-value' && Math.floor(value) === value) {\r\n template = template.replace('[%decimal-separator%]', '');\r\n template = template.replace('[%amount-dec%]', '');\r\n }\r\n\r\n var render = template.replace('[%amount%]', strMontant)\r\n .replace(',', '##PriceTSep##')\r\n .replace('[%amount-int%]', separatorIndex !== -1 ? strMontant.substring(0, separatorIndex) : strMontant)\r\n .replace('[%amount-dec%]', separatorIndex !== -1 ? strMontant.substring(separatorIndex + 1) : '')\r\n .replace('[%decimal-separator%]', loc.PriceDecimalSeparator)\r\n .replace('.', loc.PriceDecimalSeparator)\r\n .replace('##PriceTSep##', loc.PriceThousandSeparator)\r\n .replace('[%currency%]', params.Currency.Symbol)\r\n .replace('[%currencyCode%]', params.Currency.ISOCode);\r\n\r\n return render;\r\n }\r\n\r\n priceFilter.$stateful = true;\r\n return priceFilter;\r\n }]);\r\n\r\n})();\r\n","(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('filter.truncate-date', [])\r\n\r\n /* @ngInject */\r\n .filter('truncateDate', function () {\r\n return function (value) {\r\n if (angular.isString(value) && value.indexOf('h00') === value.length - 3) {\r\n return value.slice(0, -2);\r\n }\r\n return value;\r\n };\r\n });\r\n\r\n})();\r\n","/**!\r\n * AngularJS dropzone directive\r\n * @author Uday Hiwarale \r\n * https://www.github.com/thatisuday/ngDropzone\r\n */\r\n\r\n(function(){\r\n 'use strict';\r\n\r\n angular\r\n .module('thatisuday.dropzone', [])\r\n\r\n .provider('dropzoneOps', function () {\r\n\t\tvar defOps = {};\r\n\t\treturn {\r\n\t\t\tsetOptions : function(newOps){\r\n\t\t\t\tangular.extend(defOps, newOps);\r\n\t\t\t},\r\n\t\t\t$get : function(){\r\n\t\t\t\treturn defOps;\r\n\t\t\t}\r\n };\r\n })\r\n\r\n /* @ngInject */\r\n .factory('DropzoneService', function () {\r\n var load,\r\n queue = [];\r\n\r\n var service = {\r\n add: add\r\n };\r\n return service;\r\n\r\n ////////////\r\n\r\n function add(element, scope, options) {\r\n if (angular.isUndefined(window.Dropzone)) {\r\n queue.push({ element: element, scope: scope, options: options });\r\n if (!load) {\r\n load = true;\r\n $.ajax({\r\n url: '/js/dropzone.min.js',\r\n dataType: 'script',\r\n cache: true,\r\n success: function () {\r\n start();\r\n\t\t\t\t}\r\n\t\t\t\t\t\t});\r\n }\r\n } else {\r\n init(element, scope, options);\r\n }\r\n\t\t\t\t}\r\n\r\n function start() {\r\n _.each(queue, function (item) {\r\n init(item.element, item.scope, item.options);\r\n });\r\n\t\t\t\t}\r\n\r\n function init(element, scope, options) {\r\n //Instantiate dropzone with options\r\n var dropzone = new Dropzone(element[0], options);\r\n\r\n\t\t\t\t/*********************************************/\r\n\r\n\t\t\t\t//Instantiate Dropzone methods (Control actions)\r\n\t\t\t\tscope.methods = scope.methods || {};\r\n\r\n\t\t\t\tscope.methods.getDropzone = function(){\r\n\t\t\t\t\treturn dropzone; //Return dropzone instance\r\n\t\t\t\t};\r\n\r\n\t\t\t\tscope.methods.getAllFiles = function(){\r\n\t\t\t\t\treturn dropzone.files; //Return all files\r\n\t\t\t\t};\r\n\r\n\t\t\t\tvar controlMethods = [\r\n\t\t\t\t\t'removeFile', 'removeAllFiles', 'processQueue',\r\n\t\t\t\t\t'getAcceptedFiles', 'getRejectedFiles', 'getQueuedFiles', 'getUploadingFiles',\r\n\t\t\t\t\t'disable', 'enable', 'confirm', 'createThumbnailFromUrl'\r\n\t\t\t\t];\r\n\r\n\t\t\t\tangular.forEach(controlMethods, function(methodName){\r\n\t\t\t\t\tscope.methods[methodName] = function(){\r\n\t\t\t\t\t\tdropzone[methodName].apply(dropzone, arguments);\r\n\t\t\t\t\t\tif(!scope.$$phase && !scope.$root.$$phase) scope.$apply();\r\n };\r\n\t\t\t\t});\r\n\r\n\t\t\t\t/*********************************************/\r\n\r\n\t\t\t\t//Set invents (callbacks)\r\n\t\t\t\tif(scope.callbacks){\r\n\t\t\t\t\t/*var callbackMethods = [\r\n\t\t\t\t\t\t'drop', 'dragstart', 'dragend',\r\n\t\t\t\t\t\t'dragenter', 'dragover', 'dragleave', 'addedfile', 'removedfile',\r\n\t\t\t\t\t\t'thumbnail', 'error', 'processing', 'uploadprogress',\r\n\t\t\t\t\t\t'sending', 'success', 'complete', 'canceled', 'maxfilesreached',\r\n\t\t\t\t\t\t'maxfilesexceeded', 'processingmultiple', 'sendingmultiple', 'successmultiple',\r\n\t\t\t\t\t\t'completemultiple', 'canceledmultiple', 'totaluploadprogress', 'reset', 'queuecomplete'\r\n\t\t\t\t\t]; Hack */\r\n var callbackMethods = ['addedfile', 'complete', 'canceled', 'error', 'success', 'successmultiple', 'removedfile'];\r\n\t\t\t\t\tangular.forEach(callbackMethods, function(method){\r\n\t\t\t\t\t\tvar callback = (scope.callbacks[method] || angular.noop);\r\n\t\t\t\t\t\tdropzone.on(method, function(){\r\n var args = [].slice.call(arguments);\r\n if (scope.target) {\r\n args.splice(1, 0, scope.target);\r\n }\r\n callback.apply(null, args);\r\n\t\t\t\t\t\t\tif(!scope.$$phase && !scope.$root.$$phase) scope.$apply();\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\tif (scope.success) {\r\n\t\t\t\t\tdropzone.on('success', function(file){\r\n\t\t\t\t\t\tscope.$apply(function () {\r\n\t\t\t\t\t\t\tscope.success({\r\n\t\t\t\t\t\t\t\tfile: file\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\t\t\t\t}\r\n\t\t\t\tif (scope.removedfile) {\r\n\t\t\t\t\tdropzone.on('removedfile', function(file){\r\n\t\t\t\t\t\tscope.$apply(function () {\r\n\t\t\t\t\t\t\tscope.removedfile({\r\n\t\t\t\t\t\t\t\tfile: file\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 dropzone.on('addedfile', function (file) {\r\n var self = this;\r\n if (typeof window.loadImage === 'undefined') {\r\n /* chargement ajax du plugin loadImage */\r\n $.ajax({\r\n url: '/js/load-image.min.js',\r\n dataType: 'script',\r\n cache: true,\r\n success: function () {\r\n parseMetaData(self, file);\r\n }\r\n });\r\n } else {\r\n parseMetaData(self, file);\r\n }\r\n });\r\n\r\n scope.$emit('dropzone', dropzone);\r\n }\r\n\r\n function parseMetaData(target, file) {\r\n window.loadImage.parseMetaData(file, function (data) {\r\n // use embedded thumbnail if exists.\r\n if (data.exif) {\r\n var thumbnail = data.exif.get('Thumbnail');\r\n var orientation = data.exif.get('Orientation');\r\n if (thumbnail && orientation) {\r\n window.loadImage(thumbnail, function (img) {\r\n target.emit('thumbnail', file, img.toDataURL());\r\n }, { orientation: orientation });\r\n return;\r\n }\r\n }\r\n // use default implementation for PNG, etc.\r\n target.createThumbnail(file);\r\n });\r\n }\r\n })\r\n\r\n /* @ngInject */\r\n .directive('ngDropzone', [\"dropzoneOps\", \"DropzoneService\", function (dropzoneOps, DropzoneService) {\r\n return {\r\n restrict: 'AE',\r\n template: '
',\r\n replace: true,\r\n scope: {\r\n options: '=?', //http://www.dropzonejs.com/#configuration-options\r\n callbacks: '=?', //http://www.dropzonejs.com/#events\r\n target: '=?',\r\n methods: '=?', //http://www.dropzonejs.com/#dropzone-methods\r\n acceptedFiles: '@?',\r\n success: '&?',\r\n removedfile: '&?'\r\n },\r\n link: function (scope, element) {\r\n //Set options for dropzone {override from dropzone options provider}\r\n scope.options = scope.options || {};\r\n\r\n if (scope.options.dictFileTooBig) {\r\n scope.options.dictFileTooBig = scope.options.dictFileTooBig.replace('{maxFilesize}', '{{maxFilesize}}');\r\n }\r\n\r\n if (scope.options.maxFiles === 1) {\r\n scope.options.init = function () {\r\n this.on('maxfilesexceeded', function (file) {\r\n this.removeAllFiles();\r\n this.addFile(file);\r\n });\r\n };\r\n }\r\n\r\n if (scope.acceptedFiles) {\r\n scope.options.acceptedFiles = scope.acceptedFiles;\r\n\t\t\t}\r\n\r\n var options = angular.extend({}, dropzoneOps, scope.options);\r\n\r\n DropzoneService.add(element, scope, options);\r\n\t\t}\r\n };\r\n }]);\r\n\r\n})();\r\n","/**\r\n * AngularGM - Google Maps Directives for AngularJS\r\n * @version v1.0.2 - 2016-11-19\r\n * @link https://github.com/dylanfprice/angular-gm\r\n * @author Dylan Price \r\n * @license MIT License, http://www.opensource.org/licenses/MIT\r\n */\r\n/**\r\n * @doc module\r\n * @name angulargm\r\n *\r\n * @description\r\n * Module for embedding Google Maps into AngularJS applications.\r\n *\r\n * # Example Plunkers ([fullscreen](http://embed.plnkr.co/PYDYjVuRHaJpdntoJtqL))\r\n *\r\n * \r\n *\r\n * Author: Dylan Price \r\n */\r\n(function() {\r\n'use strict';\r\n\r\n angular.module('AngularGM', []).\r\n\r\n /**\r\n * @ngdoc service\r\n * @name angulargm.service:angulargmDefaults\r\n *\r\n * @description\r\n * Default configuration.\r\n *\r\n * To provide your own default config, use the following\r\n * ```js\r\n * angular.module('myModule').config(function($provide) {\r\n * $provide.decorator('angulargmDefaults', function($delegate) {\r\n * return angular.extend($delegate, {\r\n * 'precision': 3,\r\n * 'markerConstructor': myCustomMarkerConstructor,\r\n * 'polylineConstructor': myCustomPolylineConstructor,\r\n * 'mapOptions': {\r\n * center: {lat: 55, lng: 111},\r\n * mapTypeId: google.maps.MapTypeId.SATELLITE,\r\n * ...\r\n * }\r\n * });\r\n * });\r\n * });\r\n * ```\r\n */\r\n factory('angulargmDefaults', function() {\r\n return {\r\n 'precision': 3,\r\n 'markerConstructor': google.maps.Marker,\r\n 'polylineConstructor': google.maps.Polyline,\r\n 'circleConstructor': google.maps.Circle,\r\n 'mapOptions': {\r\n zoom : 8,\r\n center : {lat: 46, lng: -120},\r\n mapTypeId : google.maps.MapTypeId.ROADMAP\r\n }\r\n };\r\n });\r\n\r\n})();\r\n\r\n/**\r\n * @ngdoc directive\r\n * @name angulargm.directive:gmInfoWindow\r\n * @element ANY\r\n *\r\n * @description\r\n * A directive for creating a google.maps.InfoWindow.\r\n *\r\n * @param {expression} gm-info-window scope variable to store the\r\n * [google.maps.InfoWindow](https://developers.google.com/maps/documentation/javascript/reference#InfoWindow)\r\n * in. Does not have to already exist.\r\n *\r\n * @param {expression} gm-info-window-options object in the current scope\r\n * that is a\r\n * [google.maps.InfoWindowOptions](https://developers.google.com/maps/documentation/javascript/reference#InfoWindowOptions)\r\n * object. If unspecified, google maps api defaults will be used.\r\n *\r\n * @param {expression} gm-on-*event* an angular expression which evaluates to an\r\n * event handler. This handler will be attached to the InfoWindow's \\*event\\*\r\n * event. The variable `infoWindow` evaluates to the InfoWindow. For example:\r\n * ```html\r\n * gm-on-closeclick=\"myCloseclickFn(infoWindow)\"\r\n * ```\r\n * will call your myCloseclickFn whenever the InfoWindow is clicked closed. You\r\n * may have multiple `gm-on-*event*` handlers, but only one for each type of\r\n * event.\r\n */\r\n(function () {\r\n'use strict';\r\n\r\n angular.module('AngularGM').\r\n\r\n /*\r\n * Much of this code is taken from the Angular UI team, see:\r\n * https://github.com/angular-ui/ui-map/blob/master/ui-map.js\r\n */\r\n directive('gmInfoWindow',\r\n ['$parse', '$compile', '$timeout', 'angulargmUtils',\r\n function ($parse, $compile, $timeout, angulargmUtils) {\r\n\r\n /** aliases */\r\n var getEventHandlers = angulargmUtils.getEventHandlers;\r\n\r\n function link(scope, element, attrs, controller) {\r\n var opts = angular.extend({}, scope.$eval(attrs.gmInfoWindowOptions));\r\n opts.content = element[0];\r\n var model = $parse(attrs.gmInfoWindow);\r\n var infoWindow = model(scope);\r\n\r\n if (!infoWindow) {\r\n infoWindow = new google.maps.InfoWindow(opts);\r\n model.assign(scope, infoWindow);\r\n }\r\n\r\n var handlers = getEventHandlers(attrs);\r\n\r\n // set up info window event handlers\r\n angular.forEach(handlers, function(handler, event) {\r\n google.maps.event.addListener(infoWindow, event, function() {\r\n $timeout(function() {\r\n handler(scope, {\r\n infoWindow: infoWindow\r\n });\r\n });\r\n });\r\n });\r\n }\r\n\r\n return {\r\n restrict: 'A',\r\n priority: 100,\r\n scope: false,\r\n link: link\r\n };\r\n\r\n }]);\r\n})();\r\n\r\n/**\r\n * @ngdoc directive\r\n * @name angulargm.directive:gmMap\r\n * @element ANY\r\n *\r\n * @description\r\n * A directive for embedding google maps into your app.\r\n *\r\n * `gm-map-id` is required. The `gm-center`, `gm-zoom`, `gm-bounds`, and\r\n * `gm-map-type-id` variables do not have to exist in the current scope--they\r\n * will be created if necessary. All three have bi-directional association,\r\n * i.e. drag or zoom the map and they will update, update them and the map\r\n * will change. However, any initial state of these three variables will be\r\n * ignored.\r\n *\r\n * If you need to get a handle on the google.maps.Map object, see\r\n * {@link angulargm.service:angulargmContainer angulargmContainer}\r\n *\r\n * @param {expression} gm-map-id angular expression that evaluates to a unique\r\n * string id for the map, e.g. `'map_canvas'` or `myMapId` where myMapId is a\r\n * variable in the current scope. This allows you to have multiple\r\n * maps/instances of the directive.\r\n *\r\n *\r\n * @param {expression} gm-center center variable in the current scope. The\r\n * value will be a google.maps.LatLngLiteral object.\r\n *\r\n *\r\n * @param {expression} gm-zoom zoom variable in the current scope. Value will\r\n * be an integer.\r\n *\r\n *\r\n * @param {expression} gm-bounds bounds variable in the current scope. Value\r\n * will be a google.maps.LatLngBounds object.\r\n *\r\n *\r\n * @param {expression} gm-map-type-id mapTypeId variable in the current scope.\r\n * Value will be a string.\r\n *\r\n *\r\n * @param {expression} gm-map-options object in the current scope that is a\r\n * google.maps.MapOptions object. If unspecified, will use the values in\r\n * angulargmDefaults.mapOptions. {@link angulargm.service:angulargmDefaults angulargmDefaults} is a service, so it is\r\n * both injectable and overrideable (using $provide.decorator).\r\n *\r\n * @param {expression} gm-on-*event* an angular expression which evaluates to\r\n * an event handler. This handler will be attached to each marker's \\*event\\*\r\n * event. The variables 'map' and 'event' evaluate to the map and the\r\n * [google.maps.MouseEvent](https://developers.google.com/maps/documentation/javascript/reference#MouseEvent),\r\n * respectively. The map is always passed in, but the MouseEvent is only passed in if the event emits it. For example:\r\n * ```html\r\n * gm-on-click=\"myClickFn(map, event)\"\r\n * ```\r\n * will call your `myClickFn` whenever the map is clicked. You may have\r\n * multiple `gm-on-*event*` handlers, but only one for each type of event. For events that have an underscore in their\r\n * name, such as 'center_changed', write it as 'gm-on-center-changed'.\r\n *\r\n *\r\n */\r\n\r\n/**\r\n * @ngdoc event\r\n * @name angulargm.directive:gmMap#gmMapResize\r\n * @eventOf angulargm.directive:gmMap\r\n * @eventType listen on current gmMap scope\r\n *\r\n * @description Alias for google.maps.event.trigger(map, 'resize')\r\n *\r\n * @param {string} mapId Required. The id of your map.\r\n * @example\r\n * ```js\r\n * $scope.$broadcast('gmMapResize', 'myMapId')\r\n * ```\r\n */\r\n\r\n/**\r\n * @ngdoc event\r\n * @name angulargm.directive:gmMap#gmMapIdle\r\n * @eventOf angulargm.directive:gmMap\r\n * @eventType emit on current gmMap scope\r\n *\r\n * @description Emitted when the map is finished loading (when the map fires\r\n * the 'idle' event).\r\n *\r\n * @param {string} mapId the id of the map which finished loading.\r\n *\r\n * @example\r\n * ```js\r\n * $scope.$on('gmMapIdle', function(event, mapId) {\r\n * if (mapId === 'myMapId') {\r\n * ...\r\n * }\r\n * });\r\n * ```\r\n */\r\n\r\n(function () {\r\n'use strict';\r\n\r\n angular.module('AngularGM').\r\n\r\n\r\n directive('gmMap', ['$timeout', 'angulargmUtils', 'debounce', function ($timeout, angulargmUtils, debounce) {\r\n\r\n /** aliases **/\r\n var getEventHandlers = angulargmUtils.getEventHandlers;\r\n var validateLatLng = angulargmUtils.validateLatLng;\r\n var latLngLiteralEqual = angulargmUtils.latLngLiteralEqual;\r\n\r\n /** link function **/\r\n function link(scope, element, attrs, controller) {\r\n // initialize scope\r\n if (!angular.isDefined(scope.gmCenter)) {\r\n scope.center = {};\r\n }\r\n if (!angular.isDefined(scope.gmBounds)) {\r\n scope.bounds = {};\r\n }\r\n\r\n // Make sure gmMapId is defined\r\n // Note: redundant check in MapController. Can't hurt.\r\n if (!angular.isDefined(scope.gmMapId)) {\r\n throw 'angulargm must have non-empty gmMapId attribute';\r\n }\r\n\r\n // Check what's defined in attrs\r\n // Note: this is also redundant since angular will throw an exception if\r\n // these attributes are not set. I may make these optional in the future\r\n // (pending angular support).\r\n var hasCenter = false;\r\n var hasZoom = false;\r\n var hasBounds = false;\r\n var hasMapTypeId = false;\r\n\r\n if (attrs.hasOwnProperty('gmCenter')) {\r\n hasCenter = true;\r\n }\r\n if (attrs.hasOwnProperty('gmZoom')) {\r\n hasZoom = true;\r\n }\r\n if (attrs.hasOwnProperty('gmBounds')) {\r\n hasBounds = true;\r\n }\r\n if (attrs.hasOwnProperty('gmMapTypeId')) {\r\n hasMapTypeId = true;\r\n }\r\n\r\n var _updateScope = function() {\r\n $timeout(function () {\r\n if (hasCenter || hasZoom || hasBounds || hasMapTypeId) {\r\n scope.$apply(function (s) {\r\n if (hasCenter) {\r\n scope.gmCenter = controller.center;\r\n }\r\n if (hasZoom) {\r\n scope.gmZoom = controller.zoom;\r\n }\r\n if (hasBounds) {\r\n var b = controller.bounds;\r\n if (b) {\r\n scope.gmBounds = b;\r\n }\r\n }\r\n if (hasMapTypeId) {\r\n scope.gmMapTypeId = controller.mapTypeId;\r\n }\r\n });\r\n }\r\n });\r\n };\r\n\r\n var updateScope = debounce(_updateScope, 100);\r\n\r\n // Add event listeners to the map\r\n controller.addMapListener('drag', updateScope);\r\n controller.addMapListener('zoom_changed', updateScope);\r\n controller.addMapListener('center_changed', updateScope);\r\n controller.addMapListener('bounds_changed', updateScope);\r\n controller.addMapListener('maptypeid_changed', updateScope);\r\n controller.addMapListener('resize', updateScope);\r\n\r\n // Add user supplied callbacks\r\n var map = controller.getMap(attrs.gmMapId);\r\n var handlers = getEventHandlers(attrs); // map events -> handlers\r\n angular.forEach(handlers, function(handler, event) {\r\n controller.addMapListener(event, function(ev) {\r\n // pass the map in\r\n var locals = {\r\n map: map\r\n };\r\n // And optionally a MouseEvent object if it exists\r\n if (ev !== undefined) {\r\n locals.event = ev;\r\n }\r\n\r\n $timeout(function() {\r\n handler(scope.$parent, locals);\r\n });\r\n });\r\n });\r\n\r\n\r\n\r\n if (hasCenter) {\r\n scope.$watch('gmCenter', function (newValue, oldValue) {\r\n var changed = (\r\n validateLatLng(newValue) != null &&\r\n !latLngLiteralEqual(newValue, oldValue)\r\n );\r\n if (changed && !controller.dragging) {\r\n controller.center = newValue;\r\n }\r\n }, true);\r\n }\r\n\r\n if (hasZoom) {\r\n scope.$watch('gmZoom', function (newValue, oldValue) {\r\n var ok = (newValue != null && !isNaN(newValue));\r\n if (ok && newValue !== oldValue) {\r\n controller.zoom = newValue;\r\n }\r\n });\r\n }\r\n\r\n if (hasBounds) {\r\n scope.$watch('gmBounds', function(newValue, oldValue) {\r\n var changed = (newValue !== oldValue);\r\n if (changed && !controller.dragging) {\r\n var bounds = newValue;\r\n if (bounds)\r\n controller.bounds = bounds;\r\n }\r\n });\r\n }\r\n\r\n if (hasMapTypeId) {\r\n scope.$watch('gmMapTypeId', function(newValue, oldValue) {\r\n var changed = (newValue !== oldValue);\r\n if (changed && newValue) {\r\n controller.mapTypeId = newValue;\r\n }\r\n });\r\n }\r\n\r\n scope.$on('gmMapResize', function(event, gmMapId) {\r\n if (scope.gmMapId() === gmMapId) {\r\n controller.mapTrigger('resize');\r\n }\r\n });\r\n\r\n controller.addMapListenerOnce('idle', function() {\r\n scope.$emit('gmMapIdle', scope.gmMapId());\r\n });\r\n controller.mapTrigger('resize');\r\n }\r\n\r\n\r\n return {\r\n restrict: 'E',\r\n priority: 100,\r\n template: '
' +\r\n '
' +\r\n '
' +\r\n '
',\r\n transclude: true,\r\n replace: true,\r\n scope: {\r\n gmCenter: '=?',\r\n gmZoom: '=?',\r\n gmBounds: '=?',\r\n gmMapTypeId: '=?',\r\n gmMapOptions: '&',\r\n gmMapId: '&'\r\n },\r\n controller: 'angulargmMapController',\r\n link: link\r\n };\r\n }]);\r\n})();\r\n\r\n/**\r\n * @ngdoc directive\r\n * @name angulargm.directive:gmMarkers\r\n * @element ANY\r\n *\r\n * @description\r\n * A directive for adding markers to a `gmMap`. You may have multiple per `gmMap`.\r\n *\r\n * To use, you specify an array of custom objects and tell the directive how to\r\n * extract an id and position from them. A marker will be created for each of\r\n * your objects. If you assign a new array to your scope variable or change the\r\n * array's length (i.e. add or remove an object), the markers will also update.\r\n * The one case where `gmMarkers` can not automatically detect changes to your\r\n * objects is when you mutate objects in the array. To inform the directive of\r\n * such changes, see the `gmMarkersUpdate` event below.\r\n *\r\n * Only the `gm-objects`, `gm-id` and `gm-position` attributes are required.\r\n *\r\n * @param {expression} gm-objects an array of objects in the current scope.\r\n * These can be any objects you wish to attach to markers, the only requirement\r\n * is that they have a uniform method of accessing an id and a position.\r\n *\r\n * @param {expression} gm-id an angular expression that given an object from\r\n * `gm-objects`, evaluates to a unique identifier for that object. Your object\r\n * can be accessed through the variable `object`. See `gm-position` below for\r\n * an example.\r\n *\r\n * @param {expression} gm-position an angular expression that given an object\r\n * from `gm-objects`, evaluates to google.maps.LatLngLiteral object. Your\r\n * object can be accessed through the variable `object`. For example, if your\r\n * controller has\r\n * ```js\r\n * ...\r\n * $scope.myObjects = [\r\n * { id: 0, location: { lat: 5, lng: 5} },\r\n * { id: 1, location: { lat: 6, lng: 6} }\r\n * ]\r\n * ...\r\n * ```\r\n * then in the `gm-markers` directive you would put\r\n * ```js\r\n * ...\r\n * gm-objects=\"myObjects\"\r\n * gm-id=\"object.id\"\r\n * gm-position=\"object.location\"\r\n * ...\r\n * ```\r\n *\r\n *\r\n * @param {expression} gm-marker-options an angular expression that given\r\n * an object from `gm-objects`, evaluates to a\r\n * [google.maps.MarkerOptions](https://developers.google.com/maps/documentation/javascript/reference#MarkerOptions)\r\n * object. Your object can be accessed through the variable `object`. If\r\n * unspecified, google maps api defaults will be used.\r\n *\r\n *\r\n * @param {expression} gm-events a variable in the current scope that is used to\r\n * simulate events on markers. Setting this variable to an object of the form\r\n * ```js\r\n * [\r\n * {\r\n * event: 'click',\r\n * ids: [id1, ...]\r\n * },\r\n * ...\r\n * ]\r\n * ```\r\n * will generate the named events on the markers with the given ids, if a\r\n * marker with each id exists. Note: when setting the `gm-events` variable, you\r\n * must set it to a new object for the changes to be detected. Code like\r\n * ```js\r\n * myEvents[0][\"ids\"] = [0]\r\n * ```\r\n * will not work.\r\n *\r\n *\r\n * @param {expression} gm-on-*event* an angular expression which evaluates to\r\n * an event handler. This handler will be attached to each marker's \\*event\\*\r\n * event. The variables 'object' and 'marker' evaluate to your object and the\r\n * [google.maps.Marker](https://developers.google.com/maps/documentation/javascript/reference#Marker),\r\n * respectively. For example:\r\n * ```html\r\n * gm-on-click=\"myClickFn(object, marker)\"\r\n * ```\r\n * will call your `myClickFn` whenever a marker is clicked. You may have\r\n * multiple `gm-on-*event*` handlers, but only one for each type of event.\r\n * For events that have an underscore in their name, such as\r\n * 'position_changed', write it as 'gm-on-position-changed'.\r\n */\r\n\r\n/**\r\n * @ngdoc event\r\n * @name angulargm.directive:gmMarkers#gmMarkersUpdate\r\n * @eventOf angulargm.directive:gmMarkers\r\n * @eventType listen on current gmMarkers scope\r\n *\r\n * @description Manually tell the `gmMarkers` directive to update the markers.\r\n * This is useful to tell the directive when an object from `gm-objects` is\r\n * mutated--`gmMarkers` can not pick up on such changes automatically.\r\n *\r\n * @param {string} objects Not required. The name of the scope variable which\r\n * holds the objects to update markers for, i.e. what you set `gm-objects` to.\r\n * It is useful because there may be multiple instances of the `gmMarkers`\r\n * directive. If not specified, all instances of `gmMarkers` which are child\r\n * scopes will update their markers.\r\n *\r\n * @example\r\n * ```js\r\n * $scope.$broadcast('gmMarkersUpdate', 'myObjects');\r\n * ```\r\n */\r\n\r\n/**\r\n * @ngdoc event\r\n * @name angulargm.directive:gmMarkers#gmMarkersRedraw\r\n * @eventOf angulargm.directive:gmMarkers\r\n * @eventType listen on current gmMarkers scope\r\n *\r\n * @description Force the `gmMarkers` directive to clear and redraw all markers.\r\n *\r\n * @param {string} objects Not required. The name of the scope variable which\r\n * holds the objects to redraw markers for, i.e. what you set `gm-objects` to.\r\n * It is useful because there may be multiple instances of the `gmMarkers`\r\n * directive. If not specified, all instances of `gmMarkers` which are child\r\n * scopes will redraw their markers.\r\n *\r\n * @example\r\n * ```js\r\n * $scope.$broadcast('gmMarkersRedraw', 'myObjects');\r\n * ```\r\n */\r\n\r\n/**\r\n * @ngdoc event\r\n * @name angulargm.directive:gmMarkers#gmMarkersUpdated\r\n * @eventOf angulargm.directive:gmMarkers\r\n * @eventType emit on current gmMarkers scope\r\n *\r\n * @description Emitted when markers are updated.\r\n *\r\n * @param {string} objects the name of the scope variable which holds the\r\n * objects the `gmMarkers` directive was constructed with. This is what\r\n * `gm-objects` was set to.\r\n *\r\n * @example\r\n * ```js\r\n * $scope.$on('gmMarkersUpdated', function(event, objects) {\r\n * if (objects === 'myObjects') {\r\n * ...\r\n * }\r\n * });\r\n * ```\r\n */\r\n\r\n(function () {\r\n'use strict';\r\n\r\n angular.module('AngularGM').\r\n\r\n directive('gmMarkers',\r\n ['$log', '$parse', '$timeout', 'angulargmUtils', 'angulargmShape',\r\n function($log, $parse, $timeout, angulargmUtils, angulargmShape) {\r\n\r\n /** aliases */\r\n var validateLatLng = angulargmUtils.validateLatLng;\r\n\r\n function link(scope, element, attrs, controller) {\r\n // check marker attrs\r\n if (!('gmPosition' in attrs)) {\r\n throw 'gmPosition attribute required';\r\n }\r\n\r\n var markerOptions = function(object) {\r\n var latLngObj = scope.gmPosition({object: object});\r\n var position = validateLatLng(latLngObj);\r\n if (position == null) {\r\n return null;\r\n }\r\n\r\n var markerOptions = scope.gmMarkerOptions({object: object});\r\n var options = {};\r\n angular.extend(options, markerOptions, {position: position});\r\n return options;\r\n };\r\n\r\n angulargmShape.createShapeDirective(\r\n 'marker', scope, attrs, controller, markerOptions\r\n );\r\n }\r\n\r\n return {\r\n restrict: 'AE',\r\n priority: 100,\r\n scope: {\r\n gmObjects: '&',\r\n gmId: '&',\r\n gmPosition: '&',\r\n gmMarkerOptions: '&',\r\n gmEvents: '&'\r\n },\r\n require: '^gmMap',\r\n link: link\r\n };\r\n }]);\r\n})();\r\n\r\n/**\r\n * @ngdoc service\r\n * @name angulargm.service:angulargmContainer\r\n *\r\n * @description\r\n * A container which maps mapIds to google.maps.Map instances, and additionally\r\n * allows getting a promise of a map for custom configuration of the map.\r\n *\r\n * If you want a handle to the map, you should use the `getMapPromise(mapId)`\r\n * method so you can guarantee the map will be initialized. For example,\r\n *\r\n * ```js\r\n * angular.module('myModule').\r\n *\r\n * run(function(angulargmContainer) {\r\n * var gmapPromise = angulargmContainer.getMapPromise('myMapid');\r\n *\r\n * gmapPromise.then(function(gmap) {\r\n * // google map configuration here\r\n * });\r\n * });\r\n * ```\r\n */\r\n(function () {\r\n'use strict';\r\n\r\n angular.module('AngularGM').\r\n\r\n factory('angulargmContainer', ['$q', function($q) {\r\n var maps = {};\r\n var defers = {};\r\n var markers = {};\r\n /**\r\n * Add a map to the container.\r\n * @param {string} mapId the unique identifier for the map\r\n * @param {google.maps.Map} map the google map\r\n * @throw if there is already a map with mapId, or if map is not a\r\n * google.maps.Map\r\n */\r\n function addMap(mapId, map) {\r\n if (!(map instanceof google.maps.Map)) {\r\n throw 'map not a google.maps.Map: ' + map;\r\n } else if (mapId in maps) {\r\n throw 'already contain map with id ' + mapId;\r\n }\r\n maps[mapId] = map;\r\n if (mapId in defers) {\r\n defers[mapId].resolve(map);\r\n }\r\n }\r\n\r\n /**\r\n * Get a map from the container.\r\n * @param {string} mapId the unique id of the map\r\n * @return {google.maps.Map|undefined} the map, or undefined if there is no\r\n * map for mapId\r\n */\r\n function getMaps() {\r\n return maps;\r\n }\r\n function getMap(mapId) {\r\n return maps[mapId];\r\n }\r\n\r\n /**\r\n * Adds markers hash to the container.\r\n * @param {string} mapId the unique id of the map\r\n * @param {[google.maps.Marker]} markers to be added to the container\r\n */\r\n function setMarker(mapId, newMarker) {\r\n if (!markers[mapId]) {\r\n markers[mapId] = [];\r\n }\r\n markers[mapId].push(newMarker);\r\n }\r\n /**\r\n * Get markers from the container.\r\n * @param {string} mapId the unique id of the map\r\n * @return {google.maps.Marker|undefined} the markers, or undefined if there are no\r\n * markers for mapId\r\n */\r\n function getMarkers(mapId) {\r\n return markers[mapId];\r\n }\r\n\r\n function clearMarkers(mapId) {\r\n if (!getMarkers(mapId)) return;\r\n for (var i = 0; i < markers[mapId].length; i++) {\r\n markers[mapId][i].setMap(null);\r\n }\r\n markers[mapId] = [];\r\n }\r\n\r\n /**\r\n * Returns a promise of a map for the given mapId\r\n * @param {string} mapId the unique id of the map that may or may not have\r\n * been created yet\r\n * @return {angular.q.promise} a promise of a map that will be resolved\r\n * when the map is added\r\n */\r\n function getMapPromise(mapId) {\r\n var defer = defers[mapId] || $q.defer();\r\n var map = getMap(mapId);\r\n defers[mapId] = defer;\r\n if (map !== undefined) {\r\n defer.resolve(map);\r\n }\r\n return defer.promise;\r\n }\r\n\r\n /**\r\n * Removes map with given mapId from this container, and deletes the map.\r\n * In order for this to work you must ensure there are no references to the\r\n * map object. Note: this will likely cause a memory leak, see\r\n * http://stackoverflow.com/questions/10485582/what-is-the-proper-way-to-destroy-a-map-instance\r\n *\r\n * @param {string} mapId the unique id of the map to remove\r\n */\r\n function removeMap(mapId) {\r\n if (mapId in maps) {\r\n delete maps[mapId];\r\n }\r\n if (mapId in defers) {\r\n delete defers[mapId];\r\n }\r\n }\r\n\r\n /**\r\n * Removes all maps and unresolved map promises. Only for testing, see\r\n * #removeMap(mapId).\r\n */\r\n function clear() {\r\n maps = {};\r\n defers = {};\r\n markers = {};\r\n }\r\n\r\n return {\r\n addMap: addMap,\r\n getMaps: getMaps,\r\n getMap: getMap,\r\n getMapPromise: getMapPromise,\r\n setMarker: setMarker,\r\n getMarkers: getMarkers,\r\n clearMarkers: clearMarkers,\r\n removeMap: removeMap,\r\n clear: clear\r\n };\r\n }]);\r\n})();\r\n\r\n/**\r\n * @ngdoc service\r\n * @name angulargm.service:angulargmShape\r\n *\r\n * @description\r\n * Directive functions for map shapes (marker, polyline, etc.)\r\n */\r\n(function () {\r\n'use strict';\r\n\r\n angular.module('AngularGM').\r\n\r\n factory('angulargmShape',\r\n ['$timeout', 'angulargmUtils',\r\n function($timeout, angulargmUtils) {\r\n\r\n /**\r\n * Check required attributes of a shape.\r\n */\r\n function checkRequiredAttributes(attrs) {\r\n if (!('gmObjects' in attrs)) {\r\n throw 'gmObjects attribute required';\r\n } else if (!('gmId' in attrs)) {\r\n throw 'gmId attribute required';\r\n }\r\n }\r\n\r\n /**\r\n * Create a mapping from object id -> object.\r\n * The object id is retrieved using scope.gmId\r\n */\r\n function _generateObjectCache(scope, objects) {\r\n var objectCache = {};\r\n angular.forEach(objects, function(object) {\r\n // cache objects for quick access\r\n var id = scope.gmId({object: object});\r\n objectCache[id] = object;\r\n });\r\n return objectCache;\r\n }\r\n\r\n /**\r\n * Create new shapes and add them to the map for objects which are not\r\n * currently on the map.\r\n */\r\n function _addNewElements(type, scope, controller, handlers, objectCache, optionsFn) {\r\n angular.forEach(objectCache, function(object, id) {\r\n var element = controller.getElement(type, scope.$id, id);\r\n\r\n var options = optionsFn(object);\r\n if (options == null) {\r\n return;\r\n }\r\n\r\n if (element) {\r\n controller.updateElement(type, scope.$id, id, options);\r\n } else {\r\n controller.addElement(type, scope.$id, id, options);\r\n element = controller.getElement(type, scope.$id, id);\r\n\r\n // set up element event handlers\r\n angular.forEach(handlers, function(handler, event) {\r\n controller.addListener(element, event, function() {\r\n $timeout(function() {\r\n var context = {object: object};\r\n context[type] = element;\r\n if ((angular.version.major <= 1) && (angular.version.minor <= 2)) {\r\n // scope is this directive's isolate scope\r\n // scope.$parent is the scope of ng-transclude\r\n // scope.$parent.$parent is the one we want\r\n handler(scope.$parent.$parent, context);\r\n } else {\r\n handler(scope.$parent.$parent.$parent , context);\r\n }\r\n });\r\n });\r\n });\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Remove shape elements from the map which are no longer in objects.\r\n */\r\n function _removeOrphanedElements(type, scope, controller, objectCache) {\r\n var orphaned = [];\r\n\r\n controller.forEachElementInScope(type, scope.$id, function(element, id) {\r\n if (!(id in objectCache)) {\r\n orphaned.push(id);\r\n }\r\n });\r\n\r\n angular.forEach(orphaned, function(id) {\r\n controller.removeElement(type, scope.$id, id);\r\n });\r\n }\r\n\r\n /**\r\n * _formatEventName('gmShapesUpdated', 'marker') -> 'gmMarkersUpdated'\r\n */\r\n function _formatEventName(template, type) {\r\n var uppercasePluralType = type.charAt(0).toUpperCase() + type.slice(1) + 's';\r\n return template.replace('Shapes', uppercasePluralType);\r\n }\r\n\r\n /**\r\n * Attach necessary watchers and listeners to scope to deal with:\r\n * - updating objects\r\n * - handling gmEvents\r\n * - listening for events\r\n */\r\n function _attachEventListeners(type, scope, attrs, controller, updateElements) {\r\n\r\n // watch objects\r\n scope.$watch('gmObjects().length', function(newValue, oldValue) {\r\n if (newValue != null && newValue !== oldValue) {\r\n updateElements(scope, scope.gmObjects());\r\n }\r\n });\r\n\r\n scope.$watch('gmObjects()', function(newValue, oldValue) {\r\n if (newValue != null && newValue !== oldValue) {\r\n updateElements(scope, scope.gmObjects());\r\n }\r\n });\r\n\r\n // watch gmEvents\r\n scope.$watch('gmEvents()', function(newValue, oldValue) {\r\n if (newValue != null && newValue !== oldValue) {\r\n angular.forEach(newValue, function(eventObj) {\r\n var event = eventObj.event;\r\n var ids = eventObj.ids;\r\n angular.forEach(ids, function(id) {\r\n var element = controller.getElement(type, scope.$id, id);\r\n if (element != null) {\r\n $timeout(angular.bind(this, controller.trigger, element, event));\r\n }\r\n });\r\n });\r\n }\r\n });\r\n\r\n scope.$on(_formatEventName('gmShapesRedraw', type), function(event, objectsName) {\r\n if (objectsName == null || objectsName === attrs.gmObjects) {\r\n updateElements(scope);\r\n updateElements(scope, scope.gmObjects());\r\n }\r\n });\r\n\r\n scope.$on(_formatEventName('gmShapesUpdate', type), function(event, objectsName) {\r\n if (objectsName == null || objectsName === attrs.gmObjects) {\r\n updateElements(scope, scope.gmObjects());\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Takes care of setting up the directive for the given type of shape.\r\n * Assumes the following directive scope:\r\n * scope: {\r\n * gmId: '&',\r\n * gmObjects: '&',\r\n * gmEvents: '&'\r\n * },\r\n *\r\n * And the angulargmMapController:\r\n * require: '^gmMap',\r\n *\r\n * Also supports the following attributes:\r\n * gmOn* (though some of this knowledge is in angulargmUtils as well)\r\n *\r\n * As well as the following events\r\n * gmShapesUpdated\r\n * gmShapesRedraw\r\n *\r\n * (e.g. gmMarkersUpdated and gmMarkersRedraw)\r\n *\r\n * See gmMarkers for a complete example.\r\n */\r\n function createShapeDirective(type, scope, attrs, controller, elementOptions) {\r\n checkRequiredAttributes(attrs);\r\n\r\n var updateElements = function(scope, objects) {\r\n var objectCache = _generateObjectCache(scope, objects);\r\n var handlers = angulargmUtils.getEventHandlers(attrs); // map events -> handlers\r\n\r\n _addNewElements(\r\n type, scope, controller, handlers,\r\n objectCache, elementOptions\r\n );\r\n\r\n _removeOrphanedElements(type, scope, controller, objectCache);\r\n\r\n scope.$emit(_formatEventName('gmShapesUpdated', type), attrs.gmObjects);\r\n };\r\n\r\n _attachEventListeners(type, scope, attrs, controller, updateElements);\r\n\r\n // initialize elements\r\n $timeout(angular.bind(null, updateElements, scope, scope.gmObjects()));\r\n }\r\n\r\n return {\r\n createShapeDirective: createShapeDirective\r\n };\r\n }]);\r\n})();\r\n\r\n/**\r\n * @ngdoc service\r\n * @name angulargm.service:angulargmUtils\r\n *\r\n * @description\r\n * Common utility functions.\r\n */\r\n(function () {\r\n'use strict';\r\n\r\n angular.module('AngularGM').\r\n\r\n factory('angulargmUtils', ['$parse', function($parse) {\r\n\r\n /**\r\n * Check if two floating point numbers are equal.\r\n *\r\n * @param {number} f1 first number\r\n * @param {number} f2 second number\r\n * @return {boolean} true if f1 and f2 are 'very close' (within 0.000001)\r\n */\r\n function floatEqual (f1, f2) {\r\n return (Math.abs(f1 - f2) < 0.000001);\r\n }\r\n\r\n /**\r\n * @ngdoc function\r\n * @name #latLngEqual\r\n * @methodOf angulargm.service:angulargmUtils\r\n *\r\n * @param {google.maps.LatLng} l1 first\r\n * @param {google.maps.LatLng} l2 second\r\n * @return {boolean} true if l1 and l2 are 'very close'. If either are null\r\n * or not google.maps.LatLng objects returns false.\r\n */\r\n function latLngEqual(l1, l2) {\r\n if (!(l1 instanceof google.maps.LatLng &&\r\n l2 instanceof google.maps.LatLng)) {\r\n return false;\r\n }\r\n return floatEqual(l1.lat(), l2.lat()) && floatEqual(l1.lng(), l2.lng());\r\n }\r\n\r\n /**\r\n * @ngdoc function\r\n * @name #latLngLiteralEqual\r\n * @methodOf angulargm.service:angulargmUtils\r\n *\r\n * @param {google.maps.LatLngLiteral} l1 first\r\n * @param {google.maps.LatLngLiteral} l2 second\r\n * @return {boolean} true if l1 and l2 are 'very close'. If either are null\r\n * or not google.maps.LatLngLiteral objects returns false.\r\n */\r\n function latLngLiteralEqual(l1, l2) {\r\n if (\r\n !(l1 != null && l1.hasOwnProperty('lat') && l1.hasOwnProperty('lng')) ||\r\n !(l2 != null && l2.hasOwnProperty('lat') && l2.hasOwnProperty('lng'))\r\n ) {\r\n return false;\r\n }\r\n return floatEqual(l1.lat, l2.lat) && floatEqual(l1.lng, l2.lng);\r\n }\r\n\r\n /**\r\n * @ngdoc function\r\n * @name #boundsEqual\r\n * @methodOf angulargm.service:angulargmUtils\r\n *\r\n * @param {google.maps.LatLngBounds} b1 first\r\n * @param {google.maps.LatLngBounds} b2 second\r\n * @return {boolean} true if b1 and b2 are 'very close'. If either are null\r\n * or not google.maps.LatLngBounds objects returns false.\r\n */\r\n function boundsEqual(b1, b2) {\r\n if (!(b1 instanceof google.maps.LatLngBounds &&\r\n b2 instanceof google.maps.LatLngBounds)) {\r\n return false;\r\n }\r\n var sw1 = b1.getSouthWest();\r\n var sw2 = b2.getSouthWest();\r\n var ne1 = b1.getNorthEast();\r\n var ne2 = b2.getNorthEast();\r\n\r\n return latLngEqual(sw1, sw2) && latLngEqual(ne1, ne2);\r\n }\r\n\r\n /**\r\n * @ngdoc function\r\n * @name #latLngToObj\r\n * @methodOf angulargm.service:angulargmUtils\r\n *\r\n * @param {google.maps.LatLng} latLng the LatLng\r\n * @return {Object} object literal with 'lat' and 'lng' properties.\r\n * @throw if latLng not instanceof google.maps.LatLng\r\n */\r\n function latLngToObj(latLng) {\r\n if (!(latLng instanceof google.maps.LatLng))\r\n throw 'latLng not a google.maps.LatLng';\r\n\r\n return {\r\n lat: latLng.lat(),\r\n lng: latLng.lng()\r\n };\r\n }\r\n\r\n /**\r\n * @ngdoc function\r\n * @name #objToLatLng\r\n * @methodOf angulargm.service:angulargmUtils\r\n *\r\n * @param {Object} obj of the form { lat: 40, lng: -120 }\r\n * @return {google.maps.LatLng} returns null if problems with obj (null,\r\n * NaN, etc.)\r\n */\r\n function objToLatLng(obj) {\r\n if (obj != null) {\r\n var lat = obj.lat;\r\n var lng = obj.lng;\r\n var ok = !(lat == null || lng == null) && !(isNaN(lat) ||\r\n isNaN(lng));\r\n if (ok) {\r\n return new google.maps.LatLng(lat, lng);\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * @ngdoc function\r\n * @name #validateLatLng\r\n * @methodOf angulargm.service:angulargmUtils\r\n *\r\n * @param {Object} obj of the form { lat: 40, lng: -120 }\r\n * @return {Object} obj or returns null if problems with obj (null,\r\n * NaN, etc.)\r\n */\r\n function validateLatLng(obj) {\r\n if (obj != null) {\r\n var lat = obj.lat;\r\n var lng = obj.lng;\r\n var ok = (\r\n !(lat == null || lng == null) &&\r\n !(isNaN(lat) || isNaN(lng))\r\n );\r\n if (ok) {\r\n return obj;\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * @ngdoc function\r\n * @name #hasNaN\r\n * @methodOf angulargm.service:angulargmUtils\r\n *\r\n * @param {google.maps.LatLng} latLng the LatLng\r\n * @return {boolean} true if either lat or lng of latLng is null or isNaN\r\n */\r\n function hasNaN(latLng) {\r\n if (!(latLng instanceof google.maps.LatLng))\r\n throw 'latLng must be a google.maps.LatLng';\r\n\r\n // google.maps.LatLng converts NaN to null, so check for both\r\n var isNull = (latLng.lat() == null || latLng.lng() == null);\r\n var isNotaN = isNaN(latLng.lat()) || isNaN(latLng.lng());\r\n return isNull || isNotaN;\r\n }\r\n\r\n /**\r\n * @param {Object} attrs directive attributes\r\n * @return {Object} mapping from event names to handler fns\r\n */\r\n function getEventHandlers(attrs) {\r\n var handlers = {};\r\n\r\n // retrieve gm-on-___ handlers\r\n angular.forEach(attrs, function(value, key) {\r\n if (key.lastIndexOf('gmOn', 0) === 0) {\r\n var event = key.substring(4).replace(/(?!^)([A-Z])/g, '_$&').toLowerCase();\r\n var fn = $parse(value);\r\n handlers[event] = fn;\r\n }\r\n });\r\n\r\n return handlers;\r\n }\r\n\r\n function assertDefined(value, name) {\r\n if (value === undefined || value === null) {\r\n if (name) {\r\n throw name + ' was: ' + value;\r\n } else {\r\n throw 'value was: ' + value;\r\n }\r\n }\r\n }\r\n\r\n return {\r\n latLngEqual: latLngEqual,\r\n latLngLiteralEqual: latLngLiteralEqual,\r\n boundsEqual: boundsEqual,\r\n latLngToObj: latLngToObj,\r\n objToLatLng: objToLatLng,\r\n validateLatLng: validateLatLng,\r\n hasNaN: hasNaN,\r\n getEventHandlers: getEventHandlers,\r\n assertDefined: assertDefined\r\n };\r\n }]);\r\n})();\r\n\r\n/**\r\n * @ngdoc service\r\n * @name angulargm.service:debounce\r\n *\r\n * @description\r\n * Debounce function. Stolen from https://github.com/shahata/angular-debounce\r\n */\r\n(function () {\r\n'use strict';\r\n\r\n angular.module('AngularGM').\r\n\r\n factory('debounce', ['$timeout', function ($timeout) {\r\n return function (func, wait, immediate) {\r\n var timeout, args, context, result;\r\n function debounce() {\r\n /* jshint validthis:true */\r\n context = this;\r\n args = arguments;\r\n var later = function () {\r\n timeout = null;\r\n if (!immediate) {\r\n result = func.apply(context, args);\r\n }\r\n };\r\n var callNow = immediate && !timeout;\r\n if (timeout) {\r\n $timeout.cancel(timeout);\r\n }\r\n timeout = $timeout(later, wait);\r\n if (callNow) {\r\n result = func.apply(context, args);\r\n }\r\n return result;\r\n }\r\n debounce.cancel = function () {\r\n $timeout.cancel(timeout);\r\n timeout = null;\r\n };\r\n return debounce;\r\n };\r\n }]);\r\n\r\n})();\r\n\r\n/**\r\n * Directive controller which is owned by the [gmMap]{@link module:gmMap}\r\n * directive and shared among all other angulargm directives.\r\n */\r\n(function () {\r\n'use strict';\r\n\r\n angular.module('AngularGM').\r\n\r\n controller('angulargmMapController',\r\n ['$scope', '$element', 'angulargmUtils', 'angulargmDefaults',\r\n 'angulargmContainer',\r\n\r\n function ($scope, $element, angulargmUtils, angulargmDefaults,\r\n angulargmContainer) {\r\n\r\n /** aliases */\r\n var latLngToObj = angulargmUtils.latLngToObj;\r\n var validateLatLng = angulargmUtils.validateLatLng;\r\n var boundsEqual = angulargmUtils.boundsEqual;\r\n var hasNaN = angulargmUtils.hasNaN;\r\n var assertDefined = angulargmUtils.assertDefined;\r\n\r\n /*\r\n * Construct a new controller for the gmMap directive.\r\n * @param {angular.Scope} $scope\r\n * @param {angular.element} $element\r\n * @constructor\r\n */\r\n var constructor = function($scope, $element) {\r\n\r\n var mapId = $scope.gmMapId();\r\n if (!mapId) { throw 'angulargm must have non-empty gmMapId attribute'; }\r\n\r\n var mapDiv = angular.element($element[0].firstChild);\r\n mapDiv.attr('id', mapId);\r\n\r\n var config = this._getConfig($scope, angulargmDefaults);\r\n\r\n // 'private' properties\r\n this._map = this._createMap(mapId, mapDiv, config, angulargmContainer, $scope);\r\n this._elements = {};\r\n this._listeners = {};\r\n\r\n // 'public' properties\r\n this.dragging = false;\r\n\r\n Object.defineProperties(this, {\r\n 'precision': {\r\n value: angulargmDefaults.precision,\r\n writeable: false\r\n },\r\n\r\n 'center': {\r\n configurable: true, // for testing so we can mock\r\n get: function() {\r\n return latLngToObj(this._map.getCenter());\r\n },\r\n set: function(center) {\r\n if (validateLatLng(center) === null)\r\n throw 'center contains null or NaN';\r\n var changed = this.center !== center;\r\n if (changed) {\r\n this._map.panTo(center);\r\n }\r\n }\r\n },\r\n\r\n 'zoom': {\r\n configurable: true, // for testing so we can mock\r\n get: function() {\r\n return this._map.getZoom();\r\n },\r\n set: function(zoom) {\r\n if (!(zoom != null && !isNaN(zoom)))\r\n throw 'zoom was null or NaN';\r\n var changed = this.zoom !== zoom;\r\n if (changed) {\r\n this._map.setZoom(zoom);\r\n }\r\n }\r\n },\r\n\r\n 'bounds': {\r\n configurable: true, // for testing so we can mock\r\n get: function() {\r\n return this._map.getBounds();\r\n },\r\n set: function(bounds) {\r\n var numbers = !hasNaN(bounds.getSouthWest()) &&\r\n !hasNaN(bounds.getNorthEast());\r\n if (!numbers)\r\n throw 'bounds contains null or NaN';\r\n\r\n var changed = !(boundsEqual(this.bounds, bounds));\r\n if (changed) {\r\n this._map.fitBounds(bounds);\r\n }\r\n }\r\n },\r\n\r\n 'mapTypeId': {\r\n configurable: true, // for testing so we can mock\r\n get: function() {\r\n return this._map.getMapTypeId();\r\n },\r\n set: function(mapTypeId) {\r\n if (mapTypeId == null)\r\n throw 'mapTypeId was null or unknown';\r\n var changed = this.mapTypeId !== mapTypeId;\r\n if (changed) {\r\n this._map.setMapTypeId(mapTypeId);\r\n }\r\n }\r\n }\r\n });\r\n\r\n this._initDragListeners();\r\n $scope.$on('$destroy', angular.bind(this, this._destroy));\r\n };\r\n\r\n\r\n // Retrieve google.maps.MapOptions\r\n this._getConfig = function($scope, angulargmDefaults) {\r\n // Get config or defaults\r\n var defaults = angulargmDefaults.mapOptions;\r\n var config = {};\r\n angular.extend(config, defaults, $scope.gmMapOptions());\r\n return config;\r\n };\r\n\r\n\r\n // Create the map and add to angulargmContainer\r\n this._createMap = function(id, element, config, angulargmContainer) {\r\n var map = angulargmContainer.getMap(id);\r\n if (!map) {\r\n map = new google.maps.Map(element[0], config);\r\n angulargmContainer.addMap(id, map);\r\n } else {\r\n var div = map.getDiv();\r\n element.replaceWith(div);\r\n this._map = map;\r\n this.mapTrigger('resize');\r\n map.setOptions(config);\r\n }\r\n return map;\r\n };\r\n\r\n\r\n // Set up listeners to update this.dragging\r\n this._initDragListeners = function() {\r\n var self = this;\r\n this.addMapListener('dragstart', function () {\r\n self.dragging = true;\r\n });\r\n\r\n this.addMapListener('idle', function () {\r\n self.dragging = false;\r\n });\r\n };\r\n\r\n\r\n this._destroy = function() {\r\n angular.forEach(this._listeners, function(listener) {\r\n angular.forEach(listener, function(l) {\r\n google.maps.event.removeListener(l);\r\n });\r\n });\r\n this._listeners = {};\r\n\r\n var self = this;\r\n var types = Object.keys(this._elements);\r\n angular.forEach(types, function(type) {\r\n var scopeIds = Object.keys(self._getElements(type));\r\n angular.forEach(scopeIds, function(scopeId) {\r\n self.forEachElementInScope(type, scopeId, function(element, id) {\r\n self.removeElement(type, scopeId, id);\r\n });\r\n });\r\n });\r\n\r\n var streetView = this._map.getStreetView();\r\n if (streetView && streetView.getVisible()) {\r\n streetView.setVisible(false);\r\n }\r\n\r\n var maps = angulargmContainer.getMaps();\r\n _.each(maps, function (map, key) {\r\n angulargmContainer.removeMap(key);\r\n })\r\n angulargmContainer.clear()\r\n };\r\n\r\n\r\n /**\r\n * Alias for google.maps.event.addListener(map, event, handler)\r\n * @param {string} event an event defined on google.maps.Map\r\n * @param {Function} a handler for the event\r\n */\r\n this.addMapListener = function(event, handler) {\r\n var listener = google.maps.event.addListener(this._map, event, handler);\r\n\r\n if (this._listeners[event] === undefined) {\r\n this._listeners[event] = [];\r\n }\r\n\r\n this._listeners[event].push(listener);\r\n };\r\n\r\n\r\n /**\r\n * Alias for google.maps.event.addListenerOnce(map, event, handler)\r\n * @param {string} event an event defined on google.maps.Map\r\n * @param {Function} a handler for the event\r\n */\r\n this.addMapListenerOnce = function(event, handler) {\r\n var listener = google.maps.event.addListenerOnce(this._map, event, handler);\r\n\r\n if (this._listeners[event] === undefined) {\r\n this._listeners[event] = [];\r\n }\r\n\r\n this._listeners[event].push(listener);\r\n };\r\n\r\n\r\n /**\r\n * Alias for google.maps.event.addListener(object, event, handler)\r\n */\r\n this.addListener = function(object, event, handler) {\r\n google.maps.event.addListener(object, event, handler);\r\n };\r\n\r\n\r\n /**\r\n * Alias for google.maps.event.addListenerOnce(object, event, handler)\r\n */\r\n this.addListenerOnce = function(object, event, handler) {\r\n google.maps.event.addListenerOnce(object, event, handler);\r\n };\r\n\r\n\r\n /**\r\n * Alias for google.maps.event.trigger(map, event)\r\n * @param {string} event an event defined on google.maps.Map\r\n */\r\n this.mapTrigger = function(event) {\r\n google.maps.event.trigger(this._map, event);\r\n };\r\n\r\n\r\n /**\r\n * Alias for google.maps.event.trigger(object, event)\r\n */\r\n this.trigger = function(object, event) {\r\n google.maps.event.trigger(object, event);\r\n };\r\n\r\n this._newElement = function(type, opts) {\r\n if (type === 'marker') {\r\n return new angulargmDefaults.markerConstructor(opts);\r\n } else if (type === 'polyline') {\r\n if (!(opts.path instanceof Array)) {\r\n throw 'polylineOptions did not contain a path';\r\n }\r\n return new angulargmDefaults.polylineConstructor(opts);\r\n } else if (type === 'circle') {\r\n return new angulargmDefaults.circleConstructor(opts);\r\n }\r\n else {\r\n throw 'unrecognized type ' + type;\r\n }\r\n };\r\n\r\n this._getElements = function(type) {\r\n if (!(type in this._elements)) {\r\n this._elements[type] = {};\r\n }\r\n return this._elements[type];\r\n };\r\n\r\n /**\r\n * Adds a new element to the map.\r\n * @return {boolean} true if an element was added, false if there was already\r\n * an element with the given id\r\n * @throw if any arguments are null/undefined or elementOptions does not\r\n * have all the required options (i.e. position)\r\n */\r\n this.addElement = function(type, scopeId, id, elementOptions) {\r\n assertDefined(type, 'type');\r\n assertDefined(scopeId, 'scopeId');\r\n assertDefined(id, 'id');\r\n assertDefined(elementOptions, 'elementOptions');\r\n\r\n if (this.hasElement(type, scopeId, id)) {\r\n return false;\r\n }\r\n\r\n var elements = this._getElements(type);\r\n if (elements[scopeId] == null) {\r\n elements[scopeId] = {};\r\n }\r\n\r\n // google maps munges passed in options, so copy it first\r\n // extend instead of copy to preserve value objects\r\n var opts = {};\r\n angular.extend(opts, elementOptions);\r\n var element = this._newElement(type, opts);\r\n elements[scopeId][id] = element;\r\n element.setMap(this._map);\r\n\r\n var mapId = $scope.gmMapId();\r\n angulargmContainer.setMarker(mapId, element);\r\n\r\n return true;\r\n };\r\n\r\n /**\r\n * Updates an element on the map with new options.\r\n * @return {boolean} true if an element was updated, false if there was no\r\n * element with the given id to update\r\n * @throw if any arguments are null/undefined or elementOptions does not\r\n * have all the required options (i.e. position)\r\n */\r\n\r\n this.updateElement = function(type, scopeId, id, elementOptions) {\r\n assertDefined(type, 'type');\r\n assertDefined(scopeId, 'scopeId');\r\n assertDefined(id, 'id');\r\n assertDefined(elementOptions, 'elementOptions');\r\n\r\n var element = this.getElement(type, scopeId, id);\r\n if (element) {\r\n element.setOptions(elementOptions);\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n };\r\n\r\n this.hasElement = function(type, scopeId, id) {\r\n assertDefined(type, 'type');\r\n assertDefined(scopeId, 'scopeId');\r\n assertDefined(id, 'id');\r\n return (this.getElement(type, scopeId, id) != null);\r\n };\r\n\r\n /**\r\n * @return {google maps element} the element with the given id, or null if no\r\n * such element exists\r\n */\r\n this.getElement = function (type, scopeId, id) {\r\n assertDefined(type, 'type');\r\n assertDefined(scopeId, 'scopeId');\r\n assertDefined(id, 'id');\r\n\r\n var elements = this._getElements(type);\r\n if (elements[scopeId] != null && id in elements[scopeId]) {\r\n return elements[scopeId][id];\r\n } else {\r\n return null;\r\n }\r\n };\r\n\r\n /**\r\n * @return {boolean} true if an element was removed, false if nothing\r\n * happened\r\n */\r\n this.removeElement = function(type, scopeId, id) {\r\n assertDefined(type, 'type');\r\n assertDefined(scopeId, 'scopeId');\r\n assertDefined(id, 'id');\r\n\r\n var elements = this._getElements(type);\r\n var removed = false;\r\n var element = elements[scopeId][id];\r\n if (element) {\r\n element.setMap(null);\r\n removed = true;\r\n }\r\n elements[scopeId][id] = null;\r\n delete elements[scopeId][id];\r\n return removed;\r\n };\r\n\r\n /**\r\n * Applies a function to each element on the map.\r\n * @param {String} type of element, e.g. 'marker'\r\n * @param {Function} fn will be called with element as first argument\r\n * @throw if an argument is null or undefined\r\n */\r\n this.forEachElement = function(type, fn) {\r\n assertDefined(type, 'type');\r\n assertDefined(fn, 'fn');\r\n\r\n var elements = this._getElements(type);\r\n var scopeIds = Object.keys(elements);\r\n var allElements = scopeIds.reduce(function(accumulator, scopeId) {\r\n angular.forEach(elements[scopeId], function(element) {\r\n accumulator.push(element);\r\n });\r\n return accumulator;\r\n }, []);\r\n\r\n angular.forEach(allElements, function(element, id) {\r\n if (element != null) {\r\n fn(element, id);\r\n }\r\n });\r\n };\r\n\r\n\r\n /**\r\n * Applies a function to each element in a scope.\r\n * @param {String} type of element, e.g. 'marker'\r\n * @param {number} scope id\r\n * @param {Function} fn will called with marker as first argument\r\n * @throw if an argument is null or undefined\r\n */\r\n this.forEachElementInScope = function(type, scopeId, fn) {\r\n assertDefined(type, 'type');\r\n assertDefined(scopeId, 'scopeId');\r\n assertDefined(fn, 'fn');\r\n\r\n var elements = this._getElements(type);\r\n angular.forEach(elements[scopeId], function(element, id) {\r\n if (element != null) {\r\n fn(element, id);\r\n }\r\n });\r\n };\r\n\r\n this.getMap = function() {\r\n return this._map;\r\n };\r\n\r\n /** Instantiate controller */\r\n angular.bind(this, constructor)($scope, $element);\r\n\r\n }]);\r\n})();\r\n\r\n","/*!\r\n *\t Angular Smooth Scroll (ngSmoothScroll)\r\n *\t Animates scrolling to elements, by David Oliveros.\r\n *\r\n * https://github.com/d-oliveros/ngSmoothScroll\r\n *\r\n *\t Version: 2.0.0\r\n * \t License: MIT\r\n */\r\n\r\n(function () {\r\n\t'use strict';\r\n\r\n\tvar module = angular.module('smoothScroll', []);\r\n\r\n\r\n\t/**\r\n\t * Smooth scrolls the window/div to the provided element.\r\n\t *\r\n\t * 20150713 EDIT - zephinzer\r\n\t * \tAdded new option - containerId to account for scrolling within a DIV\r\n\t */\r\n\tvar smoothScroll = function (element, options) {\r\n\t\toptions = options || {};\r\n\r\n\t\t// Options\r\n\t\tvar duration = angular.isDefined(options.duration) ? options.duration : 350,\r\n\t\t\toffset = options.offset || 0,\r\n\t\t\teasing = options.easing || 'easeInOutQuart',\r\n\t\t\tcallbackBefore = options.callbackBefore || function() {},\r\n\t\t\tcallbackAfter = options.callbackAfter || function() {},\r\n\t\t\tcontainer = document.getElementById(options.containerId) || null,\r\n\t\t\tcontainerPresent = (container != undefined && container != null);\r\n\r\n\t\t/**\r\n\t\t * Retrieve current location\r\n\t\t */\r\n\t\tvar getScrollLocation = function() {\r\n\t\t\tif(containerPresent) {\r\n\t\t\t\treturn container.scrollTop;\r\n\t\t\t} else {\r\n\t\t\t\tif(window.pageYOffset) {\r\n\t\t\t\t\treturn window.pageYOffset;\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn document.documentElement.scrollTop;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t/**\r\n\t\t * Calculate easing pattern.\r\n\t\t *\r\n\t\t * 20150713 edit - zephinzer\r\n\t\t * - changed if-else to switch\r\n\t\t * @see http://archive.oreilly.com/pub/a/server-administration/excerpts/even-faster-websites/writing-efficient-javascript.html\r\n\t\t */\r\n\t\tvar getEasingPattern = function(type, time) {\r\n\t\t\tswitch(type) {\r\n\t\t\t\tcase 'easeInQuad': \t\treturn time * time; // accelerating from zero velocity\r\n\t\t\t\tcase 'easeOutQuad': \treturn time * (2 - time); // decelerating to zero velocity\r\n\t\t\t\tcase 'easeInOutQuad': \treturn time < 0.5 ? 2 * time * time : -1 + (4 - 2 * time) * time; // acceleration until halfway, then deceleration\r\n\t\t\t\tcase 'easeInCubic': \treturn time * time * time; // accelerating from zero velocity\r\n\t\t\t\tcase 'easeOutCubic': \treturn (--time) * time * time + 1; // decelerating to zero velocity\r\n\t\t\t\tcase 'easeInOutCubic': \treturn time < 0.5 ? 4 * time * time * time : (time - 1) * (2 * time - 2) * (2 * time - 2) + 1; // acceleration until halfway, then deceleration\r\n\t\t\t\tcase 'easeInQuart': \treturn time * time * time * time; // accelerating from zero velocity\r\n\t\t\t\tcase 'easeOutQuart': \treturn 1 - (--time) * time * time * time; // decelerating to zero velocity\r\n\t\t\t\tcase 'easeInOutQuart': \treturn time < 0.5 ? 8 * time * time * time * time : 1 - 8 * (--time) * time * time * time; // acceleration until halfway, then deceleration\r\n\t\t\t\tcase 'easeInQuint': \treturn time * time * time * time * time; // accelerating from zero velocity\r\n\t\t\t\tcase 'easeOutQuint': \treturn 1 + (--time) * time * time * time * time; // decelerating to zero velocity\r\n\t\t\t\tcase 'easeInOutQuint': \treturn time < 0.5 ? 16 * time * time * time * time * time : 1 + 16 * (--time) * time * time * time * time; // acceleration until halfway, then deceleration\r\n\t\t\t\tdefault:\t\t\t\treturn time;\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t/**\r\n\t\t * Calculate how far to scroll\r\n\t\t */\r\n\t\tvar getEndLocation = function(element) {\r\n\t\t\tvar location = 0;\r\n\t\t\tif (element && element.offsetParent) {\r\n\t\t\t\tdo {\r\n\t\t\t\t\tlocation += element.offsetTop;\r\n\t\t\t\t\telement = element.offsetParent;\r\n\t\t\t\t} while (element);\r\n\t\t\t}\r\n\t\t\tlocation = Math.max(location - offset, 0);\r\n\t\t\treturn location;\r\n\t\t};\r\n\r\n\t\t// Initialize the whole thing\r\n\t\tsetTimeout( function() {\r\n\t\t\tvar currentLocation = null,\r\n\t\t\t\tstartLocation \t= getScrollLocation(),\r\n\t\t\t\tendLocation \t= getEndLocation(element),\r\n\t\t\t\ttimeLapsed \t\t= 0,\r\n\t\t\t\tdistance \t\t= endLocation - startLocation,\r\n\t\t\t\tpercentage,\r\n\t\t\t\tposition,\r\n\t\t\t\tscrollHeight,\r\n\t\t\t\tinternalHeight;\r\n\r\n\t\t\t/**\r\n\t\t\t * Stop the scrolling animation when the anchor is reached (or at the top/bottom of the page)\r\n\t\t\t */\r\n\t\t\tvar stopAnimation = function () {\r\n\t\t\t\tcurrentLocation = getScrollLocation();\r\n\t\t\t\tif(containerPresent) {\r\n\t\t\t\t\tscrollHeight = container.scrollHeight;\r\n\t\t\t\t\tinternalHeight = container.clientHeight + currentLocation;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tscrollHeight = document.body.scrollheight;\r\n\t\t\t\t\tinternalHeight = window.innerHeight + currentLocation;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (\r\n\t\t\t\t\t( // condition 1\r\n\t\t\t\t\t\tposition == endLocation\r\n\t\t\t\t\t) ||\r\n\t\t\t\t\t( // condition 2\r\n\t\t\t\t\t\tcurrentLocation == endLocation\r\n\t\t\t\t\t) ||\r\n\t\t\t\t\t( // condition 3\r\n\t\t\t\t\t\tinternalHeight >= scrollHeight\r\n\t\t\t\t\t)\r\n\t\t\t\t) { // stop\r\n\t\t\t\t\tclearInterval(runAnimation);\r\n\t\t\t\t\tcallbackAfter(element);\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\t/**\r\n\t\t\t * Scroll the page by an increment, and check if it's time to stop\r\n\t\t\t */\r\n\t\t\tvar animateScroll = function () {\r\n\t\t\t\ttimeLapsed += 16;\r\n\t\t\t\tpercentage = ( timeLapsed / duration );\r\n\t\t\t\tpercentage = ( percentage > 1 ) ? 1 : percentage;\r\n\t\t\t\tposition = startLocation + ( distance * getEasingPattern(easing, percentage) );\r\n\t\t\t\tif(containerPresent) {\r\n\t\t\t\t\tcontainer.scrollTop = position;\r\n\t\t\t\t} else {\r\n\t\t\t\t\twindow.scrollTo( 0, position );\r\n\t\t\t\t}\r\n\t\t\t\tstopAnimation();\r\n\t\t\t};\r\n\r\n\t\t\tcallbackBefore(element);\r\n\t\t\tvar runAnimation = setInterval(animateScroll, 16);\r\n\t\t}, 0);\r\n\t};\r\n\r\n\r\n\t// Expose the library in a factory\r\n\t//\r\n\tmodule.factory('smoothScroll', function() {\r\n\t\treturn smoothScroll;\r\n\t});\r\n\r\n\r\n\t/**\r\n\t * Scrolls the window to this element, optionally validating an expression\r\n\t *\r\n\t * 20150713 EDIT - zephinzer\r\n\t * \tAdded containerId to attributes for smooth scrolling within a DIV\r\n\t */\r\n\tmodule.directive('smoothScroll', ['smoothScroll', function(smoothScroll) {\r\n\t\treturn {\r\n\t\t\trestrict: 'A',\r\n\t\t\tscope: {\r\n\t\t\t\tcallbackBefore: '&',\r\n\t\t\t\tcallbackAfter: '&',\r\n\t\t\t},\r\n\t\t\tlink: function($scope, $elem, $attrs) {\r\n\t\t\t\tif ( typeof $attrs.scrollIf === 'undefined' || $attrs.scrollIf === 'true' ) {\r\n\t\t\t\t\tsetTimeout( function() {\r\n\r\n\t\t\t\t\t\tvar callbackBefore = function(element) {\r\n\t\t\t\t\t\t\tif ( $attrs.callbackBefore ) {\r\n\t\t\t\t\t\t\t\tvar exprHandler = $scope.callbackBefore({ element: element });\r\n\t\t\t\t\t\t\t\tif (typeof exprHandler === 'function') {\r\n\t\t\t\t\t\t\t\t\texprHandler(element);\r\n\t\t\t\t\t\t\t\t}\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\tvar callbackAfter = function(element) {\r\n\t\t\t\t\t\t\tif ( $attrs.callbackAfter ) {\r\n\t\t\t\t\t\t\t\tvar exprHandler = $scope.callbackAfter({ element: element });\r\n\t\t\t\t\t\t\t\tif (typeof exprHandler === 'function') {\r\n\t\t\t\t\t\t\t\t\texprHandler(element);\r\n\t\t\t\t\t\t\t\t}\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\tsmoothScroll($elem[0], {\r\n\t\t\t\t\t\t\tduration: $attrs.duration,\r\n\t\t\t\t\t\t\toffset: $attrs.offset,\r\n\t\t\t\t\t\t\teasing: $attrs.easing,\r\n\t\t\t\t\t\t\tcallbackBefore: callbackBefore,\r\n\t\t\t\t\t\t\tcallbackAfter: callbackAfter,\r\n\t\t\t\t\t\t\tcontainerId: $attrs.containerId\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}, 0);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t};\r\n\t}]);\r\n\r\n\r\n\t/**\r\n\t * Scrolls to a specified element ID when this element is clicked\r\n\t *\r\n\t * 20150713 EDIT - zephinzer\r\n\t * \tAdded containerId to attributes for smooth scrolling within a DIV\r\n\t */\r\n\tmodule.directive('scrollTo', ['smoothScroll', function(smoothScroll) {\r\n\t\treturn {\r\n\t\t\trestrict: 'A',\r\n\t\t\tscope: {\r\n\t\t\t\tcallbackBefore: '&',\r\n\t\t\t\tcallbackAfter: '&',\r\n\t\t\t},\r\n\t\t\tlink: function($scope, $elem, $attrs) {\r\n\t\t\t\tvar targetElement;\r\n\r\n\t\t\t\t$elem.on('click', function(e) {\r\n\t\t\t\t\te.preventDefault();\r\n\r\n\t\t\t\t\ttargetElement = document.getElementById($attrs.scrollTo);\r\n\t\t\t\t\tif ( !targetElement ) return;\r\n\r\n\t\t\t\t\tvar callbackBefore = function(element) {\r\n\t\t\t\t\t\tif ( $attrs.callbackBefore ) {\r\n\t\t\t\t\t\t\tvar exprHandler = $scope.callbackBefore({element: element});\r\n\t\t\t\t\t\t\tif (typeof exprHandler === 'function') {\r\n\t\t\t\t\t\t\t\texprHandler(element);\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\tvar callbackAfter = function(element) {\r\n\t\t\t\t\t\tif ( $attrs.callbackAfter ) {\r\n\t\t\t\t\t\t\tvar exprHandler = $scope.callbackAfter({element: element});\r\n\t\t\t\t\t\t\tif (typeof exprHandler === 'function') {\r\n\t\t\t\t\t\t\t\texprHandler(element);\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\tsmoothScroll(targetElement, {\r\n\t\t\t\t\t\tduration: $attrs.duration,\r\n\t\t\t\t\t\toffset: $attrs.offset,\r\n\t\t\t\t\t\teasing: $attrs.easing,\r\n\t\t\t\t\t\tcallbackBefore: callbackBefore,\r\n\t\t\t\t\t\tcallbackAfter: callbackAfter,\r\n\t\t\t\t\t\tcontainerId: $attrs.containerId\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t};\r\n\t}]);\r\n\r\n}());","/*\r\nVersion 2.1.1\r\nhttps://github.com/Foxandxss/angular-toastr\r\n*/\r\n\r\n(function() {\r\n 'use strict';\r\n\r\n angular.module('toastr', [])\r\n .factory('toastr', toastr);\r\n\r\n toastr.$inject = ['$animate', '$injector', '$document', '$rootScope', '$sce', 'toastrConfig', '$q'];\r\n\r\n function toastr($animate, $injector, $document, $rootScope, $sce, toastrConfig, $q) {\r\n var container;\r\n var index = 0;\r\n var toasts = [];\r\n\r\n var previousToastMessage = '';\r\n var openToasts = {};\r\n\r\n var containerDefer = $q.defer();\r\n\r\n var toast = {\r\n active: active,\r\n clear: clear,\r\n error: error,\r\n info: info,\r\n remove: remove,\r\n success: success,\r\n warning: warning,\r\n refreshTimer: refreshTimer\r\n };\r\n\r\n return toast;\r\n\r\n /* Public API */\r\n function active() {\r\n return toasts.length;\r\n }\r\n\r\n function clear(toast) {\r\n // Bit of a hack, I will remove this soon with a BC\r\n if (arguments.length === 1 && !toast) { return; }\r\n\r\n if (toast) {\r\n remove(toast.toastId);\r\n } else {\r\n for (var i = 0; i < toasts.length; i++) {\r\n remove(toasts[i].toastId);\r\n }\r\n }\r\n }\r\n\r\n function error(message, title, optionsOverride) {\r\n var type = _getOptions().iconClasses.error[0];\r\n var icon = _getOptions().iconClasses.error[1];\r\n return _buildNotification(type, icon, message, title, optionsOverride);\r\n }\r\n\r\n function info(message, title, optionsOverride) {\r\n var type = _getOptions().iconClasses.info[0];\r\n var icon = _getOptions().iconClasses.info[1];\r\n return _buildNotification(type, icon, message, title, optionsOverride);\r\n }\r\n\r\n function success(message, title, optionsOverride) {\r\n var type = _getOptions().iconClasses.success[0];\r\n var icon = _getOptions().iconClasses.success[1];\r\n return _buildNotification(type, icon, message, title, optionsOverride);\r\n }\r\n\r\n function warning(message, title, optionsOverride) {\r\n var type = _getOptions().iconClasses.warning[0];\r\n var icon = _getOptions().iconClasses.warning[1];\r\n return _buildNotification(type, icon, message, title, optionsOverride);\r\n }\r\n\r\n function refreshTimer(toast, newTime) {\r\n if (toast && toast.isOpened && toasts.indexOf(toast) >= 0) {\r\n toast.scope.refreshTimer(newTime);\r\n }\r\n }\r\n\r\n function remove(toastId, wasClicked) {\r\n var toast = findToast(toastId);\r\n\r\n if (toast && ! toast.deleting) { // Avoid clicking when fading out\r\n toast.deleting = true;\r\n toast.isOpened = false;\r\n $animate.leave(toast.el).then(function() {\r\n if (toast.scope.options.onHidden) {\r\n toast.scope.options.onHidden(!!wasClicked, toast);\r\n }\r\n toast.scope.$destroy();\r\n var index = toasts.indexOf(toast);\r\n delete openToasts[toast.scope.message];\r\n toasts.splice(index, 1);\r\n var maxOpened = toastrConfig.maxOpened;\r\n if (maxOpened && toasts.length >= maxOpened) {\r\n toasts[maxOpened - 1].open.resolve();\r\n }\r\n if (lastToast()) {\r\n container.remove();\r\n container = null;\r\n containerDefer = $q.defer();\r\n }\r\n });\r\n }\r\n\r\n function findToast(toastId) {\r\n for (var i = 0; i < toasts.length; i++) {\r\n if (toasts[i].toastId === toastId) {\r\n return toasts[i];\r\n }\r\n }\r\n }\r\n\r\n function lastToast() {\r\n return !toasts.length;\r\n }\r\n }\r\n\r\n /* Internal functions */\r\n function _buildNotification(type, icon, message, title, optionsOverride) {\r\n if (angular.isObject(title)) {\r\n optionsOverride = title;\r\n title = null;\r\n }\r\n\r\n return _notify({\r\n typeClass: type,\r\n iconClass: icon,\r\n message: message,\r\n optionsOverride: optionsOverride,\r\n title: title\r\n });\r\n }\r\n\r\n function _getOptions() {\r\n return angular.extend({}, toastrConfig);\r\n }\r\n\r\n function _createOrGetContainer(options) {\r\n if(container) { return containerDefer.promise; }\r\n\r\n container = angular.element('
');\r\n container.attr('id', options.containerId);\r\n container.addClass(options.positionClass);\r\n container.css({'pointer-events': 'auto'});\r\n\r\n var target = angular.element(document.querySelector(options.target));\r\n\r\n if ( ! target || ! target.length) {\r\n throw 'Target for toasts doesn\\'t exist';\r\n }\r\n\r\n $animate.enter(container, target).then(function() {\r\n containerDefer.resolve();\r\n });\r\n\r\n return containerDefer.promise;\r\n }\r\n\r\n function _notify(map) {\r\n var options = _getOptions();\r\n\r\n if (shouldExit()) { return; }\r\n\r\n var newToast = createToast();\r\n\r\n toasts.push(newToast);\r\n\r\n if (ifMaxOpenedAndAutoDismiss()) {\r\n var oldToasts = toasts.slice(0, (toasts.length - options.maxOpened));\r\n for (var i = 0, len = oldToasts.length; i < len; i++) {\r\n remove(oldToasts[i].toastId);\r\n }\r\n }\r\n\r\n if (maxOpenedNotReached()) {\r\n newToast.open.resolve();\r\n }\r\n\r\n newToast.open.promise.then(function() {\r\n _createOrGetContainer(options).then(function() {\r\n newToast.isOpened = true;\r\n if (options.newestOnTop) {\r\n $animate.enter(newToast.el, container).then(function() {\r\n newToast.scope.init();\r\n });\r\n } else {\r\n var sibling = container[0].lastChild ? angular.element(container[0].lastChild) : null;\r\n $animate.enter(newToast.el, container, sibling).then(function() {\r\n newToast.scope.init();\r\n });\r\n }\r\n });\r\n });\r\n\r\n return newToast;\r\n\r\n function ifMaxOpenedAndAutoDismiss() {\r\n return options.autoDismiss && options.maxOpened && toasts.length > options.maxOpened;\r\n }\r\n\r\n function createScope(toast, map, options) {\r\n if (options.allowHtml) {\r\n toast.scope.allowHtml = true;\r\n toast.scope.title = $sce.trustAsHtml(map.title);\r\n toast.scope.message = $sce.trustAsHtml(map.message);\r\n } else {\r\n toast.scope.title = map.title;\r\n toast.scope.message = map.message;\r\n }\r\n\r\n toast.scope.toastType = toast.typeClass;\r\n toast.scope.toastIcon = toast.iconClass;\r\n toast.scope.toastId = toast.toastId;\r\n toast.scope.extraData = options.extraData;\r\n\r\n toast.scope.options = {\r\n extendedTimeOut: options.extendedTimeOut,\r\n messageClass: options.messageClass,\r\n onHidden: options.onHidden,\r\n onShown: generateEvent('onShown'),\r\n onTap: generateEvent('onTap'),\r\n progressBar: options.progressBar,\r\n tapToDismiss: options.tapToDismiss,\r\n timeOut: options.timeOut,\r\n titleClass: options.titleClass,\r\n toastClass: options.toastClass\r\n };\r\n\r\n if (options.closeButton) {\r\n toast.scope.options.closeHtml = options.closeHtml;\r\n }\r\n\r\n function generateEvent(event) {\r\n if (options[event]) {\r\n return function() {\r\n options[event](toast);\r\n };\r\n }\r\n }\r\n }\r\n\r\n function createToast() {\r\n var newToast = {\r\n toastId: index++,\r\n isOpened: false,\r\n scope: $rootScope.$new(),\r\n open: $q.defer()\r\n };\r\n newToast.iconClass = map.iconClass;\r\n if (map.optionsOverride) {\r\n angular.extend(options, cleanOptionsOverride(map.optionsOverride));\r\n newToast.iconClass = map.optionsOverride.iconClass || newToast.iconClass;\r\n }\r\n newToast.typeClass = map.typeClass;\r\n if (map.optionsOverride) {\r\n angular.extend(options, cleanOptionsOverride(map.optionsOverride));\r\n newToast.typeClass = map.optionsOverride.typeClass || newToast.typeClass;\r\n }\r\n\r\n createScope(newToast, map, options);\r\n\r\n newToast.el = createToastEl(newToast.scope);\r\n\r\n return newToast;\r\n\r\n function cleanOptionsOverride(options) {\r\n var badOptions = ['containerId', 'iconClasses', 'maxOpened', 'newestOnTop',\r\n 'positionClass', 'preventDuplicates', 'preventOpenDuplicates', 'templates'];\r\n for (var i = 0, l = badOptions.length; i < l; i++) {\r\n delete options[badOptions[i]];\r\n }\r\n\r\n return options;\r\n }\r\n }\r\n\r\n function createToastEl(scope) {\r\n var angularDomEl = angular.element('
'),\r\n $compile = $injector.get('$compile');\r\n return $compile(angularDomEl)(scope);\r\n }\r\n\r\n function maxOpenedNotReached() {\r\n return options.maxOpened && toasts.length <= options.maxOpened || !options.maxOpened;\r\n }\r\n\r\n function shouldExit() {\r\n var isDuplicateOfLast = options.preventDuplicates && map.message === previousToastMessage;\r\n var isDuplicateOpen = options.preventOpenDuplicates && openToasts[map.message];\r\n\r\n if (isDuplicateOfLast || isDuplicateOpen) {\r\n return true;\r\n }\r\n\r\n previousToastMessage = map.message;\r\n openToasts[map.message] = true;\r\n\r\n return false;\r\n }\r\n }\r\n }\r\n}());\r\n\r\n(function() {\r\n 'use strict';\r\n\r\n angular.module('toastr')\r\n .constant('toastrConfig', {\r\n allowHtml: false,\r\n autoDismiss: false,\r\n closeButton: false,\r\n closeHtml: '',\r\n containerId: 'toast-container',\r\n extendedTimeOut: 1000,\r\n iconClasses: {\r\n error: ['toast-error', ''],\r\n info: ['toast-info', ''],\r\n success: ['toast-success', ''],\r\n warning: ['toast-warning', '']\r\n },\r\n maxOpened: 0,\r\n messageClass: 'toast-message',\r\n newestOnTop: true,\r\n onHidden: null,\r\n onShown: null,\r\n onTap: null,\r\n positionClass: 'toast-top-right',\r\n preventDuplicates: false,\r\n preventOpenDuplicates: false,\r\n progressBar: false,\r\n tapToDismiss: true,\r\n target: 'body',\r\n templates: {\r\n toast: 'directives/toast/toast.html',\r\n progressbar: 'directives/progressbar/progressbar.html'\r\n },\r\n timeOut: 5000,\r\n titleClass: 'toast-title',\r\n toastClass: 'toast'\r\n });\r\n}());\r\n\r\n(function() {\r\n 'use strict';\r\n\r\n angular.module('toastr')\r\n .directive('progressBar', progressBar);\r\n\r\n progressBar.$inject = ['toastrConfig'];\r\n\r\n function progressBar(toastrConfig) {\r\n return {\r\n require: '^toast',\r\n templateUrl: function() {\r\n return toastrConfig.templates.progressbar;\r\n },\r\n link: linkFunction\r\n };\r\n\r\n function linkFunction(scope, element, attrs, toastCtrl) {\r\n var intervalId, currentTimeOut, hideTime;\r\n\r\n toastCtrl.progressBar = scope;\r\n\r\n scope.start = function(duration) {\r\n if (intervalId) {\r\n clearInterval(intervalId);\r\n }\r\n\r\n currentTimeOut = parseFloat(duration);\r\n hideTime = new Date().getTime() + currentTimeOut;\r\n intervalId = setInterval(updateProgress, 10);\r\n };\r\n\r\n scope.stop = function() {\r\n if (intervalId) {\r\n clearInterval(intervalId);\r\n }\r\n };\r\n\r\n function updateProgress() {\r\n var percentage = ((hideTime - (new Date().getTime())) / currentTimeOut) * 100;\r\n element.css('width', percentage + '%');\r\n }\r\n\r\n scope.$on('$destroy', function() {\r\n // Failsafe stop\r\n clearInterval(intervalId);\r\n });\r\n }\r\n }\r\n}());\r\n\r\n(function() {\r\n 'use strict';\r\n\r\n angular.module('toastr')\r\n .controller('ToastController', ToastController);\r\n\r\n function ToastController() {\r\n this.progressBar = null;\r\n\r\n this.startProgressBar = function(duration) {\r\n if (this.progressBar) {\r\n this.progressBar.start(duration);\r\n }\r\n };\r\n\r\n this.stopProgressBar = function() {\r\n if (this.progressBar) {\r\n this.progressBar.stop();\r\n }\r\n };\r\n }\r\n}());\r\n\r\n(function() {\r\n 'use strict';\r\n\r\n angular.module('toastr')\r\n .directive('toast', toast);\r\n\r\n toast.$inject = ['$injector', '$interval', 'toastrConfig', 'toastr'];\r\n\r\n function toast($injector, $interval, toastrConfig, toastr) {\r\n return {\r\n templateUrl: function() {\r\n return toastrConfig.templates.toast;\r\n },\r\n controller: 'ToastController',\r\n link: toastLinkFunction\r\n };\r\n\r\n function toastLinkFunction(scope, element, attrs, toastCtrl) {\r\n var timeout;\r\n\r\n scope.toastClass = scope.options.toastClass;\r\n scope.titleClass = scope.options.titleClass;\r\n scope.messageClass = scope.options.messageClass;\r\n scope.progressBar = scope.options.progressBar;\r\n\r\n if (wantsCloseButton()) {\r\n var button = angular.element(scope.options.closeHtml),\r\n $compile = $injector.get('$compile');\r\n button.addClass('toast-close-button');\r\n button.attr('ng-click', 'close(true, $event)');\r\n $compile(button)(scope);\r\n element.children().prepend(button);\r\n }\r\n\r\n scope.init = function() {\r\n if (scope.options.timeOut) {\r\n timeout = createTimeout(scope.options.timeOut);\r\n }\r\n if (scope.options.onShown) {\r\n scope.options.onShown();\r\n }\r\n };\r\n\r\n element.on('mouseenter', function() {\r\n hideAndStopProgressBar();\r\n if (timeout) {\r\n $interval.cancel(timeout);\r\n }\r\n });\r\n\r\n scope.tapToast = function () {\r\n if (angular.isFunction(scope.options.onTap)) {\r\n scope.options.onTap();\r\n }\r\n if (scope.options.tapToDismiss) {\r\n scope.close(true);\r\n }\r\n };\r\n\r\n scope.close = function (wasClicked, $event) {\r\n if ($event && angular.isFunction($event.stopPropagation)) {\r\n $event.stopPropagation();\r\n }\r\n toastr.remove(scope.toastId, wasClicked);\r\n };\r\n\r\n scope.refreshTimer = function(newTime) {\r\n if (timeout) {\r\n $interval.cancel(timeout);\r\n timeout = createTimeout(newTime || scope.options.timeOut);\r\n }\r\n };\r\n\r\n element.on('mouseleave', function() {\r\n if (scope.options.timeOut === 0 && scope.options.extendedTimeOut === 0) { return; }\r\n scope.$apply(function() {\r\n scope.progressBar = scope.options.progressBar;\r\n });\r\n timeout = createTimeout(scope.options.extendedTimeOut);\r\n });\r\n\r\n function createTimeout(time) {\r\n toastCtrl.startProgressBar(time);\r\n return $interval(function() {\r\n toastCtrl.stopProgressBar();\r\n toastr.remove(scope.toastId);\r\n }, time, 1);\r\n }\r\n\r\n function hideAndStopProgressBar() {\r\n scope.progressBar = false;\r\n toastCtrl.stopProgressBar();\r\n }\r\n\r\n function wantsCloseButton() {\r\n return scope.options.closeHtml;\r\n }\r\n }\r\n }\r\n}());\r\n","/**\r\n * @license AngularJS v1.7.5\r\n * (c) 2010-2018 Google, Inc. http://angularjs.org\r\n * License: MIT\r\n */\r\n(function(window, angular) {'use strict';\r\n\r\n/**\r\n * @ngdoc module\r\n * @name ngCookies\r\n * @description\r\n *\r\n * The `ngCookies` module provides a convenient wrapper for reading and writing browser cookies.\r\n *\r\n * See {@link ngCookies.$cookies `$cookies`} for usage.\r\n */\r\n\r\n\r\nangular.module('ngCookies', ['ng']).\r\n info({ angularVersion: '1.7.5' }).\r\n /**\r\n * @ngdoc provider\r\n * @name $cookiesProvider\r\n * @description\r\n * Use `$cookiesProvider` to change the default behavior of the {@link ngCookies.$cookies $cookies} service.\r\n * */\r\n provider('$cookies', [/** @this */function $CookiesProvider() {\r\n /**\r\n * @ngdoc property\r\n * @name $cookiesProvider#defaults\r\n * @description\r\n *\r\n * Object containing default options to pass when setting cookies.\r\n *\r\n * The object may have following properties:\r\n *\r\n * - **path** - `{string}` - The cookie will be available only for this path and its\r\n * sub-paths. By default, this is the URL that appears in your `` tag.\r\n * - **domain** - `{string}` - The cookie will be available only for this domain and\r\n * its sub-domains. For security reasons the user agent will not accept the cookie\r\n * if the current domain is not a sub-domain of this domain or equal to it.\r\n * - **expires** - `{string|Date}` - String of the form \"Wdy, DD Mon YYYY HH:MM:SS GMT\"\r\n * or a Date object indicating the exact date/time this cookie will expire.\r\n * - **secure** - `{boolean}` - If `true`, then the cookie will only be available through a\r\n * secured connection.\r\n * - **samesite** - `{string}` - prevents the browser from sending the cookie along with cross-site requests.\r\n * Accepts the values `lax` and `strict`. See the [OWASP Wiki](https://www.owasp.org/index.php/SameSite)\r\n * for more info. Note that as of May 2018, not all browsers support `SameSite`,\r\n * so it cannot be used as a single measure against Cross-Site-Request-Forgery (CSRF) attacks.\r\n *\r\n * Note: By default, the address that appears in your `` tag will be used as the path.\r\n * This is important so that cookies will be visible for all routes when html5mode is enabled.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * angular.module('cookiesProviderExample', ['ngCookies'])\r\n * .config(['$cookiesProvider', function($cookiesProvider) {\r\n * // Setting default options\r\n * $cookiesProvider.defaults.domain = 'foo.com';\r\n * $cookiesProvider.defaults.secure = true;\r\n * }]);\r\n * ```\r\n **/\r\n var defaults = this.defaults = {};\r\n\r\n function calcOptions(options) {\r\n return options ? angular.extend({}, defaults, options) : defaults;\r\n }\r\n\r\n /**\r\n * @ngdoc service\r\n * @name $cookies\r\n *\r\n * @description\r\n * Provides read/write access to browser's cookies.\r\n *\r\n *
\r\n * Up until AngularJS 1.3, `$cookies` exposed properties that represented the\r\n * current browser cookie values. In version 1.4, this behavior has changed, and\r\n * `$cookies` now provides a standard api of getters, setters etc.\r\n *
\r\n *\r\n * Requires the {@link ngCookies `ngCookies`} module to be installed.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * angular.module('cookiesExample', ['ngCookies'])\r\n * .controller('ExampleController', ['$cookies', function($cookies) {\r\n * // Retrieving a cookie\r\n * var favoriteCookie = $cookies.get('myFavorite');\r\n * // Setting a cookie\r\n * $cookies.put('myFavorite', 'oatmeal');\r\n * }]);\r\n * ```\r\n */\r\n this.$get = ['$$cookieReader', '$$cookieWriter', function($$cookieReader, $$cookieWriter) {\r\n return {\r\n /**\r\n * @ngdoc method\r\n * @name $cookies#get\r\n *\r\n * @description\r\n * Returns the value of given cookie key\r\n *\r\n * @param {string} key Id to use for lookup.\r\n * @returns {string} Raw cookie value.\r\n */\r\n get: function(key) {\r\n return $$cookieReader()[key];\r\n },\r\n\r\n /**\r\n * @ngdoc method\r\n * @name $cookies#getObject\r\n *\r\n * @description\r\n * Returns the deserialized value of given cookie key\r\n *\r\n * @param {string} key Id to use for lookup.\r\n * @returns {Object} Deserialized cookie value.\r\n */\r\n getObject: function(key) {\r\n var value = this.get(key);\r\n return value ? angular.fromJson(value) : value;\r\n },\r\n\r\n /**\r\n * @ngdoc method\r\n * @name $cookies#getAll\r\n *\r\n * @description\r\n * Returns a key value object with all the cookies\r\n *\r\n * @returns {Object} All cookies\r\n */\r\n getAll: function() {\r\n return $$cookieReader();\r\n },\r\n\r\n /**\r\n * @ngdoc method\r\n * @name $cookies#put\r\n *\r\n * @description\r\n * Sets a value for given cookie key\r\n *\r\n * @param {string} key Id for the `value`.\r\n * @param {string} value Raw value to be stored.\r\n * @param {Object=} options Options object.\r\n * See {@link ngCookies.$cookiesProvider#defaults $cookiesProvider.defaults}\r\n */\r\n put: function(key, value, options) {\r\n $$cookieWriter(key, value, calcOptions(options));\r\n },\r\n\r\n /**\r\n * @ngdoc method\r\n * @name $cookies#putObject\r\n *\r\n * @description\r\n * Serializes and sets a value for given cookie key\r\n *\r\n * @param {string} key Id for the `value`.\r\n * @param {Object} value Value to be stored.\r\n * @param {Object=} options Options object.\r\n * See {@link ngCookies.$cookiesProvider#defaults $cookiesProvider.defaults}\r\n */\r\n putObject: function(key, value, options) {\r\n this.put(key, angular.toJson(value), options);\r\n },\r\n\r\n /**\r\n * @ngdoc method\r\n * @name $cookies#remove\r\n *\r\n * @description\r\n * Remove given cookie\r\n *\r\n * @param {string} key Id of the key-value pair to delete.\r\n * @param {Object=} options Options object.\r\n * See {@link ngCookies.$cookiesProvider#defaults $cookiesProvider.defaults}\r\n */\r\n remove: function(key, options) {\r\n $$cookieWriter(key, undefined, calcOptions(options));\r\n }\r\n };\r\n }];\r\n }]);\r\n\r\n/**\r\n * @name $$cookieWriter\r\n * @requires $document\r\n *\r\n * @description\r\n * This is a private service for writing cookies\r\n *\r\n * @param {string} name Cookie name\r\n * @param {string=} value Cookie value (if undefined, cookie will be deleted)\r\n * @param {Object=} options Object with options that need to be stored for the cookie.\r\n */\r\nfunction $$CookieWriter($document, $log, $browser) {\r\n var cookiePath = $browser.baseHref();\r\n var rawDocument = $document[0];\r\n\r\n function buildCookieString(name, value, options) {\r\n var path, expires;\r\n options = options || {};\r\n expires = options.expires;\r\n path = angular.isDefined(options.path) ? options.path : cookiePath;\r\n if (angular.isUndefined(value)) {\r\n expires = 'Thu, 01 Jan 1970 00:00:00 GMT';\r\n value = '';\r\n }\r\n if (angular.isString(expires)) {\r\n expires = new Date(expires);\r\n }\r\n\r\n var str = encodeURIComponent(name) + '=' + encodeURIComponent(value);\r\n str += path ? ';path=' + path : '';\r\n str += options.domain ? ';domain=' + options.domain : '';\r\n str += expires ? ';expires=' + expires.toUTCString() : '';\r\n str += options.secure ? ';secure' : '';\r\n str += options.samesite ? ';samesite=' + options.samesite : '';\r\n\r\n // per http://www.ietf.org/rfc/rfc2109.txt browser must allow at minimum:\r\n // - 300 cookies\r\n // - 20 cookies per unique domain\r\n // - 4096 bytes per cookie\r\n var cookieLength = str.length + 1;\r\n if (cookieLength > 4096) {\r\n $log.warn('Cookie \\'' + name +\r\n '\\' possibly not set or overflowed because it was too large (' +\r\n cookieLength + ' > 4096 bytes)!');\r\n }\r\n\r\n return str;\r\n }\r\n\r\n return function(name, value, options) {\r\n rawDocument.cookie = buildCookieString(name, value, options);\r\n };\r\n}\r\n\r\n$$CookieWriter.$inject = ['$document', '$log', '$browser'];\r\n\r\nangular.module('ngCookies').provider('$$cookieWriter', /** @this */ function $$CookieWriterProvider() {\r\n this.$get = $$CookieWriter;\r\n});\r\n\r\n\r\n})(window, window.angular);\r\n","'use strict';\r\nangular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\r\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \"two\", FEW: \"few\", MANY: \"many\", OTHER: \"other\"};\r\n$provide.value(\"$locale\", {\r\n \"DATETIME_FORMATS\": {\r\n \"AMPMS\": [\r\n \"AM\",\r\n \"PM\"\r\n ],\r\n \"DAY\": [\r\n \"dimanche\",\r\n \"lundi\",\r\n \"mardi\",\r\n \"mercredi\",\r\n \"jeudi\",\r\n \"vendredi\",\r\n \"samedi\"\r\n ],\r\n \"ERANAMES\": [\r\n \"avant J\\u00e9sus-Christ\",\r\n \"apr\\u00e8s J\\u00e9sus-Christ\"\r\n ],\r\n \"ERAS\": [\r\n \"av. J.-C.\",\r\n \"ap. J.-C.\"\r\n ],\r\n \"FIRSTDAYOFWEEK\": 0,\r\n \"MONTH\": [\r\n \"janvier\",\r\n \"f\\u00e9vrier\",\r\n \"mars\",\r\n \"avril\",\r\n \"mai\",\r\n \"juin\",\r\n \"juillet\",\r\n \"ao\\u00fbt\",\r\n \"septembre\",\r\n \"octobre\",\r\n \"novembre\",\r\n \"d\\u00e9cembre\"\r\n ],\r\n \"SHORTDAY\": [\r\n \"dim.\",\r\n \"lun.\",\r\n \"mar.\",\r\n \"mer.\",\r\n \"jeu.\",\r\n \"ven.\",\r\n \"sam.\"\r\n ],\r\n \"SHORTMONTH\": [\r\n \"janv.\",\r\n \"f\\u00e9vr.\",\r\n \"mars\",\r\n \"avr.\",\r\n \"mai\",\r\n \"juin\",\r\n \"juil.\",\r\n \"ao\\u00fbt\",\r\n \"sept.\",\r\n \"oct.\",\r\n \"nov.\",\r\n \"d\\u00e9c.\"\r\n ],\r\n \"STANDALONEMONTH\": [\r\n \"janvier\",\r\n \"f\\u00e9vrier\",\r\n \"mars\",\r\n \"avril\",\r\n \"mai\",\r\n \"juin\",\r\n \"juillet\",\r\n \"ao\\u00fbt\",\r\n \"septembre\",\r\n \"octobre\",\r\n \"novembre\",\r\n \"d\\u00e9cembre\"\r\n ],\r\n \"WEEKENDRANGE\": [\r\n 5,\r\n 6\r\n ],\r\n \"fullDate\": \"EEEE d MMMM y\",\r\n \"longDate\": \"d MMMM y\",\r\n \"medium\": \"d MMM y HH:mm:ss\",\r\n \"mediumDate\": \"d MMM y\",\r\n \"mediumTime\": \"HH:mm:ss\",\r\n \"short\": \"dd/MM/y HH:mm\",\r\n \"shortDate\": \"dd/MM/y\",\r\n \"shortTime\": \"HH:mm\"\r\n },\r\n \"NUMBER_FORMATS\": {\r\n \"CURRENCY_SYM\": \"\\u20ac\",\r\n \"DECIMAL_SEP\": \",\",\r\n \"GROUP_SEP\": \"\\u00a0\",\r\n \"PATTERNS\": [\r\n {\r\n \"gSize\": 3,\r\n \"lgSize\": 3,\r\n \"maxFrac\": 3,\r\n \"minFrac\": 0,\r\n \"minInt\": 1,\r\n \"negPre\": \"-\",\r\n \"negSuf\": \"\",\r\n \"posPre\": \"\",\r\n \"posSuf\": \"\"\r\n },\r\n {\r\n \"gSize\": 3,\r\n \"lgSize\": 3,\r\n \"maxFrac\": 2,\r\n \"minFrac\": 2,\r\n \"minInt\": 1,\r\n \"negPre\": \"-\",\r\n \"negSuf\": \"\\u00a0\\u00a4\",\r\n \"posPre\": \"\",\r\n \"posSuf\": \"\\u00a0\\u00a4\"\r\n }\r\n ]\r\n },\r\n \"id\": \"fr\",\r\n \"localeID\": \"fr\",\r\n \"pluralCat\": function(n, opt_precision) { var i = n | 0; if (i == 0 || i == 1) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}\r\n});\r\n}]);\r\n","/**\r\n * @license AngularJS v1.7.5\r\n * (c) 2010-2018 Google, Inc. http://angularjs.org\r\n * License: MIT\r\n */\r\n(function(window, angular) {'use strict';\r\n\r\n/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\r\n * Any commits to this file should be reviewed with security in mind. *\r\n * Changes to this file can potentially create security vulnerabilities. *\r\n * An approval from 2 Core members with history of modifying *\r\n * this file is required. *\r\n * *\r\n * Does the change somehow allow for arbitrary javascript to be executed? *\r\n * Or allows for someone to change the prototype of built-in objects? *\r\n * Or gives undesired access to variables likes document or window? *\r\n * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */\r\n\r\nvar $sanitizeMinErr = angular.$$minErr('$sanitize');\r\nvar bind;\r\nvar extend;\r\nvar forEach;\r\nvar isArray;\r\nvar isDefined;\r\nvar lowercase;\r\nvar noop;\r\nvar nodeContains;\r\nvar htmlParser;\r\nvar htmlSanitizeWriter;\r\n\r\n/**\r\n * @ngdoc module\r\n * @name ngSanitize\r\n * @description\r\n *\r\n * The `ngSanitize` module provides functionality to sanitize HTML.\r\n *\r\n * See {@link ngSanitize.$sanitize `$sanitize`} for usage.\r\n */\r\n\r\n/**\r\n * @ngdoc service\r\n * @name $sanitize\r\n * @kind function\r\n *\r\n * @description\r\n * Sanitizes an html string by stripping all potentially dangerous tokens.\r\n *\r\n * The input is sanitized by parsing the HTML into tokens. All safe tokens (from a whitelist) are\r\n * then serialized back to a properly escaped HTML string. This means that no unsafe input can make\r\n * it into the returned string.\r\n *\r\n * The whitelist for URL sanitization of attribute values is configured using the functions\r\n * `aHrefSanitizationWhitelist` and `imgSrcSanitizationWhitelist` of {@link $compileProvider}.\r\n *\r\n * The input may also contain SVG markup if this is enabled via {@link $sanitizeProvider}.\r\n *\r\n * @param {string} html HTML input.\r\n * @returns {string} Sanitized HTML.\r\n *\r\n * @example\r\n \r\n \r\n \r\n
\r\n Snippet: \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
DirectiveHowSourceRendered
ng-bind-htmlAutomatically uses $sanitize
<div ng-bind-html=\"snippet\">
</div>
ng-bind-htmlBypass $sanitize by explicitly trusting the dangerous value\r\n
<div ng-bind-html=\"deliberatelyTrustDangerousSnippet()\">\r\n</div>
\r\n
ng-bindAutomatically escapes
<div ng-bind=\"snippet\">
</div>
\r\n
\r\n
\r\n \r\n it('should sanitize the html snippet by default', function() {\r\n expect(element(by.css('#bind-html-with-sanitize div')).getAttribute('innerHTML')).\r\n toBe('

an html\\nclick here\\nsnippet

');\r\n });\r\n\r\n it('should inline raw snippet if bound to a trusted value', function() {\r\n expect(element(by.css('#bind-html-with-trust div')).getAttribute('innerHTML')).\r\n toBe(\"

an html\\n\" +\r\n \"click here\\n\" +\r\n \"snippet

\");\r\n });\r\n\r\n it('should escape snippet without any filter', function() {\r\n expect(element(by.css('#bind-default div')).getAttribute('innerHTML')).\r\n toBe(\"<p style=\\\"color:blue\\\">an html\\n\" +\r\n \"<em onmouseover=\\\"this.textContent='PWN3D!'\\\">click here</em>\\n\" +\r\n \"snippet</p>\");\r\n });\r\n\r\n it('should update', function() {\r\n element(by.model('snippet')).clear();\r\n element(by.model('snippet')).sendKeys('new text');\r\n expect(element(by.css('#bind-html-with-sanitize div')).getAttribute('innerHTML')).\r\n toBe('new text');\r\n expect(element(by.css('#bind-html-with-trust div')).getAttribute('innerHTML')).toBe(\r\n 'new text');\r\n expect(element(by.css('#bind-default div')).getAttribute('innerHTML')).toBe(\r\n \"new <b onclick=\\\"alert(1)\\\">text</b>\");\r\n });\r\n
\r\n
\r\n */\r\n\r\n\r\n/**\r\n * @ngdoc provider\r\n * @name $sanitizeProvider\r\n * @this\r\n *\r\n * @description\r\n * Creates and configures {@link $sanitize} instance.\r\n */\r\nfunction $SanitizeProvider() {\r\n var hasBeenInstantiated = false;\r\n var svgEnabled = false;\r\n\r\n this.$get = ['$$sanitizeUri', function($$sanitizeUri) {\r\n hasBeenInstantiated = true;\r\n if (svgEnabled) {\r\n extend(validElements, svgElements);\r\n }\r\n return function(html) {\r\n var buf = [];\r\n htmlParser(html, htmlSanitizeWriter(buf, function(uri, isImage) {\r\n return !/^unsafe:/.test($$sanitizeUri(uri, isImage));\r\n }));\r\n return buf.join('');\r\n };\r\n }];\r\n\r\n\r\n /**\r\n * @ngdoc method\r\n * @name $sanitizeProvider#enableSvg\r\n * @kind function\r\n *\r\n * @description\r\n * Enables a subset of svg to be supported by the sanitizer.\r\n *\r\n *
\r\n *

By enabling this setting without taking other precautions, you might expose your\r\n * application to click-hijacking attacks. In these attacks, sanitized svg elements could be positioned\r\n * outside of the containing element and be rendered over other elements on the page (e.g. a login\r\n * link). Such behavior can then result in phishing incidents.

\r\n *\r\n *

To protect against these, explicitly setup `overflow: hidden` css rule for all potential svg\r\n * tags within the sanitized content:

\r\n *\r\n *
\r\n *\r\n *
\r\n   *   .rootOfTheIncludedContent svg {\r\n   *     overflow: hidden !important;\r\n   *   }\r\n   *   
\r\n *
\r\n *\r\n * @param {boolean=} flag Enable or disable SVG support in the sanitizer.\r\n * @returns {boolean|$sanitizeProvider} Returns the currently configured value if called\r\n * without an argument or self for chaining otherwise.\r\n */\r\n this.enableSvg = function(enableSvg) {\r\n if (isDefined(enableSvg)) {\r\n svgEnabled = enableSvg;\r\n return this;\r\n } else {\r\n return svgEnabled;\r\n }\r\n };\r\n\r\n\r\n /**\r\n * @ngdoc method\r\n * @name $sanitizeProvider#addValidElements\r\n * @kind function\r\n *\r\n * @description\r\n * Extends the built-in lists of valid HTML/SVG elements, i.e. elements that are considered safe\r\n * and are not stripped off during sanitization. You can extend the following lists of elements:\r\n *\r\n * - `htmlElements`: A list of elements (tag names) to extend the current list of safe HTML\r\n * elements. HTML elements considered safe will not be removed during sanitization. All other\r\n * elements will be stripped off.\r\n *\r\n * - `htmlVoidElements`: This is similar to `htmlElements`, but marks the elements as\r\n * \"void elements\" (similar to HTML\r\n * [void elements](https://rawgit.com/w3c/html/html5.1-2/single-page.html#void-elements)). These\r\n * elements have no end tag and cannot have content.\r\n *\r\n * - `svgElements`: This is similar to `htmlElements`, but for SVG elements. This list is only\r\n * taken into account if SVG is {@link ngSanitize.$sanitizeProvider#enableSvg enabled} for\r\n * `$sanitize`.\r\n *\r\n *
\r\n * This method must be called during the {@link angular.Module#config config} phase. Once the\r\n * `$sanitize` service has been instantiated, this method has no effect.\r\n *
\r\n *\r\n *
\r\n * Keep in mind that extending the built-in lists of elements may expose your app to XSS or\r\n * other vulnerabilities. Be very mindful of the elements you add.\r\n *
\r\n *\r\n * @param {Array|Object} elements - A list of valid HTML elements or an object with one or\r\n * more of the following properties:\r\n * - **htmlElements** - `{Array}` - A list of elements to extend the current list of\r\n * HTML elements.\r\n * - **htmlVoidElements** - `{Array}` - A list of elements to extend the current list of\r\n * void HTML elements; i.e. elements that do not have an end tag.\r\n * - **svgElements** - `{Array}` - A list of elements to extend the current list of SVG\r\n * elements. The list of SVG elements is only taken into account if SVG is\r\n * {@link ngSanitize.$sanitizeProvider#enableSvg enabled} for `$sanitize`.\r\n *\r\n * Passing an array (`[...]`) is equivalent to passing `{htmlElements: [...]}`.\r\n *\r\n * @return {$sanitizeProvider} Returns self for chaining.\r\n */\r\n this.addValidElements = function(elements) {\r\n if (!hasBeenInstantiated) {\r\n if (isArray(elements)) {\r\n elements = {htmlElements: elements};\r\n }\r\n\r\n addElementsTo(svgElements, elements.svgElements);\r\n addElementsTo(voidElements, elements.htmlVoidElements);\r\n addElementsTo(validElements, elements.htmlVoidElements);\r\n addElementsTo(validElements, elements.htmlElements);\r\n }\r\n\r\n return this;\r\n };\r\n\r\n\r\n /**\r\n * @ngdoc method\r\n * @name $sanitizeProvider#addValidAttrs\r\n * @kind function\r\n *\r\n * @description\r\n * Extends the built-in list of valid attributes, i.e. attributes that are considered safe and are\r\n * not stripped off during sanitization.\r\n *\r\n * **Note**:\r\n * The new attributes will not be treated as URI attributes, which means their values will not be\r\n * sanitized as URIs using `$compileProvider`'s\r\n * {@link ng.$compileProvider#aHrefSanitizationWhitelist aHrefSanitizationWhitelist} and\r\n * {@link ng.$compileProvider#imgSrcSanitizationWhitelist imgSrcSanitizationWhitelist}.\r\n *\r\n *
\r\n * This method must be called during the {@link angular.Module#config config} phase. Once the\r\n * `$sanitize` service has been instantiated, this method has no effect.\r\n *
\r\n *\r\n *
\r\n * Keep in mind that extending the built-in list of attributes may expose your app to XSS or\r\n * other vulnerabilities. Be very mindful of the attributes you add.\r\n *
\r\n *\r\n * @param {Array} attrs - A list of valid attributes.\r\n *\r\n * @returns {$sanitizeProvider} Returns self for chaining.\r\n */\r\n this.addValidAttrs = function(attrs) {\r\n if (!hasBeenInstantiated) {\r\n extend(validAttrs, arrayToMap(attrs, true));\r\n }\r\n return this;\r\n };\r\n\r\n //////////////////////////////////////////////////////////////////////////////////////////////////\r\n // Private stuff\r\n //////////////////////////////////////////////////////////////////////////////////////////////////\r\n\r\n bind = angular.bind;\r\n extend = angular.extend;\r\n forEach = angular.forEach;\r\n isArray = angular.isArray;\r\n isDefined = angular.isDefined;\r\n lowercase = angular.$$lowercase;\r\n noop = angular.noop;\r\n\r\n htmlParser = htmlParserImpl;\r\n htmlSanitizeWriter = htmlSanitizeWriterImpl;\r\n\r\n nodeContains = window.Node.prototype.contains || /** @this */ function(arg) {\r\n // eslint-disable-next-line no-bitwise\r\n return !!(this.compareDocumentPosition(arg) & 16);\r\n };\r\n\r\n // Regular Expressions for parsing tags and attributes\r\n var SURROGATE_PAIR_REGEXP = /[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g,\r\n // Match everything outside of normal chars and \" (quote character)\r\n NON_ALPHANUMERIC_REGEXP = /([^#-~ |!])/g;\r\n\r\n\r\n // Good source of info about elements and attributes\r\n // http://dev.w3.org/html5/spec/Overview.html#semantics\r\n // http://simon.html5.org/html-elements\r\n\r\n // Safe Void Elements - HTML5\r\n // http://dev.w3.org/html5/spec/Overview.html#void-elements\r\n var voidElements = stringToMap('area,br,col,hr,img,wbr');\r\n\r\n // Elements that you can, intentionally, leave open (and which close themselves)\r\n // http://dev.w3.org/html5/spec/Overview.html#optional-tags\r\n var optionalEndTagBlockElements = stringToMap('colgroup,dd,dt,li,p,tbody,td,tfoot,th,thead,tr'),\r\n optionalEndTagInlineElements = stringToMap('rp,rt'),\r\n optionalEndTagElements = extend({},\r\n optionalEndTagInlineElements,\r\n optionalEndTagBlockElements);\r\n\r\n // Safe Block Elements - HTML5\r\n var blockElements = extend({}, optionalEndTagBlockElements, stringToMap('address,article,' +\r\n 'aside,blockquote,caption,center,del,dir,div,dl,figure,figcaption,footer,h1,h2,h3,h4,h5,' +\r\n 'h6,header,hgroup,hr,ins,map,menu,nav,ol,pre,section,table,ul'));\r\n\r\n // Inline Elements - HTML5\r\n var inlineElements = extend({}, optionalEndTagInlineElements, stringToMap('a,abbr,acronym,b,' +\r\n 'bdi,bdo,big,br,cite,code,del,dfn,em,font,i,img,ins,kbd,label,map,mark,q,ruby,rp,rt,s,' +\r\n 'samp,small,span,strike,strong,sub,sup,time,tt,u,var'));\r\n\r\n // SVG Elements\r\n // https://wiki.whatwg.org/wiki/Sanitization_rules#svg_Elements\r\n // Note: the elements animate,animateColor,animateMotion,animateTransform,set are intentionally omitted.\r\n // They can potentially allow for arbitrary javascript to be executed. See #11290\r\n var svgElements = stringToMap('circle,defs,desc,ellipse,font-face,font-face-name,font-face-src,g,glyph,' +\r\n 'hkern,image,linearGradient,line,marker,metadata,missing-glyph,mpath,path,polygon,polyline,' +\r\n 'radialGradient,rect,stop,svg,switch,text,title,tspan');\r\n\r\n // Blocked Elements (will be stripped)\r\n var blockedElements = stringToMap('script,style');\r\n\r\n var validElements = extend({},\r\n voidElements,\r\n blockElements,\r\n inlineElements,\r\n optionalEndTagElements);\r\n\r\n //Attributes that have href and hence need to be sanitized\r\n var uriAttrs = stringToMap('background,cite,href,longdesc,src,xlink:href,xml:base');\r\n\r\n var htmlAttrs = stringToMap('abbr,align,alt,axis,bgcolor,border,cellpadding,cellspacing,class,clear,' +\r\n 'color,cols,colspan,compact,coords,dir,face,headers,height,hreflang,hspace,' +\r\n 'ismap,lang,language,nohref,nowrap,rel,rev,rows,rowspan,rules,' +\r\n 'scope,scrolling,shape,size,span,start,summary,tabindex,target,title,type,' +\r\n 'valign,value,vspace,width');\r\n\r\n // SVG attributes (without \"id\" and \"name\" attributes)\r\n // https://wiki.whatwg.org/wiki/Sanitization_rules#svg_Attributes\r\n var svgAttrs = stringToMap('accent-height,accumulate,additive,alphabetic,arabic-form,ascent,' +\r\n 'baseProfile,bbox,begin,by,calcMode,cap-height,class,color,color-rendering,content,' +\r\n 'cx,cy,d,dx,dy,descent,display,dur,end,fill,fill-rule,font-family,font-size,font-stretch,' +\r\n 'font-style,font-variant,font-weight,from,fx,fy,g1,g2,glyph-name,gradientUnits,hanging,' +\r\n 'height,horiz-adv-x,horiz-origin-x,ideographic,k,keyPoints,keySplines,keyTimes,lang,' +\r\n 'marker-end,marker-mid,marker-start,markerHeight,markerUnits,markerWidth,mathematical,' +\r\n 'max,min,offset,opacity,orient,origin,overline-position,overline-thickness,panose-1,' +\r\n 'path,pathLength,points,preserveAspectRatio,r,refX,refY,repeatCount,repeatDur,' +\r\n 'requiredExtensions,requiredFeatures,restart,rotate,rx,ry,slope,stemh,stemv,stop-color,' +\r\n 'stop-opacity,strikethrough-position,strikethrough-thickness,stroke,stroke-dasharray,' +\r\n 'stroke-dashoffset,stroke-linecap,stroke-linejoin,stroke-miterlimit,stroke-opacity,' +\r\n 'stroke-width,systemLanguage,target,text-anchor,to,transform,type,u1,u2,underline-position,' +\r\n 'underline-thickness,unicode,unicode-range,units-per-em,values,version,viewBox,visibility,' +\r\n 'width,widths,x,x-height,x1,x2,xlink:actuate,xlink:arcrole,xlink:role,xlink:show,xlink:title,' +\r\n 'xlink:type,xml:base,xml:lang,xml:space,xmlns,xmlns:xlink,y,y1,y2,zoomAndPan', true);\r\n\r\n var validAttrs = extend({},\r\n uriAttrs,\r\n svgAttrs,\r\n htmlAttrs);\r\n\r\n function stringToMap(str, lowercaseKeys) {\r\n return arrayToMap(str.split(','), lowercaseKeys);\r\n }\r\n\r\n function arrayToMap(items, lowercaseKeys) {\r\n var obj = {}, i;\r\n for (i = 0; i < items.length; i++) {\r\n obj[lowercaseKeys ? lowercase(items[i]) : items[i]] = true;\r\n }\r\n return obj;\r\n }\r\n\r\n function addElementsTo(elementsMap, newElements) {\r\n if (newElements && newElements.length) {\r\n extend(elementsMap, arrayToMap(newElements));\r\n }\r\n }\r\n\r\n /**\r\n * Create an inert document that contains the dirty HTML that needs sanitizing\r\n * Depending upon browser support we use one of three strategies for doing this.\r\n * Support: Safari 10.x -> XHR strategy\r\n * Support: Firefox -> DomParser strategy\r\n */\r\n var getInertBodyElement /* function(html: string): HTMLBodyElement */ = (function(window, document) {\r\n var inertDocument;\r\n if (document && document.implementation) {\r\n inertDocument = document.implementation.createHTMLDocument('inert');\r\n } else {\r\n throw $sanitizeMinErr('noinert', 'Can\\'t create an inert html document');\r\n }\r\n var inertBodyElement = (inertDocument.documentElement || inertDocument.getDocumentElement()).querySelector('body');\r\n\r\n // Check for the Safari 10.1 bug - which allows JS to run inside the SVG G element\r\n inertBodyElement.innerHTML = '';\r\n if (!inertBodyElement.querySelector('svg')) {\r\n return getInertBodyElement_XHR;\r\n } else {\r\n // Check for the Firefox bug - which prevents the inner img JS from being sanitized\r\n inertBodyElement.innerHTML = '

';\r\n if (inertBodyElement.querySelector('svg img')) {\r\n return getInertBodyElement_DOMParser;\r\n } else {\r\n return getInertBodyElement_InertDocument;\r\n }\r\n }\r\n\r\n function getInertBodyElement_XHR(html) {\r\n // We add this dummy element to ensure that the rest of the content is parsed as expected\r\n // e.g. leading whitespace is maintained and tags like `` do not get hoisted to the `` tag.\r\n html = '' + html;\r\n try {\r\n html = encodeURI(html);\r\n } catch (e) {\r\n return undefined;\r\n }\r\n var xhr = new window.XMLHttpRequest();\r\n xhr.responseType = 'document';\r\n xhr.open('GET', 'data:text/html;charset=utf-8,' + html, false);\r\n xhr.send(null);\r\n var body = xhr.response.body;\r\n body.firstChild.remove();\r\n return body;\r\n }\r\n\r\n function getInertBodyElement_DOMParser(html) {\r\n // We add this dummy element to ensure that the rest of the content is parsed as expected\r\n // e.g. leading whitespace is maintained and tags like `` do not get hoisted to the `` tag.\r\n html = '' + html;\r\n try {\r\n var body = new window.DOMParser().parseFromString(html, 'text/html').body;\r\n body.firstChild.remove();\r\n return body;\r\n } catch (e) {\r\n return undefined;\r\n }\r\n }\r\n\r\n function getInertBodyElement_InertDocument(html) {\r\n inertBodyElement.innerHTML = html;\r\n\r\n // Support: IE 9-11 only\r\n // strip custom-namespaced attributes on IE<=11\r\n if (document.documentMode) {\r\n stripCustomNsAttrs(inertBodyElement);\r\n }\r\n\r\n return inertBodyElement;\r\n }\r\n })(window, window.document);\r\n\r\n /**\r\n * @example\r\n * htmlParser(htmlString, {\r\n * start: function(tag, attrs) {},\r\n * end: function(tag) {},\r\n * chars: function(text) {},\r\n * comment: function(text) {}\r\n * });\r\n *\r\n * @param {string} html string\r\n * @param {object} handler\r\n */\r\n function htmlParserImpl(html, handler) {\r\n if (html === null || html === undefined) {\r\n html = '';\r\n } else if (typeof html !== 'string') {\r\n html = '' + html;\r\n }\r\n\r\n var inertBodyElement = getInertBodyElement(html);\r\n if (!inertBodyElement) return '';\r\n\r\n //mXSS protection\r\n var mXSSAttempts = 5;\r\n do {\r\n if (mXSSAttempts === 0) {\r\n throw $sanitizeMinErr('uinput', 'Failed to sanitize html because the input is unstable');\r\n }\r\n mXSSAttempts--;\r\n\r\n // trigger mXSS if it is going to happen by reading and writing the innerHTML\r\n html = inertBodyElement.innerHTML;\r\n inertBodyElement = getInertBodyElement(html);\r\n } while (html !== inertBodyElement.innerHTML);\r\n\r\n var node = inertBodyElement.firstChild;\r\n while (node) {\r\n switch (node.nodeType) {\r\n case 1: // ELEMENT_NODE\r\n handler.start(node.nodeName.toLowerCase(), attrToMap(node.attributes));\r\n break;\r\n case 3: // TEXT NODE\r\n handler.chars(node.textContent);\r\n break;\r\n }\r\n\r\n var nextNode;\r\n if (!(nextNode = node.firstChild)) {\r\n if (node.nodeType === 1) {\r\n handler.end(node.nodeName.toLowerCase());\r\n }\r\n nextNode = getNonDescendant('nextSibling', node);\r\n if (!nextNode) {\r\n while (nextNode == null) {\r\n node = getNonDescendant('parentNode', node);\r\n if (node === inertBodyElement) break;\r\n nextNode = getNonDescendant('nextSibling', node);\r\n if (node.nodeType === 1) {\r\n handler.end(node.nodeName.toLowerCase());\r\n }\r\n }\r\n }\r\n }\r\n node = nextNode;\r\n }\r\n\r\n while ((node = inertBodyElement.firstChild)) {\r\n inertBodyElement.removeChild(node);\r\n }\r\n }\r\n\r\n function attrToMap(attrs) {\r\n var map = {};\r\n for (var i = 0, ii = attrs.length; i < ii; i++) {\r\n var attr = attrs[i];\r\n map[attr.name] = attr.value;\r\n }\r\n return map;\r\n }\r\n\r\n\r\n /**\r\n * Escapes all potentially dangerous characters, so that the\r\n * resulting string can be safely inserted into attribute or\r\n * element text.\r\n * @param value\r\n * @returns {string} escaped text\r\n */\r\n function encodeEntities(value) {\r\n return value.\r\n replace(/&/g, '&').\r\n replace(SURROGATE_PAIR_REGEXP, function(value) {\r\n var hi = value.charCodeAt(0);\r\n var low = value.charCodeAt(1);\r\n return '&#' + (((hi - 0xD800) * 0x400) + (low - 0xDC00) + 0x10000) + ';';\r\n }).\r\n replace(NON_ALPHANUMERIC_REGEXP, function(value) {\r\n return '&#' + value.charCodeAt(0) + ';';\r\n }).\r\n replace(//g, '>');\r\n }\r\n\r\n /**\r\n * create an HTML/XML writer which writes to buffer\r\n * @param {Array} buf use buf.join('') to get out sanitized html string\r\n * @returns {object} in the form of {\r\n * start: function(tag, attrs) {},\r\n * end: function(tag) {},\r\n * chars: function(text) {},\r\n * comment: function(text) {}\r\n * }\r\n */\r\n function htmlSanitizeWriterImpl(buf, uriValidator) {\r\n var ignoreCurrentElement = false;\r\n var out = bind(buf, buf.push);\r\n return {\r\n start: function(tag, attrs) {\r\n tag = lowercase(tag);\r\n if (!ignoreCurrentElement && blockedElements[tag]) {\r\n ignoreCurrentElement = tag;\r\n }\r\n if (!ignoreCurrentElement && validElements[tag] === true) {\r\n out('<');\r\n out(tag);\r\n forEach(attrs, function(value, key) {\r\n var lkey = lowercase(key);\r\n var isImage = (tag === 'img' && lkey === 'src') || (lkey === 'background');\r\n if (validAttrs[lkey] === true &&\r\n (uriAttrs[lkey] !== true || uriValidator(value, isImage))) {\r\n out(' ');\r\n out(key);\r\n out('=\"');\r\n out(encodeEntities(value));\r\n out('\"');\r\n }\r\n });\r\n out('>');\r\n }\r\n },\r\n end: function(tag) {\r\n tag = lowercase(tag);\r\n if (!ignoreCurrentElement && validElements[tag] === true && voidElements[tag] !== true) {\r\n out('');\r\n }\r\n // eslint-disable-next-line eqeqeq\r\n if (tag == ignoreCurrentElement) {\r\n ignoreCurrentElement = false;\r\n }\r\n },\r\n chars: function(chars) {\r\n if (!ignoreCurrentElement) {\r\n out(encodeEntities(chars));\r\n }\r\n }\r\n };\r\n }\r\n\r\n\r\n /**\r\n * When IE9-11 comes across an unknown namespaced attribute e.g. 'xlink:foo' it adds 'xmlns:ns1' attribute to declare\r\n * ns1 namespace and prefixes the attribute with 'ns1' (e.g. 'ns1:xlink:foo'). This is undesirable since we don't want\r\n * to allow any of these custom attributes. This method strips them all.\r\n *\r\n * @param node Root element to process\r\n */\r\n function stripCustomNsAttrs(node) {\r\n while (node) {\r\n if (node.nodeType === window.Node.ELEMENT_NODE) {\r\n var attrs = node.attributes;\r\n for (var i = 0, l = attrs.length; i < l; i++) {\r\n var attrNode = attrs[i];\r\n var attrName = attrNode.name.toLowerCase();\r\n if (attrName === 'xmlns:ns1' || attrName.lastIndexOf('ns1:', 0) === 0) {\r\n node.removeAttributeNode(attrNode);\r\n i--;\r\n l--;\r\n }\r\n }\r\n }\r\n\r\n var nextNode = node.firstChild;\r\n if (nextNode) {\r\n stripCustomNsAttrs(nextNode);\r\n }\r\n\r\n node = getNonDescendant('nextSibling', node);\r\n }\r\n }\r\n\r\n function getNonDescendant(propName, node) {\r\n // An element is clobbered if its `propName` property points to one of its descendants\r\n var nextNode = node[propName];\r\n if (nextNode && nodeContains.call(node, nextNode)) {\r\n throw $sanitizeMinErr('elclob', 'Failed to sanitize html because the element is clobbered: {0}', node.outerHTML || node.outerText);\r\n }\r\n return nextNode;\r\n }\r\n}\r\n\r\nfunction sanitizeText(chars) {\r\n var buf = [];\r\n var writer = htmlSanitizeWriter(buf, noop);\r\n writer.chars(chars);\r\n return buf.join('');\r\n}\r\n\r\n\r\n// define ngSanitize module and register $sanitize service\r\nangular.module('ngSanitize', [])\r\n .provider('$sanitize', $SanitizeProvider)\r\n .info({ angularVersion: '1.7.5' });\r\n\r\n/**\r\n * @ngdoc filter\r\n * @name linky\r\n * @kind function\r\n *\r\n * @description\r\n * Finds links in text input and turns them into html links. Supports `http/https/ftp/sftp/mailto` and\r\n * plain email address links.\r\n *\r\n * Requires the {@link ngSanitize `ngSanitize`} module to be installed.\r\n *\r\n * @param {string} text Input text.\r\n * @param {string} [target] Window (`_blank|_self|_parent|_top`) or named frame to open links in.\r\n * @param {object|function(url)} [attributes] Add custom attributes to the link element.\r\n *\r\n * Can be one of:\r\n *\r\n * - `object`: A map of attributes\r\n * - `function`: Takes the url as a parameter and returns a map of attributes\r\n *\r\n * If the map of attributes contains a value for `target`, it overrides the value of\r\n * the target parameter.\r\n *\r\n *\r\n * @returns {string} Html-linkified and {@link $sanitize sanitized} text.\r\n *\r\n * @usage\r\n \r\n *\r\n * @example\r\n \r\n \r\n

\r\n Snippet: \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
FilterSourceRendered
linky filter\r\n
<div ng-bind-html=\"snippet | linky\">
</div>
\r\n
\r\n
\r\n
linky target\r\n
<div ng-bind-html=\"snippetWithSingleURL | linky:'_blank'\">
</div>
\r\n
\r\n
\r\n
linky custom attributes\r\n
<div ng-bind-html=\"snippetWithSingleURL | linky:'_self':{rel: 'nofollow'}\">
</div>
\r\n
\r\n
\r\n
no filter
<div ng-bind=\"snippet\">
</div>
\r\n \r\n \r\n angular.module('linkyExample', ['ngSanitize'])\r\n .controller('ExampleController', ['$scope', function($scope) {\r\n $scope.snippet =\r\n 'Pretty text with some links:\\n' +\r\n 'http://angularjs.org/,\\n' +\r\n 'mailto:us@somewhere.org,\\n' +\r\n 'another@somewhere.org,\\n' +\r\n 'and one more: ftp://127.0.0.1/.';\r\n $scope.snippetWithSingleURL = 'http://angularjs.org/';\r\n }]);\r\n \r\n \r\n it('should linkify the snippet with urls', function() {\r\n expect(element(by.id('linky-filter')).element(by.binding('snippet | linky')).getText()).\r\n toBe('Pretty text with some links: http://angularjs.org/, us@somewhere.org, ' +\r\n 'another@somewhere.org, and one more: ftp://127.0.0.1/.');\r\n expect(element.all(by.css('#linky-filter a')).count()).toEqual(4);\r\n });\r\n\r\n it('should not linkify snippet without the linky filter', function() {\r\n expect(element(by.id('escaped-html')).element(by.binding('snippet')).getText()).\r\n toBe('Pretty text with some links: http://angularjs.org/, mailto:us@somewhere.org, ' +\r\n 'another@somewhere.org, and one more: ftp://127.0.0.1/.');\r\n expect(element.all(by.css('#escaped-html a')).count()).toEqual(0);\r\n });\r\n\r\n it('should update', function() {\r\n element(by.model('snippet')).clear();\r\n element(by.model('snippet')).sendKeys('new http://link.');\r\n expect(element(by.id('linky-filter')).element(by.binding('snippet | linky')).getText()).\r\n toBe('new http://link.');\r\n expect(element.all(by.css('#linky-filter a')).count()).toEqual(1);\r\n expect(element(by.id('escaped-html')).element(by.binding('snippet')).getText())\r\n .toBe('new http://link.');\r\n });\r\n\r\n it('should work with the target property', function() {\r\n expect(element(by.id('linky-target')).\r\n element(by.binding(\"snippetWithSingleURL | linky:'_blank'\")).getText()).\r\n toBe('http://angularjs.org/');\r\n expect(element(by.css('#linky-target a')).getAttribute('target')).toEqual('_blank');\r\n });\r\n\r\n it('should optionally add custom attributes', function() {\r\n expect(element(by.id('linky-custom-attributes')).\r\n element(by.binding(\"snippetWithSingleURL | linky:'_self':{rel: 'nofollow'}\")).getText()).\r\n toBe('http://angularjs.org/');\r\n expect(element(by.css('#linky-custom-attributes a')).getAttribute('rel')).toEqual('nofollow');\r\n });\r\n \r\n \r\n */\r\nangular.module('ngSanitize').filter('linky', ['$sanitize', function($sanitize) {\r\n var LINKY_URL_REGEXP =\r\n /((s?ftp|https?):\\/\\/|(www\\.)|(mailto:)?[A-Za-z0-9._%+-]+@)\\S*[^\\s.;,(){}<>\"\\u201d\\u2019]/i,\r\n MAILTO_REGEXP = /^mailto:/i;\r\n\r\n var linkyMinErr = angular.$$minErr('linky');\r\n var isDefined = angular.isDefined;\r\n var isFunction = angular.isFunction;\r\n var isObject = angular.isObject;\r\n var isString = angular.isString;\r\n\r\n return function(text, target, attributes) {\r\n if (text == null || text === '') return text;\r\n if (!isString(text)) throw linkyMinErr('notstring', 'Expected string but received: {0}', text);\r\n\r\n var attributesFn =\r\n isFunction(attributes) ? attributes :\r\n isObject(attributes) ? function getAttributesObject() {return attributes;} :\r\n function getEmptyAttributesObject() {return {};};\r\n\r\n var match;\r\n var raw = text;\r\n var html = [];\r\n var url;\r\n var i;\r\n while ((match = raw.match(LINKY_URL_REGEXP))) {\r\n // We can not end in these as they are sometimes found at the end of the sentence\r\n url = match[0];\r\n // if we did not match ftp/http/www/mailto then assume mailto\r\n if (!match[2] && !match[4]) {\r\n url = (match[3] ? 'http://' : 'mailto:') + url;\r\n }\r\n i = match.index;\r\n addText(raw.substr(0, i));\r\n addLink(url, match[0].replace(MAILTO_REGEXP, ''));\r\n raw = raw.substring(i + match[0].length);\r\n }\r\n addText(raw);\r\n return $sanitize(html.join(''));\r\n\r\n function addText(text) {\r\n if (!text) {\r\n return;\r\n }\r\n html.push(sanitizeText(text));\r\n }\r\n\r\n function addLink(url, text) {\r\n var key, linkAttributes = attributesFn(url);\r\n html.push('');\r\n addText(text);\r\n html.push('');\r\n }\r\n };\r\n}]);\r\n\r\n\r\n})(window, window.angular);\r\n","/*\r\n * Bootstrap Validation\r\n * Version 1.0.7\r\n * Modified from .\r\n **/\r\n\r\n'use strict';\r\n\r\nangular.module('bootstrap.angular.validation', []);\r\n","'use strict';\r\n\r\nangular.module('bootstrap.angular.validation').provider('bsValidationConfig', function () {\r\n\r\n // Can be a string or list of any combination of \"blur\", \"submit\" & \"display\"\r\n var validateFieldsOn = 'blur';\r\n // Display the validation error message below the `input` field with class \"help-block\"\r\n var displayErrorsAs = 'simple';\r\n\r\n // Can be a string or list of any combination of filters; will be applied in order\r\n // For example: 'lowercase' or ['lowercase', 'reverse'] (So long as the filter(s) exists)\r\n var messageFilters = [];\r\n\r\n function shouldValidateOn(event) {\r\n if (angular.isString(validateFieldsOn)) {\r\n return validateFieldsOn === event;\r\n }\r\n\r\n return validateFieldsOn.indexOf(event) !== -1;\r\n }\r\n\r\n var _this = this;\r\n this.global = {};\r\n this.global.addSuccessClass = true;\r\n this.global.errorClass = 'has-error';\r\n this.global.successClass = 'has-success';\r\n this.global.errorMessagePrefix = '';\r\n this.global.tooltipPlacement = 'bottom-left';\r\n this.global.tooltipAppendToBody = false;\r\n this.global.suppressWarnings = false;\r\n\r\n this.global.messages = {};\r\n\r\n this.setMessages = function(data) {\r\n _this.global.messages = data;\r\n };\r\n\r\n this.global.setValidateFieldsOn = function (event) {\r\n if (!event) {\r\n throw 'Please provide an string or list of events to validate fields on';\r\n }\r\n\r\n if (!angular.isString(event) && !angular.isArray(event)) {\r\n throw 'Event should either be a string or a list';\r\n }\r\n\r\n validateFieldsOn = event;\r\n };\r\n\r\n this.global.setDisplayErrorsAs = function (type) {\r\n if (!type) {\r\n throw 'Please provide the way validation error should be displayed. In-built options are \"simple\" & \"tooltip\".';\r\n }\r\n\r\n displayErrorsAs = type;\r\n };\r\n\r\n this.global.useMessageFilters = function (filters) {\r\n if (!filters) {\r\n throw 'Please provide a string or list of filters to apply to messages';\r\n }\r\n\r\n if (!angular.isString(filters) && !angular.isArray(filters)) {\r\n throw 'Filters should either be a string or a list';\r\n }\r\n\r\n messageFilters = filters;\r\n\r\n if (!angular.isArray(messageFilters)) {\r\n messageFilters = [messageFilters];\r\n }\r\n };\r\n\r\n this.$get = [function () {\r\n return {\r\n messages: function (key) {\r\n return _this.global.messages[key];\r\n },\r\n errorClass: _this.global.errorClass,\r\n successClass: _this.global.successClass,\r\n suppressWarnings: _this.global.suppressWarnings,\r\n tooltipAppendToBody: _this.global.tooltipAppendToBody,\r\n\r\n getDisplayErrorsAs: function () {\r\n return displayErrorsAs;\r\n },\r\n\r\n getErrorMessagePrefix: function () {\r\n return _this.global.errorMessagePrefix || '';\r\n },\r\n\r\n getMessageFilters: function () {\r\n return messageFilters;\r\n },\r\n\r\n getTooltipPlacement: function () {\r\n return _this.global.tooltipPlacement;\r\n },\r\n\r\n shouldAddSuccessClass: function () {\r\n return _this.global.addSuccessClass;\r\n },\r\n\r\n shouldValidateOn: shouldValidateOn,\r\n\r\n setMessages: function (data) {\r\n return _this.setMessages(data);\r\n }\r\n };\r\n }];\r\n});\r\n","'use strict';\r\n\r\n/**\r\n * @ngdoc directive\r\n * @name form\r\n * @description Using \"form\" element as directive so we don't require to put the \"bs-validation\" directive to every form\r\n * element.\r\n */\r\nangular.module('bootstrap.angular.validation').directive('form', [\r\n '$parse', 'BsValidationService', function ($parse, validationService) {\r\n return {\r\n restrict: 'E',\r\n require: 'form',\r\n priority: 1000, // Setting a higher priority so that this directive compiles first.\r\n compile: function ($formElement, $formAttributes) {\r\n if (validationService.isValidationDisabled($formElement)) {\r\n return;\r\n }\r\n\r\n // Disable HTML5 validation display\r\n $formElement.attr('novalidate', 'novalidate');\r\n validationService.addDirective($formElement);\r\n\r\n var ngSubmit = $formAttributes.ngSubmit;\r\n /*\r\n * Removing ngSubmit attribute if any since ngSubmit by default doesn't respects the validation errors\r\n * on the input fields.\r\n */\r\n delete $formAttributes.ngSubmit;\r\n\r\n var preLinkFunction = function ($scope, formElement, $attr, formController) {\r\n // Expose a method to manually show the validation state\r\n formController.$showValidation = function () {\r\n formController.$setSubmitted();\r\n // Tell form elements to show validation state\r\n $scope.$broadcast('onBsValidationStateChange', {showValidationState: true});\r\n };\r\n\r\n formController.$hideValidation = function () {\r\n formController.$setPristine();\r\n // Tell form elements to hide validation state\r\n $scope.$broadcast('onBsValidationStateChange', {showValidationState: false});\r\n };\r\n formController.$resetValidation = function () {\r\n $scope.$broadcast('onBsValidationReset');\r\n };\r\n\r\n\r\n var markPristineAfterSubmit = formElement[0].attributes.hasOwnProperty('bs-pristine-on-submit');\r\n\r\n formElement.on('submit', function (event) {\r\n // If any of the form element has not passed the validation\r\n if (formController.$invalid) {\r\n // Then focus the first invalid element\r\n formElement[0].querySelector('.ng-invalid[ng-model]').focus();\r\n return false;\r\n }\r\n\r\n // Parse the handler of ng-submit & execute it\r\n var submitHandler = $parse(ngSubmit);\r\n $scope.$apply(function () {\r\n submitHandler($scope, {$event: event});\r\n\r\n formController.$commitViewValue();\r\n formController.$setSubmitted();\r\n\r\n if (markPristineAfterSubmit) {\r\n formController.$hideValidation();\r\n }\r\n });\r\n\r\n if (markPristineAfterSubmit) {\r\n /**\r\n * Prevent other submit event listener registered via Angular so that we can mark the form with\r\n * the pristine state. Otherwise, that Angular's listener is getting called at the last and is again\r\n * setting form to the submitted.\r\n *\r\n * https://api.jquery.com/event.stopimmediatepropagation/\r\n */\r\n event.stopImmediatePropagation();\r\n event.preventDefault();\r\n }\r\n\r\n return true;\r\n });\r\n };\r\n\r\n return {\r\n pre: preLinkFunction\r\n };\r\n }\r\n };\r\n }]);\r\n","/* global angular */\r\n\r\n'use strict';\r\n\r\n/**\r\n * @ngdoc directive\r\n * @name bsValidation\r\n * @requires BsValidationService\r\n */\r\nangular.module('bootstrap.angular.validation').directive('bsValidation', [\r\n 'BsValidationService', 'bsValidationConfig',\r\n function (validationService, bsValidationConfig) {\r\n return {\r\n restrict: 'A',\r\n require: ['?ngModel', '?^^form'],\r\n link: function ($scope, $element, $attr, controllers) {\r\n if (validationService.isValidationDisabled($element)) {\r\n return;\r\n }\r\n\r\n // Initialize controllers\r\n var ngModelController = controllers[0];\r\n var ngFormController = controllers[1];\r\n\r\n if (!ngModelController) {\r\n if (!bsValidationConfig.suppressWarnings) {\r\n console.warn('ng-model directive is required for the bs-validation directive to work.');\r\n }\r\n return;\r\n }\r\n\r\n var $formGroupElement = validationService.getFormGroupElement($element);\r\n if (!$formGroupElement) {\r\n if (!bsValidationConfig.suppressWarnings) {\r\n console.warn('No parent form group element found for input element');\r\n }\r\n return;\r\n }\r\n\r\n var displayValidationState = false;\r\n var shouldValidateOnBlur = validationService.shouldValidateOnBlur($element);\r\n var shouldValidateOnDisplay = validationService.shouldValidateOnDisplay($element);\r\n var shouldValidateOnSubmit = validationService.shouldValidateOnSubmit($element);\r\n\r\n var displayErrorAs = validationService.displayErrorPreference($element, $attr);\r\n var validationMessageService = validationService.getValidationMessageService(displayErrorAs);\r\n\r\n // Register generic custom validators if added to element\r\n angular.forEach(validationService.getValidators(), function (validator) {\r\n var key = validator.name;\r\n var attrValue = $element.attr(key);\r\n if ($attr[key] || (angular.isDefined(attrValue) && attrValue !== false)) {\r\n validationService.addValidator($scope, $element, $attr, ngModelController, validator);\r\n }\r\n });\r\n\r\n function addErrorClass() {\r\n validationService.addErrorClass($formGroupElement);\r\n }\r\n\r\n function removeSuccessClass() {\r\n validationService.removeSuccessClass($formGroupElement);\r\n }\r\n\r\n function displayError() {\r\n addErrorClass();\r\n validationMessageService.showErrorMessage($element, $attr, ngModelController, $formGroupElement);\r\n\r\n if($element.hasClass('show-and-hide')){ \r\n setTimeout(function () {\r\n $element.blur();\r\n hideSuccess();\r\n hideError();\r\n ngModelController.$setUntouched();\r\n ngModelController.$setPristine();\r\n watchBlur();\r\n },3000); \r\n }\r\n }\r\n\r\n function hideError() {\r\n validationMessageService.hideErrorMessage($element, $formGroupElement);\r\n }\r\n\r\n function addSuccessClass() {\r\n if (ngModelController.$$attr.required) {\r\n validationService.addSuccessClass($formGroupElement);\r\n }\r\n return hideError();\r\n }\r\n\r\n function displaySuccess() {\r\n addSuccessClass();\r\n }\r\n\r\n function hideSuccess() {\r\n removeSuccessClass();\r\n }\r\n\r\n function displayOrHideValidationState() {\r\n if (!ngModelController.$$attr.required && !ngModelController.$$attr.pattern) return;\r\n\r\n validationService.toggleErrorKeyClasses($formGroupElement, ngModelController.$error);\r\n\r\n if (!displayValidationState) {\r\n hideSuccess();\r\n return hideError();\r\n }\r\n\r\n if (ngModelController.$valid) {\r\n return displaySuccess();\r\n }\r\n if (ngModelController.$invalid) {\r\n return displayError();\r\n }\r\n }\r\n\r\n function showValidation() {\r\n displayValidationState = true;\r\n displayOrHideValidationState();\r\n }\r\n\r\n function hideValidation() {\r\n displayValidationState = false;\r\n displayOrHideValidationState();\r\n }\r\n\r\n function watchBlur() {\r\n var dewatcher = $scope.$watch(function () {\r\n return ngModelController.$touched;\r\n }, function (lostFocus) {\r\n if (lostFocus) {\r\n displayValidationState = true;\r\n displayOrHideValidationState();\r\n dewatcher();\r\n }\r\n });\r\n }\r\n\r\n if (shouldValidateOnBlur) {\r\n watchBlur();\r\n }\r\n\r\n if (shouldValidateOnSubmit && ngFormController) {\r\n // register watchers for submission touch and valid\r\n $scope.$watch(function () {\r\n return ngFormController.$submitted;\r\n }, function (submitted) {\r\n displayValidationState = submitted;\r\n displayOrHideValidationState();\r\n });\r\n }\r\n\r\n if (shouldValidateOnDisplay) {\r\n showValidation();\r\n }\r\n\r\n // TODO Find alternative for this watch\r\n /*$scope.$watch(function () {\r\n return ngModelController.$error;\r\n }, displayOrHideValidationState, true);*/\r\n\r\n $scope.$watch(function () {\r\n return ngModelController.$valid;\r\n }, displayOrHideValidationState, true);\r\n\r\n $scope.$watch(function () {\r\n return ngModelController.$$attr.required;\r\n }, function () {\r\n hideSuccess();\r\n hideError();\r\n displayOrHideValidationState();\r\n }, true);\r\n\r\n $scope.$on('onBsValidationStateChange', function (event, data) {\r\n displayValidationState = data.showValidationState;\r\n displayOrHideValidationState();\r\n });\r\n\r\n $scope.$on('onBsValidationReset', function (event) {\r\n $element.blur();\r\n hideSuccess();\r\n hideError();\r\n ngModelController.$setUntouched();\r\n ngModelController.$setPristine();\r\n watchBlur();\r\n });\r\n\r\n\r\n $scope.$on('$destroy', function () {\r\n validationMessageService.destroyMessage($element);\r\n });\r\n\r\n ngModelController.$showValidation = showValidation;\r\n ngModelController.$hideValidation = hideValidation;\r\n }\r\n };\r\n }\r\n]);\r\n","'use strict';\r\n\r\nangular.module('bootstrap.angular.validation').factory('simpleMessageService', ['BsValidationService', function (validationService) {\r\n\r\n var errorElementClass = '.bs-invalid-msg';\r\n\r\n function getErrorContainer($element, $formGroupElement) {\r\n var $errorContainer;\r\n\r\n // If input element has \"id\" attribute\r\n if ($element.attr('id')) {\r\n // Then first try to find the error container with the same id prefixed with \"bs-error-\"\r\n $errorContainer = $formGroupElement.find('#bs-error-' + $element.attr('id'));\r\n if ($errorContainer && $errorContainer.length) {\r\n return $errorContainer;\r\n }\r\n }\r\n\r\n $errorContainer = $formGroupElement.find(errorElementClass);\r\n if ($errorContainer && $errorContainer.length) {\r\n return $errorContainer;\r\n }\r\n\r\n var insertAfter;\r\n\r\n // Check if the container have any Bootstrap input group then append the error after it\r\n var groupElement = $formGroupElement.find('.input-group');\r\n if (groupElement.length > 0) {\r\n insertAfter = groupElement;\r\n } else {\r\n insertAfter = $element;\r\n }\r\n\r\n var errorContainerHTML = '
');\r\n}]);\r\n","'use strict';\r\n\r\n/**\r\n * @ngcode service\r\n * @name BsValidationService\r\n * @description Core service of this module to provide various default validations.\r\n */\r\nangular.module('bootstrap.angular.validation').factory('BsValidationService', ['$interpolate', 'bsValidationConfig',\r\n '$injector', '$filter',\r\n function ($interpolate, validationConfig, $injector, $filter) {\r\n\r\n var displayErrorAsAttrName = 'bsDisplayErrorAs';\r\n var customFormGroup = '[bs-form-group]';\r\n var formGroupClass = '.form-group';\r\n\r\n var _genericValidators = [{\r\n name: 'digits',\r\n validateFn: function (value) {\r\n return (/^\\d+$/).test(value);\r\n }\r\n }, {\r\n name: 'equalto',\r\n validateFn: function (value, $scope, attr) {\r\n return value + '' === $scope.$eval(attr.equalto) + '';\r\n }\r\n }, {\r\n name: 'number',\r\n validateFn: function (value) {\r\n return (/^-?(?:\\d+|\\d{1,3}(?:,\\d{3})+)?(?:\\.\\d+)?$/).test(value);\r\n }\r\n }, {\r\n name: 'min',\r\n validateFn: function (value, $scope, attr) {\r\n return parseFloat(value) >= parseFloat(attr.min);\r\n }\r\n }, {\r\n name: 'max',\r\n validateFn: function (value, $scope, attr) {\r\n return parseFloat(value) <= parseFloat(attr.max);\r\n }\r\n }, {\r\n name: 'length',\r\n validateFn: function (value, $scope, attr) {\r\n return value.length === parseInt(attr.length);\r\n }\r\n }, {\r\n name: 'strictemail',\r\n validateFn: function (value) {\r\n return new RegExp(/^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{1,63}$/).test(value);\r\n }\r\n }];\r\n\r\n function getTrigger($element, triggerEvent) {\r\n var attributeName = 'bs-trigger';\r\n if ($element.attr(attributeName)) {\r\n return $element.attr(attributeName) === triggerEvent;\r\n }\r\n\r\n var parentForm = $element.parents('form');\r\n if (parentForm && parentForm.attr(attributeName)) {\r\n return parentForm.attr(attributeName) === triggerEvent;\r\n }\r\n\r\n // Use the global config\r\n return validationConfig.shouldValidateOn(triggerEvent);\r\n }\r\n\r\n function removeClassByPrefix(element, prefix) {\r\n var regx = new RegExp('\\\\b' + prefix + '.*\\\\b', 'g');\r\n element[0].className = element[0].className.replace(regx, '').replace(/\\s\\s+/g, ' ');\r\n return element;\r\n }\r\n\r\n var selectors = [];\r\n var elements = ['input', 'select', 'textarea'];\r\n\r\n angular.forEach(elements, function (element) {\r\n selectors.push(element + '[ng-model]');\r\n });\r\n\r\n var selector = selectors.join(',');\r\n var meta = ['matchName'];\r\n\r\n return {\r\n getValidators: function () {\r\n return _genericValidators;\r\n },\r\n\r\n getMetaInformation: function ($element) {\r\n var metaInformation = {};\r\n\r\n angular.forEach(meta, function (key) {\r\n metaInformation[key] = $element.attr(key) || $element.attr(key.camelCaseToDash());\r\n });\r\n\r\n return metaInformation;\r\n },\r\n\r\n addDirective: function ($element) {\r\n var validateableElements = $element.find(selector);\r\n validateableElements.attr('bs-validation', '');\r\n return validateableElements;\r\n },\r\n\r\n addErrorClass: function ($formGroupElement) {\r\n this.removeSuccessClass($formGroupElement);\r\n $formGroupElement.addClass(validationConfig.errorClass);\r\n },\r\n\r\n addSuccessClass: function ($formGroupElement) {\r\n this.removeErrorClass($formGroupElement);\r\n\r\n if (validationConfig.shouldAddSuccessClass()) {\r\n $formGroupElement.addClass(validationConfig.successClass);\r\n }\r\n },\r\n\r\n addValidator: function ($scope, $element, $attr, ngModelController, validator) {\r\n ngModelController.$validators[validator.name] = function (modelValue, viewValue) {\r\n var value = modelValue || viewValue;\r\n if (ngModelController.$isEmpty(value)) {\r\n return true;\r\n }\r\n\r\n // See https://github.com/sagrawal14/angular-extras/blob/v0.1.3/src/extras/array.js#L91 for \"find\" function\r\n return validator.validateFn(value, $scope, $attr);\r\n };\r\n },\r\n\r\n /**\r\n * Add a custom validator to the list of generic validators.\r\n * @param genericValidationObject for example, to a add a generic validator to accept either \"foo\" or \"bar\":\r\n * {\r\n * name: 'foobar',\r\n * validateFn: function(value, $scope, attr) {\r\n * return value === 'foo' || value === 'bar';\r\n * }\r\n * }\r\n */\r\n addGenericValidator: function (genericValidationObject) {\r\n _genericValidators.push(genericValidationObject);\r\n },\r\n\r\n displayErrorPreference: function ($element, $attr) {\r\n var attrName = displayErrorAsAttrName;\r\n if ($attr[attrName]) {\r\n return $attr[attrName];\r\n } else {\r\n var $parentForm = $element.parents('form');\r\n\r\n // .attr() method not accepting camelCase version of the attribute name. Converting it to dashed-case\r\n attrName = attrName.camelCaseToDash();\r\n\r\n if ($parentForm && $parentForm.attr(attrName)) {\r\n return $parentForm.attr(attrName);\r\n }\r\n }\r\n\r\n // Use the global preference\r\n return validationConfig.getDisplayErrorsAs();\r\n },\r\n\r\n getErrorMessage: function ($element, $attr, ngModelController) {\r\n var firstErrorKey = Object.keys(ngModelController.$error)[0];\r\n return validationConfig.getErrorMessagePrefix() + this.resolveMessage($element, $attr, firstErrorKey);\r\n },\r\n\r\n getFormGroupElement: function ($element) {\r\n // First search for an attribute with 'bs-form-group'\r\n var formGroupElement = $element.parents(customFormGroup);\r\n\r\n if (!formGroupElement || formGroupElement.length === 0) {\r\n // Then search for parent element with class form-group\r\n formGroupElement = $element.parents(formGroupClass);\r\n\r\n if (!formGroupElement || formGroupElement.length === 0) {\r\n return null;\r\n }\r\n }\r\n\r\n return formGroupElement;\r\n },\r\n\r\n getValidationMessageService: function (displayType) {\r\n var validationMessageService;\r\n\r\n try {\r\n validationMessageService = $injector.get(displayType + 'MessageService');\r\n } catch (e) {\r\n throw 'No message service found for type [' + displayType + '].';\r\n }\r\n\r\n if (displayType === 'tooltip' && !$injector.has('$uibPosition')) {\r\n throw '$uibPosition service required from the ui-bootstrap module in order to use the tooltip message.';\r\n }\r\n\r\n return validationMessageService;\r\n },\r\n\r\n isValidationDisabled: function ($element) {\r\n var attribute = 'bs-no-validation';\r\n if ($element[0].attributes.hasOwnProperty(attribute)) {\r\n return true;\r\n }\r\n\r\n var $parentForm = $element.parents('form');\r\n return $parentForm[0] && $parentForm[0].attributes.hasOwnProperty(attribute);\r\n },\r\n\r\n removeErrorClass: function ($formGroupElement) {\r\n $formGroupElement.removeClass(validationConfig.errorClass);\r\n },\r\n\r\n removeSuccessClass: function ($formGroupElement) {\r\n $formGroupElement.removeClass(validationConfig.successClass);\r\n },\r\n\r\n resolveMessage: function ($element, $attr, key) {\r\n var metaInformation = this.getMetaInformation($element);\r\n var messageFilters = $element.attr(key + '-notification-filter') || validationConfig.getMessageFilters();\r\n var message = $element.attr(key + '-notification') || validationConfig.messages(key);\r\n\r\n if (!message) {\r\n console.warn('No message found for the key [' + key + ']. Consider adding a global message or element' +\r\n ' specific message using attribute [' + key + '-notification=\"My custom message\"]');\r\n\r\n message = 'Please fix this field';\r\n }\r\n\r\n if (angular.isDefined(messageFilters)) {\r\n if (!angular.isArray(messageFilters)) {\r\n messageFilters = [messageFilters];\r\n }\r\n\r\n for (var i = 0; i < messageFilters.length; i++) {\r\n message = $filter(messageFilters[i])(message);\r\n }\r\n }\r\n\r\n var matchers = angular.extend({}, {\r\n validValue: $attr[key]\r\n }, metaInformation);\r\n return $interpolate(message)(matchers);\r\n },\r\n\r\n shouldValidateOnBlur: function ($element) {\r\n return getTrigger($element, 'blur');\r\n },\r\n\r\n shouldValidateOnDisplay: function ($element) {\r\n return getTrigger($element, 'display');\r\n },\r\n\r\n shouldValidateOnSubmit: function ($element) {\r\n return getTrigger($element, 'submit');\r\n },\r\n\r\n /**\r\n * Add or remove various classes on form-group element. For example, if an input has two errors \"required\" & \"min\"\r\n * then whenever the validation fails, form-group element will have classes like \"bs-has-error-required\" or\r\n * \"bs-has-error-min\".\r\n * @param $formGroupElement jQLite/jQuery form-group element\r\n * @param errors Errors object as returned by ngModelController.$error\r\n */\r\n toggleErrorKeyClasses: function ($formGroupElement, errors) {\r\n removeClassByPrefix($formGroupElement, 'bs-has-error-');\r\n\r\n angular.forEach(errors, function (value, key) {\r\n $formGroupElement.addClass('bs-has-error-' + key);\r\n });\r\n }\r\n\r\n };\r\n }\r\n]);","/* global document, window */\r\n\r\n'use strict';\r\n\r\nif (!String.prototype.camelCaseToDash) {\r\n String.prototype.camelCaseToDash = function () {\r\n return this.replace(/([A-Z])/g, function ($1) {\r\n return '-' + $1.toLowerCase();\r\n });\r\n };\r\n}\r\n","/* https://github.com/sroze/ngInfiniteScroll/ */\r\n\r\n(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('infinite-scroll', [])\r\n\r\n .value('THROTTLE_MILLISECONDS', 250)\r\n\r\n /* @ngInject */\r\n .directive('infiniteScroll', [\"$rootScope\", \"$window\", \"$interval\", \"THROTTLE_MILLISECONDS\", function ($rootScope, $window, $interval, THROTTLE_MILLISECONDS) {\r\n var directive = {\r\n link: link,\r\n restrict: 'A',\r\n scope: {\r\n infiniteScroll: '&',\r\n infiniteScrollContainer: '=',\r\n infiniteScrollDistance: '=',\r\n infiniteScrollDisabled: '=',\r\n infiniteScrollUseDocumentBottom: '=',\r\n infiniteScrollListenForEvent: '@'\r\n }\r\n };\r\n return directive;\r\n\r\n function link(scope, elem, attrs) {\r\n var windowElement = angular.element($window);\r\n\r\n var scrollDistance = null;\r\n var scrollEnabled = null;\r\n var checkWhenEnabled = null;\r\n var container = null;\r\n var immediateCheck = true;\r\n var useDocumentBottom = false;\r\n var unregisterEventListener = null;\r\n var checkInterval = false;\r\n var watcher = null;\r\n\r\n function height(element) {\r\n var el = element[0] || element;\r\n\r\n if (isNaN(el.offsetHeight)) {\r\n return el.document.documentElement.clientHeight;\r\n }\r\n return el.offsetHeight;\r\n }\r\n\r\n function pageYOffset(element) {\r\n var el = element[0] || element;\r\n\r\n if (isNaN(window.pageYOffset)) {\r\n return el.document.documentElement.scrollTop;\r\n }\r\n return el.ownerDocument.defaultView.pageYOffset;\r\n }\r\n\r\n function offsetTop(element) {\r\n if (!(!element[0].getBoundingClientRect || element.css('none'))) {\r\n return element[0].getBoundingClientRect().top + pageYOffset(element);\r\n }\r\n return undefined;\r\n }\r\n\r\n // infinite-scroll specifies a function to call when the window,\r\n // or some other container specified by infinite-scroll-container,\r\n // is scrolled within a certain range from the bottom of the\r\n // document. It is recommended to use infinite-scroll-disabled\r\n // with a boolean that is set to true when the function is\r\n // called in order to throttle the function call.\r\n function defaultHandler() {\r\n var containerBottom;\r\n var elementBottom;\r\n if (container === windowElement) {\r\n containerBottom = height(container) + pageYOffset(container[0].document.documentElement);\r\n elementBottom = offsetTop(elem) + height(elem);\r\n } else {\r\n containerBottom = height(container);\r\n var containerTopOffset = 0;\r\n if (offsetTop(container) !== undefined) {\r\n containerTopOffset = offsetTop(container);\r\n }\r\n elementBottom = offsetTop(elem) - containerTopOffset + height(elem);\r\n }\r\n\r\n if (useDocumentBottom) {\r\n elementBottom = height((elem[0].ownerDocument || elem[0].document).documentElement);\r\n }\r\n\r\n var remaining = elementBottom - containerBottom;\r\n var shouldScroll = remaining <= height(container) * scrollDistance + 1;\r\n if (shouldScroll) {\r\n checkWhenEnabled = true;\r\n if (scrollEnabled) {\r\n if (scope.$$phase || $rootScope.$$phase) {\r\n scope.infiniteScroll();\r\n } else {\r\n scope.$apply(scope.infiniteScroll);\r\n }\r\n }\r\n } else {\r\n if (checkInterval) { $interval.cancel(checkInterval); }\r\n checkWhenEnabled = false;\r\n }\r\n }\r\n\r\n // The optional THROTTLE_MILLISECONDS configuration value specifies\r\n // a minimum time that should elapse between each call to the\r\n // handler. N.b. the first call the handler will be run\r\n // immediately, and the final call will always result in the\r\n // handler being called after the `wait` period elapses.\r\n // A slimmed down version of underscore's implementation.\r\n function throttle(func, wait) {\r\n var timeout = null;\r\n var previous = 0;\r\n\r\n function later() {\r\n previous = new Date().getTime();\r\n $interval.cancel(timeout);\r\n timeout = null;\r\n return func.call();\r\n }\r\n\r\n function throttled() {\r\n var now = new Date().getTime();\r\n var remaining = wait - (now - previous);\r\n if (remaining <= 0) {\r\n $interval.cancel(timeout);\r\n timeout = null;\r\n previous = now;\r\n func.call();\r\n } else if (!timeout) {\r\n timeout = $interval(later, remaining, 1);\r\n }\r\n }\r\n\r\n return throttled;\r\n }\r\n\r\n var handler = (THROTTLE_MILLISECONDS !== null) ? throttle(defaultHandler, THROTTLE_MILLISECONDS) : defaultHandler;\r\n\r\n function handleDestroy() {\r\n container.off('scroll', handler);\r\n if (container !== null && watcher !== null) {\r\n watcher();\r\n }\r\n if (unregisterEventListener !== null) {\r\n unregisterEventListener();\r\n unregisterEventListener = null;\r\n }\r\n if (checkInterval) {\r\n $interval.cancel(checkInterval);\r\n }\r\n }\r\n\r\n scope.$on('$destroy', handleDestroy);\r\n\r\n // infinite-scroll-distance specifies how close to the bottom of the page\r\n // the window is allowed to be before we trigger a new scroll. The value\r\n // provided is multiplied by the container height; for example, to load\r\n // more when the bottom of the page is less than 3 container heights away,\r\n // specify a value of 3. Defaults to 0.\r\n function handleInfiniteScrollDistance(v) {\r\n scrollDistance = parseFloat(v) || 0;\r\n }\r\n\r\n scope.$watch('infiniteScrollDistance', handleInfiniteScrollDistance);\r\n // If I don't explicitly call the handler here, tests fail. Don't know why yet.\r\n handleInfiniteScrollDistance(scope.infiniteScrollDistance);\r\n\r\n // infinite-scroll-disabled specifies a boolean that will keep the\r\n // infnite scroll function from being called; this is useful for\r\n // debouncing or throttling the function call. If an infinite\r\n // scroll is triggered but this value evaluates to true, then\r\n // once it switches back to false the infinite scroll function\r\n // will be triggered again.\r\n function handleInfiniteScrollDisabled(v) {\r\n scrollEnabled = !v;\r\n if (scrollEnabled && checkWhenEnabled) {\r\n checkWhenEnabled = false;\r\n handler();\r\n }\r\n }\r\n\r\n scope.$watch('infiniteScrollDisabled', handleInfiniteScrollDisabled);\r\n // If I don't explicitly call the handler here, tests fail. Don't know why yet.\r\n handleInfiniteScrollDisabled(scope.infiniteScrollDisabled);\r\n\r\n // use the bottom of the document instead of the element's bottom.\r\n // This useful when the element does not have a height due to its\r\n // children being absolute positioned.\r\n function handleInfiniteScrollUseDocumentBottom(v) {\r\n useDocumentBottom = v;\r\n }\r\n\r\n scope.$watch('infiniteScrollUseDocumentBottom', handleInfiniteScrollUseDocumentBottom);\r\n handleInfiniteScrollUseDocumentBottom(scope.infiniteScrollUseDocumentBottom);\r\n\r\n // infinite-scroll-container sets the container which we want to be\r\n // infinte scrolled, instead of the whole window. Must be an\r\n // Angular or jQuery element, or, if jQuery is loaded,\r\n // a jQuery selector as a string.\r\n function changeContainer(newContainer) {\r\n if (container != null) {\r\n container.off('scroll', handler);\r\n }\r\n\r\n container = newContainer;\r\n if (newContainer != null) {\r\n container.on('scroll', handler);\r\n }\r\n }\r\n\r\n changeContainer(windowElement);\r\n\r\n if (scope.infiniteScrollListenForEvent) {\r\n unregisterEventListener = $rootScope.$on(scope.infiniteScrollListenForEvent, handler);\r\n }\r\n\r\n function handleInfiniteScrollContainer(newContainer) {\r\n // TODO: For some reason newContainer is sometimes null instead\r\n // of the empty array, which Angular is supposed to pass when the\r\n // element is not defined\r\n // (https://github.com/sroze/ngInfiniteScroll/pull/7#commitcomment-5748431).\r\n // So I leave both checks.\r\n if ((!(newContainer != null)) || newContainer.length === 0) {\r\n return;\r\n }\r\n\r\n var newerContainer;\r\n\r\n if (newContainer.nodeType && newContainer.nodeType === 1) {\r\n newerContainer = angular.element(newContainer);\r\n } else if (typeof newContainer.append === 'function') {\r\n newerContainer = angular.element(newContainer[newContainer.length - 1]);\r\n } else if (typeof newContainer === 'string') {\r\n newerContainer = angular.element(document.querySelector(newContainer));\r\n } else {\r\n newerContainer = newContainer;\r\n }\r\n\r\n if (newerContainer == null) {\r\n throw new Error('invalid infinite-scroll-container attribute.');\r\n }\r\n changeContainer(newerContainer);\r\n }\r\n\r\n scope.$watch('infiniteScrollContainer', handleInfiniteScrollContainer);\r\n handleInfiniteScrollContainer(scope.infiniteScrollContainer || []);\r\n\r\n // infinite-scroll-parent establishes this element's parent as the\r\n // container infinitely scrolled instead of the whole window.\r\n if (attrs.infiniteScrollParent != null) {\r\n changeContainer(angular.element(elem.parent()));\r\n }\r\n\r\n // infinte-scoll-immediate-check sets whether or not run the\r\n // expression passed on infinite-scroll for the first time when the\r\n // directive first loads, before any actual scroll.\r\n if (attrs.infiniteScrollImmediateCheck != null) {\r\n immediateCheck = scope.$eval(attrs.infiniteScrollImmediateCheck);\r\n }\r\n\r\n function intervalCheck() {\r\n if (immediateCheck) {\r\n handler();\r\n }\r\n return $interval.cancel(checkInterval);\r\n }\r\n\r\n checkInterval = $interval(intervalCheck);\r\n return checkInterval;\r\n }\r\n }]);\r\n})();\r\n","/*\r\n*\r\n* Version : 1.0.0\r\n* 04/09/2016 - 10h18\r\n*\r\n*! Octave Web7 !*/\r\n\r\n/*\r\n * angular-lazy-load\r\n *\r\n * Copyright(c) 2014 Paweł Wszoła \r\n * MIT Licensed\r\n * @author Paweł Wszoła (wszola.p@gmail.com)\r\n * https://github.com/Pentiado/angular-lazy-img\r\n */\r\n\r\nangular\r\n .module('module.lazy-img', [])\r\n\r\n /* @ngInject */\r\n .factory('LazyImgMagic', [\"$window\", \"$rootScope\", \"lazyImgConfig\", \"lazyImgHelpers\", function ($window, $rootScope, lazyImgConfig, lazyImgHelpers) {\r\n 'use strict';\r\n\r\n var winDimensions, $win, images, isListening, options;\r\n var checkImagesT, saveWinOffsetT, containers;\r\n\r\n images = [];\r\n isListening = false;\r\n options = lazyImgConfig.getOptions();\r\n $win = angular.element($window);\r\n winDimensions = lazyImgHelpers.getWinDimensions();\r\n saveWinOffsetT = lazyImgHelpers.throttle(function () {\r\n winDimensions = lazyImgHelpers.getWinDimensions();\r\n }, 60);\r\n containers = [options.container || $win];\r\n\r\n function checkImages() {\r\n for (var i = images.length - 1; i >= 0; i--) {\r\n var image = images[i];\r\n\r\n if (image) {\r\n var _isInView = !image.$elem.is(':visible') ? false : lazyImgHelpers.isElementInView(image.$elem[0], options.offset, winDimensions);\r\n if(_isInView){\r\n loadImage(image);\r\n if (!image.inViewFunction) {\r\n images.splice(i, 1);\r\n }\r\n }\r\n if (typeof image.inViewFunction !== 'undefined') {\r\n options.inViewFunction(image, _isInView);\r\n }\r\n }\r\n }\r\n if (images.length === 0) stopListening();\r\n }\r\n\r\n checkImagesT = lazyImgHelpers.throttle(checkImages, 30);\r\n\r\n function listen(param) {\r\n containers.forEach(function (container) {\r\n container[param]('scroll', checkImagesT);\r\n container[param]('touchmove', checkImagesT);\r\n });\r\n $win[param]('resize', checkImagesT);\r\n $win[param]('resize', saveWinOffsetT);\r\n }\r\n\r\n function startListening() {\r\n isListening = true;\r\n setTimeout(function () {\r\n checkImages();\r\n listen('on');\r\n }, 1);\r\n }\r\n\r\n function stopListening() {\r\n isListening = false;\r\n listen('off');\r\n }\r\n\r\n function removeImage(image) {\r\n var index = images.indexOf(image);\r\n if (index !== -1) {\r\n images.splice(index, 1);\r\n }\r\n }\r\n\r\n function loadImage(photo) {\r\n if (photo.loaded || photo.src === '') return;\r\n var img = new Image();\r\n img.onerror = function () {\r\n if (options.errorClass) {\r\n photo.$elem.addClass(options.errorClass);\r\n }\r\n $rootScope.$emit('lazyImg:error', photo);\r\n options.onError(photo);\r\n };\r\n img.onload = function () {\r\n photo.loaded = true;\r\n setPhotoSrc(photo.$elem, photo.src);\r\n if (options.loadingClass) {\r\n photo.$elem.removeClass(options.loadingClass);\r\n }\r\n if (options.successClass) {\r\n photo.$elem.addClass(options.successClass);\r\n if (photo.addClassToParent) {\r\n photo.$elem.parent().addClass(options.successClass);\r\n }\r\n }\r\n $rootScope.$emit('lazyImg:success', photo);\r\n options.onSuccess(photo);\r\n };\r\n if (options.loadingClass) {\r\n photo.$elem.addClass(options.loadingClass);\r\n }\r\n options.onLoading(photo);\r\n\r\n img.src = photo.src;\r\n }\r\n\r\n function setPhotoSrc($elem, src) {\r\n if ($elem[0].nodeName.toLowerCase() === 'img') {\r\n $elem[0].src = src;\r\n } else {\r\n $elem.css('background-image', 'url(\"' + src + '\")');\r\n }\r\n }\r\n\r\n // PHOTO\r\n function Photo($elem) {\r\n this.$elem = $elem;\r\n }\r\n\r\n Photo.prototype.setAddClassToParent = function () {\r\n this.addClassToParent = true;\r\n };\r\n\r\n Photo.prototype.setInViewFunction = function(fn, scope){\r\n this.inViewFunction = fn;\r\n this.$elem.data('scope', scope);\r\n };\r\n\r\n Photo.prototype.setSource = function (source) {\r\n this.src = source;\r\n images.unshift(this);\r\n if (!isListening) { startListening(); }\r\n if (images.length !== 1) {\r\n setTimeout(function () {\r\n checkImages();\r\n }, 1);\r\n }\r\n };\r\n\r\n Photo.prototype.removeImage = function () {\r\n removeImage(this);\r\n if (images.length === 0) stopListening();\r\n };\r\n\r\n Photo.prototype.checkImages = function () {\r\n checkImages();\r\n };\r\n\r\n Photo.addContainer = function (container) {\r\n stopListening();\r\n containers.push(container);\r\n startListening();\r\n };\r\n\r\n Photo.removeContainer = function (container) {\r\n stopListening();\r\n containers.splice(containers.indexOf(container), 1);\r\n startListening();\r\n };\r\n\r\n return Photo;\r\n\r\n }])\r\n\r\n /* @ngInject */\r\n .provider('lazyImgConfig', function () {\r\n 'use strict';\r\n\r\n this.options = {\r\n offset: 100,\r\n errorClass: null,\r\n loadingClass: null,\r\n successClass: null,\r\n onError: function () {},\r\n onLoading: function () {},\r\n onSuccess: function () {},\r\n inViewFunction: null\r\n };\r\n\r\n this.$get = function () {\r\n var options = this.options;\r\n return {\r\n getOptions: function () {\r\n return options;\r\n }\r\n };\r\n };\r\n\r\n this.setOptions = function (options) {\r\n angular.extend(this.options, options);\r\n };\r\n })\r\n\r\n /* @ngInject */\r\n .factory('lazyImgHelpers', [\"$window\", function ($window) {\r\n 'use strict';\r\n\r\n function getWinDimensions() {\r\n return {\r\n height: $window.innerHeight,\r\n width: $window.innerWidth\r\n };\r\n }\r\n\r\n function isElementInView(elem, offset, winDimensions) {\r\n var rect = elem.getBoundingClientRect();\r\n var bottomline = winDimensions.height + offset;\r\n return (\r\n rect.left >= 0 && rect.right <= winDimensions.width + offset && (\r\n rect.top >= 0 && rect.top <= bottomline ||\r\n rect.bottom <= bottomline && rect.bottom >= 0 - offset\r\n )\r\n );\r\n }\r\n\r\n // http://remysharp.com/2010/07/21/throttling-function-calls/\r\n function throttle(fn, threshhold, scope) {\r\n var last, deferTimer;\r\n return function () {\r\n var context = scope || this;\r\n var now = +new Date(),\r\n args = arguments;\r\n if (last && now < last + threshhold) {\r\n clearTimeout(deferTimer);\r\n deferTimer = setTimeout(function () {\r\n last = now;\r\n fn.apply(context, args);\r\n }, threshhold);\r\n } else {\r\n last = now;\r\n fn.apply(context, args);\r\n }\r\n };\r\n }\r\n\r\n return {\r\n isElementInView: isElementInView,\r\n getWinDimensions: getWinDimensions,\r\n throttle: throttle\r\n };\r\n\r\n }])\r\n\r\n /* @ngInject */\r\n .directive('lazyImg', [\"$rootScope\", \"LazyImgMagic\", \"usSpinnerConfig\", function ($rootScope, LazyImgMagic, usSpinnerConfig) {\r\n 'use strict';\r\n\r\n function link(scope, element, attrs) {\r\n\r\n if (angular.isDefined(attrs.lazyIf) && attrs.lazyIf === 'false') {\r\n return;\r\n }\r\n\r\n var lazyImage = new LazyImgMagic(element);\r\n\r\n if (angular.isDefined(attrs.parentLoadedClass)) {\r\n lazyImage.setAddClassToParent();\r\n }\r\n if (angular.isDefined(attrs.inViewFunction)) {\r\n lazyImage.setInViewFunction(attrs.inViewFunction, scope);\r\n }\r\n\r\n var deregister = attrs.$observe('lazyImg', function (newSource) {\r\n if (newSource && newSource !== '') {\r\n deregister();\r\n lazyImage.setSource(newSource);\r\n }\r\n });\r\n\r\n scope.$on('$destroy', function () {\r\n lazyImage.removeImage();\r\n });\r\n\r\n $rootScope.$on('lazyImg.runCheck', function () {\r\n lazyImage.checkImages();\r\n });\r\n\r\n $rootScope.$on('lazyImg:refresh', function () {\r\n lazyImage.checkImages();\r\n });\r\n }\r\n\r\n return {\r\n link: link,\r\n restrict: 'A'\r\n };\r\n }])\r\n\r\n /* @ngInject */\r\n .directive('lazyImgContainer', [\"LazyImgMagic\", function (LazyImgMagic) {\r\n 'use strict';\r\n\r\n function link(scope, element) {\r\n LazyImgMagic.addContainer(element);\r\n scope.$on('$destroy', function () {\r\n LazyImgMagic.removeContainer(element);\r\n });\r\n }\r\n\r\n return {\r\n link: link,\r\n restrict: 'A'\r\n };\r\n }]);\r\n","/*\r\n*\r\n* Version : 1.0.0\r\n* 04/09/2016 - 10h18\r\n*\r\n*! Octave Web7 !*/\r\n\r\n/**\r\n * angular-spinner version 0.8.1\r\n * License: MIT.\r\n * Copyright (C) 2013, 2014, 2015, 2016, Uri Shaked and contributors.\r\n * https://github.com/urish/angular-spinner\r\n */\r\n\r\n(function (root) {\r\n\t'use strict';\r\n\r\n\tfunction factory(angular, Spinner) {\r\n\r\n\t\treturn angular\r\n\t\t\t.module('module.spinner', [])\r\n\r\n\t\t\t.constant('SpinJSSpinner', Spinner)\r\n\r\n\t\t\t.provider('usSpinnerConfig', function () {\r\n\t\t\t\tvar _config = {}, _themes = {}, _delay = 0;\r\n\r\n\t\t\t\treturn {\r\n\t\t\t\t\tsetDefaults: function (config) {\r\n\t\t\t\t\t\t_config = config || _config;\r\n\t\t\t\t\t},\r\n\t\t\t\t\tsetTheme: function(name, config) {\r\n\t\t\t\t\t\t_themes[name] = config;\r\n\t\t\t\t\t},\r\n\t\t\t\t\tsetDelay: function(delay) {\r\n\t\t\t\t\t\t_delay = delay;\r\n\t\t\t\t\t},\r\n\t\t\t\t\t$get: function () {\r\n\t\t\t\t\t\treturn {\r\n\t\t\t\t\t\t\tconfig: _config,\r\n\t\t\t\t\t\t\tthemes: _themes,\r\n\t\t\t\t\t\t\tdelay: _delay\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})\r\n\r\n\t\t\t.directive('usSpinner', ['SpinJSSpinner', 'usSpinnerConfig', function (SpinJSSpinner, usSpinnerConfig) {\r\n\t\t\t\treturn {\r\n\t\t\t\t\tscope: true,\r\n\t\t\t\t\tlink: function (scope, element, attr) {\r\n\t\t\t\t\t\tscope.spinner = null;\r\n\r\n\t\t\t\t\t\tfunction stopSpinner() {\r\n\t\t\t\t\t\t\tif (scope.spinner) {\r\n\t\t\t\t\t\t\t\telement.children().removeClass('in').addClass('out');\r\n\t\t\t\t\t\t\t\tsetTimeout(function() {\r\n\t\t\t\t\t\t\t\t\tif (scope.spinner) {\r\n\t\t\t\t\t\t\t\t\t\tscope.spinner.stop();\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\telement.children('.overlay').remove();\r\n\t\t\t\t\t\t\t\t}, scope.delay);\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.spin = function () {\r\n\t\t\t\t\t\t\tif (scope.spinner) {\r\n\t\t\t\t\t\t\t\telement.children().removeClass('out');\r\n\t\t\t\t\t\t\t\tscope.spinner.spin(element[0]);\r\n\t\t\t\t\t\t\t\tsetTimeout(function() {\r\n\t\t\t\t\t\t\t\t\telement.children().addClass('in');\r\n\t\t\t\t\t\t\t\t}, 100);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t$('
').appendTo(element);\r\n\t\t\t\t\t\t};\r\n\r\n\t\t\t\t\t\tscope.stop = function () {\r\n\t\t\t\t\t\t\tstopSpinner();\r\n\t\t\t\t\t\t};\r\n\r\n\t\t\t\t\t\tvar options = angular.extend(\r\n\t\t\t\t\t\t\t{},\r\n\t\t\t\t\t\t\tusSpinnerConfig.config,\r\n\t\t\t\t\t\t\tusSpinnerConfig.themes[attr.spinnerTheme]);\r\n\t\t\t\t\t\tscope.delay = usSpinnerConfig.delay;\r\n\t\t\t\t\t\tscope.spinner = new SpinJSSpinner(options);\r\n\t\t\t\t\t\tif (!scope.key && !attr.spinnerOn) {\r\n\t\t\t\t\t\t\tscope.spinner.spin(element[0]);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tscope.$watch(attr.spinnerOn, function (spin) {\r\n\t\t\t\t\t\t\tif (spin) {\r\n\t\t\t\t\t\t\t\tscope.spin();\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\tscope.stop();\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.$on('$destroy', function () {\r\n\t\t\t\t\t\t\tscope.stop();\r\n\t\t\t\t\t\t\tscope.spinner = null;\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}]);\r\n\t}\r\n\r\n factory(root.angular, root.Spinner);\r\n\r\n}(this));\r\n","/*! angularjs-slider - v6.1.1 -\r\n (c) Rafal Zajac , Valentin Hervieu , Jussi Saarivirta , Angelin Sirbu -\r\n https://github.com/angular-slider/angularjs-slider -\r\n 2017-03-29 */\r\n\r\n(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('rzModule', [])\r\n\r\n .factory('RzSliderOptions', function () {\r\n var defaultOptions = {\r\n floor: 0,\r\n ceil: null, // defaults to rz-slider-model\r\n step: 1,\r\n precision: 0,\r\n minRange: null,\r\n maxRange: null,\r\n pushRange: false,\r\n minLimit: null,\r\n maxLimit: null,\r\n id: null,\r\n translate: null,\r\n getLegend: null,\r\n stepsArray: null,\r\n bindIndexForStepsArray: false,\r\n draggableRange: false,\r\n draggableRangeOnly: false,\r\n showSelectionBar: false,\r\n showSelectionBarEnd: false,\r\n showSelectionBarFromValue: null,\r\n hidePointerLabels: false,\r\n hideLimitLabels: false,\r\n autoHideLimitLabels: true,\r\n readOnly: false,\r\n disabled: false,\r\n interval: 350,\r\n showTicks: false,\r\n showTicksValues: false,\r\n ticksArray: null,\r\n ticksTooltip: null,\r\n ticksValuesTooltip: null,\r\n vertical: false,\r\n /*getSelectionBarColor: null,*/\r\n getTickColor: null,\r\n /*getPointerColor: null,*/\r\n keyboardSupport: true,\r\n scale: 1,\r\n enforceStep: true,\r\n enforceRange: false,\r\n noSwitching: false,\r\n onlyBindHandles: false,\r\n onStart: null,\r\n onChange: null,\r\n onEnd: null,\r\n rightToLeft: false,\r\n boundPointerLabels: true,\r\n mergeRangeLabelsIfSame: false,\r\n customTemplateScope: null,\r\n logScale: false,\r\n customValueToPosition: null,\r\n customPositionToValue: null,\r\n /*selectionBarGradient: null,*/\r\n ariaLabel: null,\r\n ariaLabelledBy: null,\r\n ariaLabelHigh: null,\r\n ariaLabelledByHigh: null\r\n };\r\n var globalOptions = {};\r\n\r\n var factory = {};\r\n\r\n factory.options = function (value) {\r\n angular.extend(globalOptions, value);\r\n };\r\n\r\n factory.getOptions = function (options) {\r\n return angular.extend({}, defaultOptions, globalOptions, options);\r\n };\r\n\r\n return factory;\r\n })\r\n\r\n /* @ngInject */\r\n .factory('rzThrottle', [\"$timeout\", function ($timeout) {\r\n return function (func, wait, options) {\r\n var getTime = (Date.now || function () {\r\n return new Date().getTime();\r\n });\r\n var context, args, result;\r\n var timeout = null;\r\n var previous = 0;\r\n options = options || {};\r\n var later = function () {\r\n previous = getTime();\r\n timeout = null;\r\n result = func.apply(context, args);\r\n context = args = null;\r\n };\r\n return function () {\r\n var now = getTime();\r\n var remaining = wait - (now - previous);\r\n context = this;\r\n args = arguments;\r\n if (remaining <= 0) {\r\n $timeout.cancel(timeout);\r\n timeout = null;\r\n previous = now;\r\n result = func.apply(context, args);\r\n context = args = null;\r\n } else if (!timeout && options.trailing !== false) {\r\n timeout = $timeout(later, remaining);\r\n }\r\n return result;\r\n };\r\n };\r\n }])\r\n\r\n /* @ngInject */\r\n .factory('RzSlider', [\"$timeout\", \"$document\", \"$window\", \"$compile\", \"RzSliderOptions\", \"rzThrottle\", function ($timeout, $document, $window, $compile, RzSliderOptions, rzThrottle) {\r\n var Slider = function (scope, sliderElem) {\r\n\r\n this.scope = scope;\r\n this.lowValue = 0;\r\n this.highValue = 0;\r\n this.sliderElem = sliderElem;\r\n this.range = this.scope.rzSliderModel !== undefined && this.scope.rzSliderHigh !== undefined;\r\n this.dragging = {\r\n active: false,\r\n value: 0,\r\n difference: 0,\r\n position: 0,\r\n lowLimit: 0,\r\n highLimit: 0\r\n };\r\n this.positionProperty = 'left';\r\n this.dimensionProperty = 'width';\r\n this.handleHalfDim = 0;\r\n this.maxPos = 0;\r\n this.precision = 0;\r\n this.step = 1;\r\n this.tracking = '';\r\n this.minValue = 0;\r\n this.maxValue = 0;\r\n this.valueRange = 0;\r\n this.intermediateTicks = false;\r\n this.initHasRun = false;\r\n this.firstKeyDown = false;\r\n this.internalChange = false;\r\n this.cmbLabelShown = false;\r\n this.currentFocusElement = null;\r\n\r\n // Slider DOM elements wrapped in jqLite\r\n this.fullBar = null; // The whole slider bar\r\n this.selBar = null; // Highlight between two handles\r\n this.minH = null; // Left slider handle\r\n this.maxH = null; // Right slider handle\r\n this.flrLab = null; // Floor label\r\n this.ceilLab = null; // Ceiling label\r\n this.minLab = null; // Label above the low value\r\n this.maxLab = null; // Label above the high value\r\n this.cmbLab = null; // Combined label\r\n this.ticks = null; // The ticks\r\n\r\n // Initialize slider\r\n this.init();\r\n };\r\n\r\n // Add instance methods\r\n Slider.prototype = {\r\n init: function () {\r\n var thrLow, thrHigh,\r\n self = this;\r\n\r\n var calcDimFn = function () {\r\n self.calcViewDimensions();\r\n };\r\n\r\n this.applyOptions();\r\n this.syncLowValue();\r\n if (this.range) {\r\n this.syncHighValue();\r\n }\r\n this.initElemHandles();\r\n this.manageElementsStyle();\r\n this.setDisabledState();\r\n this.calcViewDimensions();\r\n this.setMinAndMax();\r\n this.addAccessibility();\r\n this.updateCeilLab();\r\n this.updateFloorLab();\r\n this.initHandles();\r\n this.manageEventsBindings();\r\n\r\n // Recalculate slider view dimensions\r\n this.scope.$on('reCalcViewDimensions', calcDimFn);\r\n\r\n // Recalculate stuff if view port dimensions have changed\r\n angular.element($window).on('resize', calcDimFn);\r\n\r\n this.initHasRun = true;\r\n\r\n // Watch for changes to the model\r\n thrLow = rzThrottle(function () {\r\n self.onLowHandleChange();\r\n }, self.options.interval);\r\n\r\n thrHigh = rzThrottle(function () {\r\n self.onHighHandleChange();\r\n }, self.options.interval);\r\n\r\n this.scope.$on('rzSliderForceRender', function () {\r\n self.resetLabelsValue();\r\n thrLow();\r\n if (self.range) {\r\n thrHigh();\r\n }\r\n self.resetSlider();\r\n });\r\n\r\n // Watchers (order is important because in case of simultaneous change,\r\n // watchers will be called in the same order)\r\n this.scope.$watch('rzSliderOptions()', function (newValue, oldValue) {\r\n if (newValue === oldValue) return;\r\n self.applyOptions(); // need to be called before synchronizing the values\r\n self.syncLowValue();\r\n if (self.range) {self.syncHighValue();}\r\n self.resetSlider();\r\n }, true);\r\n\r\n this.scope.$watch('rzSliderModel', function (newValue, oldValue) {\r\n if (self.internalChange) return;\r\n if (newValue === oldValue) return;\r\n thrLow();\r\n });\r\n\r\n this.scope.$watch('rzSliderHigh', function (newValue, oldValue) {\r\n if (self.internalChange) return;\r\n if (newValue === oldValue) return;\r\n if (newValue != null) {thrHigh();}\r\n if (self.range && newValue == null || !self.range && newValue != null) {\r\n self.applyOptions();\r\n self.resetSlider();\r\n }\r\n });\r\n\r\n this.scope.$on('$destroy', function () {\r\n self.unbindEvents();\r\n angular.element($window).off('resize', calcDimFn);\r\n self.currentFocusElement = null;\r\n });\r\n },\r\n\r\n findStepIndex: function (modelValue) {\r\n var index = 0;\r\n for (var i = 0; i < this.options.stepsArray.length; i++) {\r\n var step = this.options.stepsArray[i];\r\n if (step === modelValue) {\r\n index = i;\r\n break;\r\n } else if (angular.isDate(step)) {\r\n if (step.getTime() === modelValue.getTime()) {\r\n index = i;\r\n break;\r\n }\r\n } else if (angular.isObject(step)) {\r\n if (angular.isDate(step.value) && step.value.getTime() === modelValue.getTime() || step.value === modelValue) {\r\n index = i;\r\n break;\r\n }\r\n }\r\n }\r\n return index;\r\n },\r\n\r\n syncLowValue: function () {\r\n if (this.options.stepsArray) {\r\n if (!this.options.bindIndexForStepsArray) {\r\n this.lowValue = this.findStepIndex(this.scope.rzSliderModel);\r\n } else {\r\n this.lowValue = this.scope.rzSliderModel;\r\n }\r\n } else {\r\n this.lowValue = this.scope.rzSliderModel;\r\n }\r\n },\r\n\r\n syncHighValue: function () {\r\n if (this.options.stepsArray) {\r\n if (!this.options.bindIndexForStepsArray) {\r\n this.highValue = this.findStepIndex(this.scope.rzSliderHigh);\r\n } else {\r\n this.highValue = this.scope.rzSliderHigh;\r\n }\r\n } else {\r\n this.highValue = this.scope.rzSliderHigh;\r\n }\r\n },\r\n\r\n getStepValue: function (sliderValue) {\r\n var step = this.options.stepsArray[sliderValue];\r\n if (angular.isDate(step)) return step;\r\n if (angular.isObject(step)) return step.value;\r\n return step;\r\n },\r\n\r\n applyLowValue: function () {\r\n if (this.options.stepsArray) {\r\n if (!this.options.bindIndexForStepsArray) {\r\n this.scope.rzSliderModel = this.getStepValue(this.lowValue);\r\n } else {\r\n this.scope.rzSliderModel = this.lowValue;\r\n }\r\n } else {\r\n this.scope.rzSliderModel = this.lowValue;\r\n }\r\n },\r\n\r\n applyHighValue: function () {\r\n if (this.options.stepsArray) {\r\n if (!this.options.bindIndexForStepsArray) {\r\n this.scope.rzSliderHigh = this.getStepValue(this.highValue);\r\n } else {\r\n this.scope.rzSliderHigh = this.highValue;\r\n }\r\n } else {\r\n this.scope.rzSliderHigh = this.highValue;\r\n }\r\n },\r\n\r\n /*\r\n * Reflow the slider when the low handle changes (called with throttle)\r\n */\r\n onLowHandleChange: function () {\r\n this.syncLowValue();\r\n if (this.range) {this.syncHighValue();}\r\n this.setMinAndMax();\r\n this.updateLowHandle(this.valueToPosition(this.lowValue));\r\n this.updateSelectionBar();\r\n this.updateTicksScale();\r\n this.updateAriaAttributes();\r\n if (this.range) {\r\n this.updateCmbLabel();\r\n }\r\n },\r\n\r\n /*\r\n * Reflow the slider when the high handle changes (called with throttle)\r\n */\r\n onHighHandleChange: function () {\r\n this.syncLowValue();\r\n this.syncHighValue();\r\n this.setMinAndMax();\r\n this.updateHighHandle(this.valueToPosition(this.highValue));\r\n this.updateSelectionBar();\r\n this.updateTicksScale();\r\n this.updateCmbLabel();\r\n this.updateAriaAttributes();\r\n },\r\n\r\n /**\r\n * Read the user options and apply them to the slider model\r\n */\r\n applyOptions: function () {\r\n var sliderOptions;\r\n if (this.scope.rzSliderOptions) {\r\n sliderOptions = this.scope.rzSliderOptions();\r\n } else {\r\n sliderOptions = {};\r\n }\r\n\r\n this.options = RzSliderOptions.getOptions(sliderOptions);\r\n\r\n if (this.options.step <= 0) {\r\n this.options.step = 1;\r\n }\r\n\r\n this.range = this.scope.rzSliderModel !== undefined && this.scope.rzSliderHigh !== undefined;\r\n this.options.draggableRange = this.range && this.options.draggableRange;\r\n this.options.draggableRangeOnly = this.range && this.options.draggableRangeOnly;\r\n if (this.options.draggableRangeOnly) {\r\n this.options.draggableRange = true;\r\n }\r\n\r\n this.options.showTicks = this.options.showTicks || this.options.showTicksValues || !!this.options.ticksArray;\r\n this.scope.showTicks = this.options.showTicks; // scope is used in the template\r\n if (angular.isNumber(this.options.showTicks) || this.options.ticksArray) {this.intermediateTicks = true;}\r\n\r\n this.options.showSelectionBar = this.options.showSelectionBar || this.options.showSelectionBarEnd\r\n || this.options.showSelectionBarFromValue !== null;\r\n\r\n if (this.options.stepsArray) {\r\n this.parseStepsArray();\r\n } else {\r\n if (this.options.translate) {\r\n this.customTrFn = this.options.translate;\r\n } else {\r\n this.customTrFn = function (value) {\r\n return String(value);\r\n };\r\n }\r\n\r\n this.getLegend = this.options.getLegend;\r\n }\r\n\r\n if (this.options.vertical) {\r\n this.positionProperty = 'bottom';\r\n this.dimensionProperty = 'height';\r\n }\r\n\r\n if (this.options.customTemplateScope) {\r\n this.scope.custom = this.options.customTemplateScope;\r\n }\r\n },\r\n\r\n parseStepsArray: function () {\r\n this.options.floor = 0;\r\n this.options.ceil = this.options.stepsArray.length - 1;\r\n this.options.step = 1;\r\n\r\n if (this.options.translate) {\r\n this.customTrFn = this.options.translate;\r\n } else {\r\n this.customTrFn = function (modelValue) {\r\n if (this.options.bindIndexForStepsArray) {\r\n return this.getStepValue(modelValue);\r\n }\r\n return modelValue;\r\n };\r\n }\r\n\r\n this.getLegend = function (index) {\r\n var step = this.options.stepsArray[index];\r\n if (angular.isObject(step)) {\r\n return step.legend;\r\n }\r\n return null;\r\n };\r\n },\r\n\r\n /**\r\n * Resets slider\r\n *\r\n * @returns {undefined}\r\n */\r\n resetSlider: function () {\r\n this.manageElementsStyle();\r\n this.addAccessibility();\r\n this.setMinAndMax();\r\n this.updateCeilLab();\r\n this.updateFloorLab();\r\n this.unbindEvents();\r\n this.manageEventsBindings();\r\n this.setDisabledState();\r\n this.calcViewDimensions();\r\n this.refocusPointerIfNeeded();\r\n },\r\n\r\n refocusPointerIfNeeded: function () {\r\n if (this.currentFocusElement) {\r\n this.onPointerFocus(this.currentFocusElement.pointer, this.currentFocusElement.ref);\r\n this.focusElement(this.currentFocusElement.pointer);\r\n }\r\n },\r\n\r\n /**\r\n * Set the slider children to variables for easy access\r\n *\r\n * Run only once during initialization\r\n *\r\n * @returns {undefined}\r\n */\r\n initElemHandles: function () {\r\n // Assign all slider elements to object properties for easy access\r\n angular.forEach(this.sliderElem.children(), function (elem, index) {\r\n var jElem = angular.element(elem);\r\n\r\n switch (index) {\r\n case 0:\r\n this.fullBar = jElem;\r\n break;\r\n case 1:\r\n this.selBar = jElem;\r\n break;\r\n case 2:\r\n this.minH = jElem;\r\n break;\r\n case 3:\r\n this.maxH = jElem;\r\n break;\r\n case 4:\r\n this.flrLab = jElem;\r\n break;\r\n case 5:\r\n this.ceilLab = jElem;\r\n break;\r\n case 6:\r\n this.minLab = jElem;\r\n break;\r\n case 7:\r\n this.maxLab = jElem;\r\n break;\r\n case 8:\r\n this.cmbLab = jElem;\r\n break;\r\n case 9:\r\n this.ticks = jElem;\r\n break;\r\n }\r\n\r\n }, this);\r\n\r\n // Initialize position cache properties\r\n this.selBar.rzsp = 0;\r\n this.minH.rzsp = 0;\r\n this.maxH.rzsp = 0;\r\n this.flrLab.rzsp = 0;\r\n this.ceilLab.rzsp = 0;\r\n this.minLab.rzsp = 0;\r\n this.maxLab.rzsp = 0;\r\n this.cmbLab.rzsp = 0;\r\n },\r\n\r\n /**\r\n * Update each elements style based on options\r\n */\r\n manageElementsStyle: function () {\r\n\r\n if (!this.range) {\r\n this.maxH.css('display', 'none');\r\n } else {\r\n this.maxH.css('display', '');\r\n }\r\n\r\n\r\n this.alwaysHide(this.flrLab, this.options.showTicksValues || this.options.hideLimitLabels);\r\n this.alwaysHide(this.ceilLab, this.options.showTicksValues || this.options.hideLimitLabels);\r\n\r\n var hideLabelsForTicks = this.options.showTicksValues && !this.intermediateTicks;\r\n this.alwaysHide(this.minLab, hideLabelsForTicks || this.options.hidePointerLabels);\r\n this.alwaysHide(this.maxLab, hideLabelsForTicks || !this.range || this.options.hidePointerLabels);\r\n this.alwaysHide(this.cmbLab, hideLabelsForTicks || !this.range || this.options.hidePointerLabels);\r\n this.alwaysHide(this.selBar, !this.range && !this.options.showSelectionBar);\r\n\r\n if (this.options.vertical) {\r\n this.sliderElem.addClass('rz-vertical');\r\n }\r\n\r\n if (this.options.draggableRange) {\r\n this.selBar.addClass('rz-draggable');\r\n } else {\r\n this.selBar.removeClass('rz-draggable');\r\n }\r\n\r\n if (this.intermediateTicks && this.options.showTicksValues) {\r\n this.ticks.addClass('rz-ticks-values-under');\r\n }\r\n },\r\n\r\n alwaysHide: function (el, hide) {\r\n el.rzAlwaysHide = hide;\r\n if (hide) {\r\n this.hideEl(el);\r\n } else {\r\n this.showEl(el);\r\n }\r\n },\r\n\r\n /**\r\n * Manage the events bindings based on readOnly and disabled options\r\n *\r\n * @returns {undefined}\r\n */\r\n manageEventsBindings: function () {\r\n if (this.options.disabled || this.options.readOnly) {\r\n this.unbindEvents();\r\n } else {\r\n this.bindEvents();\r\n }\r\n },\r\n\r\n /**\r\n * Set the disabled state based on rzSliderDisabled\r\n *\r\n * @returns {undefined}\r\n */\r\n setDisabledState: function () {\r\n if (this.options.disabled) {\r\n this.sliderElem.attr('disabled', 'disabled');\r\n } else {\r\n this.sliderElem.attr('disabled', null);\r\n }\r\n },\r\n\r\n /**\r\n * Reset label values\r\n *\r\n * @return {undefined}\r\n */\r\n resetLabelsValue: function () {\r\n this.minLab.rzsv = undefined;\r\n this.maxLab.rzsv = undefined;\r\n },\r\n\r\n /**\r\n * Initialize slider handles positions and labels\r\n *\r\n * Run only once during initialization and every time view port changes size\r\n *\r\n * @returns {undefined}\r\n */\r\n initHandles: function () {\r\n this.updateLowHandle(this.valueToPosition(this.lowValue));\r\n\r\n /*\r\n the order here is important since the selection bar should be\r\n updated after the high handle but before the combined label\r\n */\r\n if (this.range) {\r\n this.updateHighHandle(this.valueToPosition(this.highValue));\r\n }\r\n this.updateSelectionBar();\r\n if (this.range) {\r\n this.updateCmbLabel();\r\n }\r\n\r\n this.updateTicksScale();\r\n },\r\n\r\n /**\r\n * Translate value to human readable format\r\n *\r\n * @param {number|string} value\r\n * @param {jqLite} label\r\n * @param {String} which\r\n * @param {boolean} [useCustomTr]\r\n * @returns {undefined}\r\n */\r\n translateFn: function (value, label, which, useCustomTr) {\r\n useCustomTr = useCustomTr === undefined ? true : useCustomTr;\r\n\r\n var valStr = '',\r\n getDimension = false,\r\n noLabelInjection = label.hasClass('no-label-injection');\r\n\r\n if (useCustomTr) {\r\n if (this.options.stepsArray && !this.options.bindIndexForStepsArray) {\r\n value = this.getStepValue(value);\r\n }\r\n valStr = String(this.customTrFn(value, this.options.id, which));\r\n } else {\r\n valStr = String(value);\r\n }\r\n\r\n if (label.rzsv === undefined || label.rzsv.length !== valStr.length || (label.rzsv.length > 0 && label.rzsd === 0)) {\r\n getDimension = true;\r\n label.rzsv = valStr;\r\n }\r\n\r\n if (!noLabelInjection) {\r\n label.html(valStr);\r\n }\r\n\r\n\r\n this.scope[which + 'Label'] = valStr;\r\n\r\n // Update width only when length of the label have changed\r\n if (getDimension) {\r\n this.getDimension(label);\r\n }\r\n },\r\n\r\n /**\r\n * Set maximum and minimum values for the slider and ensure the model and high\r\n * value match these limits\r\n * @returns {undefined}\r\n */\r\n setMinAndMax: function () {\r\n\r\n this.step = +this.options.step;\r\n this.precision = +this.options.precision;\r\n\r\n this.minValue = this.options.floor;\r\n if (this.options.logScale && this.minValue === 0) {\r\n throw Error(\"Can't use floor=0 with logarithmic scale\");\r\n }\r\n\r\n if (this.options.enforceStep) {\r\n this.lowValue = this.roundStep(this.lowValue);\r\n if (this.range) {\r\n this.highValue = this.roundStep(this.highValue);\r\n }\r\n }\r\n\r\n if (this.options.ceil != null) {\r\n this.maxValue = this.options.ceil;\r\n } else {\r\n this.maxValue = this.options.ceil = this.range ? this.highValue : this.lowValue;\r\n }\r\n\r\n if (this.options.enforceRange) {\r\n this.lowValue = this.sanitizeValue(this.lowValue);\r\n if (this.range) {\r\n this.highValue = this.sanitizeValue(this.highValue);\r\n }\r\n }\r\n\r\n this.applyLowValue();\r\n if (this.range) {\r\n this.applyHighValue();\r\n }\r\n\r\n this.valueRange = this.maxValue - this.minValue;\r\n },\r\n\r\n /**\r\n * Adds accessibility attributes\r\n *\r\n * Run only once during initialization\r\n *\r\n * @returns {undefined}\r\n */\r\n addAccessibility: function () {\r\n this.minH.attr('role', 'slider');\r\n this.updateAriaAttributes();\r\n if (this.options.keyboardSupport && !(this.options.readOnly || this.options.disabled)) {\r\n this.minH.attr('tabindex', '0');\r\n } else {\r\n this.minH.attr('tabindex', '');\r\n }\r\n if (this.options.vertical) {\r\n this.minH.attr('aria-orientation', 'vertical');\r\n }\r\n if (this.options.ariaLabel) {\r\n this.minH.attr('aria-label', this.options.ariaLabel);\r\n } else if (this.options.ariaLabelledBy) {\r\n this.minH.attr('aria-labelledby', this.options.ariaLabelledBy);\r\n }\r\n\r\n if (this.range) {\r\n this.maxH.attr('role', 'slider');\r\n if (this.options.keyboardSupport && !(this.options.readOnly || this.options.disabled)) {\r\n this.maxH.attr('tabindex', '0');\r\n } else {\r\n this.maxH.attr('tabindex', '');\r\n }\r\n if (this.options.vertical) {\r\n this.maxH.attr('aria-orientation', 'vertical');\r\n }\r\n if (this.options.ariaLabelHigh) {\r\n this.maxH.attr('aria-label', this.options.ariaLabelHigh);\r\n } else if (this.options.ariaLabelledByHigh) {\r\n this.maxH.attr('aria-labelledby', this.options.ariaLabelledByHigh);\r\n }\r\n }\r\n },\r\n\r\n /**\r\n * Updates aria attributes according to current values\r\n */\r\n updateAriaAttributes: function () {\r\n this.minH.attr({\r\n 'aria-valuenow': this.scope.rzSliderModel,\r\n 'aria-valuetext': this.customTrFn(this.scope.rzSliderModel, this.options.id, 'model'),\r\n 'aria-valuemin': this.minValue,\r\n 'aria-valuemax': this.maxValue\r\n });\r\n if (this.range) {\r\n this.maxH.attr({\r\n 'aria-valuenow': this.scope.rzSliderHigh,\r\n 'aria-valuetext': this.customTrFn(this.scope.rzSliderHigh, this.options.id, 'high'),\r\n 'aria-valuemin': this.minValue,\r\n 'aria-valuemax': this.maxValue\r\n });\r\n }\r\n },\r\n\r\n /**\r\n * Calculate dimensions that are dependent on view port size\r\n *\r\n * Run once during initialization and every time view port changes size.\r\n *\r\n * @returns {undefined}\r\n */\r\n calcViewDimensions: function () {\r\n var handleWidth = this.getDimension(this.minH);\r\n\r\n this.handleHalfDim = handleWidth / 2;\r\n this.barDimension = this.getDimension(this.fullBar);\r\n\r\n this.maxPos = this.barDimension - handleWidth;\r\n\r\n this.getDimension(this.sliderElem);\r\n this.sliderElem.rzsp = this.sliderElem[0].getBoundingClientRect()[this.positionProperty];\r\n\r\n if (this.initHasRun) {\r\n this.updateFloorLab();\r\n this.updateCeilLab();\r\n this.initHandles();\r\n var self = this;\r\n $timeout(function () {\r\n self.updateTicksScale();\r\n });\r\n }\r\n },\r\n\r\n /**\r\n * Update the ticks position\r\n *\r\n * @returns {undefined}\r\n */\r\n updateTicksScale: function () {\r\n if (!this.options.showTicks) return;\r\n\r\n var ticksArray = this.options.ticksArray || this.getTicksArray(),\r\n translate = this.options.vertical ? 'translateY' : 'translateX',\r\n self = this;\r\n\r\n if (this.options.rightToLeft) {\r\n ticksArray.reverse();\r\n }\r\n\r\n this.scope.ticks = ticksArray.map(function (value) {\r\n var position = self.valueToPosition(value);\r\n\r\n if (self.options.vertical) {\r\n position = self.maxPos - position;\r\n }\r\n\r\n var translation = translate + '(' + Math.round(position) + 'px)';\r\n var tick = {\r\n selected: self.isTickSelected(value),\r\n style: {\r\n '-webkit-transform': translation,\r\n '-moz-transform': translation,\r\n '-o-transform': translation,\r\n '-ms-transform': translation,\r\n 'transform': translation\r\n }\r\n };\r\n if (!tick.selected && self.options.getTickColor) {\r\n tick.style['background-color'] = self.getTickColor(value);\r\n }\r\n if (self.options.ticksTooltip) {\r\n tick.tooltip = self.options.ticksTooltip(value);\r\n tick.tooltipPlacement = self.options.vertical ? 'right' : 'top';\r\n }\r\n if (self.options.showTicksValues) {\r\n tick.value = self.getDisplayValue(value, 'tick-value');\r\n if (self.options.ticksValuesTooltip) {\r\n tick.valueTooltip = self.options.ticksValuesTooltip(value);\r\n tick.valueTooltipPlacement = self.options.vertical ? 'right' : 'top';\r\n }\r\n }\r\n if (self.getLegend) {\r\n var legend = self.getLegend(value, self.options.id);\r\n if (legend) {\r\n tick.legend = legend;\r\n }\r\n }\r\n return tick;\r\n });\r\n },\r\n\r\n getTicksArray: function () {\r\n var step = this.step,\r\n ticksArray = [];\r\n if (this.intermediateTicks) {\r\n step = this.options.showTicks;\r\n }\r\n for (var value = this.minValue; value <= this.maxValue; value += step) {\r\n ticksArray.push(value);\r\n }\r\n return ticksArray;\r\n },\r\n\r\n isTickSelected: function (value) {\r\n if (!this.range) {\r\n if (this.options.showSelectionBarFromValue !== null) {\r\n var center = this.options.showSelectionBarFromValue;\r\n if (this.lowValue > center && value >= center && value <= this.lowValue) {\r\n return true;\r\n } else if (this.lowValue < center && value <= center && value >= this.lowValue) {\r\n return true;\r\n }\r\n } else if (this.options.showSelectionBarEnd) {\r\n if (value >= this.lowValue) {\r\n return true;\r\n }\r\n } else if (this.options.showSelectionBar && value <= this.lowValue) {\r\n return true;\r\n }\r\n }\r\n if (this.range && value >= this.lowValue && value <= this.highValue) {\r\n return true;\r\n }\r\n return false;\r\n },\r\n\r\n /**\r\n * Update position of the floor label\r\n *\r\n * @returns {undefined}\r\n */\r\n updateFloorLab: function () {\r\n this.translateFn(this.minValue, this.flrLab, 'floor');\r\n this.getDimension(this.flrLab);\r\n var position = this.options.rightToLeft ? this.barDimension - this.flrLab.rzsd : 0;\r\n this.setPosition(this.flrLab, position);\r\n },\r\n\r\n /**\r\n * Update position of the ceiling label\r\n *\r\n * @returns {undefined}\r\n */\r\n updateCeilLab: function () {\r\n this.translateFn(this.maxValue, this.ceilLab, 'ceil');\r\n this.getDimension(this.ceilLab);\r\n var position = this.options.rightToLeft ? 0 : this.barDimension - this.ceilLab.rzsd;\r\n this.setPosition(this.ceilLab, position);\r\n },\r\n\r\n /**\r\n * Update slider handles and label positions\r\n *\r\n * @param {string} which\r\n * @param {number} newPos\r\n */\r\n updateHandles: function (which, newPos) {\r\n if (which === 'lowValue') {\r\n this.updateLowHandle(newPos);\r\n } else {\r\n this.updateHighHandle(newPos);\r\n }\r\n\r\n this.updateSelectionBar();\r\n this.updateTicksScale();\r\n if (this.range) {\r\n this.updateCmbLabel();\r\n }\r\n },\r\n\r\n /**\r\n * Helper function to work out the position for handle labels depending on RTL or not\r\n *\r\n * @param {string} labelName maxLab or minLab\r\n * @param newPos\r\n *\r\n * @returns {number}\r\n */\r\n getHandleLabelPos: function (labelName, newPos) {\r\n var labelRzsd = this[labelName].rzsd,\r\n nearHandlePos = newPos - labelRzsd / 2 + this.handleHalfDim,\r\n endOfBarPos = this.barDimension - labelRzsd;\r\n\r\n if (!this.options.boundPointerLabels) {\r\n return nearHandlePos;\r\n }\r\n\r\n if (this.options.rightToLeft && labelName === 'minLab' || !this.options.rightToLeft && labelName === 'maxLab') {\r\n return Math.min(nearHandlePos, endOfBarPos);\r\n }\r\n return Math.min(Math.max(nearHandlePos, 0), endOfBarPos);\r\n\r\n },\r\n\r\n /**\r\n * Update low slider handle position and label\r\n *\r\n * @param {number} newPos\r\n * @returns {undefined}\r\n */\r\n updateLowHandle: function (newPos) {\r\n this.setPosition(this.minH, newPos);\r\n this.translateFn(this.lowValue, this.minLab, 'model');\r\n this.setPosition(this.minLab, this.getHandleLabelPos('minLab', newPos));\r\n\r\n if (this.options.autoHideLimitLabels) {\r\n this.shFloorCeil();\r\n }\r\n },\r\n\r\n /**\r\n * Update high slider handle position and label\r\n *\r\n * @param {number} newPos\r\n * @returns {undefined}\r\n */\r\n updateHighHandle: function (newPos) {\r\n this.setPosition(this.maxH, newPos);\r\n this.translateFn(this.highValue, this.maxLab, 'high');\r\n this.setPosition(this.maxLab, this.getHandleLabelPos('maxLab', newPos));\r\n\r\n if (this.options.autoHideLimitLabels) {\r\n this.shFloorCeil();\r\n }\r\n\r\n },\r\n\r\n /**\r\n * Show/hide floor/ceiling label\r\n *\r\n * @returns {undefined}\r\n */\r\n shFloorCeil: function () {\r\n // Show based only on hideLimitLabels if pointer labels are hidden\r\n if (this.options.hidePointerLabels) {\r\n return;\r\n }\r\n var flHidden = false,\r\n clHidden = false,\r\n isMinLabAtFloor = this.isLabelBelowFloorLab(this.minLab),\r\n isMinLabAtCeil = this.isLabelAboveCeilLab(this.minLab),\r\n isMaxLabAtCeil = this.isLabelAboveCeilLab(this.maxLab),\r\n isCmbLabAtFloor = this.isLabelBelowFloorLab(this.cmbLab),\r\n isCmbLabAtCeil = this.isLabelAboveCeilLab(this.cmbLab);\r\n\r\n if (isMinLabAtFloor) {\r\n flHidden = true;\r\n this.hideEl(this.flrLab);\r\n } else {\r\n flHidden = false;\r\n this.showEl(this.flrLab);\r\n }\r\n\r\n if (isMinLabAtCeil) {\r\n clHidden = true;\r\n this.hideEl(this.ceilLab);\r\n } else {\r\n clHidden = false;\r\n this.showEl(this.ceilLab);\r\n }\r\n\r\n if (this.range) {\r\n var hideCeil = this.cmbLabelShown ? isCmbLabAtCeil : isMaxLabAtCeil;\r\n var hideFloor = this.cmbLabelShown ? isCmbLabAtFloor : isMinLabAtFloor;\r\n\r\n if (hideCeil) {\r\n this.hideEl(this.ceilLab);\r\n } else if (!clHidden) {\r\n this.showEl(this.ceilLab);\r\n }\r\n\r\n // Hide or show floor label\r\n if (hideFloor) {\r\n this.hideEl(this.flrLab);\r\n } else if (!flHidden) {\r\n this.showEl(this.flrLab);\r\n }\r\n }\r\n },\r\n\r\n isLabelBelowFloorLab: function (label) {\r\n var isRTL = this.options.rightToLeft,\r\n pos = label.rzsp,\r\n dim = label.rzsd,\r\n floorPos = this.flrLab.rzsp,\r\n floorDim = this.flrLab.rzsd;\r\n return isRTL ?\r\n pos + dim >= floorPos - 2 :\r\n pos <= floorPos + floorDim + 2;\r\n },\r\n\r\n isLabelAboveCeilLab: function (label) {\r\n var isRTL = this.options.rightToLeft,\r\n pos = label.rzsp,\r\n dim = label.rzsd,\r\n ceilPos = this.ceilLab.rzsp,\r\n ceilDim = this.ceilLab.rzsd;\r\n return isRTL ?\r\n pos <= ceilPos + ceilDim + 2 :\r\n pos + dim >= ceilPos - 2;\r\n },\r\n\r\n /**\r\n * Update slider selection bar, combined label and range label\r\n *\r\n * @returns {undefined}\r\n */\r\n updateSelectionBar: function () {\r\n var position = 0,\r\n dimension = 0,\r\n isSelectionBarFromRight = this.options.rightToLeft ? !this.options.showSelectionBarEnd : this.options.showSelectionBarEnd,\r\n positionForRange = this.options.rightToLeft ? this.maxH.rzsp + this.handleHalfDim : this.minH.rzsp + this.handleHalfDim;\r\n\r\n if (this.range) {\r\n dimension = Math.abs(this.maxH.rzsp - this.minH.rzsp);\r\n position = positionForRange;\r\n } else if (this.options.showSelectionBarFromValue !== null) {\r\n var center = this.options.showSelectionBarFromValue,\r\n centerPosition = this.valueToPosition(center),\r\n isModelGreaterThanCenter = this.options.rightToLeft ? this.lowValue <= center : this.lowValue > center;\r\n if (isModelGreaterThanCenter) {\r\n dimension = this.minH.rzsp - centerPosition;\r\n position = centerPosition + this.handleHalfDim;\r\n } else {\r\n dimension = centerPosition - this.minH.rzsp;\r\n position = this.minH.rzsp + this.handleHalfDim;\r\n }\r\n } else if (isSelectionBarFromRight) {\r\n dimension = Math.abs(this.maxPos - this.minH.rzsp) + this.handleHalfDim;\r\n position = this.minH.rzsp + this.handleHalfDim;\r\n } else {\r\n dimension = Math.abs(this.maxH.rzsp - this.minH.rzsp) + this.handleHalfDim;\r\n position = 0;\r\n }\r\n this.setDimension(this.selBar, dimension);\r\n this.setPosition(this.selBar, position);\r\n },\r\n\r\n /**\r\n * Wrapper around the getTickColor of the user to pass to\r\n * correct parameters\r\n */\r\n getTickColor: function (value) {\r\n return this.options.getTickColor(value);\r\n },\r\n\r\n /**\r\n * Update combined label position and value\r\n *\r\n * @returns {undefined}\r\n */\r\n updateCmbLabel: function () {\r\n var isLabelOverlap = null;\r\n if (this.options.rightToLeft) {\r\n isLabelOverlap = this.minLab.rzsp - this.minLab.rzsd - 10 <= this.maxLab.rzsp;\r\n } else {\r\n isLabelOverlap = this.minLab.rzsp + this.minLab.rzsd + 10 >= this.maxLab.rzsp;\r\n }\r\n\r\n if (isLabelOverlap) {\r\n var lowTr = this.getDisplayValue(this.lowValue, 'model'),\r\n highTr = this.getDisplayValue(this.highValue, 'high'),\r\n labelVal = '';\r\n if (this.options.mergeRangeLabelsIfSame && lowTr === highTr) {\r\n labelVal = lowTr;\r\n } else {\r\n labelVal = this.options.rightToLeft ? highTr + ' - ' + lowTr : lowTr + ' - ' + highTr;\r\n }\r\n\r\n this.translateFn(labelVal, this.cmbLab, 'cmb', false);\r\n var pos = this.options.boundPointerLabels ? Math.min(\r\n Math.max(\r\n this.selBar.rzsp + this.selBar.rzsd / 2 - this.cmbLab.rzsd / 2,\r\n 0\r\n ),\r\n this.barDimension - this.cmbLab.rzsd\r\n ) : this.selBar.rzsp + this.selBar.rzsd / 2 - this.cmbLab.rzsd / 2;\r\n\r\n this.setPosition(this.cmbLab, pos);\r\n this.cmbLabelShown = true;\r\n this.hideEl(this.minLab);\r\n this.hideEl(this.maxLab);\r\n this.showEl(this.cmbLab);\r\n } else {\r\n this.cmbLabelShown = false;\r\n this.updateHighHandle(this.valueToPosition(this.highValue));\r\n this.updateLowHandle(this.valueToPosition(this.lowValue));\r\n this.showEl(this.maxLab);\r\n this.showEl(this.minLab);\r\n this.hideEl(this.cmbLab);\r\n }\r\n if (this.options.autoHideLimitLabels) {\r\n this.shFloorCeil();\r\n }\r\n },\r\n\r\n /**\r\n * Return the translated value if a translate function is provided else the original value\r\n * @param value\r\n * @param which if it's min or max handle\r\n * @returns {*}\r\n */\r\n getDisplayValue: function (value, which) {\r\n if (this.options.stepsArray && !this.options.bindIndexForStepsArray) {\r\n value = this.getStepValue(value);\r\n }\r\n return this.customTrFn(value, this.options.id, which);\r\n },\r\n\r\n /**\r\n * Round value to step and precision based on minValue\r\n *\r\n * @param {number} value\r\n * @param {number} customStep a custom step to override the defined step\r\n * @returns {number}\r\n */\r\n roundStep: function (value, customStep) {\r\n var step = customStep ? customStep : this.step,\r\n steppedDifference = parseFloat((value - this.minValue) / step).toPrecision(12);\r\n steppedDifference = Math.round(+steppedDifference) * step;\r\n var newValue = (this.minValue + steppedDifference).toFixed(this.precision);\r\n return +newValue;\r\n },\r\n\r\n /**\r\n * Hide element\r\n *\r\n * @param element\r\n * @returns {jqLite} The jqLite wrapped DOM element\r\n */\r\n hideEl: function (element) {\r\n return element.css({\r\n visibility: 'hidden'\r\n });\r\n },\r\n\r\n /**\r\n * Show element\r\n *\r\n * @param element The jqLite wrapped DOM element\r\n * @returns {jqLite} The jqLite\r\n */\r\n showEl: function (element) {\r\n if (!!element.rzAlwaysHide) {\r\n return element;\r\n }\r\n\r\n return element.css({\r\n visibility: 'visible'\r\n });\r\n },\r\n\r\n /**\r\n * Set element left/top position depending on whether slider is horizontal or vertical\r\n *\r\n * @param {jqLite} elem The jqLite wrapped DOM element\r\n * @param {number} pos\r\n * @returns {number}\r\n */\r\n setPosition: function (elem, pos) {\r\n elem.rzsp = pos;\r\n var css = {};\r\n css[this.positionProperty] = Math.round(pos) + 'px';\r\n elem.css(css);\r\n return pos;\r\n },\r\n\r\n /**\r\n * Get element width/height depending on whether slider is horizontal or vertical\r\n *\r\n * @param {jqLite} elem The jqLite wrapped DOM element\r\n * @returns {number}\r\n */\r\n getDimension: function (elem) {\r\n var val = elem[0].getBoundingClientRect();\r\n if (this.options.vertical) {\r\n elem.rzsd = (val.bottom - val.top) * this.options.scale;\r\n } else {\r\n elem.rzsd = (val.right - val.left) * this.options.scale;\r\n }\r\n return elem.rzsd;\r\n },\r\n\r\n /**\r\n * Set element width/height depending on whether slider is horizontal or vertical\r\n *\r\n * @param {jqLite} elem The jqLite wrapped DOM element\r\n * @param {number} dim\r\n * @returns {number}\r\n */\r\n setDimension: function (elem, dim) {\r\n elem.rzsd = dim;\r\n var css = {};\r\n css[this.dimensionProperty] = Math.round(dim) + 'px';\r\n elem.css(css);\r\n return dim;\r\n },\r\n\r\n /**\r\n * Returns a value that is within slider range\r\n *\r\n * @param {number} val\r\n * @returns {number}\r\n */\r\n sanitizeValue: function (val) {\r\n return Math.min(Math.max(val, this.minValue), this.maxValue);\r\n },\r\n\r\n /**\r\n * Translate value to pixel position\r\n *\r\n * @param {number} val\r\n * @returns {number}\r\n */\r\n valueToPosition: function (val) {\r\n var fn = this.linearValueToPosition;\r\n if (this.options.customValueToPosition) {\r\n fn = this.options.customValueToPosition;\r\n } else if (this.options.logScale) {\r\n fn = this.logValueToPosition;\r\n }\r\n\r\n val = this.sanitizeValue(val);\r\n var percent = fn(val, this.minValue, this.maxValue) || 0;\r\n if (this.options.rightToLeft) {\r\n percent = 1 - percent;\r\n }\r\n return percent * this.maxPos;\r\n },\r\n\r\n linearValueToPosition: function (val, minVal, maxVal) {\r\n var range = maxVal - minVal;\r\n return (val - minVal) / range;\r\n },\r\n\r\n logValueToPosition: function (val, minVal, maxVal) {\r\n val = Math.log(val);\r\n minVal = Math.log(minVal);\r\n maxVal = Math.log(maxVal);\r\n var range = maxVal - minVal;\r\n return (val - minVal) / range;\r\n },\r\n\r\n /**\r\n * Translate position to model value\r\n *\r\n * @param {number} position\r\n * @returns {number}\r\n */\r\n positionToValue: function (position) {\r\n var percent = position / this.maxPos;\r\n if (this.options.rightToLeft) {\r\n percent = 1 - percent;\r\n }\r\n var fn = this.linearPositionToValue;\r\n if (this.options.customPositionToValue) {\r\n fn = this.options.customPositionToValue;\r\n } else if (this.options.logScale) {\r\n fn = this.logPositionToValue;\r\n }\r\n return fn(percent, this.minValue, this.maxValue) || 0;\r\n },\r\n\r\n linearPositionToValue: function (percent, minVal, maxVal) {\r\n return percent * (maxVal - minVal) + minVal;\r\n },\r\n\r\n logPositionToValue: function (percent, minVal, maxVal) {\r\n minVal = Math.log(minVal);\r\n maxVal = Math.log(maxVal);\r\n var value = percent * (maxVal - minVal) + minVal;\r\n return Math.exp(value);\r\n },\r\n\r\n // Events\r\n /**\r\n * Get the X-coordinate or Y-coordinate of an event\r\n *\r\n * @param {Object} event The event\r\n * @returns {number}\r\n */\r\n getEventXY: function (event) {\r\n /* http://stackoverflow.com/a/12336075/282882 */\r\n // noinspection JSLint\r\n var clientXY = this.options.vertical ? 'clientY' : 'clientX';\r\n if (event[clientXY] !== undefined) {\r\n return event[clientXY];\r\n }\r\n\r\n return event.originalEvent === undefined ?\r\n event.touches[0][clientXY] : event.originalEvent.touches[0][clientXY];\r\n },\r\n\r\n /**\r\n * Compute the event position depending on whether the slider is horizontal or vertical\r\n * @param event\r\n * @returns {number}\r\n */\r\n getEventPosition: function (event) {\r\n var sliderPos = this.sliderElem.rzsp,\r\n eventPos = 0;\r\n if (this.options.vertical) {\r\n eventPos = -this.getEventXY(event) + sliderPos;\r\n } else {\r\n eventPos = this.getEventXY(event) - sliderPos;\r\n }\r\n return eventPos * this.options.scale - this.handleHalfDim; // #346 handleHalfDim is already scaled\r\n },\r\n\r\n /**\r\n * Get event names for move and event end\r\n *\r\n * @param {Event} event The event\r\n *\r\n * @return {{moveEvent: string, endEvent: string}}\r\n */\r\n getEventNames: function (event) {\r\n var eventNames = {\r\n moveEvent: '',\r\n endEvent: ''\r\n };\r\n\r\n if (event.touches || (event.originalEvent !== undefined && event.originalEvent.touches)) {\r\n eventNames.moveEvent = 'touchmove';\r\n eventNames.endEvent = 'touchend';\r\n } else {\r\n eventNames.moveEvent = 'mousemove';\r\n eventNames.endEvent = 'mouseup';\r\n }\r\n\r\n return eventNames;\r\n },\r\n\r\n /**\r\n * Get the handle closest to an event.\r\n *\r\n * @param event {Event} The event\r\n * @returns {jqLite} The handle closest to the event.\r\n */\r\n getNearestHandle: function (event) {\r\n if (!this.range) {\r\n return this.minH;\r\n }\r\n var position = this.getEventPosition(event),\r\n distanceMin = Math.abs(position - this.minH.rzsp),\r\n distanceMax = Math.abs(position - this.maxH.rzsp);\r\n if (distanceMin < distanceMax) {\r\n return this.minH;\r\n } else if (distanceMin > distanceMax) {\r\n return this.maxH;\r\n } else if (!this.options.rightToLeft) {\r\n return position < this.minH.rzsp ? this.minH : this.maxH;\r\n }\r\n return position > this.minH.rzsp ? this.minH : this.maxH;\r\n },\r\n\r\n /**\r\n * Wrapper function to focus an angular element\r\n *\r\n * @param el {AngularElement} the element to focus\r\n */\r\n focusElement: function (el) {\r\n var DOM_ELEMENT = 0;\r\n el[DOM_ELEMENT].focus();\r\n },\r\n\r\n /**\r\n * Bind mouse and touch events to slider handles\r\n *\r\n * @returns {undefined}\r\n */\r\n bindEvents: function () {\r\n var barTracking, barStart, barMove;\r\n\r\n if (this.options.draggableRange) {\r\n barTracking = 'rzSliderDrag';\r\n barStart = this.onDragStart;\r\n barMove = this.onDragMove;\r\n } else {\r\n barTracking = 'lowValue';\r\n barStart = this.onStart;\r\n barMove = this.onMove;\r\n }\r\n\r\n if (!this.options.onlyBindHandles) {\r\n this.selBar.on('mousedown', angular.bind(this, barStart, null, barTracking));\r\n this.selBar.on('mousedown', angular.bind(this, barMove, this.selBar));\r\n }\r\n\r\n if (this.options.draggableRangeOnly) {\r\n this.minH.on('mousedown', angular.bind(this, barStart, null, barTracking));\r\n this.maxH.on('mousedown', angular.bind(this, barStart, null, barTracking));\r\n } else {\r\n this.minH.on('mousedown', angular.bind(this, this.onStart, this.minH, 'lowValue'));\r\n if (this.range) {\r\n this.maxH.on('mousedown', angular.bind(this, this.onStart, this.maxH, 'highValue'));\r\n }\r\n if (!this.options.onlyBindHandles) {\r\n this.fullBar.on('mousedown', angular.bind(this, this.onStart, null, null));\r\n this.fullBar.on('mousedown', angular.bind(this, this.onMove, this.fullBar));\r\n this.ticks.on('mousedown', angular.bind(this, this.onStart, null, null));\r\n this.ticks.on('mousedown', angular.bind(this, this.onTickClick, this.ticks));\r\n }\r\n }\r\n\r\n if (!this.options.onlyBindHandles) {\r\n this.selBar.on('touchstart', angular.bind(this, barStart, null, barTracking));\r\n this.selBar.on('touchstart', angular.bind(this, barMove, this.selBar));\r\n }\r\n if (this.options.draggableRangeOnly) {\r\n this.minH.on('touchstart', angular.bind(this, barStart, null, barTracking));\r\n this.maxH.on('touchstart', angular.bind(this, barStart, null, barTracking));\r\n } else {\r\n this.minH.on('touchstart', angular.bind(this, this.onStart, this.minH, 'lowValue'));\r\n if (this.range) {\r\n this.maxH.on('touchstart', angular.bind(this, this.onStart, this.maxH, 'highValue'));\r\n }\r\n if (!this.options.onlyBindHandles) {\r\n this.fullBar.on('touchstart', angular.bind(this, this.onStart, null, null));\r\n this.fullBar.on('touchstart', angular.bind(this, this.onMove, this.fullBar));\r\n this.ticks.on('touchstart', angular.bind(this, this.onStart, null, null));\r\n this.ticks.on('touchstart', angular.bind(this, this.onTickClick, this.ticks));\r\n }\r\n }\r\n\r\n if (this.options.keyboardSupport) {\r\n this.minH.on('focus', angular.bind(this, this.onPointerFocus, this.minH, 'lowValue'));\r\n if (this.range) {\r\n this.maxH.on('focus', angular.bind(this, this.onPointerFocus, this.maxH, 'highValue'));\r\n }\r\n }\r\n },\r\n\r\n /**\r\n * Unbind mouse and touch events to slider handles\r\n *\r\n * @returns {undefined}\r\n */\r\n unbindEvents: function () {\r\n this.minH.off();\r\n this.maxH.off();\r\n this.fullBar.off();\r\n this.selBar.off();\r\n this.ticks.off();\r\n },\r\n\r\n /**\r\n * onStart event handler\r\n *\r\n * @param {?Object} pointer The jqLite wrapped DOM element; if null, the closest handle is used\r\n * @param {?string} ref The name of the handle being changed; if null, the closest handle's value is modified\r\n * @param {Event} event The event\r\n * @returns {undefined}\r\n */\r\n onStart: function (pointer, ref, event) {\r\n var ehMove, ehEnd,\r\n eventNames = this.getEventNames(event);\r\n\r\n event.stopPropagation();\r\n event.preventDefault();\r\n\r\n // We have to do this in case the HTML where the sliders are on\r\n // have been animated into view.\r\n this.calcViewDimensions();\r\n\r\n if (pointer) {\r\n this.tracking = ref;\r\n } else {\r\n pointer = this.getNearestHandle(event);\r\n this.tracking = pointer === this.minH ? 'lowValue' : 'highValue';\r\n }\r\n\r\n pointer.addClass('rz-active');\r\n\r\n if (this.options.keyboardSupport) {\r\n this.focusElement(pointer);\r\n }\r\n\r\n ehMove = angular.bind(this, this.dragging.active ? this.onDragMove : this.onMove, pointer);\r\n ehEnd = angular.bind(this, this.onEnd, ehMove);\r\n\r\n $document.on(eventNames.moveEvent, ehMove);\r\n $document.one(eventNames.endEvent, ehEnd);\r\n this.callOnStart();\r\n },\r\n\r\n /**\r\n * onMove event handler\r\n *\r\n * @param {jqLite} pointer\r\n * @param {Event} event The event\r\n * @param {boolean} fromTick if the event occured on a tick or not\r\n * @returns {undefined}\r\n */\r\n onMove: function (pointer, event, fromTick) {\r\n var newPos = this.getEventPosition(event),\r\n newValue,\r\n ceilValue = this.options.rightToLeft ? this.minValue : this.maxValue,\r\n flrValue = this.options.rightToLeft ? this.maxValue : this.minValue;\r\n\r\n if (newPos <= 0) {\r\n newValue = flrValue;\r\n } else if (newPos >= this.maxPos) {\r\n newValue = ceilValue;\r\n } else {\r\n newValue = this.positionToValue(newPos);\r\n if (fromTick && angular.isNumber(this.options.showTicks)) {\r\n newValue = this.roundStep(newValue, this.options.showTicks);\r\n } else {\r\n newValue = this.roundStep(newValue);\r\n }\r\n }\r\n this.positionTrackingHandle(newValue);\r\n },\r\n\r\n /**\r\n * onEnd event handler\r\n *\r\n * @param {Event} event The event\r\n * @param {Function} ehMove The the bound move event handler\r\n * @returns {undefined}\r\n */\r\n onEnd: function (ehMove, event) {\r\n var moveEventName = this.getEventNames(event).moveEvent;\r\n\r\n if (!this.options.keyboardSupport) {\r\n this.minH.removeClass('rz-active');\r\n this.maxH.removeClass('rz-active');\r\n this.tracking = '';\r\n }\r\n this.dragging.active = false;\r\n\r\n $document.off(moveEventName, ehMove);\r\n this.callOnEnd();\r\n },\r\n\r\n onTickClick: function (pointer, event) {\r\n this.onMove(pointer, event, true);\r\n },\r\n\r\n onPointerFocus: function (pointer, ref) {\r\n this.tracking = ref;\r\n pointer.one('blur', angular.bind(this, this.onPointerBlur, pointer));\r\n pointer.on('keydown', angular.bind(this, this.onKeyboardEvent));\r\n pointer.on('keyup', angular.bind(this, this.onKeyUp));\r\n this.firstKeyDown = true;\r\n pointer.addClass('rz-active');\r\n\r\n this.currentFocusElement = {\r\n pointer: pointer,\r\n ref: ref\r\n };\r\n },\r\n\r\n onKeyUp: function () {\r\n this.firstKeyDown = true;\r\n this.callOnEnd();\r\n },\r\n\r\n onPointerBlur: function (pointer) {\r\n pointer.off('keydown');\r\n pointer.off('keyup');\r\n this.tracking = '';\r\n pointer.removeClass('rz-active');\r\n this.currentFocusElement = null;\r\n },\r\n\r\n /**\r\n * Key actions helper function\r\n *\r\n * @param {number} currentValue value of the slider\r\n *\r\n * @returns {?Object} action value mappings\r\n */\r\n getKeyActions: function (currentValue) {\r\n var increaseStep = currentValue + this.step,\r\n decreaseStep = currentValue - this.step,\r\n increasePage = currentValue + this.valueRange / 10,\r\n decreasePage = currentValue - this.valueRange / 10;\r\n\r\n // Left to right default actions\r\n var actions = {\r\n 'UP': increaseStep,\r\n 'DOWN': decreaseStep,\r\n 'LEFT': decreaseStep,\r\n 'RIGHT': increaseStep,\r\n 'PAGEUP': increasePage,\r\n 'PAGEDOWN': decreasePage,\r\n 'HOME': this.minValue,\r\n 'END': this.maxValue\r\n };\r\n // right to left means swapping right and left arrows\r\n if (this.options.rightToLeft) {\r\n actions.LEFT = increaseStep;\r\n actions.RIGHT = decreaseStep;\r\n // right to left and vertical means we also swap up and down\r\n if (this.options.vertical) {\r\n actions.UP = decreaseStep;\r\n actions.DOWN = increaseStep;\r\n }\r\n }\r\n return actions;\r\n },\r\n\r\n onKeyboardEvent: function (event) {\r\n var currentValue = this[this.tracking],\r\n keyCode = event.keyCode || event.which,\r\n keys = {\r\n 38: 'UP',\r\n 40: 'DOWN',\r\n 37: 'LEFT',\r\n 39: 'RIGHT',\r\n 33: 'PAGEUP',\r\n 34: 'PAGEDOWN',\r\n 36: 'HOME',\r\n 35: 'END'\r\n },\r\n actions = this.getKeyActions(currentValue),\r\n key = keys[keyCode],\r\n action = actions[key];\r\n if (action == null || this.tracking === '') return;\r\n event.preventDefault();\r\n\r\n if (this.firstKeyDown) {\r\n this.firstKeyDown = false;\r\n this.callOnStart();\r\n }\r\n\r\n var self = this;\r\n $timeout(function () {\r\n var newValue = self.roundStep(self.sanitizeValue(action));\r\n if (!self.options.draggableRangeOnly) {\r\n self.positionTrackingHandle(newValue);\r\n } else {\r\n var difference = self.highValue - self.lowValue,\r\n newMinValue, newMaxValue;\r\n if (self.tracking === 'lowValue') {\r\n newMinValue = newValue;\r\n newMaxValue = newValue + difference;\r\n if (newMaxValue > self.maxValue) {\r\n newMaxValue = self.maxValue;\r\n newMinValue = newMaxValue - difference;\r\n }\r\n } else {\r\n newMaxValue = newValue;\r\n newMinValue = newValue - difference;\r\n if (newMinValue < self.minValue) {\r\n newMinValue = self.minValue;\r\n newMaxValue = newMinValue + difference;\r\n }\r\n }\r\n self.positionTrackingBar(newMinValue, newMaxValue);\r\n }\r\n });\r\n },\r\n\r\n /**\r\n * onDragStart event handler\r\n *\r\n * Handles dragging of the middle bar.\r\n *\r\n * @param {Object} pointer The jqLite wrapped DOM element\r\n * @param {string} ref One of the refLow, refHigh values\r\n * @param {Event} event The event\r\n * @returns {undefined}\r\n */\r\n onDragStart: function (pointer, ref, event) {\r\n var position = this.getEventPosition(event);\r\n this.dragging = {\r\n active: true,\r\n value: this.positionToValue(position),\r\n difference: this.highValue - this.lowValue,\r\n lowLimit: this.options.rightToLeft ? this.minH.rzsp - position : position - this.minH.rzsp,\r\n highLimit: this.options.rightToLeft ? position - this.maxH.rzsp : this.maxH.rzsp - position\r\n };\r\n\r\n this.onStart(pointer, ref, event);\r\n },\r\n\r\n /**\r\n * getValue helper function\r\n *\r\n * gets max or min value depending on whether the newPos is outOfBounds above or below the bar and rightToLeft\r\n *\r\n * @param {string} type 'max' || 'min' The value we are calculating\r\n * @param {number} newPos The new position\r\n * @param {boolean} outOfBounds Is the new position above or below the max/min?\r\n * @param {boolean} isAbove Is the new position above the bar if out of bounds?\r\n *\r\n * @returns {number}\r\n */\r\n getValue: function (type, newPos, outOfBounds, isAbove) {\r\n var isRTL = this.options.rightToLeft,\r\n value = null;\r\n\r\n if (type === 'min') {\r\n if (outOfBounds) {\r\n if (isAbove) {\r\n value = isRTL ? this.minValue : this.maxValue - this.dragging.difference;\r\n } else {\r\n value = isRTL ? this.maxValue - this.dragging.difference : this.minValue;\r\n }\r\n } else {\r\n value = isRTL ? this.positionToValue(newPos + this.dragging.lowLimit) : this.positionToValue(newPos - this.dragging.lowLimit);\r\n }\r\n } else if (outOfBounds) {\r\n if (isAbove) {\r\n value = isRTL ? this.minValue + this.dragging.difference : this.maxValue;\r\n } else {\r\n value = isRTL ? this.maxValue : this.minValue + this.dragging.difference;\r\n }\r\n } else if (isRTL) {\r\n value = this.positionToValue(newPos + this.dragging.lowLimit) + this.dragging.difference;\r\n } else {\r\n value = this.positionToValue(newPos - this.dragging.lowLimit) + this.dragging.difference;\r\n }\r\n return this.roundStep(value);\r\n },\r\n\r\n /**\r\n * onDragMove event handler\r\n *\r\n * Handles dragging of the middle bar.\r\n *\r\n * @param {jqLite} pointer\r\n * @param {Event} event The event\r\n * @returns {undefined}\r\n */\r\n onDragMove: function (pointer, event) {\r\n var newPos = this.getEventPosition(event),\r\n newMinValue, newMaxValue,\r\n ceilLimit, flrLimit,\r\n isUnderFlrLimit, isOverCeilLimit,\r\n flrH, ceilH;\r\n\r\n if (this.options.rightToLeft) {\r\n ceilLimit = this.dragging.lowLimit;\r\n flrLimit = this.dragging.highLimit;\r\n flrH = this.maxH;\r\n ceilH = this.minH;\r\n } else {\r\n ceilLimit = this.dragging.highLimit;\r\n flrLimit = this.dragging.lowLimit;\r\n flrH = this.minH;\r\n ceilH = this.maxH;\r\n }\r\n isUnderFlrLimit = newPos <= flrLimit;\r\n isOverCeilLimit = newPos >= this.maxPos - ceilLimit;\r\n\r\n if (isUnderFlrLimit) {\r\n if (flrH.rzsp === 0) {\r\n return;\r\n }\r\n newMinValue = this.getValue('min', newPos, true, false);\r\n newMaxValue = this.getValue('max', newPos, true, false);\r\n } else if (isOverCeilLimit) {\r\n if (ceilH.rzsp === this.maxPos) {\r\n return;\r\n }\r\n newMaxValue = this.getValue('max', newPos, true, true);\r\n newMinValue = this.getValue('min', newPos, true, true);\r\n } else {\r\n newMinValue = this.getValue('min', newPos, false);\r\n newMaxValue = this.getValue('max', newPos, false);\r\n }\r\n this.positionTrackingBar(newMinValue, newMaxValue);\r\n },\r\n\r\n /**\r\n * Set the new value and position for the entire bar\r\n *\r\n * @param {number} newMinValue the new minimum value\r\n * @param {number} newMaxValue the new maximum value\r\n */\r\n positionTrackingBar: function (newMinValue, newMaxValue) {\r\n\r\n if (this.options.minLimit != null && newMinValue < this.options.minLimit) {\r\n newMinValue = this.options.minLimit;\r\n newMaxValue = newMinValue + this.dragging.difference;\r\n }\r\n if (this.options.maxLimit != null && newMaxValue > this.options.maxLimit) {\r\n newMaxValue = this.options.maxLimit;\r\n newMinValue = newMaxValue - this.dragging.difference;\r\n }\r\n\r\n this.lowValue = newMinValue;\r\n this.highValue = newMaxValue;\r\n this.applyLowValue();\r\n if (this.range) {this.applyHighValue();}\r\n this.applyModel(true);\r\n this.updateHandles('lowValue', this.valueToPosition(newMinValue));\r\n this.updateHandles('highValue', this.valueToPosition(newMaxValue));\r\n },\r\n\r\n /**\r\n * Set the new value and position to the current tracking handle\r\n *\r\n * @param {number} newValue new model value\r\n */\r\n positionTrackingHandle: function (newValue) {\r\n var valueChanged = false;\r\n newValue = this.applyMinMaxLimit(newValue);\r\n if (this.range) {\r\n if (this.options.pushRange) {\r\n newValue = this.applyPushRange(newValue);\r\n valueChanged = true;\r\n } else {\r\n if (this.options.noSwitching) {\r\n if (this.tracking === 'lowValue' && newValue > this.highValue) {\r\n newValue = this.applyMinMaxRange(this.highValue);\r\n } else if (this.tracking === 'highValue' && newValue < this.lowValue) {\r\n newValue = this.applyMinMaxRange(this.lowValue);\r\n }\r\n }\r\n newValue = this.applyMinMaxRange(newValue);\r\n /* This is to check if we need to switch the min and max handles */\r\n if (this.tracking === 'lowValue' && newValue > this.highValue) {\r\n this.lowValue = this.highValue;\r\n this.applyLowValue();\r\n this.applyModel();\r\n this.updateHandles(this.tracking, this.maxH.rzsp);\r\n this.updateAriaAttributes();\r\n this.tracking = 'highValue';\r\n this.minH.removeClass('rz-active');\r\n this.maxH.addClass('rz-active');\r\n if (this.options.keyboardSupport) {\r\n this.focusElement(this.maxH);\r\n }\r\n valueChanged = true;\r\n } else if (this.tracking === 'highValue' && newValue < this.lowValue) {\r\n this.highValue = this.lowValue;\r\n this.applyHighValue();\r\n this.applyModel();\r\n this.updateHandles(this.tracking, this.minH.rzsp);\r\n this.updateAriaAttributes();\r\n this.tracking = 'lowValue';\r\n this.maxH.removeClass('rz-active');\r\n this.minH.addClass('rz-active');\r\n if (this.options.keyboardSupport) {\r\n this.focusElement(this.minH);\r\n }\r\n valueChanged = true;\r\n }\r\n }\r\n }\r\n\r\n if (this[this.tracking] !== newValue) {\r\n this[this.tracking] = newValue;\r\n if (this.tracking === 'lowValue') {\r\n this.applyLowValue();\r\n } else {\r\n this.applyHighValue();\r\n }\r\n this.applyModel();\r\n this.updateHandles(this.tracking, this.valueToPosition(newValue));\r\n this.updateAriaAttributes();\r\n valueChanged = true;\r\n }\r\n\r\n if (valueChanged) {this.applyModel(true);}\r\n },\r\n\r\n applyMinMaxLimit: function (newValue) {\r\n if (this.options.minLimit != null && newValue < this.options.minLimit) {\r\n return this.options.minLimit;\r\n }\r\n if (this.options.maxLimit != null && newValue > this.options.maxLimit) {\r\n return this.options.maxLimit;\r\n }\r\n return newValue;\r\n },\r\n\r\n applyMinMaxRange: function (newValue) {\r\n var oppositeValue = this.tracking === 'lowValue' ? this.highValue : this.lowValue,\r\n difference = Math.abs(newValue - oppositeValue);\r\n if (this.options.minRange != null) {\r\n if (difference < this.options.minRange) {\r\n if (this.tracking === 'lowValue') {\r\n return this.highValue - this.options.minRange;\r\n }\r\n return this.lowValue + this.options.minRange;\r\n }\r\n }\r\n if (this.options.maxRange != null) {\r\n if (difference > this.options.maxRange) {\r\n if (this.tracking === 'lowValue') {\r\n return this.highValue - this.options.maxRange;\r\n }\r\n return this.lowValue + this.options.maxRange;\r\n }\r\n }\r\n return newValue;\r\n },\r\n\r\n applyPushRange: function (newValue) {\r\n var difference = this.tracking === 'lowValue' ? this.highValue - newValue : newValue - this.lowValue,\r\n minRange = this.options.minRange !== null ? this.options.minRange : this.options.step,\r\n maxRange = this.options.maxRange;\r\n // if smaller than minRange\r\n if (difference < minRange) {\r\n if (this.tracking === 'lowValue') {\r\n this.highValue = Math.min(newValue + minRange, this.maxValue);\r\n newValue = this.highValue - minRange;\r\n this.applyHighValue();\r\n this.updateHandles('highValue', this.valueToPosition(this.highValue));\r\n } else {\r\n this.lowValue = Math.max(newValue - minRange, this.minValue);\r\n newValue = this.lowValue + minRange;\r\n this.applyLowValue();\r\n this.updateHandles('lowValue', this.valueToPosition(this.lowValue));\r\n }\r\n this.updateAriaAttributes();\r\n }\r\n // if greater than maxRange\r\n else if (maxRange !== null && difference > maxRange) {\r\n if (this.tracking === 'lowValue') {\r\n this.highValue = newValue + maxRange;\r\n this.applyHighValue();\r\n this.updateHandles('highValue', this.valueToPosition(this.highValue));\r\n } else {\r\n this.lowValue = newValue - maxRange;\r\n this.applyLowValue();\r\n this.updateHandles('lowValue', this.valueToPosition(this.lowValue));\r\n }\r\n this.updateAriaAttributes();\r\n }\r\n return newValue;\r\n },\r\n\r\n /**\r\n * Apply the model values using scope.$apply.\r\n * We wrap it with the internalChange flag to avoid the watchers to be called\r\n */\r\n applyModel: function (callOnChange) {\r\n this.internalChange = true;\r\n this.scope.$apply();\r\n callOnChange && this.callOnChange();\r\n this.internalChange = false;\r\n },\r\n\r\n /**\r\n * Call the onStart callback if defined\r\n * The callback call is wrapped in a $evalAsync to ensure that its result will be applied to the scope.\r\n *\r\n * @returns {undefined}\r\n */\r\n callOnStart: function () {\r\n if (this.options.onStart) {\r\n var self = this,\r\n pointerType = this.tracking === 'lowValue' ? 'min' : 'max';\r\n this.scope.$evalAsync(function () {\r\n self.options.onStart(self.options.id, self.scope.rzSliderModel, self.scope.rzSliderHigh, pointerType);\r\n });\r\n }\r\n },\r\n\r\n /**\r\n * Call the onChange callback if defined\r\n * The callback call is wrapped in a $evalAsync to ensure that its result will be applied to the scope.\r\n *\r\n * @returns {undefined}\r\n */\r\n callOnChange: function () {\r\n if (this.options.onChange) {\r\n var self = this,\r\n pointerType = this.tracking === 'lowValue' ? 'min' : 'max';\r\n this.scope.$evalAsync(function () {\r\n self.options.onChange(self.options.id, self.scope.rzSliderModel, self.scope.rzSliderHigh, pointerType);\r\n });\r\n }\r\n },\r\n\r\n /**\r\n * Call the onEnd callback if defined\r\n * The callback call is wrapped in a $evalAsync to ensure that its result will be applied to the scope.\r\n *\r\n * @returns {undefined}\r\n */\r\n callOnEnd: function () {\r\n if (this.options.onEnd) {\r\n var self = this,\r\n pointerType = this.tracking === 'lowValue' ? 'min' : 'max';\r\n this.scope.$evalAsync(function () {\r\n self.options.onEnd(self.options.id, self.scope.rzSliderModel, self.scope.rzSliderHigh, pointerType);\r\n });\r\n }\r\n this.scope.$emit('slideEnded');\r\n }\r\n };\r\n\r\n return Slider;\r\n }])\r\n\r\n .directive('rzslider', ['RzSlider', function (RzSlider) {\r\n 'use strict';\r\n\r\n return {\r\n restrict: 'AE',\r\n replace: true,\r\n scope: {\r\n rzSliderModel: '=?',\r\n rzSliderHigh: '=?',\r\n rzSliderOptions: '&?',\r\n rzSliderTplUrl: '@'\r\n },\r\n\r\n /**\r\n * Return template URL\r\n *\r\n * @param {jqLite} elem\r\n * @param {Object} attrs\r\n * @return {string}\r\n */\r\n templateUrl: function (elem, attrs) {\r\n // noinspection JSUnresolvedVariable\r\n return attrs.rzSliderTplUrl || 'rzSliderTpl.html';\r\n },\r\n\r\n link: function (scope, elem) {\r\n scope.slider = new RzSlider(scope, elem); // attach on scope so we can test it\r\n }\r\n };\r\n }]);\r\n\r\n})();\r\n","/*\r\n * angular-ui-bootstrap\r\n * http://angular-ui.github.io/bootstrap/\r\n\r\n * Version: 2.5.0 - 2017-01-28\r\n * License: MIT\r\n */\r\nangular.module(\"ui.bootstrap\", [\"ui.bootstrap.tpls\",\"ui.bootstrap.collapse\",\"ui.bootstrap.tabindex\",\"ui.bootstrap.accordion\",\"ui.bootstrap.alert\",\"ui.bootstrap.buttons\",\"ui.bootstrap.dateparser\",\"ui.bootstrap.datepicker\",\"ui.bootstrap.isClass\",\"ui.bootstrap.position\",\"ui.bootstrap.multiMap\",\"ui.bootstrap.modal\",\"ui.bootstrap.stackedMap\",\"ui.bootstrap.paging\",\"ui.bootstrap.pagination\",\"ui.bootstrap.tooltip\",\"ui.bootstrap.popover\",\"ui.bootstrap.tabs\",\"ui.bootstrap.rating\",\"ui.bootstrap.dropdown\",\"ui.bootstrap.datepickerPopup\"]);\r\nangular.module(\"ui.bootstrap.tpls\", [\"uib/template/accordion/accordion-group.html\",\"uib/template/accordion/accordion.html\",\"uib/template/alert/alert.html\",\"uib/template/datepicker/datepicker.html\",\"uib/template/datepicker/day.html\",\"uib/template/datepicker/month.html\",\"uib/template/datepicker/year.html\",\"uib/template/modal/window.html\",\"uib/template/pagination/pagination.html\",\"uib/template/tooltip/tooltip-html-popup.html\",\"uib/template/tooltip/tooltip-popup.html\",\"uib/template/tooltip/tooltip-template-popup.html\",\"uib/template/popover/popover-html.html\",\"uib/template/popover/popover-template.html\",\"uib/template/popover/popover.html\",\"uib/template/tabs/tab.html\",\"uib/template/tabs/tabset.html\",\"uib/template/rating/rating.html\",\"uib/template/datepickerPopup/popup.html\"]);\r\nangular.module('ui.bootstrap.collapse', [])\r\n\r\n .directive('uibCollapse', ['$animate', '$q', '$parse', '$injector', function($animate, $q, $parse, $injector) {\r\n var $animateCss = $injector.has('$animateCss') ? $injector.get('$animateCss') : null;\r\n return {\r\n link: function(scope, element, attrs) {\r\n var expandingExpr = $parse(attrs.expanding),\r\n expandedExpr = $parse(attrs.expanded),\r\n collapsingExpr = $parse(attrs.collapsing),\r\n collapsedExpr = $parse(attrs.collapsed),\r\n horizontal = false,\r\n css = {},\r\n cssTo = {};\r\n\r\n init();\r\n\r\n function init() {\r\n horizontal = !!('horizontal' in attrs);\r\n if (horizontal) {\r\n css = {\r\n width: ''\r\n };\r\n cssTo = {width: '0'};\r\n } else {\r\n css = {\r\n height: ''\r\n };\r\n cssTo = {height: '0'};\r\n }\r\n if (!scope.$eval(attrs.uibCollapse)) {\r\n element.addClass('in')\r\n .addClass('collapse')\r\n .attr('aria-expanded', true)\r\n .attr('aria-hidden', false)\r\n .css(css);\r\n }\r\n }\r\n\r\n function getScrollFromElement(element) {\r\n if (horizontal) {\r\n return {width: element.scrollWidth + 'px'};\r\n }\r\n // hack\r\n $(element).css({'display': 'block', 'height': 'auto'});\r\n var h = $(element).outerHeight(true);\r\n $(element).css({'display': '', 'height': ''});\r\n return {height: h + 'px'};\r\n // return {height: element.scrollHeight + 'px'};\r\n // hack end\r\n }\r\n\r\n function expand() {\r\n if (element.hasClass('collapse') && element.hasClass('in')) {\r\n return;\r\n }\r\n\r\n $q.resolve(expandingExpr(scope))\r\n .then(function() {\r\n element.removeClass('collapse')\r\n .addClass('collapsing')\r\n .attr('aria-expanded', true)\r\n .attr('aria-hidden', false);\r\n\r\n if ($animateCss) {\r\n $animateCss(element, {\r\n addClass: 'in',\r\n easing: 'ease',\r\n css: {\r\n overflow: 'hidden'\r\n },\r\n to: getScrollFromElement(element[0])\r\n }).start()['finally'](expandDone);\r\n } else {\r\n $animate.addClass(element, 'in', {\r\n css: {\r\n overflow: 'hidden'\r\n },\r\n to: getScrollFromElement(element[0])\r\n }).then(expandDone);\r\n }\r\n }, angular.noop);\r\n }\r\n\r\n function expandDone() {\r\n element.removeClass('collapsing')\r\n .addClass('collapse')\r\n .css(css);\r\n expandedExpr(scope);\r\n }\r\n\r\n function collapse() {\r\n if (!element.hasClass('collapse') && !element.hasClass('in')) {\r\n return collapseDone();\r\n }\r\n\r\n $q.resolve(collapsingExpr(scope))\r\n .then(function() {\r\n element\r\n // IMPORTANT: The width must be set before adding \"collapsing\" class.\r\n // Otherwise, the browser attempts to animate from width 0 (in\r\n // collapsing class) to the given width here.\r\n .css(getScrollFromElement(element[0]))\r\n // initially all panel collapse have the collapse class, this removal\r\n // prevents the animation from jumping to collapsed state\r\n .removeClass('collapse')\r\n .addClass('collapsing')\r\n .attr('aria-expanded', false)\r\n .attr('aria-hidden', true);\r\n\r\n if ($animateCss) {\r\n $animateCss(element, {\r\n removeClass: 'in',\r\n to: cssTo\r\n }).start()['finally'](collapseDone);\r\n } else {\r\n $animate.removeClass(element, 'in', {\r\n to: cssTo\r\n }).then(collapseDone);\r\n }\r\n }, angular.noop);\r\n }\r\n\r\n function collapseDone() {\r\n element.css(cssTo); // Required so that collapse works when animation is disabled\r\n element.removeClass('collapsing')\r\n .addClass('collapse');\r\n collapsedExpr(scope);\r\n }\r\n\r\n scope.$watch(attrs.uibCollapse, function(shouldCollapse) {\r\n if (shouldCollapse) {\r\n collapse();\r\n } else {\r\n expand();\r\n }\r\n });\r\n }\r\n };\r\n }]);\r\n\r\nangular.module('ui.bootstrap.tabindex', [])\r\n\r\n.directive('uibTabindexToggle', function() {\r\n return {\r\n restrict: 'A',\r\n link: function(scope, elem, attrs) {\r\n attrs.$observe('disabled', function(disabled) {\r\n attrs.$set('tabindex', disabled ? -1 : null);\r\n });\r\n }\r\n };\r\n});\r\n\r\nangular.module('ui.bootstrap.accordion', ['ui.bootstrap.collapse', 'ui.bootstrap.tabindex'])\r\n\r\n.constant('uibAccordionConfig', {\r\n closeOthers: true\r\n})\r\n\r\n.controller('UibAccordionController', ['$scope', '$attrs', 'uibAccordionConfig', function($scope, $attrs, accordionConfig) {\r\n // This array keeps track of the accordion groups\r\n this.groups = [];\r\n\r\n // Ensure that all the groups in this accordion are closed, unless close-others explicitly says not to\r\n this.closeOthers = function(openGroup) {\r\n var closeOthers = angular.isDefined($attrs.closeOthers) ?\r\n $scope.$eval($attrs.closeOthers) : accordionConfig.closeOthers;\r\n if (closeOthers) {\r\n angular.forEach(this.groups, function(group) {\r\n if (group !== openGroup) {\r\n group.isOpen = false;\r\n }\r\n });\r\n }\r\n };\r\n\r\n // This is called from the accordion-group directive to add itself to the accordion\r\n this.addGroup = function(groupScope) {\r\n var that = this;\r\n this.groups.push(groupScope);\r\n\r\n groupScope.$on('$destroy', function(event) {\r\n that.removeGroup(groupScope);\r\n });\r\n };\r\n\r\n // This is called from the accordion-group directive when to remove itself\r\n this.removeGroup = function(group) {\r\n var index = this.groups.indexOf(group);\r\n if (index !== -1) {\r\n this.groups.splice(index, 1);\r\n }\r\n };\r\n}])\r\n\r\n// The accordion directive simply sets up the directive controller\r\n// and adds an accordion CSS class to itself element.\r\n.directive('uibAccordion', function() {\r\n return {\r\n controller: 'UibAccordionController',\r\n controllerAs: 'accordion',\r\n transclude: true,\r\n templateUrl: function(element, attrs) {\r\n return attrs.templateUrl || 'uib/template/accordion/accordion.html';\r\n }\r\n };\r\n})\r\n\r\n// The accordion-group directive indicates a block of html that will expand and collapse in an accordion\r\n.directive('uibAccordionGroup', function() {\r\n return {\r\n require: '^uibAccordion', // We need this directive to be inside an accordion\r\n transclude: true, // It transcludes the contents of the directive into the template\r\n restrict: 'A',\r\n templateUrl: function(element, attrs) {\r\n return attrs.templateUrl || 'uib/template/accordion/accordion-group.html';\r\n },\r\n scope: {\r\n heading: '@', // Interpolate the heading attribute onto this scope\r\n panelClass: '@?', // Ditto with panelClass\r\n isOpen: '=?',\r\n isDisabled: '=?'\r\n },\r\n controller: function() {\r\n this.setHeading = function(element) {\r\n this.heading = element;\r\n };\r\n },\r\n link: function(scope, element, attrs, accordionCtrl) {\r\n element.addClass('panel');\r\n accordionCtrl.addGroup(scope);\r\n\r\n scope.openClass = attrs.openClass || 'panel-open';\r\n scope.panelClass = attrs.panelClass || 'panel-default';\r\n scope.$watch('isOpen', function(value) {\r\n element.toggleClass(scope.openClass, !!value);\r\n if (value) {\r\n accordionCtrl.closeOthers(scope);\r\n }\r\n });\r\n\r\n scope.toggleOpen = function($event) {\r\n if (!scope.isDisabled) {\r\n if (!$event || $event.which === 32) {\r\n scope.isOpen = !scope.isOpen;\r\n }\r\n }\r\n };\r\n\r\n var id = 'accordiongroup-' + scope.$id + '-' + Math.floor(Math.random() * 10000);\r\n scope.headingId = id + '-tab';\r\n scope.panelId = id + '-panel';\r\n }\r\n };\r\n})\r\n\r\n// Use accordion-heading below an accordion-group to provide a heading containing HTML\r\n.directive('uibAccordionHeading', function() {\r\n return {\r\n transclude: true, // Grab the contents to be used as the heading\r\n template: '', // In effect remove this element!\r\n replace: true,\r\n require: '^uibAccordionGroup',\r\n link: function(scope, element, attrs, accordionGroupCtrl, transclude) {\r\n // Pass the heading to the accordion-group controller\r\n // so that it can be transcluded into the right place in the template\r\n // [The second parameter to transclude causes the elements to be cloned so that they work in ng-repeat]\r\n accordionGroupCtrl.setHeading(transclude(scope, angular.noop));\r\n }\r\n };\r\n})\r\n\r\n// Use in the accordion-group template to indicate where you want the heading to be transcluded\r\n// You must provide the property on the accordion-group controller that will hold the transcluded element\r\n.directive('uibAccordionTransclude', function() {\r\n return {\r\n require: '^uibAccordionGroup',\r\n link: function(scope, element, attrs, controller) {\r\n scope.$watch(function() { return controller[attrs.uibAccordionTransclude]; }, function(heading) {\r\n if (heading) {\r\n var elem = angular.element(element[0].querySelector(getHeaderSelectors()));\r\n elem.html('');\r\n elem.append(heading);\r\n }\r\n });\r\n }\r\n };\r\n\r\n function getHeaderSelectors() {\r\n return 'uib-accordion-header,' +\r\n 'data-uib-accordion-header,' +\r\n 'x-uib-accordion-header,' +\r\n 'uib\\\\:accordion-header,' +\r\n '[uib-accordion-header],' +\r\n '[data-uib-accordion-header],' +\r\n '[x-uib-accordion-header]';\r\n }\r\n});\r\n\r\nangular.module('ui.bootstrap.alert', [])\r\n\r\n.controller('UibAlertController', ['$scope', '$element', '$attrs', '$interpolate', '$timeout', function($scope, $element, $attrs, $interpolate, $timeout) {\r\n $scope.closeable = !!$attrs.close;\r\n $element.addClass('alert');\r\n $attrs.$set('role', 'alert');\r\n if ($scope.closeable) {\r\n $element.addClass('alert-dismissible');\r\n }\r\n\r\n var dismissOnTimeout = angular.isDefined($attrs.dismissOnTimeout) ?\r\n $interpolate($attrs.dismissOnTimeout)($scope.$parent) : null;\r\n\r\n if (dismissOnTimeout) {\r\n $timeout(function() {\r\n $scope.close();\r\n }, parseInt(dismissOnTimeout, 10));\r\n }\r\n}])\r\n\r\n.directive('uibAlert', function() {\r\n return {\r\n controller: 'UibAlertController',\r\n controllerAs: 'alert',\r\n restrict: 'A',\r\n templateUrl: function(element, attrs) {\r\n return attrs.templateUrl || 'uib/template/alert/alert.html';\r\n },\r\n transclude: true,\r\n scope: {\r\n close: '&'\r\n }\r\n };\r\n});\r\n\r\nangular.module('ui.bootstrap.buttons', [])\r\n\r\n.constant('uibButtonConfig', {\r\n activeClass: 'active',\r\n toggleEvent: 'click'\r\n})\r\n\r\n.controller('UibButtonsController', ['uibButtonConfig', function(buttonConfig) {\r\n this.activeClass = buttonConfig.activeClass || 'active';\r\n this.toggleEvent = buttonConfig.toggleEvent || 'click';\r\n}])\r\n\r\n.directive('uibBtnRadio', ['$parse', function($parse) {\r\n return {\r\n require: ['uibBtnRadio', 'ngModel'],\r\n controller: 'UibButtonsController',\r\n controllerAs: 'buttons',\r\n link: function(scope, element, attrs, ctrls) {\r\n var buttonsCtrl = ctrls[0], ngModelCtrl = ctrls[1];\r\n var uncheckableExpr = $parse(attrs.uibUncheckable);\r\n\r\n element.find('input').css({display: 'none'});\r\n\r\n //model -> UI\r\n ngModelCtrl.$render = function() {\r\n element.toggleClass(buttonsCtrl.activeClass, angular.equals(ngModelCtrl.$modelValue, scope.$eval(attrs.uibBtnRadio)));\r\n };\r\n\r\n //ui->model\r\n element.on(buttonsCtrl.toggleEvent, function() {\r\n if (attrs.disabled) {\r\n return;\r\n }\r\n\r\n var isActive = element.hasClass(buttonsCtrl.activeClass);\r\n\r\n if (!isActive || angular.isDefined(attrs.uncheckable)) {\r\n scope.$apply(function() {\r\n ngModelCtrl.$setViewValue(isActive ? null : scope.$eval(attrs.uibBtnRadio));\r\n ngModelCtrl.$render();\r\n });\r\n }\r\n });\r\n\r\n if (attrs.uibUncheckable) {\r\n scope.$watch(uncheckableExpr, function(uncheckable) {\r\n attrs.$set('uncheckable', uncheckable ? '' : undefined);\r\n });\r\n }\r\n }\r\n };\r\n}])\r\n\r\n.directive('uibBtnCheckbox', function() {\r\n return {\r\n require: ['uibBtnCheckbox', 'ngModel'],\r\n controller: 'UibButtonsController',\r\n controllerAs: 'button',\r\n link: function(scope, element, attrs, ctrls) {\r\n var buttonsCtrl = ctrls[0], ngModelCtrl = ctrls[1];\r\n\r\n element.find('input').css({display: 'none'});\r\n\r\n function getTrueValue() {\r\n return getCheckboxValue(attrs.btnCheckboxTrue, true);\r\n }\r\n\r\n function getFalseValue() {\r\n return getCheckboxValue(attrs.btnCheckboxFalse, false);\r\n }\r\n\r\n function getCheckboxValue(attribute, defaultValue) {\r\n return angular.isDefined(attribute) ? scope.$eval(attribute) : defaultValue;\r\n }\r\n\r\n //model -> UI\r\n ngModelCtrl.$render = function() {\r\n element.toggleClass(buttonsCtrl.activeClass, angular.equals(ngModelCtrl.$modelValue, getTrueValue()));\r\n };\r\n\r\n //ui->model\r\n element.on(buttonsCtrl.toggleEvent, function() {\r\n if (attrs.disabled) {\r\n return;\r\n }\r\n\r\n scope.$apply(function() {\r\n ngModelCtrl.$setViewValue(element.hasClass(buttonsCtrl.activeClass) ? getFalseValue() : getTrueValue());\r\n ngModelCtrl.$render();\r\n });\r\n });\r\n }\r\n };\r\n});\r\n\r\nangular.module('ui.bootstrap.dateparser', [])\r\n\r\n.service('uibDateParser', ['$log', '$locale', 'dateFilter', 'orderByFilter', 'filterFilter', function($log, $locale, dateFilter, orderByFilter, filterFilter) {\r\n // Pulled from https://github.com/mbostock/d3/blob/master/src/format/requote.js\r\n var SPECIAL_CHARACTERS_REGEXP = /[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g;\r\n\r\n var localeId;\r\n var formatCodeToRegex;\r\n\r\n this.init = function() {\r\n localeId = $locale.id;\r\n\r\n this.parsers = {};\r\n this.formatters = {};\r\n\r\n formatCodeToRegex = [\r\n {\r\n key: 'yyyy',\r\n regex: '\\\\d{4}',\r\n apply: function(value) { this.year = +value; },\r\n formatter: function(date) {\r\n var _date = new Date();\r\n _date.setFullYear(Math.abs(date.getFullYear()));\r\n return dateFilter(_date, 'yyyy');\r\n }\r\n },\r\n {\r\n key: 'yy',\r\n regex: '\\\\d{2}',\r\n apply: function(value) { value = +value; this.year = value < 69 ? value + 2000 : value + 1900; },\r\n formatter: function(date) {\r\n var _date = new Date();\r\n _date.setFullYear(Math.abs(date.getFullYear()));\r\n return dateFilter(_date, 'yy');\r\n }\r\n },\r\n {\r\n key: 'y',\r\n regex: '\\\\d{1,4}',\r\n apply: function(value) { this.year = +value; },\r\n formatter: function(date) {\r\n var _date = new Date();\r\n _date.setFullYear(Math.abs(date.getFullYear()));\r\n return dateFilter(_date, 'y');\r\n }\r\n },\r\n {\r\n key: 'M!',\r\n regex: '0?[1-9]|1[0-2]',\r\n apply: function(value) { this.month = value - 1; },\r\n formatter: function(date) {\r\n var value = date.getMonth();\r\n if (/^[0-9]$/.test(value)) {\r\n return dateFilter(date, 'MM');\r\n }\r\n\r\n return dateFilter(date, 'M');\r\n }\r\n },\r\n {\r\n key: 'MMMM',\r\n regex: $locale.DATETIME_FORMATS.MONTH.join('|'),\r\n apply: function(value) { this.month = $locale.DATETIME_FORMATS.MONTH.indexOf(value); },\r\n formatter: function(date) { return dateFilter(date, 'MMMM'); }\r\n },\r\n {\r\n key: 'MMM',\r\n regex: $locale.DATETIME_FORMATS.SHORTMONTH.join('|'),\r\n apply: function(value) { this.month = $locale.DATETIME_FORMATS.SHORTMONTH.indexOf(value); },\r\n formatter: function(date) { return dateFilter(date, 'MMM'); }\r\n },\r\n {\r\n key: 'MM',\r\n regex: '0[1-9]|1[0-2]',\r\n apply: function(value) { this.month = value - 1; },\r\n formatter: function(date) { return dateFilter(date, 'MM'); }\r\n },\r\n {\r\n key: 'M',\r\n regex: '[1-9]|1[0-2]',\r\n apply: function(value) { this.month = value - 1; },\r\n formatter: function(date) { return dateFilter(date, 'M'); }\r\n },\r\n {\r\n key: 'd!',\r\n regex: '[0-2]?[0-9]{1}|3[0-1]{1}',\r\n apply: function(value) { this.date = +value; },\r\n formatter: function(date) {\r\n var value = date.getDate();\r\n if (/^[1-9]$/.test(value)) {\r\n return dateFilter(date, 'dd');\r\n }\r\n\r\n return dateFilter(date, 'd');\r\n }\r\n },\r\n {\r\n key: 'dd',\r\n regex: '[0-2][0-9]{1}|3[0-1]{1}',\r\n apply: function(value) { this.date = +value; },\r\n formatter: function(date) { return dateFilter(date, 'dd'); }\r\n },\r\n {\r\n key: 'd',\r\n regex: '[1-2]?[0-9]{1}|3[0-1]{1}',\r\n apply: function(value) { this.date = +value; },\r\n formatter: function(date) { return dateFilter(date, 'd'); }\r\n },\r\n {\r\n key: 'EEEE',\r\n regex: $locale.DATETIME_FORMATS.DAY.join('|'),\r\n formatter: function(date) { return dateFilter(date, 'EEEE'); }\r\n },\r\n {\r\n key: 'EEE',\r\n regex: $locale.DATETIME_FORMATS.SHORTDAY.join('|'),\r\n formatter: function(date) { return dateFilter(date, 'EEE'); }\r\n },\r\n {\r\n key: 'HH',\r\n regex: '(?:0|1)[0-9]|2[0-3]',\r\n apply: function(value) { this.hours = +value; },\r\n formatter: function(date) { return dateFilter(date, 'HH'); }\r\n },\r\n {\r\n key: 'hh',\r\n regex: '0[0-9]|1[0-2]',\r\n apply: function(value) { this.hours = +value; },\r\n formatter: function(date) { return dateFilter(date, 'hh'); }\r\n },\r\n {\r\n key: 'H',\r\n regex: '1?[0-9]|2[0-3]',\r\n apply: function(value) { this.hours = +value; },\r\n formatter: function(date) { return dateFilter(date, 'H'); }\r\n },\r\n {\r\n key: 'h',\r\n regex: '[0-9]|1[0-2]',\r\n apply: function(value) { this.hours = +value; },\r\n formatter: function(date) { return dateFilter(date, 'h'); }\r\n },\r\n {\r\n key: 'mm',\r\n regex: '[0-5][0-9]',\r\n apply: function(value) { this.minutes = +value; },\r\n formatter: function(date) { return dateFilter(date, 'mm'); }\r\n },\r\n {\r\n key: 'm',\r\n regex: '[0-9]|[1-5][0-9]',\r\n apply: function(value) { this.minutes = +value; },\r\n formatter: function(date) { return dateFilter(date, 'm'); }\r\n },\r\n {\r\n key: 'sss',\r\n regex: '[0-9][0-9][0-9]',\r\n apply: function(value) { this.milliseconds = +value; },\r\n formatter: function(date) { return dateFilter(date, 'sss'); }\r\n },\r\n {\r\n key: 'ss',\r\n regex: '[0-5][0-9]',\r\n apply: function(value) { this.seconds = +value; },\r\n formatter: function(date) { return dateFilter(date, 'ss'); }\r\n },\r\n {\r\n key: 's',\r\n regex: '[0-9]|[1-5][0-9]',\r\n apply: function(value) { this.seconds = +value; },\r\n formatter: function(date) { return dateFilter(date, 's'); }\r\n },\r\n {\r\n key: 'a',\r\n regex: $locale.DATETIME_FORMATS.AMPMS.join('|'),\r\n apply: function(value) {\r\n if (this.hours === 12) {\r\n this.hours = 0;\r\n }\r\n\r\n if (value === 'PM') {\r\n this.hours += 12;\r\n }\r\n },\r\n formatter: function(date) { return dateFilter(date, 'a'); }\r\n },\r\n {\r\n key: 'Z',\r\n regex: '[+-]\\\\d{4}',\r\n apply: function(value) {\r\n var matches = value.match(/([+-])(\\d{2})(\\d{2})/),\r\n sign = matches[1],\r\n hours = matches[2],\r\n minutes = matches[3];\r\n this.hours += toInt(sign + hours);\r\n this.minutes += toInt(sign + minutes);\r\n },\r\n formatter: function(date) {\r\n return dateFilter(date, 'Z');\r\n }\r\n },\r\n {\r\n key: 'ww',\r\n regex: '[0-4][0-9]|5[0-3]',\r\n formatter: function(date) { return dateFilter(date, 'ww'); }\r\n },\r\n {\r\n key: 'w',\r\n regex: '[0-9]|[1-4][0-9]|5[0-3]',\r\n formatter: function(date) { return dateFilter(date, 'w'); }\r\n },\r\n {\r\n key: 'GGGG',\r\n regex: $locale.DATETIME_FORMATS.ERANAMES.join('|').replace(/\\s/g, '\\\\s'),\r\n formatter: function(date) { return dateFilter(date, 'GGGG'); }\r\n },\r\n {\r\n key: 'GGG',\r\n regex: $locale.DATETIME_FORMATS.ERAS.join('|'),\r\n formatter: function(date) { return dateFilter(date, 'GGG'); }\r\n },\r\n {\r\n key: 'GG',\r\n regex: $locale.DATETIME_FORMATS.ERAS.join('|'),\r\n formatter: function(date) { return dateFilter(date, 'GG'); }\r\n },\r\n {\r\n key: 'G',\r\n regex: $locale.DATETIME_FORMATS.ERAS.join('|'),\r\n formatter: function(date) { return dateFilter(date, 'G'); }\r\n }\r\n ];\r\n\r\n if (angular.version.major >= 1 && angular.version.minor > 4) {\r\n formatCodeToRegex.push({\r\n key: 'LLLL',\r\n regex: $locale.DATETIME_FORMATS.STANDALONEMONTH.join('|'),\r\n apply: function(value) { this.month = $locale.DATETIME_FORMATS.STANDALONEMONTH.indexOf(value); },\r\n formatter: function(date) { return dateFilter(date, 'LLLL'); }\r\n });\r\n }\r\n };\r\n\r\n this.init();\r\n\r\n function getFormatCodeToRegex(key) {\r\n return filterFilter(formatCodeToRegex, {key: key}, true)[0];\r\n }\r\n\r\n this.getParser = function (key) {\r\n var f = getFormatCodeToRegex(key);\r\n return f && f.apply || null;\r\n };\r\n\r\n this.overrideParser = function (key, parser) {\r\n var f = getFormatCodeToRegex(key);\r\n if (f && angular.isFunction(parser)) {\r\n this.parsers = {};\r\n f.apply = parser;\r\n }\r\n }.bind(this);\r\n\r\n function createParser(format) {\r\n var map = [], regex = format.split('');\r\n\r\n // check for literal values\r\n var quoteIndex = format.indexOf('\\'');\r\n if (quoteIndex > -1) {\r\n var inLiteral = false;\r\n format = format.split('');\r\n for (var i = quoteIndex; i < format.length; i++) {\r\n if (inLiteral) {\r\n if (format[i] === '\\'') {\r\n if (i + 1 < format.length && format[i+1] === '\\'') { // escaped single quote\r\n format[i+1] = '$';\r\n regex[i+1] = '';\r\n } else { // end of literal\r\n regex[i] = '';\r\n inLiteral = false;\r\n }\r\n }\r\n format[i] = '$';\r\n } else {\r\n if (format[i] === '\\'') { // start of literal\r\n format[i] = '$';\r\n regex[i] = '';\r\n inLiteral = true;\r\n }\r\n }\r\n }\r\n\r\n format = format.join('');\r\n }\r\n\r\n angular.forEach(formatCodeToRegex, function(data) {\r\n var index = format.indexOf(data.key);\r\n\r\n if (index > -1) {\r\n format = format.split('');\r\n\r\n regex[index] = '(' + data.regex + ')';\r\n format[index] = '$'; // Custom symbol to define consumed part of format\r\n for (var i = index + 1, n = index + data.key.length; i < n; i++) {\r\n regex[i] = '';\r\n format[i] = '$';\r\n }\r\n format = format.join('');\r\n\r\n map.push({\r\n index: index,\r\n key: data.key,\r\n apply: data.apply,\r\n matcher: data.regex\r\n });\r\n }\r\n });\r\n\r\n return {\r\n regex: new RegExp('^' + regex.join('') + '$'),\r\n map: orderByFilter(map, 'index')\r\n };\r\n }\r\n\r\n function createFormatter(format) {\r\n var formatters = [];\r\n var i = 0;\r\n var formatter, literalIdx;\r\n while (i < format.length) {\r\n if (angular.isNumber(literalIdx)) {\r\n if (format.charAt(i) === '\\'') {\r\n if (i + 1 >= format.length || format.charAt(i + 1) !== '\\'') {\r\n formatters.push(constructLiteralFormatter(format, literalIdx, i));\r\n literalIdx = null;\r\n }\r\n } else if (i === format.length) {\r\n while (literalIdx < format.length) {\r\n formatter = constructFormatterFromIdx(format, literalIdx);\r\n formatters.push(formatter);\r\n literalIdx = formatter.endIdx;\r\n }\r\n }\r\n\r\n i++;\r\n continue;\r\n }\r\n\r\n if (format.charAt(i) === '\\'') {\r\n literalIdx = i;\r\n i++;\r\n continue;\r\n }\r\n\r\n formatter = constructFormatterFromIdx(format, i);\r\n\r\n formatters.push(formatter.parser);\r\n i = formatter.endIdx;\r\n }\r\n\r\n return formatters;\r\n }\r\n\r\n function constructLiteralFormatter(format, literalIdx, endIdx) {\r\n return function() {\r\n return format.substr(literalIdx + 1, endIdx - literalIdx - 1);\r\n };\r\n }\r\n\r\n function constructFormatterFromIdx(format, i) {\r\n var currentPosStr = format.substr(i);\r\n for (var j = 0; j < formatCodeToRegex.length; j++) {\r\n if (new RegExp('^' + formatCodeToRegex[j].key).test(currentPosStr)) {\r\n var data = formatCodeToRegex[j];\r\n return {\r\n endIdx: i + data.key.length,\r\n parser: data.formatter\r\n };\r\n }\r\n }\r\n\r\n return {\r\n endIdx: i + 1,\r\n parser: function() {\r\n return currentPosStr.charAt(0);\r\n }\r\n };\r\n }\r\n\r\n this.filter = function(date, format) {\r\n if (!angular.isDate(date) || isNaN(date) || !format) {\r\n return '';\r\n }\r\n\r\n format = $locale.DATETIME_FORMATS[format] || format;\r\n\r\n if ($locale.id !== localeId) {\r\n this.init();\r\n }\r\n\r\n if (!this.formatters[format]) {\r\n this.formatters[format] = createFormatter(format);\r\n }\r\n\r\n var formatters = this.formatters[format];\r\n\r\n return formatters.reduce(function(str, formatter) {\r\n return str + formatter(date);\r\n }, '');\r\n };\r\n\r\n this.parse = function(input, format, baseDate) {\r\n if (!angular.isString(input) || !format) {\r\n return input;\r\n }\r\n\r\n format = $locale.DATETIME_FORMATS[format] || format;\r\n format = format.replace(SPECIAL_CHARACTERS_REGEXP, '\\\\$&');\r\n\r\n if ($locale.id !== localeId) {\r\n this.init();\r\n }\r\n\r\n if (!this.parsers[format]) {\r\n this.parsers[format] = createParser(format, 'apply');\r\n }\r\n\r\n var parser = this.parsers[format],\r\n regex = parser.regex,\r\n map = parser.map,\r\n results = input.match(regex),\r\n tzOffset = false;\r\n if (results && results.length) {\r\n var fields, dt;\r\n if (angular.isDate(baseDate) && !isNaN(baseDate.getTime())) {\r\n fields = {\r\n year: baseDate.getFullYear(),\r\n month: baseDate.getMonth(),\r\n date: baseDate.getDate(),\r\n hours: baseDate.getHours(),\r\n minutes: baseDate.getMinutes(),\r\n seconds: baseDate.getSeconds(),\r\n milliseconds: baseDate.getMilliseconds()\r\n };\r\n } else {\r\n if (baseDate) {\r\n $log.warn('dateparser:', 'baseDate is not a valid date');\r\n }\r\n fields = { year: 1900, month: 0, date: 1, hours: 0, minutes: 0, seconds: 0, milliseconds: 0 };\r\n }\r\n\r\n for (var i = 1, n = results.length; i < n; i++) {\r\n var mapper = map[i - 1];\r\n if (mapper.matcher === 'Z') {\r\n tzOffset = true;\r\n }\r\n\r\n if (mapper.apply) {\r\n mapper.apply.call(fields, results[i]);\r\n }\r\n }\r\n\r\n var datesetter = tzOffset ? Date.prototype.setUTCFullYear :\r\n Date.prototype.setFullYear;\r\n var timesetter = tzOffset ? Date.prototype.setUTCHours :\r\n Date.prototype.setHours;\r\n\r\n if (isValid(fields.year, fields.month, fields.date)) {\r\n if (angular.isDate(baseDate) && !isNaN(baseDate.getTime()) && !tzOffset) {\r\n dt = new Date(baseDate);\r\n datesetter.call(dt, fields.year, fields.month, fields.date);\r\n timesetter.call(dt, fields.hours, fields.minutes,\r\n fields.seconds, fields.milliseconds);\r\n } else {\r\n dt = new Date(0);\r\n datesetter.call(dt, fields.year, fields.month, fields.date);\r\n timesetter.call(dt, fields.hours || 0, fields.minutes || 0,\r\n fields.seconds || 0, fields.milliseconds || 0);\r\n }\r\n }\r\n\r\n return dt;\r\n }\r\n };\r\n\r\n // Check if date is valid for specific month (and year for February).\r\n // Month: 0 = Jan, 1 = Feb, etc\r\n function isValid(year, month, date) {\r\n if (date < 1) {\r\n return false;\r\n }\r\n\r\n if (month === 1 && date > 28) {\r\n return date === 29 && (year % 4 === 0 && year % 100 !== 0 || year % 400 === 0);\r\n }\r\n\r\n if (month === 3 || month === 5 || month === 8 || month === 10) {\r\n return date < 31;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n function toInt(str) {\r\n return parseInt(str, 10);\r\n }\r\n\r\n this.toTimezone = toTimezone;\r\n this.fromTimezone = fromTimezone;\r\n this.timezoneToOffset = timezoneToOffset;\r\n this.addDateMinutes = addDateMinutes;\r\n this.convertTimezoneToLocal = convertTimezoneToLocal;\r\n\r\n function toTimezone(date, timezone) {\r\n return date && timezone ? convertTimezoneToLocal(date, timezone) : date;\r\n }\r\n\r\n function fromTimezone(date, timezone) {\r\n return date && timezone ? convertTimezoneToLocal(date, timezone, true) : date;\r\n }\r\n\r\n //https://github.com/angular/angular.js/blob/622c42169699ec07fc6daaa19fe6d224e5d2f70e/src/Angular.js#L1207\r\n function timezoneToOffset(timezone, fallback) {\r\n timezone = timezone.replace(/:/g, '');\r\n var requestedTimezoneOffset = Date.parse('Jan 01, 1970 00:00:00 ' + timezone) / 60000;\r\n return isNaN(requestedTimezoneOffset) ? fallback : requestedTimezoneOffset;\r\n }\r\n\r\n function addDateMinutes(date, minutes) {\r\n date = new Date(date.getTime());\r\n date.setMinutes(date.getMinutes() + minutes);\r\n return date;\r\n }\r\n\r\n function convertTimezoneToLocal(date, timezone, reverse) {\r\n reverse = reverse ? -1 : 1;\r\n var dateTimezoneOffset = date.getTimezoneOffset();\r\n var timezoneOffset = timezoneToOffset(timezone, dateTimezoneOffset);\r\n return addDateMinutes(date, reverse * (timezoneOffset - dateTimezoneOffset));\r\n }\r\n}]);\r\n\r\nangular.module('ui.bootstrap.datepicker', ['ui.bootstrap.dateparser', 'ui.bootstrap.isClass'])\r\n\r\n.value('$datepickerSuppressError', false)\r\n\r\n.value('$datepickerLiteralWarning', true)\r\n\r\n.constant('uibDatepickerConfig', {\r\n datepickerMode: 'day',\r\n formatDay: 'dd',\r\n formatMonth: 'MMMM',\r\n formatYear: 'yyyy',\r\n formatDayHeader: 'EEE',\r\n formatDayTitle: 'MMMM yyyy',\r\n formatMonthTitle: 'yyyy',\r\n maxDate: null,\r\n maxMode: 'year',\r\n minDate: null,\r\n minMode: 'day',\r\n monthColumns: 3,\r\n ngModelOptions: {},\r\n shortcutPropagation: false,\r\n showWeeks: true,\r\n yearColumns: 5,\r\n yearRows: 4\r\n})\r\n\r\n.controller('UibDatepickerController', ['$scope', '$element', '$attrs', '$parse', '$interpolate', '$locale', '$log', 'dateFilter', 'uibDatepickerConfig', '$datepickerLiteralWarning', '$datepickerSuppressError', 'uibDateParser',\r\n function($scope, $element, $attrs, $parse, $interpolate, $locale, $log, dateFilter, datepickerConfig, $datepickerLiteralWarning, $datepickerSuppressError, dateParser) {\r\n var self = this,\r\n ngModelCtrl = { $setViewValue: angular.noop }, // nullModelCtrl;\r\n ngModelOptions = {},\r\n watchListeners = [];\r\n\r\n $element.addClass('uib-datepicker');\r\n $attrs.$set('role', 'application');\r\n\r\n if (!$scope.datepickerOptions) {\r\n $scope.datepickerOptions = {};\r\n }\r\n\r\n // Modes chain\r\n this.modes = ['day', 'month', 'year'];\r\n\r\n [\r\n 'customClass',\r\n 'dateDisabled',\r\n 'datepickerMode',\r\n 'formatDay',\r\n 'formatDayHeader',\r\n 'formatDayTitle',\r\n 'formatMonth',\r\n 'formatMonthTitle',\r\n 'formatYear',\r\n 'maxDate',\r\n 'maxMode',\r\n 'minDate',\r\n 'minMode',\r\n 'monthColumns',\r\n 'showWeeks',\r\n 'shortcutPropagation',\r\n 'startingDay',\r\n 'yearColumns',\r\n 'yearRows'\r\n ].forEach(function(key) {\r\n switch (key) {\r\n case 'customClass':\r\n case 'dateDisabled':\r\n $scope[key] = $scope.datepickerOptions[key] || angular.noop;\r\n break;\r\n case 'datepickerMode':\r\n $scope.datepickerMode = angular.isDefined($scope.datepickerOptions.datepickerMode) ?\r\n $scope.datepickerOptions.datepickerMode : datepickerConfig.datepickerMode;\r\n break;\r\n case 'formatDay':\r\n case 'formatDayHeader':\r\n case 'formatDayTitle':\r\n case 'formatMonth':\r\n case 'formatMonthTitle':\r\n case 'formatYear':\r\n self[key] = angular.isDefined($scope.datepickerOptions[key]) ?\r\n $interpolate($scope.datepickerOptions[key])($scope.$parent) :\r\n datepickerConfig[key];\r\n break;\r\n case 'monthColumns':\r\n case 'showWeeks':\r\n case 'shortcutPropagation':\r\n case 'yearColumns':\r\n case 'yearRows':\r\n self[key] = angular.isDefined($scope.datepickerOptions[key]) ?\r\n $scope.datepickerOptions[key] : datepickerConfig[key];\r\n break;\r\n case 'startingDay':\r\n if (angular.isDefined($scope.datepickerOptions.startingDay)) {\r\n self.startingDay = $scope.datepickerOptions.startingDay;\r\n } else if (angular.isNumber(datepickerConfig.startingDay)) {\r\n self.startingDay = datepickerConfig.startingDay;\r\n } else {\r\n self.startingDay = ($locale.DATETIME_FORMATS.FIRSTDAYOFWEEK + 8) % 7;\r\n }\r\n\r\n break;\r\n case 'maxDate':\r\n case 'minDate':\r\n $scope.$watch('datepickerOptions.' + key, function(value) {\r\n if (value) {\r\n if (angular.isDate(value)) {\r\n self[key] = dateParser.fromTimezone(new Date(value), ngModelOptions.getOption('timezone'));\r\n } else {\r\n if ($datepickerLiteralWarning) {\r\n $log.warn('Literal date support has been deprecated, please switch to date object usage');\r\n }\r\n\r\n self[key] = new Date(dateFilter(value, 'medium'));\r\n }\r\n } else {\r\n self[key] = datepickerConfig[key] ?\r\n dateParser.fromTimezone(new Date(datepickerConfig[key]), ngModelOptions.getOption('timezone')) :\r\n null;\r\n }\r\n\r\n self.refreshView();\r\n });\r\n\r\n break;\r\n case 'maxMode':\r\n case 'minMode':\r\n if ($scope.datepickerOptions[key]) {\r\n $scope.$watch(function() { return $scope.datepickerOptions[key]; }, function(value) {\r\n self[key] = $scope[key] = angular.isDefined(value) ? value : $scope.datepickerOptions[key];\r\n if (key === 'minMode' && self.modes.indexOf($scope.datepickerOptions.datepickerMode) < self.modes.indexOf(self[key]) ||\r\n key === 'maxMode' && self.modes.indexOf($scope.datepickerOptions.datepickerMode) > self.modes.indexOf(self[key])) {\r\n $scope.datepickerMode = self[key];\r\n $scope.datepickerOptions.datepickerMode = self[key];\r\n }\r\n });\r\n } else {\r\n self[key] = $scope[key] = datepickerConfig[key] || null;\r\n }\r\n\r\n break;\r\n }\r\n });\r\n\r\n $scope.uniqueId = 'datepicker-' + $scope.$id + '-' + Math.floor(Math.random() * 10000);\r\n\r\n $scope.disabled = angular.isDefined($attrs.disabled) || false;\r\n if (angular.isDefined($attrs.ngDisabled)) {\r\n watchListeners.push($scope.$parent.$watch($attrs.ngDisabled, function(disabled) {\r\n $scope.disabled = disabled;\r\n self.refreshView();\r\n }));\r\n }\r\n\r\n $scope.isActive = function(dateObject) {\r\n if (self.compare(dateObject.date, self.activeDate) === 0) {\r\n $scope.activeDateId = dateObject.uid;\r\n return true;\r\n }\r\n return false;\r\n };\r\n\r\n this.init = function(ngModelCtrl_) {\r\n ngModelCtrl = ngModelCtrl_;\r\n ngModelOptions = extractOptions(ngModelCtrl);\r\n\r\n if ($scope.datepickerOptions.initDate) {\r\n self.activeDate = dateParser.fromTimezone($scope.datepickerOptions.initDate, ngModelOptions.getOption('timezone')) || new Date();\r\n $scope.$watch('datepickerOptions.initDate', function(initDate) {\r\n if (initDate && (ngModelCtrl.$isEmpty(ngModelCtrl.$modelValue) || ngModelCtrl.$invalid)) {\r\n self.activeDate = dateParser.fromTimezone(initDate, ngModelOptions.getOption('timezone'));\r\n self.refreshView();\r\n }\r\n });\r\n } else {\r\n self.activeDate = new Date();\r\n }\r\n\r\n var date = ngModelCtrl.$modelValue ? new Date(ngModelCtrl.$modelValue) : new Date();\r\n this.activeDate = !isNaN(date) ?\r\n dateParser.fromTimezone(date, ngModelOptions.getOption('timezone')) :\r\n dateParser.fromTimezone(new Date(), ngModelOptions.getOption('timezone'));\r\n\r\n ngModelCtrl.$render = function() {\r\n self.render();\r\n };\r\n };\r\n\r\n this.render = function() {\r\n if (ngModelCtrl.$viewValue) {\r\n var date = new Date(ngModelCtrl.$viewValue),\r\n isValid = !isNaN(date);\r\n\r\n if (isValid) {\r\n this.activeDate = dateParser.fromTimezone(date, ngModelOptions.getOption('timezone'));\r\n } else if (!$datepickerSuppressError) {\r\n $log.error('Datepicker directive: \"ng-model\" value must be a Date object');\r\n }\r\n }\r\n this.refreshView();\r\n };\r\n\r\n this.refreshView = function() {\r\n if (this.element) {\r\n $scope.selectedDt = null;\r\n this._refreshView();\r\n if ($scope.activeDt) {\r\n $scope.activeDateId = $scope.activeDt.uid;\r\n }\r\n\r\n var date = ngModelCtrl.$viewValue ? new Date(ngModelCtrl.$viewValue) : null;\r\n date = dateParser.fromTimezone(date, ngModelOptions.getOption('timezone'));\r\n ngModelCtrl.$setValidity('dateDisabled', !date ||\r\n this.element && !this.isDisabled(date));\r\n }\r\n };\r\n\r\n this.createDateObject = function(date, format) {\r\n var model = ngModelCtrl.$viewValue ? new Date(ngModelCtrl.$viewValue) : null;\r\n model = dateParser.fromTimezone(model, ngModelOptions.getOption('timezone'));\r\n var today = new Date();\r\n today = dateParser.fromTimezone(today, ngModelOptions.getOption('timezone'));\r\n var time = this.compare(date, today);\r\n var dt = {\r\n date: date,\r\n label: dateParser.filter(date, format),\r\n selected: model && this.compare(date, model) === 0,\r\n disabled: this.isDisabled(date),\r\n past: time < 0,\r\n current: time === 0,\r\n future: time > 0,\r\n customClass: this.customClass(date) || null\r\n };\r\n\r\n if (model && this.compare(date, model) === 0) {\r\n $scope.selectedDt = dt;\r\n }\r\n\r\n if (self.activeDate && this.compare(dt.date, self.activeDate) === 0) {\r\n $scope.activeDt = dt;\r\n }\r\n\r\n return dt;\r\n };\r\n\r\n this.isDisabled = function(date) {\r\n return $scope.disabled ||\r\n this.minDate && this.compare(date, this.minDate) < 0 ||\r\n this.maxDate && this.compare(date, this.maxDate) > 0 ||\r\n $scope.dateDisabled && $scope.dateDisabled({date: date, mode: $scope.datepickerMode});\r\n };\r\n\r\n this.customClass = function(date) {\r\n return $scope.customClass({date: date, mode: $scope.datepickerMode});\r\n };\r\n\r\n // Split array into smaller arrays\r\n this.split = function(arr, size) {\r\n var arrays = [];\r\n while (arr.length > 0) {\r\n arrays.push(arr.splice(0, size));\r\n }\r\n return arrays;\r\n };\r\n\r\n $scope.select = function(date) {\r\n if ($scope.datepickerMode === self.minMode) {\r\n var dt = ngModelCtrl.$viewValue ? dateParser.fromTimezone(new Date(ngModelCtrl.$viewValue), ngModelOptions.getOption('timezone')) : new Date(0, 0, 0, 0, 0, 0, 0);\r\n dt.setFullYear(date.getFullYear(), date.getMonth(), date.getDate());\r\n dt = dateParser.toTimezone(dt, ngModelOptions.getOption('timezone'));\r\n ngModelCtrl.$setViewValue(dt);\r\n ngModelCtrl.$render();\r\n } else {\r\n self.activeDate = date;\r\n setMode(self.modes[self.modes.indexOf($scope.datepickerMode) - 1]);\r\n\r\n $scope.$emit('uib:datepicker.mode');\r\n }\r\n\r\n $scope.$broadcast('uib:datepicker.focus');\r\n };\r\n\r\n $scope.move = function(direction) {\r\n var year = self.activeDate.getFullYear() + direction * (self.step.years || 0),\r\n month = self.activeDate.getMonth() + direction * (self.step.months || 0);\r\n self.activeDate.setFullYear(year, month, 1);\r\n self.refreshView();\r\n };\r\n\r\n $scope.toggleMode = function(direction) {\r\n direction = direction || 1;\r\n\r\n if ($scope.datepickerMode === self.maxMode && direction === 1 ||\r\n $scope.datepickerMode === self.minMode && direction === -1) {\r\n return;\r\n }\r\n\r\n setMode(self.modes[self.modes.indexOf($scope.datepickerMode) + direction]);\r\n\r\n $scope.$emit('uib:datepicker.mode');\r\n };\r\n\r\n // Key event mapper\r\n $scope.keys = { 13: 'enter', 32: 'space', 33: 'pageup', 34: 'pagedown', 35: 'end', 36: 'home', 37: 'left', 38: 'up', 39: 'right', 40: 'down' };\r\n\r\n var focusElement = function() {\r\n self.element[0].focus();\r\n };\r\n\r\n // Listen for focus requests from popup directive\r\n $scope.$on('uib:datepicker.focus', focusElement);\r\n\r\n $scope.keydown = function(evt) {\r\n var key = $scope.keys[evt.which];\r\n\r\n if (!key || evt.shiftKey || evt.altKey || $scope.disabled) {\r\n return;\r\n }\r\n\r\n evt.preventDefault();\r\n if (!self.shortcutPropagation) {\r\n evt.stopPropagation();\r\n }\r\n\r\n if (key === 'enter' || key === 'space') {\r\n if (self.isDisabled(self.activeDate)) {\r\n return; // do nothing\r\n }\r\n $scope.select(self.activeDate);\r\n } else if (evt.ctrlKey && (key === 'up' || key === 'down')) {\r\n $scope.toggleMode(key === 'up' ? 1 : -1);\r\n } else {\r\n self.handleKeyDown(key, evt);\r\n self.refreshView();\r\n }\r\n };\r\n\r\n $element.on('keydown', function(evt) {\r\n $scope.$apply(function() {\r\n $scope.keydown(evt);\r\n });\r\n });\r\n\r\n $scope.$on('$destroy', function() {\r\n //Clear all watch listeners on destroy\r\n while (watchListeners.length) {\r\n watchListeners.shift()();\r\n }\r\n });\r\n\r\n function setMode(mode) {\r\n $scope.datepickerMode = mode;\r\n $scope.datepickerOptions.datepickerMode = mode;\r\n }\r\n\r\n function extractOptions(ngModelCtrl) {\r\n var ngModelOptions;\r\n\r\n if (angular.version.minor < 6) { // in angular < 1.6 $options could be missing\r\n // guarantee a value\r\n ngModelOptions = ngModelCtrl.$options ||\r\n $scope.datepickerOptions.ngModelOptions ||\r\n datepickerConfig.ngModelOptions ||\r\n {};\r\n\r\n // mimic 1.6+ api\r\n ngModelOptions.getOption = function (key) {\r\n return ngModelOptions[key];\r\n };\r\n } else { // in angular >=1.6 $options is always present\r\n // ng-model-options defaults timezone to null; don't let its precedence squash a non-null value\r\n var timezone = ngModelCtrl.$options.getOption('timezone') ||\r\n ($scope.datepickerOptions.ngModelOptions ? $scope.datepickerOptions.ngModelOptions.timezone : null) ||\r\n (datepickerConfig.ngModelOptions ? datepickerConfig.ngModelOptions.timezone : null);\r\n\r\n // values passed to createChild override existing values\r\n ngModelOptions = ngModelCtrl.$options // start with a ModelOptions instance\r\n .createChild(datepickerConfig.ngModelOptions) // lowest precedence\r\n .createChild($scope.datepickerOptions.ngModelOptions)\r\n .createChild(ngModelCtrl.$options) // highest precedence\r\n .createChild({timezone: timezone}); // to keep from squashing a non-null value\r\n }\r\n\r\n return ngModelOptions;\r\n }\r\n}])\r\n\r\n.controller('UibDaypickerController', ['$scope', '$element', 'dateFilter', function(scope, $element, dateFilter) {\r\n var DAYS_IN_MONTH = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\r\n\r\n this.step = { months: 1 };\r\n this.element = $element;\r\n function getDaysInMonth(year, month) {\r\n return month === 1 && year % 4 === 0 &&\r\n (year % 100 !== 0 || year % 400 === 0) ? 29 : DAYS_IN_MONTH[month];\r\n }\r\n\r\n this.init = function(ctrl) {\r\n angular.extend(ctrl, this);\r\n scope.showWeeks = ctrl.showWeeks;\r\n ctrl.refreshView();\r\n };\r\n\r\n this.getDates = function(startDate, n) {\r\n var dates = new Array(n), current = new Date(startDate), i = 0, date;\r\n while (i < n) {\r\n date = new Date(current);\r\n dates[i++] = date;\r\n current.setDate(current.getDate() + 1);\r\n }\r\n return dates;\r\n };\r\n\r\n this._refreshView = function() {\r\n var year = this.activeDate.getFullYear(),\r\n month = this.activeDate.getMonth(),\r\n firstDayOfMonth = new Date(this.activeDate);\r\n\r\n firstDayOfMonth.setFullYear(year, month, 1);\r\n\r\n var difference = this.startingDay - firstDayOfMonth.getDay(),\r\n numDisplayedFromPreviousMonth = difference > 0 ?\r\n 7 - difference : - difference,\r\n firstDate = new Date(firstDayOfMonth);\r\n\r\n if (numDisplayedFromPreviousMonth > 0) {\r\n firstDate.setDate(-numDisplayedFromPreviousMonth + 1);\r\n }\r\n\r\n // 42 is the number of days on a six-week calendar\r\n var days = this.getDates(firstDate, 42);\r\n for (var i = 0; i < 42; i ++) {\r\n days[i] = angular.extend(this.createDateObject(days[i], this.formatDay), {\r\n secondary: days[i].getMonth() !== month,\r\n uid: scope.uniqueId + '-' + i\r\n });\r\n }\r\n\r\n scope.labels = new Array(7);\r\n for (var j = 0; j < 7; j++) {\r\n scope.labels[j] = {\r\n abbr: dateFilter(days[j].date, this.formatDayHeader),\r\n full: dateFilter(days[j].date, 'EEEE')\r\n };\r\n }\r\n\r\n scope.title = dateFilter(this.activeDate, this.formatDayTitle);\r\n scope.rows = this.split(days, 7);\r\n\r\n if (scope.showWeeks) {\r\n scope.weekNumbers = [];\r\n var thursdayIndex = (4 + 7 - this.startingDay) % 7,\r\n numWeeks = scope.rows.length;\r\n for (var curWeek = 0; curWeek < numWeeks; curWeek++) {\r\n scope.weekNumbers.push(\r\n getISO8601WeekNumber(scope.rows[curWeek][thursdayIndex].date));\r\n }\r\n }\r\n };\r\n\r\n this.compare = function(date1, date2) {\r\n var _date1 = new Date(date1.getFullYear(), date1.getMonth(), date1.getDate());\r\n var _date2 = new Date(date2.getFullYear(), date2.getMonth(), date2.getDate());\r\n _date1.setFullYear(date1.getFullYear());\r\n _date2.setFullYear(date2.getFullYear());\r\n return _date1 - _date2;\r\n };\r\n\r\n function getISO8601WeekNumber(date) {\r\n var checkDate = new Date(date);\r\n checkDate.setDate(checkDate.getDate() + 4 - (checkDate.getDay() || 7)); // Thursday\r\n var time = checkDate.getTime();\r\n checkDate.setMonth(0); // Compare with Jan 1\r\n checkDate.setDate(1);\r\n return Math.floor(Math.round((time - checkDate) / 86400000) / 7) + 1;\r\n }\r\n\r\n this.handleKeyDown = function(key, evt) {\r\n var date = this.activeDate.getDate();\r\n\r\n if (key === 'left') {\r\n date = date - 1;\r\n } else if (key === 'up') {\r\n date = date - 7;\r\n } else if (key === 'right') {\r\n date = date + 1;\r\n } else if (key === 'down') {\r\n date = date + 7;\r\n } else if (key === 'pageup' || key === 'pagedown') {\r\n var month = this.activeDate.getMonth() + (key === 'pageup' ? - 1 : 1);\r\n this.activeDate.setMonth(month, 1);\r\n date = Math.min(getDaysInMonth(this.activeDate.getFullYear(), this.activeDate.getMonth()), date);\r\n } else if (key === 'home') {\r\n date = 1;\r\n } else if (key === 'end') {\r\n date = getDaysInMonth(this.activeDate.getFullYear(), this.activeDate.getMonth());\r\n }\r\n this.activeDate.setDate(date);\r\n };\r\n}])\r\n\r\n.controller('UibMonthpickerController', ['$scope', '$element', 'dateFilter', function(scope, $element, dateFilter) {\r\n this.step = { years: 1 };\r\n this.element = $element;\r\n\r\n this.init = function(ctrl) {\r\n angular.extend(ctrl, this);\r\n ctrl.refreshView();\r\n };\r\n\r\n this._refreshView = function() {\r\n var months = new Array(12),\r\n year = this.activeDate.getFullYear(),\r\n date;\r\n\r\n for (var i = 0; i < 12; i++) {\r\n date = new Date(this.activeDate);\r\n date.setFullYear(year, i, 1);\r\n months[i] = angular.extend(this.createDateObject(date, this.formatMonth), {\r\n uid: scope.uniqueId + '-' + i\r\n });\r\n }\r\n\r\n scope.title = dateFilter(this.activeDate, this.formatMonthTitle);\r\n scope.rows = this.split(months, this.monthColumns);\r\n scope.yearHeaderColspan = this.monthColumns > 3 ? this.monthColumns - 2 : 1;\r\n };\r\n\r\n this.compare = function(date1, date2) {\r\n var _date1 = new Date(date1.getFullYear(), date1.getMonth());\r\n var _date2 = new Date(date2.getFullYear(), date2.getMonth());\r\n _date1.setFullYear(date1.getFullYear());\r\n _date2.setFullYear(date2.getFullYear());\r\n return _date1 - _date2;\r\n };\r\n\r\n this.handleKeyDown = function(key, evt) {\r\n var date = this.activeDate.getMonth();\r\n\r\n if (key === 'left') {\r\n date = date - 1;\r\n } else if (key === 'up') {\r\n date = date - this.monthColumns;\r\n } else if (key === 'right') {\r\n date = date + 1;\r\n } else if (key === 'down') {\r\n date = date + this.monthColumns;\r\n } else if (key === 'pageup' || key === 'pagedown') {\r\n var year = this.activeDate.getFullYear() + (key === 'pageup' ? - 1 : 1);\r\n this.activeDate.setFullYear(year);\r\n } else if (key === 'home') {\r\n date = 0;\r\n } else if (key === 'end') {\r\n date = 11;\r\n }\r\n this.activeDate.setMonth(date);\r\n };\r\n}])\r\n\r\n.controller('UibYearpickerController', ['$scope', '$element', 'dateFilter', function(scope, $element, dateFilter) {\r\n var columns, range;\r\n this.element = $element;\r\n\r\n function getStartingYear(year) {\r\n return parseInt((year - 1) / range, 10) * range + 1;\r\n }\r\n\r\n this.yearpickerInit = function() {\r\n columns = this.yearColumns;\r\n range = this.yearRows * columns;\r\n this.step = { years: range };\r\n };\r\n\r\n this._refreshView = function() {\r\n var years = new Array(range), date;\r\n\r\n for (var i = 0, start = getStartingYear(this.activeDate.getFullYear()); i < range; i++) {\r\n date = new Date(this.activeDate);\r\n date.setFullYear(start + i, 0, 1);\r\n years[i] = angular.extend(this.createDateObject(date, this.formatYear), {\r\n uid: scope.uniqueId + '-' + i\r\n });\r\n }\r\n\r\n scope.title = [years[0].label, years[range - 1].label].join(' - ');\r\n scope.rows = this.split(years, columns);\r\n scope.columns = columns;\r\n };\r\n\r\n this.compare = function(date1, date2) {\r\n return date1.getFullYear() - date2.getFullYear();\r\n };\r\n\r\n this.handleKeyDown = function(key, evt) {\r\n var date = this.activeDate.getFullYear();\r\n\r\n if (key === 'left') {\r\n date = date - 1;\r\n } else if (key === 'up') {\r\n date = date - columns;\r\n } else if (key === 'right') {\r\n date = date + 1;\r\n } else if (key === 'down') {\r\n date = date + columns;\r\n } else if (key === 'pageup' || key === 'pagedown') {\r\n date += (key === 'pageup' ? - 1 : 1) * range;\r\n } else if (key === 'home') {\r\n date = getStartingYear(this.activeDate.getFullYear());\r\n } else if (key === 'end') {\r\n date = getStartingYear(this.activeDate.getFullYear()) + range - 1;\r\n }\r\n this.activeDate.setFullYear(date);\r\n };\r\n}])\r\n\r\n.directive('uibDatepicker', function() {\r\n return {\r\n templateUrl: function(element, attrs) {\r\n return attrs.templateUrl || 'uib/template/datepicker/datepicker.html';\r\n },\r\n scope: {\r\n datepickerOptions: '=?'\r\n },\r\n require: ['uibDatepicker', '^ngModel'],\r\n restrict: 'A',\r\n controller: 'UibDatepickerController',\r\n controllerAs: 'datepicker',\r\n link: function(scope, element, attrs, ctrls) {\r\n var datepickerCtrl = ctrls[0], ngModelCtrl = ctrls[1];\r\n\r\n datepickerCtrl.init(ngModelCtrl);\r\n }\r\n };\r\n})\r\n\r\n.directive('uibDaypicker', function() {\r\n return {\r\n templateUrl: function(element, attrs) {\r\n return attrs.templateUrl || 'uib/template/datepicker/day.html';\r\n },\r\n require: ['^uibDatepicker', 'uibDaypicker'],\r\n restrict: 'A',\r\n controller: 'UibDaypickerController',\r\n link: function(scope, element, attrs, ctrls) {\r\n var datepickerCtrl = ctrls[0],\r\n daypickerCtrl = ctrls[1];\r\n\r\n daypickerCtrl.init(datepickerCtrl);\r\n }\r\n };\r\n})\r\n\r\n.directive('uibMonthpicker', function() {\r\n return {\r\n templateUrl: function(element, attrs) {\r\n return attrs.templateUrl || 'uib/template/datepicker/month.html';\r\n },\r\n require: ['^uibDatepicker', 'uibMonthpicker'],\r\n restrict: 'A',\r\n controller: 'UibMonthpickerController',\r\n link: function(scope, element, attrs, ctrls) {\r\n var datepickerCtrl = ctrls[0],\r\n monthpickerCtrl = ctrls[1];\r\n\r\n monthpickerCtrl.init(datepickerCtrl);\r\n }\r\n };\r\n})\r\n\r\n.directive('uibYearpicker', function() {\r\n return {\r\n templateUrl: function(element, attrs) {\r\n return attrs.templateUrl || 'uib/template/datepicker/year.html';\r\n },\r\n require: ['^uibDatepicker', 'uibYearpicker'],\r\n restrict: 'A',\r\n controller: 'UibYearpickerController',\r\n link: function(scope, element, attrs, ctrls) {\r\n var ctrl = ctrls[0];\r\n angular.extend(ctrl, ctrls[1]);\r\n ctrl.yearpickerInit();\r\n\r\n ctrl.refreshView();\r\n }\r\n };\r\n});\r\n\r\n// Avoiding use of ng-class as it creates a lot of watchers when a class is to be applied to\r\n// at most one element.\r\nangular.module('ui.bootstrap.isClass', [])\r\n.directive('uibIsClass', [\r\n '$animate',\r\nfunction ($animate) {\r\n // 11111111 22222222\r\n var ON_REGEXP = /^\\s*([\\s\\S]+?)\\s+on\\s+([\\s\\S]+?)\\s*$/;\r\n // 11111111 22222222\r\n var IS_REGEXP = /^\\s*([\\s\\S]+?)\\s+for\\s+([\\s\\S]+?)\\s*$/;\r\n\r\n var dataPerTracked = {};\r\n\r\n return {\r\n restrict: 'A',\r\n compile: function(tElement, tAttrs) {\r\n var linkedScopes = [];\r\n var instances = [];\r\n var expToData = {};\r\n var lastActivated = null;\r\n var onExpMatches = tAttrs.uibIsClass.match(ON_REGEXP);\r\n var onExp = onExpMatches[2];\r\n var expsStr = onExpMatches[1];\r\n var exps = expsStr.split(',');\r\n\r\n return linkFn;\r\n\r\n function linkFn(scope, element, attrs) {\r\n linkedScopes.push(scope);\r\n instances.push({\r\n scope: scope,\r\n element: element\r\n });\r\n\r\n exps.forEach(function(exp, k) {\r\n addForExp(exp, scope);\r\n });\r\n\r\n scope.$on('$destroy', removeScope);\r\n }\r\n\r\n function addForExp(exp, scope) {\r\n var matches = exp.match(IS_REGEXP);\r\n var clazz = scope.$eval(matches[1]);\r\n var compareWithExp = matches[2];\r\n var data = expToData[exp];\r\n if (!data) {\r\n var watchFn = function(compareWithVal) {\r\n var newActivated = null;\r\n instances.some(function(instance) {\r\n var thisVal = instance.scope.$eval(onExp);\r\n if (thisVal === compareWithVal) {\r\n newActivated = instance;\r\n return true;\r\n }\r\n });\r\n if (data.lastActivated !== newActivated) {\r\n if (data.lastActivated) {\r\n $animate.removeClass(data.lastActivated.element, clazz);\r\n }\r\n if (newActivated) {\r\n $animate.addClass(newActivated.element, clazz);\r\n }\r\n data.lastActivated = newActivated;\r\n }\r\n };\r\n expToData[exp] = data = {\r\n lastActivated: null,\r\n scope: scope,\r\n watchFn: watchFn,\r\n compareWithExp: compareWithExp,\r\n watcher: scope.$watch(compareWithExp, watchFn)\r\n };\r\n }\r\n data.watchFn(scope.$eval(compareWithExp));\r\n }\r\n\r\n function removeScope(e) {\r\n var removedScope = e.targetScope;\r\n var index = linkedScopes.indexOf(removedScope);\r\n linkedScopes.splice(index, 1);\r\n instances.splice(index, 1);\r\n if (linkedScopes.length) {\r\n var newWatchScope = linkedScopes[0];\r\n angular.forEach(expToData, function(data) {\r\n if (data.scope === removedScope) {\r\n data.watcher = newWatchScope.$watch(data.compareWithExp, data.watchFn);\r\n data.scope = newWatchScope;\r\n }\r\n });\r\n } else {\r\n expToData = {};\r\n }\r\n }\r\n }\r\n };\r\n}]);\r\nangular.module('ui.bootstrap.position', [])\r\n\r\n/**\r\n * A set of utility methods for working with the DOM.\r\n * It is meant to be used where we need to absolute-position elements in\r\n * relation to another element (this is the case for tooltips, popovers,\r\n * typeahead suggestions etc.).\r\n */\r\n .factory('$uibPosition', ['$document', '$window', function($document, $window) {\r\n /**\r\n * Used by scrollbarWidth() function to cache scrollbar's width.\r\n * Do not access this variable directly, use scrollbarWidth() instead.\r\n */\r\n var SCROLLBAR_WIDTH;\r\n /**\r\n * scrollbar on body and html element in IE and Edge overlay\r\n * content and should be considered 0 width.\r\n */\r\n var BODY_SCROLLBAR_WIDTH;\r\n var OVERFLOW_REGEX = {\r\n normal: /(auto|scroll)/,\r\n hidden: /(auto|scroll|hidden)/\r\n };\r\n var PLACEMENT_REGEX = {\r\n auto: /\\s?auto?\\s?/i,\r\n primary: /^(top|bottom|left|right)$/,\r\n secondary: /^(top|bottom|left|right|center)$/,\r\n vertical: /^(top|bottom)$/\r\n };\r\n var BODY_REGEX = /(HTML|BODY)/;\r\n\r\n return {\r\n\r\n /**\r\n * Provides a raw DOM element from a jQuery/jQLite element.\r\n *\r\n * @param {element} elem - The element to convert.\r\n *\r\n * @returns {element} A HTML element.\r\n */\r\n getRawNode: function(elem) {\r\n return elem.nodeName ? elem : elem[0] || elem;\r\n },\r\n\r\n /**\r\n * Provides a parsed number for a style property. Strips\r\n * units and casts invalid numbers to 0.\r\n *\r\n * @param {string} value - The style value to parse.\r\n *\r\n * @returns {number} A valid number.\r\n */\r\n parseStyle: function(value) {\r\n value = parseFloat(value);\r\n return isFinite(value) ? value : 0;\r\n },\r\n\r\n /**\r\n * Provides the closest positioned ancestor.\r\n *\r\n * @param {element} element - The element to get the offest parent for.\r\n *\r\n * @returns {element} The closest positioned ancestor.\r\n */\r\n offsetParent: function(elem) {\r\n elem = this.getRawNode(elem);\r\n\r\n var offsetParent = elem.offsetParent || $document[0].documentElement;\r\n\r\n function isStaticPositioned(el) {\r\n return ($window.getComputedStyle(el).position || 'static') === 'static';\r\n }\r\n\r\n while (offsetParent && offsetParent !== $document[0].documentElement && isStaticPositioned(offsetParent)) {\r\n offsetParent = offsetParent.offsetParent;\r\n }\r\n\r\n return offsetParent || $document[0].documentElement;\r\n },\r\n\r\n /**\r\n * Provides the scrollbar width, concept from TWBS measureScrollbar()\r\n * function in https://github.com/twbs/bootstrap/blob/master/js/modal.js\r\n * In IE and Edge, scollbar on body and html element overlay and should\r\n * return a width of 0.\r\n *\r\n * @returns {number} The width of the browser scollbar.\r\n */\r\n scrollbarWidth: function(isBody) {\r\n if (isBody) {\r\n if (angular.isUndefined(BODY_SCROLLBAR_WIDTH)) {\r\n var bodyElem = $document.find('body');\r\n bodyElem.addClass('uib-position-body-scrollbar-measure');\r\n BODY_SCROLLBAR_WIDTH = $window.innerWidth - bodyElem[0].clientWidth;\r\n BODY_SCROLLBAR_WIDTH = isFinite(BODY_SCROLLBAR_WIDTH) ? BODY_SCROLLBAR_WIDTH : 0;\r\n bodyElem.removeClass('uib-position-body-scrollbar-measure');\r\n }\r\n return BODY_SCROLLBAR_WIDTH;\r\n }\r\n\r\n if (angular.isUndefined(SCROLLBAR_WIDTH)) {\r\n var scrollElem = angular.element('
');\r\n $document.find('body').append(scrollElem);\r\n SCROLLBAR_WIDTH = scrollElem[0].offsetWidth - scrollElem[0].clientWidth;\r\n SCROLLBAR_WIDTH = isFinite(SCROLLBAR_WIDTH) ? SCROLLBAR_WIDTH : 0;\r\n scrollElem.remove();\r\n }\r\n\r\n return SCROLLBAR_WIDTH;\r\n },\r\n\r\n /**\r\n * Provides the padding required on an element to replace the scrollbar.\r\n *\r\n * @returns {object} An object with the following properties:\r\n *
    \r\n *
  • **scrollbarWidth**: the width of the scrollbar
  • \r\n *
  • **widthOverflow**: whether the the width is overflowing
  • \r\n *
  • **right**: the amount of right padding on the element needed to replace the scrollbar
  • \r\n *
  • **rightOriginal**: the amount of right padding currently on the element
  • \r\n *
  • **heightOverflow**: whether the the height is overflowing
  • \r\n *
  • **bottom**: the amount of bottom padding on the element needed to replace the scrollbar
  • \r\n *
  • **bottomOriginal**: the amount of bottom padding currently on the element
  • \r\n *
\r\n */\r\n scrollbarPadding: function(elem) {\r\n elem = this.getRawNode(elem);\r\n\r\n var elemStyle = $window.getComputedStyle(elem);\r\n var paddingRight = this.parseStyle(elemStyle.paddingRight);\r\n var paddingBottom = this.parseStyle(elemStyle.paddingBottom);\r\n var scrollParent = this.scrollParent(elem, false, true);\r\n var scrollbarWidth = this.scrollbarWidth(BODY_REGEX.test(scrollParent.tagName));\r\n\r\n return {\r\n scrollbarWidth: scrollbarWidth,\r\n widthOverflow: scrollParent.scrollWidth > scrollParent.clientWidth,\r\n right: paddingRight + scrollbarWidth,\r\n originalRight: paddingRight,\r\n heightOverflow: scrollParent.scrollHeight > scrollParent.clientHeight,\r\n bottom: paddingBottom + scrollbarWidth,\r\n originalBottom: paddingBottom\r\n };\r\n },\r\n\r\n /**\r\n * Checks to see if the element is scrollable.\r\n *\r\n * @param {element} elem - The element to check.\r\n * @param {boolean=} [includeHidden=false] - Should scroll style of 'hidden' be considered,\r\n * default is false.\r\n *\r\n * @returns {boolean} Whether the element is scrollable.\r\n */\r\n isScrollable: function(elem, includeHidden) {\r\n elem = this.getRawNode(elem);\r\n\r\n var overflowRegex = includeHidden ? OVERFLOW_REGEX.hidden : OVERFLOW_REGEX.normal;\r\n var elemStyle = $window.getComputedStyle(elem);\r\n return overflowRegex.test(elemStyle.overflow + elemStyle.overflowY + elemStyle.overflowX);\r\n },\r\n\r\n /**\r\n * Provides the closest scrollable ancestor.\r\n * A port of the jQuery UI scrollParent method:\r\n * https://github.com/jquery/jquery-ui/blob/master/ui/scroll-parent.js\r\n *\r\n * @param {element} elem - The element to find the scroll parent of.\r\n * @param {boolean=} [includeHidden=false] - Should scroll style of 'hidden' be considered,\r\n * default is false.\r\n * @param {boolean=} [includeSelf=false] - Should the element being passed be\r\n * included in the scrollable llokup.\r\n *\r\n * @returns {element} A HTML element.\r\n */\r\n scrollParent: function(elem, includeHidden, includeSelf) {\r\n elem = this.getRawNode(elem);\r\n\r\n var overflowRegex = includeHidden ? OVERFLOW_REGEX.hidden : OVERFLOW_REGEX.normal;\r\n var documentEl = $document[0].documentElement;\r\n var elemStyle = $window.getComputedStyle(elem);\r\n if (includeSelf && overflowRegex.test(elemStyle.overflow + elemStyle.overflowY + elemStyle.overflowX)) {\r\n return elem;\r\n }\r\n var excludeStatic = elemStyle.position === 'absolute';\r\n var scrollParent = elem.parentElement || documentEl;\r\n\r\n if (scrollParent === documentEl || elemStyle.position === 'fixed') {\r\n return documentEl;\r\n }\r\n\r\n while (scrollParent.parentElement && scrollParent !== documentEl) {\r\n var spStyle = $window.getComputedStyle(scrollParent);\r\n if (excludeStatic && spStyle.position !== 'static') {\r\n excludeStatic = false;\r\n }\r\n\r\n if (!excludeStatic && overflowRegex.test(spStyle.overflow + spStyle.overflowY + spStyle.overflowX)) {\r\n break;\r\n }\r\n scrollParent = scrollParent.parentElement;\r\n }\r\n\r\n return scrollParent;\r\n },\r\n\r\n /**\r\n * Provides read-only equivalent of jQuery's position function:\r\n * http://api.jquery.com/position/ - distance to closest positioned\r\n * ancestor. Does not account for margins by default like jQuery position.\r\n *\r\n * @param {element} elem - The element to caclulate the position on.\r\n * @param {boolean=} [includeMargins=false] - Should margins be accounted\r\n * for, default is false.\r\n *\r\n * @returns {object} An object with the following properties:\r\n *
    \r\n *
  • **width**: the width of the element
  • \r\n *
  • **height**: the height of the element
  • \r\n *
  • **top**: distance to top edge of offset parent
  • \r\n *
  • **left**: distance to left edge of offset parent
  • \r\n *
\r\n */\r\n position: function(elem, includeMagins) {\r\n elem = this.getRawNode(elem);\r\n\r\n var elemOffset = this.offset(elem);\r\n if (includeMagins) {\r\n var elemStyle = $window.getComputedStyle(elem);\r\n elemOffset.top -= this.parseStyle(elemStyle.marginTop);\r\n elemOffset.left -= this.parseStyle(elemStyle.marginLeft);\r\n }\r\n var parent = this.offsetParent(elem);\r\n var parentOffset = {top: 0, left: 0};\r\n\r\n if (parent !== $document[0].documentElement) {\r\n parentOffset = this.offset(parent);\r\n parentOffset.top += parent.clientTop - parent.scrollTop;\r\n parentOffset.left += parent.clientLeft - parent.scrollLeft;\r\n }\r\n\r\n return {\r\n width: Math.round(angular.isNumber(elemOffset.width) ? elemOffset.width : elem.offsetWidth),\r\n height: Math.round(angular.isNumber(elemOffset.height) ? elemOffset.height : elem.offsetHeight),\r\n top: Math.round(elemOffset.top - parentOffset.top),\r\n left: Math.round(elemOffset.left - parentOffset.left)\r\n };\r\n },\r\n\r\n /**\r\n * Provides read-only equivalent of jQuery's offset function:\r\n * http://api.jquery.com/offset/ - distance to viewport. Does\r\n * not account for borders, margins, or padding on the body\r\n * element.\r\n *\r\n * @param {element} elem - The element to calculate the offset on.\r\n *\r\n * @returns {object} An object with the following properties:\r\n *
    \r\n *
  • **width**: the width of the element
  • \r\n *
  • **height**: the height of the element
  • \r\n *
  • **top**: distance to top edge of viewport
  • \r\n *
  • **right**: distance to bottom edge of viewport
  • \r\n *
\r\n */\r\n offset: function(elem) {\r\n elem = this.getRawNode(elem);\r\n\r\n var elemBCR = elem.getBoundingClientRect();\r\n return {\r\n width: Math.round(angular.isNumber(elemBCR.width) ? elemBCR.width : elem.offsetWidth),\r\n height: Math.round(angular.isNumber(elemBCR.height) ? elemBCR.height : elem.offsetHeight),\r\n top: Math.round(elemBCR.top + ($window.pageYOffset || $document[0].documentElement.scrollTop)),\r\n left: Math.round(elemBCR.left + ($window.pageXOffset || $document[0].documentElement.scrollLeft))\r\n };\r\n },\r\n\r\n /**\r\n * Provides offset distance to the closest scrollable ancestor\r\n * or viewport. Accounts for border and scrollbar width.\r\n *\r\n * Right and bottom dimensions represent the distance to the\r\n * respective edge of the viewport element. If the element\r\n * edge extends beyond the viewport, a negative value will be\r\n * reported.\r\n *\r\n * @param {element} elem - The element to get the viewport offset for.\r\n * @param {boolean=} [useDocument=false] - Should the viewport be the document element instead\r\n * of the first scrollable element, default is false.\r\n * @param {boolean=} [includePadding=true] - Should the padding on the offset parent element\r\n * be accounted for, default is true.\r\n *\r\n * @returns {object} An object with the following properties:\r\n *
    \r\n *
  • **top**: distance to the top content edge of viewport element
  • \r\n *
  • **bottom**: distance to the bottom content edge of viewport element
  • \r\n *
  • **left**: distance to the left content edge of viewport element
  • \r\n *
  • **right**: distance to the right content edge of viewport element
  • \r\n *
\r\n */\r\n viewportOffset: function(elem, useDocument, includePadding) {\r\n elem = this.getRawNode(elem);\r\n includePadding = includePadding !== false ? true : false;\r\n\r\n var elemBCR = elem.getBoundingClientRect();\r\n var offsetBCR = {top: 0, left: 0, bottom: 0, right: 0};\r\n\r\n var offsetParent = useDocument ? $document[0].documentElement : this.scrollParent(elem);\r\n var offsetParentBCR = offsetParent.getBoundingClientRect();\r\n\r\n offsetBCR.top = offsetParentBCR.top + offsetParent.clientTop;\r\n offsetBCR.left = offsetParentBCR.left + offsetParent.clientLeft;\r\n if (offsetParent === $document[0].documentElement) {\r\n offsetBCR.top += $window.pageYOffset;\r\n offsetBCR.left += $window.pageXOffset;\r\n }\r\n offsetBCR.bottom = offsetBCR.top + offsetParent.clientHeight;\r\n offsetBCR.right = offsetBCR.left + offsetParent.clientWidth;\r\n\r\n if (includePadding) {\r\n var offsetParentStyle = $window.getComputedStyle(offsetParent);\r\n offsetBCR.top += this.parseStyle(offsetParentStyle.paddingTop);\r\n offsetBCR.bottom -= this.parseStyle(offsetParentStyle.paddingBottom);\r\n offsetBCR.left += this.parseStyle(offsetParentStyle.paddingLeft);\r\n offsetBCR.right -= this.parseStyle(offsetParentStyle.paddingRight);\r\n }\r\n\r\n return {\r\n top: Math.round(elemBCR.top - offsetBCR.top),\r\n bottom: Math.round(offsetBCR.bottom - elemBCR.bottom),\r\n left: Math.round(elemBCR.left - offsetBCR.left),\r\n right: Math.round(offsetBCR.right - elemBCR.right)\r\n };\r\n },\r\n\r\n /**\r\n * Provides an array of placement values parsed from a placement string.\r\n * Along with the 'auto' indicator, supported placement strings are:\r\n *
    \r\n *
  • top: element on top, horizontally centered on host element.
  • \r\n *
  • top-left: element on top, left edge aligned with host element left edge.
  • \r\n *
  • top-right: element on top, lerightft edge aligned with host element right edge.
  • \r\n *
  • bottom: element on bottom, horizontally centered on host element.
  • \r\n *
  • bottom-left: element on bottom, left edge aligned with host element left edge.
  • \r\n *
  • bottom-right: element on bottom, right edge aligned with host element right edge.
  • \r\n *
  • left: element on left, vertically centered on host element.
  • \r\n *
  • left-top: element on left, top edge aligned with host element top edge.
  • \r\n *
  • left-bottom: element on left, bottom edge aligned with host element bottom edge.
  • \r\n *
  • right: element on right, vertically centered on host element.
  • \r\n *
  • right-top: element on right, top edge aligned with host element top edge.
  • \r\n *
  • right-bottom: element on right, bottom edge aligned with host element bottom edge.
  • \r\n *
\r\n * A placement string with an 'auto' indicator is expected to be\r\n * space separated from the placement, i.e: 'auto bottom-left' If\r\n * the primary and secondary placement values do not match 'top,\r\n * bottom, left, right' then 'top' will be the primary placement and\r\n * 'center' will be the secondary placement. If 'auto' is passed, true\r\n * will be returned as the 3rd value of the array.\r\n *\r\n * @param {string} placement - The placement string to parse.\r\n *\r\n * @returns {array} An array with the following values\r\n *
    \r\n *
  • **[0]**: The primary placement.
  • \r\n *
  • **[1]**: The secondary placement.
  • \r\n *
  • **[2]**: If auto is passed: true, else undefined.
  • \r\n *
\r\n */\r\n parsePlacement: function(placement) {\r\n var autoPlace = PLACEMENT_REGEX.auto.test(placement);\r\n if (autoPlace) {\r\n placement = placement.replace(PLACEMENT_REGEX.auto, '');\r\n }\r\n\r\n placement = placement.split('-');\r\n\r\n placement[0] = placement[0] || 'top';\r\n if (!PLACEMENT_REGEX.primary.test(placement[0])) {\r\n placement[0] = 'top';\r\n }\r\n\r\n placement[1] = placement[1] || 'center';\r\n if (!PLACEMENT_REGEX.secondary.test(placement[1])) {\r\n placement[1] = 'center';\r\n }\r\n\r\n if (autoPlace) {\r\n placement[2] = true;\r\n } else {\r\n placement[2] = false;\r\n }\r\n\r\n return placement;\r\n },\r\n\r\n /**\r\n * Provides coordinates for an element to be positioned relative to\r\n * another element. Passing 'auto' as part of the placement parameter\r\n * will enable smart placement - where the element fits. i.e:\r\n * 'auto left-top' will check to see if there is enough space to the left\r\n * of the hostElem to fit the targetElem, if not place right (same for secondary\r\n * top placement). Available space is calculated using the viewportOffset\r\n * function.\r\n *\r\n * @param {element} hostElem - The element to position against.\r\n * @param {element} targetElem - The element to position.\r\n * @param {string=} [placement=top] - The placement for the targetElem,\r\n * default is 'top'. 'center' is assumed as secondary placement for\r\n * 'top', 'left', 'right', and 'bottom' placements. Available placements are:\r\n *
    \r\n *
  • top
  • \r\n *
  • top-right
  • \r\n *
  • top-left
  • \r\n *
  • bottom
  • \r\n *
  • bottom-left
  • \r\n *
  • bottom-right
  • \r\n *
  • left
  • \r\n *
  • left-top
  • \r\n *
  • left-bottom
  • \r\n *
  • right
  • \r\n *
  • right-top
  • \r\n *
  • right-bottom
  • \r\n *
\r\n * @param {boolean=} [appendToBody=false] - Should the top and left values returned\r\n * be calculated from the body element, default is false.\r\n *\r\n * @returns {object} An object with the following properties:\r\n *
    \r\n *
  • **top**: Value for targetElem top.
  • \r\n *
  • **left**: Value for targetElem left.
  • \r\n *
  • **placement**: The resolved placement.
  • \r\n *
\r\n */\r\n positionElements: function(hostElem, targetElem, placement, appendToBody) {\r\n hostElem = this.getRawNode(hostElem);\r\n targetElem = this.getRawNode(targetElem);\r\n\r\n // need to read from prop to support tests.\r\n var targetWidth = angular.isDefined(targetElem.offsetWidth) ? targetElem.offsetWidth : targetElem.prop('offsetWidth');\r\n var targetHeight = angular.isDefined(targetElem.offsetHeight) ? targetElem.offsetHeight : targetElem.prop('offsetHeight');\r\n\r\n placement = this.parsePlacement(placement);\r\n\r\n var hostElemPos = appendToBody ? this.offset(hostElem) : this.position(hostElem);\r\n var targetElemPos = {top: 0, left: 0, placement: ''};\r\n\r\n if (placement[2]) {\r\n var viewportOffset = this.viewportOffset(hostElem, appendToBody);\r\n\r\n var targetElemStyle = $window.getComputedStyle(targetElem);\r\n var adjustedSize = {\r\n width: targetWidth + Math.round(Math.abs(this.parseStyle(targetElemStyle.marginLeft) + this.parseStyle(targetElemStyle.marginRight))),\r\n height: targetHeight + Math.round(Math.abs(this.parseStyle(targetElemStyle.marginTop) + this.parseStyle(targetElemStyle.marginBottom)))\r\n };\r\n\r\n placement[0] = placement[0] === 'top' && adjustedSize.height > viewportOffset.top && adjustedSize.height <= viewportOffset.bottom ? 'bottom' :\r\n placement[0] === 'bottom' && adjustedSize.height > viewportOffset.bottom && adjustedSize.height <= viewportOffset.top ? 'top' :\r\n placement[0] === 'left' && adjustedSize.width > viewportOffset.left && adjustedSize.width <= viewportOffset.right ? 'right' :\r\n placement[0] === 'right' && adjustedSize.width > viewportOffset.right && adjustedSize.width <= viewportOffset.left ? 'left' :\r\n placement[0];\r\n\r\n placement[1] = placement[1] === 'top' && adjustedSize.height - hostElemPos.height > viewportOffset.bottom && adjustedSize.height - hostElemPos.height <= viewportOffset.top ? 'bottom' :\r\n placement[1] === 'bottom' && adjustedSize.height - hostElemPos.height > viewportOffset.top && adjustedSize.height - hostElemPos.height <= viewportOffset.bottom ? 'top' :\r\n placement[1] === 'left' && adjustedSize.width - hostElemPos.width > viewportOffset.right && adjustedSize.width - hostElemPos.width <= viewportOffset.left ? 'right' :\r\n placement[1] === 'right' && adjustedSize.width - hostElemPos.width > viewportOffset.left && adjustedSize.width - hostElemPos.width <= viewportOffset.right ? 'left' :\r\n placement[1];\r\n\r\n if (placement[1] === 'center') {\r\n if (PLACEMENT_REGEX.vertical.test(placement[0])) {\r\n var xOverflow = hostElemPos.width / 2 - targetWidth / 2;\r\n if (viewportOffset.left + xOverflow < 0 && adjustedSize.width - hostElemPos.width <= viewportOffset.right) {\r\n placement[1] = 'left';\r\n } else if (viewportOffset.right + xOverflow < 0 && adjustedSize.width - hostElemPos.width <= viewportOffset.left) {\r\n placement[1] = 'right';\r\n }\r\n } else {\r\n var yOverflow = hostElemPos.height / 2 - adjustedSize.height / 2;\r\n if (viewportOffset.top + yOverflow < 0 && adjustedSize.height - hostElemPos.height <= viewportOffset.bottom) {\r\n placement[1] = 'top';\r\n } else if (viewportOffset.bottom + yOverflow < 0 && adjustedSize.height - hostElemPos.height <= viewportOffset.top) {\r\n placement[1] = 'bottom';\r\n }\r\n }\r\n }\r\n }\r\n\r\n switch (placement[0]) {\r\n case 'top':\r\n targetElemPos.top = hostElemPos.top - targetHeight;\r\n break;\r\n case 'bottom':\r\n targetElemPos.top = hostElemPos.top + hostElemPos.height;\r\n break;\r\n case 'left':\r\n targetElemPos.left = hostElemPos.left - targetWidth;\r\n break;\r\n case 'right':\r\n targetElemPos.left = hostElemPos.left + hostElemPos.width;\r\n break;\r\n }\r\n\r\n switch (placement[1]) {\r\n case 'top':\r\n targetElemPos.top = hostElemPos.top;\r\n break;\r\n case 'bottom':\r\n targetElemPos.top = hostElemPos.top + hostElemPos.height - targetHeight;\r\n break;\r\n case 'left':\r\n targetElemPos.left = hostElemPos.left;\r\n break;\r\n case 'right':\r\n targetElemPos.left = hostElemPos.left + hostElemPos.width - targetWidth;\r\n break;\r\n case 'center':\r\n if (PLACEMENT_REGEX.vertical.test(placement[0])) {\r\n targetElemPos.left = hostElemPos.left + hostElemPos.width / 2 - targetWidth / 2;\r\n } else {\r\n targetElemPos.top = hostElemPos.top + hostElemPos.height / 2 - targetHeight / 2;\r\n }\r\n break;\r\n }\r\n\r\n targetElemPos.top = Math.round(targetElemPos.top);\r\n targetElemPos.left = Math.round(targetElemPos.left);\r\n targetElemPos.placement = placement[1] === 'center' ? placement[0] : placement[0] + '-' + placement[1];\r\n\r\n return targetElemPos;\r\n },\r\n\r\n /**\r\n * Provides a way to adjust the top positioning after first\r\n * render to correctly align element to top after content\r\n * rendering causes resized element height\r\n *\r\n * @param {array} placementClasses - The array of strings of classes\r\n * element should have.\r\n * @param {object} containerPosition - The object with container\r\n * position information\r\n * @param {number} initialHeight - The initial height for the elem.\r\n * @param {number} currentHeight - The current height for the elem.\r\n */\r\n adjustTop: function(placementClasses, containerPosition, initialHeight, currentHeight) {\r\n if (placementClasses.indexOf('top') !== -1 && initialHeight !== currentHeight) {\r\n return {\r\n top: containerPosition.top - currentHeight + 'px'\r\n };\r\n }\r\n },\r\n\r\n /**\r\n * Provides a way for positioning tooltip & dropdown\r\n * arrows when using placement options beyond the standard\r\n * left, right, top, or bottom.\r\n *\r\n * @param {element} elem - The tooltip/dropdown element.\r\n * @param {string} placement - The placement for the elem.\r\n */\r\n positionArrow: function(elem, placement) {\r\n elem = this.getRawNode(elem);\r\n\r\n var innerElem = elem.querySelector('.tooltip-inner, .popover-inner');\r\n if (!innerElem) {\r\n return;\r\n }\r\n\r\n var isTooltip = angular.element(innerElem).hasClass('tooltip-inner');\r\n\r\n var arrowElem = isTooltip ? elem.querySelector('.tooltip-arrow') : elem.querySelector('.arrow');\r\n if (!arrowElem) {\r\n return;\r\n }\r\n\r\n var arrowCss = {\r\n top: '',\r\n bottom: '',\r\n left: '',\r\n right: ''\r\n };\r\n\r\n placement = this.parsePlacement(placement);\r\n if (placement[1] === 'center') {\r\n // no adjustment necessary - just reset styles\r\n angular.element(arrowElem).css(arrowCss);\r\n return;\r\n }\r\n\r\n var borderProp = 'border-' + placement[0] + '-width';\r\n var borderWidth = $window.getComputedStyle(arrowElem)[borderProp];\r\n\r\n var borderRadiusProp = 'border-';\r\n if (PLACEMENT_REGEX.vertical.test(placement[0])) {\r\n borderRadiusProp += placement[0] + '-' + placement[1];\r\n } else {\r\n borderRadiusProp += placement[1] + '-' + placement[0];\r\n }\r\n borderRadiusProp += '-radius';\r\n var borderRadius = $window.getComputedStyle(isTooltip ? innerElem : elem)[borderRadiusProp];\r\n\r\n switch (placement[0]) {\r\n case 'top':\r\n arrowCss.bottom = isTooltip ? '0' : '-' + borderWidth;\r\n break;\r\n case 'bottom':\r\n arrowCss.top = isTooltip ? '0' : '-' + borderWidth;\r\n break;\r\n case 'left':\r\n arrowCss.right = isTooltip ? '0' : '-' + borderWidth;\r\n break;\r\n case 'right':\r\n arrowCss.left = isTooltip ? '0' : '-' + borderWidth;\r\n break;\r\n }\r\n\r\n arrowCss[placement[1]] = borderRadius;\r\n\r\n angular.element(arrowElem).css(arrowCss);\r\n }\r\n };\r\n }]);\r\n\r\nangular.module('ui.bootstrap.multiMap', [])\r\n/**\r\n * A helper, internal data structure that stores all references attached to key\r\n */\r\n .factory('$$multiMap', function() {\r\n return {\r\n createNew: function() {\r\n var map = {};\r\n\r\n return {\r\n entries: function() {\r\n return Object.keys(map).map(function(key) {\r\n return {\r\n key: key,\r\n value: map[key]\r\n };\r\n });\r\n },\r\n get: function(key) {\r\n return map[key];\r\n },\r\n hasKey: function(key) {\r\n return !!map[key];\r\n },\r\n keys: function() {\r\n return Object.keys(map);\r\n },\r\n put: function(key, value) {\r\n if (!map[key]) {\r\n map[key] = [];\r\n }\r\n\r\n map[key].push(value);\r\n },\r\n remove: function(key, value) {\r\n var values = map[key];\r\n\r\n if (!values) {\r\n return;\r\n }\r\n\r\n var idx = values.indexOf(value);\r\n\r\n if (idx !== -1) {\r\n values.splice(idx, 1);\r\n }\r\n\r\n if (!values.length) {\r\n delete map[key];\r\n }\r\n }\r\n };\r\n }\r\n };\r\n });\r\n\r\nangular.module('ui.bootstrap.modal', ['ui.bootstrap.multiMap', 'ui.bootstrap.stackedMap', 'ui.bootstrap.position'])\r\n/**\r\n * Pluggable resolve mechanism for the modal resolve resolution\r\n * Supports UI Router's $resolve service\r\n */\r\n .provider('$uibResolve', function() {\r\n var resolve = this;\r\n this.resolver = null;\r\n\r\n this.setResolver = function(resolver) {\r\n this.resolver = resolver;\r\n };\r\n\r\n this.$get = ['$injector', '$q', function($injector, $q) {\r\n var resolver = resolve.resolver ? $injector.get(resolve.resolver) : null;\r\n return {\r\n resolve: function(invocables, locals, parent, self) {\r\n if (resolver) {\r\n return resolver.resolve(invocables, locals, parent, self);\r\n }\r\n\r\n var promises = [];\r\n\r\n angular.forEach(invocables, function(value) {\r\n if (angular.isFunction(value) || angular.isArray(value)) {\r\n promises.push($q.resolve($injector.invoke(value)));\r\n } else if (angular.isString(value)) {\r\n promises.push($q.resolve($injector.get(value)));\r\n } else {\r\n promises.push($q.resolve(value));\r\n }\r\n });\r\n\r\n return $q.all(promises).then(function(resolves) {\r\n var resolveObj = {};\r\n var resolveIter = 0;\r\n angular.forEach(invocables, function(value, key) {\r\n resolveObj[key] = resolves[resolveIter++];\r\n });\r\n\r\n return resolveObj;\r\n });\r\n }\r\n };\r\n }];\r\n })\r\n\r\n/**\r\n * A helper directive for the $modal service. It creates a backdrop element.\r\n */\r\n .directive('uibModalBackdrop', ['$animate', '$injector', '$uibModalStack',\r\n function($animate, $injector, $modalStack) {\r\n return {\r\n restrict: 'A',\r\n compile: function(tElement, tAttrs) {\r\n tElement.addClass(tAttrs.backdropClass);\r\n return linkFn;\r\n }\r\n };\r\n\r\n function linkFn(scope, element, attrs) {\r\n if (attrs.modalInClass) {\r\n $animate.addClass(element, attrs.modalInClass);\r\n\r\n scope.$on($modalStack.NOW_CLOSING_EVENT, function(e, setIsAsync) {\r\n var done = setIsAsync();\r\n if (scope.modalOptions.animation) {\r\n $animate.removeClass(element, attrs.modalInClass).then(done);\r\n } else {\r\n done();\r\n }\r\n });\r\n }\r\n }\r\n }])\r\n\r\n .directive('uibModalWindow', ['$uibModalStack', '$q', '$animateCss', '$document',\r\n function($modalStack, $q, $animateCss, $document) {\r\n return {\r\n scope: {\r\n index: '@'\r\n },\r\n restrict: 'A',\r\n transclude: true,\r\n templateUrl: function(tElement, tAttrs) {\r\n return tAttrs.templateUrl || 'uib/template/modal/window.html';\r\n },\r\n link: function(scope, element, attrs) {\r\n element.addClass(attrs.windowTopClass || '');\r\n scope.size = attrs.size;\r\n\r\n scope.close = function(evt) {\r\n var modal = $modalStack.getTop();\r\n if (modal && modal.value.backdrop &&\r\n modal.value.backdrop !== 'static' &&\r\n evt.target === evt.currentTarget) {\r\n evt.preventDefault();\r\n evt.stopPropagation();\r\n $modalStack.dismiss(modal.key, 'backdrop click');\r\n }\r\n };\r\n\r\n // moved from template to fix issue #2280\r\n element.on('click', scope.close);\r\n\r\n // This property is only added to the scope for the purpose of detecting when this directive is rendered.\r\n // We can detect that by using this property in the template associated with this directive and then use\r\n // {@link Attribute#$observe} on it. For more details please see {@link TableColumnResize}.\r\n scope.$isRendered = true;\r\n\r\n // Deferred object that will be resolved when this modal is rendered.\r\n var modalRenderDeferObj = $q.defer();\r\n // Resolve render promise post-digest\r\n scope.$$postDigest(function() {\r\n modalRenderDeferObj.resolve();\r\n });\r\n\r\n modalRenderDeferObj.promise.then(function() {\r\n var animationPromise = null;\r\n\r\n if (attrs.modalInClass) {\r\n animationPromise = $animateCss(element, {\r\n addClass: attrs.modalInClass\r\n }).start();\r\n\r\n scope.$on($modalStack.NOW_CLOSING_EVENT, function(e, setIsAsync) {\r\n var done = setIsAsync();\r\n $animateCss(element, {\r\n removeClass: attrs.modalInClass\r\n }).start().then(done);\r\n });\r\n }\r\n\r\n\r\n $q.when(animationPromise).then(function() {\r\n // Notify {@link $modalStack} that modal is rendered.\r\n var modal = $modalStack.getTop();\r\n if (modal) {\r\n $modalStack.modalRendered(modal.key);\r\n }\r\n\r\n /**\r\n * If something within the freshly-opened modal already has focus (perhaps via a\r\n * directive that causes focus) then there's no need to try to focus anything.\r\n */\r\n if (!($document[0].activeElement && element[0].contains($document[0].activeElement))) {\r\n var inputWithAutofocus = element[0].querySelector('[autofocus]');\r\n /**\r\n * Auto-focusing of a freshly-opened modal element causes any child elements\r\n * with the autofocus attribute to lose focus. This is an issue on touch\r\n * based devices which will show and then hide the onscreen keyboard.\r\n * Attempts to refocus the autofocus element via JavaScript will not reopen\r\n * the onscreen keyboard. Fixed by updated the focusing logic to only autofocus\r\n * the modal element if the modal does not contain an autofocus element.\r\n */\r\n if (inputWithAutofocus) {\r\n inputWithAutofocus.focus();\r\n } else {\r\n element[0].focus();\r\n }\r\n }\r\n });\r\n });\r\n }\r\n };\r\n }])\r\n\r\n .directive('uibModalAnimationClass', function() {\r\n return {\r\n compile: function(tElement, tAttrs) {\r\n if (tAttrs.modalAnimation) {\r\n tElement.addClass(tAttrs.uibModalAnimationClass);\r\n }\r\n }\r\n };\r\n })\r\n\r\n .directive('uibModalTransclude', ['$animate', function($animate) {\r\n return {\r\n link: function(scope, element, attrs, controller, transclude) {\r\n transclude(scope.$parent, function(clone) {\r\n element.empty();\r\n $animate.enter(clone, element);\r\n });\r\n }\r\n };\r\n }])\r\n\r\n .factory('$uibModalStack', ['$animate', '$animateCss', '$document',\r\n '$compile', '$rootScope', '$q', '$$multiMap', '$$stackedMap', '$uibPosition',\r\n function($animate, $animateCss, $document, $compile, $rootScope, $q, $$multiMap, $$stackedMap, $uibPosition) {\r\n var OPENED_MODAL_CLASS = 'modal-open';\r\n\r\n var backdropDomEl, backdropScope;\r\n var openedWindows = $$stackedMap.createNew();\r\n var openedClasses = $$multiMap.createNew();\r\n var $modalStack = {\r\n NOW_CLOSING_EVENT: 'modal.stack.now-closing'\r\n };\r\n var topModalIndex = 0;\r\n var previousTopOpenedModal = null;\r\n var ARIA_HIDDEN_ATTRIBUTE_NAME = 'data-bootstrap-modal-aria-hidden-count';\r\n\r\n //Modal focus behavior\r\n var tabbableSelector = 'a[href], area[href], input:not([disabled]):not([tabindex=\\'-1\\']), ' +\r\n 'button:not([disabled]):not([tabindex=\\'-1\\']),select:not([disabled]):not([tabindex=\\'-1\\']), textarea:not([disabled]):not([tabindex=\\'-1\\']), ' +\r\n 'iframe, object, embed, *[tabindex]:not([tabindex=\\'-1\\']), *[contenteditable=true]';\r\n var scrollbarPadding;\r\n var SNAKE_CASE_REGEXP = /[A-Z]/g;\r\n\r\n // TODO: extract into common dependency with tooltip\r\n function snake_case(name) {\r\n var separator = '-';\r\n return name.replace(SNAKE_CASE_REGEXP, function(letter, pos) {\r\n return (pos ? separator : '') + letter.toLowerCase();\r\n });\r\n }\r\n\r\n function isVisible(element) {\r\n return !!(element.offsetWidth ||\r\n element.offsetHeight ||\r\n element.getClientRects().length);\r\n }\r\n\r\n function backdropIndex() {\r\n var topBackdropIndex = -1;\r\n var opened = openedWindows.keys();\r\n for (var i = 0; i < opened.length; i++) {\r\n if (openedWindows.get(opened[i]).value.backdrop) {\r\n topBackdropIndex = i;\r\n }\r\n }\r\n\r\n // If any backdrop exist, ensure that it's index is always\r\n // right below the top modal\r\n if (topBackdropIndex > -1 && topBackdropIndex < topModalIndex) {\r\n topBackdropIndex = topModalIndex;\r\n }\r\n return topBackdropIndex;\r\n }\r\n\r\n $rootScope.$watch(backdropIndex, function(newBackdropIndex) {\r\n if (backdropScope) {\r\n backdropScope.index = newBackdropIndex;\r\n }\r\n });\r\n\r\n function removeModalWindow(modalInstance, elementToReceiveFocus) {\r\n var modalWindow = openedWindows.get(modalInstance).value;\r\n var appendToElement = modalWindow.appendTo;\r\n\r\n //clean up the stack\r\n openedWindows.remove(modalInstance);\r\n previousTopOpenedModal = openedWindows.top();\r\n if (previousTopOpenedModal) {\r\n topModalIndex = parseInt(previousTopOpenedModal.value.modalDomEl.attr('index'), 10);\r\n }\r\n\r\n removeAfterAnimate(modalWindow.modalDomEl, modalWindow.modalScope, function() {\r\n var modalBodyClass = modalWindow.openedClass || OPENED_MODAL_CLASS;\r\n openedClasses.remove(modalBodyClass, modalInstance);\r\n var areAnyOpen = openedClasses.hasKey(modalBodyClass);\r\n appendToElement.toggleClass(modalBodyClass, areAnyOpen);\r\n if (!areAnyOpen && scrollbarPadding && scrollbarPadding.heightOverflow && scrollbarPadding.scrollbarWidth) {\r\n if (scrollbarPadding.originalRight) {\r\n appendToElement.css({paddingRight: scrollbarPadding.originalRight + 'px'});\r\n } else {\r\n appendToElement.css({paddingRight: ''});\r\n }\r\n scrollbarPadding = null;\r\n }\r\n toggleTopWindowClass(true);\r\n }, modalWindow.closedDeferred);\r\n checkRemoveBackdrop();\r\n\r\n //move focus to specified element if available, or else to body\r\n if (elementToReceiveFocus && elementToReceiveFocus.focus) {\r\n elementToReceiveFocus.focus();\r\n } else if (appendToElement.focus) {\r\n appendToElement.focus();\r\n }\r\n }\r\n\r\n // Add or remove \"windowTopClass\" from the top window in the stack\r\n function toggleTopWindowClass(toggleSwitch) {\r\n var modalWindow;\r\n\r\n if (openedWindows.length() > 0) {\r\n modalWindow = openedWindows.top().value;\r\n modalWindow.modalDomEl.toggleClass(modalWindow.windowTopClass || '', toggleSwitch);\r\n }\r\n }\r\n\r\n function checkRemoveBackdrop() {\r\n //remove backdrop if no longer needed\r\n if (backdropDomEl && backdropIndex() === -1) {\r\n var backdropScopeRef = backdropScope;\r\n removeAfterAnimate(backdropDomEl, backdropScope, function() {\r\n backdropScopeRef = null;\r\n });\r\n backdropDomEl = undefined;\r\n backdropScope = undefined;\r\n }\r\n }\r\n\r\n function removeAfterAnimate(domEl, scope, done, closedDeferred) {\r\n var asyncDeferred;\r\n var asyncPromise = null;\r\n var setIsAsync = function() {\r\n if (!asyncDeferred) {\r\n asyncDeferred = $q.defer();\r\n asyncPromise = asyncDeferred.promise;\r\n }\r\n\r\n return function asyncDone() {\r\n asyncDeferred.resolve();\r\n };\r\n };\r\n scope.$broadcast($modalStack.NOW_CLOSING_EVENT, setIsAsync);\r\n\r\n // Note that it's intentional that asyncPromise might be null.\r\n // That's when setIsAsync has not been called during the\r\n // NOW_CLOSING_EVENT broadcast.\r\n return $q.when(asyncPromise).then(afterAnimating);\r\n\r\n function afterAnimating() {\r\n if (afterAnimating.done) {\r\n return;\r\n }\r\n afterAnimating.done = true;\r\n\r\n $animate.leave(domEl).then(function() {\r\n if (done) {\r\n done();\r\n }\r\n\r\n domEl.remove();\r\n if (closedDeferred) {\r\n closedDeferred.resolve();\r\n }\r\n });\r\n\r\n scope.$destroy();\r\n }\r\n }\r\n\r\n $document.on('keydown', keydownListener);\r\n\r\n $rootScope.$on('$destroy', function() {\r\n $document.off('keydown', keydownListener);\r\n });\r\n\r\n function keydownListener(evt) {\r\n if (evt.isDefaultPrevented()) {\r\n return evt;\r\n }\r\n\r\n var modal = openedWindows.top();\r\n if (modal) {\r\n switch (evt.which) {\r\n case 27: {\r\n if (modal.value.keyboard) {\r\n evt.preventDefault();\r\n $rootScope.$apply(function() {\r\n $modalStack.dismiss(modal.key, 'escape key press');\r\n });\r\n }\r\n break;\r\n }\r\n case 9: {\r\n var list = $modalStack.loadFocusElementList(modal);\r\n var focusChanged = false;\r\n if (evt.shiftKey) {\r\n if ($modalStack.isFocusInFirstItem(evt, list) || $modalStack.isModalFocused(evt, modal)) {\r\n focusChanged = $modalStack.focusLastFocusableElement(list);\r\n }\r\n } else {\r\n if ($modalStack.isFocusInLastItem(evt, list)) {\r\n focusChanged = $modalStack.focusFirstFocusableElement(list);\r\n }\r\n }\r\n\r\n if (focusChanged) {\r\n evt.preventDefault();\r\n evt.stopPropagation();\r\n }\r\n\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n $modalStack.open = function(modalInstance, modal) {\r\n var modalOpener = $document[0].activeElement,\r\n modalBodyClass = modal.openedClass || OPENED_MODAL_CLASS;\r\n\r\n toggleTopWindowClass(false);\r\n\r\n // Store the current top first, to determine what index we ought to use\r\n // for the current top modal\r\n previousTopOpenedModal = openedWindows.top();\r\n\r\n openedWindows.add(modalInstance, {\r\n deferred: modal.deferred,\r\n renderDeferred: modal.renderDeferred,\r\n closedDeferred: modal.closedDeferred,\r\n modalScope: modal.scope,\r\n backdrop: modal.backdrop,\r\n keyboard: modal.keyboard,\r\n openedClass: modal.openedClass,\r\n windowTopClass: modal.windowTopClass,\r\n animation: modal.animation,\r\n appendTo: modal.appendTo\r\n });\r\n\r\n openedClasses.put(modalBodyClass, modalInstance);\r\n\r\n var appendToElement = modal.appendTo,\r\n currBackdropIndex = backdropIndex();\r\n\r\n if (currBackdropIndex >= 0 && !backdropDomEl) {\r\n backdropScope = $rootScope.$new(true);\r\n backdropScope.modalOptions = modal;\r\n backdropScope.index = currBackdropIndex;\r\n backdropDomEl = angular.element('
');\r\n backdropDomEl.attr({\r\n 'class': 'modal-backdrop',\r\n 'ng-style': '{\\'z-index\\': 3040 + (index && 1 || 0) + index*10}',\r\n 'uib-modal-animation-class': 'fade',\r\n 'modal-in-class': 'in'\r\n });\r\n if (modal.backdropClass) {\r\n backdropDomEl.addClass(modal.backdropClass);\r\n }\r\n\r\n if (modal.animation) {\r\n backdropDomEl.attr('modal-animation', 'true');\r\n }\r\n $compile(backdropDomEl)(backdropScope);\r\n $animate.enter(backdropDomEl, appendToElement);\r\n // Hack !! scrollbar width\r\n //if ($uibPosition.isScrollable(appendToElement)) {\r\n scrollbarPadding = $uibPosition.scrollbarPadding(appendToElement);\r\n if (scrollbarPadding.heightOverflow && scrollbarPadding.scrollbarWidth) {\r\n appendToElement.css({paddingRight: scrollbarPadding.right + 'px'});\r\n }\r\n //}\r\n }\r\n\r\n var content;\r\n if (modal.component) {\r\n content = document.createElement(snake_case(modal.component.name));\r\n content = angular.element(content);\r\n content.attr({\r\n resolve: '$resolve',\r\n 'modal-instance': '$uibModalInstance',\r\n close: '$close($value)',\r\n dismiss: '$dismiss($value)'\r\n });\r\n } else {\r\n content = modal.content;\r\n }\r\n\r\n // Set the top modal index based on the index of the previous top modal\r\n topModalIndex = previousTopOpenedModal ? parseInt(previousTopOpenedModal.value.modalDomEl.attr('index'), 10) + 1 : 0;\r\n var angularDomEl = angular.element('
');\r\n angularDomEl.attr({\r\n 'class': 'modal',\r\n 'template-url': modal.windowTemplateUrl,\r\n 'window-top-class': modal.windowTopClass,\r\n 'role': 'dialog',\r\n 'aria-labelledby': modal.ariaLabelledBy,\r\n 'aria-describedby': modal.ariaDescribedBy,\r\n 'size': modal.size,\r\n 'index': topModalIndex,\r\n 'animate': 'animate',\r\n 'ng-style': '{\\'z-index\\': 3070 + $$topModalIndex*10, display: \\'block\\'}',\r\n 'tabindex': -1,\r\n 'uib-modal-animation-class': 'fade',\r\n 'modal-in-class': 'in'\r\n }).append(content);\r\n if (modal.windowClass) {\r\n angularDomEl.addClass(modal.windowClass);\r\n }\r\n\r\n if (modal.animation) {\r\n angularDomEl.attr('modal-animation', 'true');\r\n }\r\n\r\n appendToElement.addClass(modalBodyClass);\r\n if (modal.scope) {\r\n // we need to explicitly add the modal index to the modal scope\r\n // because it is needed by ngStyle to compute the zIndex property.\r\n modal.scope.$$topModalIndex = topModalIndex;\r\n }\r\n $animate.enter($compile(angularDomEl)(modal.scope), appendToElement);\r\n\r\n openedWindows.top().value.modalDomEl = angularDomEl;\r\n openedWindows.top().value.modalOpener = modalOpener;\r\n\r\n applyAriaHidden(angularDomEl);\r\n\r\n function applyAriaHidden(el) {\r\n if (!el || el[0].tagName === 'BODY') {\r\n return;\r\n }\r\n\r\n getSiblings(el).forEach(function(sibling) {\r\n var elemIsAlreadyHidden = sibling.getAttribute('aria-hidden') === 'true',\r\n ariaHiddenCount = parseInt(sibling.getAttribute(ARIA_HIDDEN_ATTRIBUTE_NAME), 10);\r\n\r\n if (!ariaHiddenCount) {\r\n ariaHiddenCount = elemIsAlreadyHidden ? 1 : 0;\r\n }\r\n\r\n sibling.setAttribute(ARIA_HIDDEN_ATTRIBUTE_NAME, ariaHiddenCount + 1);\r\n sibling.setAttribute('aria-hidden', 'true');\r\n });\r\n\r\n return applyAriaHidden(el.parent());\r\n\r\n function getSiblings(el) {\r\n var children = el.parent() ? el.parent().children() : [];\r\n\r\n return Array.prototype.filter.call(children, function(child) {\r\n return child !== el[0];\r\n });\r\n }\r\n }\r\n };\r\n\r\n function broadcastClosing(modalWindow, resultOrReason, closing) {\r\n return !modalWindow.value.modalScope.$broadcast('modal.closing', resultOrReason, closing).defaultPrevented;\r\n }\r\n\r\n function unhideBackgroundElements() {\r\n Array.prototype.forEach.call(\r\n document.querySelectorAll('[' + ARIA_HIDDEN_ATTRIBUTE_NAME + ']'),\r\n function(hiddenEl) {\r\n var ariaHiddenCount = parseInt(hiddenEl.getAttribute(ARIA_HIDDEN_ATTRIBUTE_NAME), 10),\r\n newHiddenCount = ariaHiddenCount - 1;\r\n hiddenEl.setAttribute(ARIA_HIDDEN_ATTRIBUTE_NAME, newHiddenCount);\r\n\r\n if (!newHiddenCount) {\r\n hiddenEl.removeAttribute(ARIA_HIDDEN_ATTRIBUTE_NAME);\r\n hiddenEl.removeAttribute('aria-hidden');\r\n }\r\n }\r\n );\r\n }\r\n\r\n $modalStack.close = function(modalInstance, result) {\r\n var modalWindow = openedWindows.get(modalInstance);\r\n unhideBackgroundElements();\r\n if (modalWindow && broadcastClosing(modalWindow, result, true)) {\r\n modalWindow.value.modalScope.$$uibDestructionScheduled = true;\r\n modalWindow.value.deferred.resolve(result);\r\n removeModalWindow(modalInstance, modalWindow.value.modalOpener);\r\n return true;\r\n }\r\n\r\n return !modalWindow;\r\n };\r\n\r\n $modalStack.dismiss = function(modalInstance, reason) {\r\n var modalWindow = openedWindows.get(modalInstance);\r\n unhideBackgroundElements();\r\n if (modalWindow && broadcastClosing(modalWindow, reason, false)) {\r\n modalWindow.value.modalScope.$$uibDestructionScheduled = true;\r\n modalWindow.value.deferred.reject(reason);\r\n removeModalWindow(modalInstance, modalWindow.value.modalOpener);\r\n return true;\r\n }\r\n return !modalWindow;\r\n };\r\n\r\n $modalStack.dismissAll = function(reason) {\r\n var topModal = this.getTop();\r\n while (topModal && this.dismiss(topModal.key, reason)) {\r\n topModal = this.getTop();\r\n }\r\n };\r\n\r\n $modalStack.getTop = function() {\r\n return openedWindows.top();\r\n };\r\n\r\n $modalStack.modalRendered = function(modalInstance) {\r\n var modalWindow = openedWindows.get(modalInstance);\r\n if (modalWindow) {\r\n modalWindow.value.renderDeferred.resolve();\r\n }\r\n };\r\n\r\n $modalStack.focusFirstFocusableElement = function(list) {\r\n if (list.length > 0) {\r\n list[0].focus();\r\n return true;\r\n }\r\n return false;\r\n };\r\n\r\n $modalStack.focusLastFocusableElement = function(list) {\r\n if (list.length > 0) {\r\n list[list.length - 1].focus();\r\n return true;\r\n }\r\n return false;\r\n };\r\n\r\n $modalStack.isModalFocused = function(evt, modalWindow) {\r\n if (evt && modalWindow) {\r\n var modalDomEl = modalWindow.value.modalDomEl;\r\n if (modalDomEl && modalDomEl.length) {\r\n return (evt.target || evt.srcElement) === modalDomEl[0];\r\n }\r\n }\r\n return false;\r\n };\r\n\r\n $modalStack.isFocusInFirstItem = function(evt, list) {\r\n if (list.length > 0) {\r\n return (evt.target || evt.srcElement) === list[0];\r\n }\r\n return false;\r\n };\r\n\r\n $modalStack.isFocusInLastItem = function(evt, list) {\r\n if (list.length > 0) {\r\n return (evt.target || evt.srcElement) === list[list.length - 1];\r\n }\r\n return false;\r\n };\r\n\r\n $modalStack.loadFocusElementList = function(modalWindow) {\r\n if (modalWindow) {\r\n var modalDomE1 = modalWindow.value.modalDomEl;\r\n if (modalDomE1 && modalDomE1.length) {\r\n var elements = modalDomE1[0].querySelectorAll(tabbableSelector);\r\n return elements ?\r\n Array.prototype.filter.call(elements, function(element) {\r\n return isVisible(element);\r\n }) : elements;\r\n }\r\n }\r\n };\r\n\r\n return $modalStack;\r\n }])\r\n\r\n .provider('$uibModal', function() {\r\n var $modalProvider = {\r\n options: {\r\n animation: true,\r\n backdrop: true, //can also be false or 'static'\r\n keyboard: true\r\n },\r\n $get: ['$rootScope', '$q', '$document', '$templateRequest', '$controller', '$uibResolve', '$uibModalStack',\r\n function ($rootScope, $q, $document, $templateRequest, $controller, $uibResolve, $modalStack) {\r\n var $modal = {};\r\n\r\n function getTemplatePromise(options) {\r\n return options.template ? $q.when(options.template) :\r\n $templateRequest(angular.isFunction(options.templateUrl) ?\r\n options.templateUrl() : options.templateUrl);\r\n }\r\n\r\n var promiseChain = null;\r\n $modal.getPromiseChain = function() {\r\n return promiseChain;\r\n };\r\n\r\n $modal.open = function(modalOptions) {\r\n var modalResultDeferred = $q.defer();\r\n var modalOpenedDeferred = $q.defer();\r\n var modalClosedDeferred = $q.defer();\r\n var modalRenderDeferred = $q.defer();\r\n\r\n //prepare an instance of a modal to be injected into controllers and returned to a caller\r\n var modalInstance = {\r\n result: modalResultDeferred.promise,\r\n opened: modalOpenedDeferred.promise,\r\n closed: modalClosedDeferred.promise,\r\n rendered: modalRenderDeferred.promise,\r\n close: function (result) {\r\n return $modalStack.close(modalInstance, result);\r\n },\r\n dismiss: function (reason) {\r\n return $modalStack.dismiss(modalInstance, reason);\r\n }\r\n };\r\n\r\n //merge and clean up options\r\n modalOptions = angular.extend({}, $modalProvider.options, modalOptions);\r\n modalOptions.resolve = modalOptions.resolve || {};\r\n modalOptions.appendTo = modalOptions.appendTo || $document.find('body').eq(0);\r\n\r\n if (!modalOptions.appendTo.length) {\r\n throw new Error('appendTo element not found. Make sure that the element passed is in DOM.');\r\n }\r\n\r\n //verify options\r\n if (!modalOptions.component && !modalOptions.template && !modalOptions.templateUrl) {\r\n throw new Error('One of component or template or templateUrl options is required.');\r\n }\r\n\r\n var templateAndResolvePromise;\r\n if (modalOptions.component) {\r\n templateAndResolvePromise = $q.when($uibResolve.resolve(modalOptions.resolve, {}, null, null));\r\n } else {\r\n templateAndResolvePromise =\r\n $q.all([getTemplatePromise(modalOptions), $uibResolve.resolve(modalOptions.resolve, {}, null, null)]);\r\n }\r\n\r\n function resolveWithTemplate() {\r\n return templateAndResolvePromise;\r\n }\r\n\r\n // Wait for the resolution of the existing promise chain.\r\n // Then switch to our own combined promise dependency (regardless of how the previous modal fared).\r\n // Then add to $modalStack and resolve opened.\r\n // Finally clean up the chain variable if no subsequent modal has overwritten it.\r\n var samePromise;\r\n samePromise = promiseChain = $q.all([promiseChain])\r\n .then(resolveWithTemplate, resolveWithTemplate)\r\n .then(function resolveSuccess(tplAndVars) {\r\n var providedScope = modalOptions.scope || $rootScope;\r\n\r\n var modalScope = providedScope.$new();\r\n modalScope.$close = modalInstance.close;\r\n modalScope.$dismiss = modalInstance.dismiss;\r\n\r\n modalScope.$on('$destroy', function() {\r\n if (!modalScope.$$uibDestructionScheduled) {\r\n modalScope.$dismiss('$uibUnscheduledDestruction');\r\n }\r\n });\r\n\r\n var modal = {\r\n scope: modalScope,\r\n deferred: modalResultDeferred,\r\n renderDeferred: modalRenderDeferred,\r\n closedDeferred: modalClosedDeferred,\r\n animation: modalOptions.animation,\r\n backdrop: modalOptions.backdrop,\r\n keyboard: modalOptions.keyboard,\r\n backdropClass: modalOptions.backdropClass,\r\n windowTopClass: modalOptions.windowTopClass,\r\n windowClass: modalOptions.windowClass,\r\n windowTemplateUrl: modalOptions.windowTemplateUrl,\r\n ariaLabelledBy: modalOptions.ariaLabelledBy,\r\n ariaDescribedBy: modalOptions.ariaDescribedBy,\r\n size: modalOptions.size,\r\n openedClass: modalOptions.openedClass,\r\n appendTo: modalOptions.appendTo\r\n };\r\n\r\n var component = {};\r\n var ctrlInstance, ctrlInstantiate, ctrlLocals = {};\r\n\r\n if (modalOptions.component) {\r\n constructLocals(component, false, true, false);\r\n component.name = modalOptions.component;\r\n modal.component = component;\r\n } else if (modalOptions.controller) {\r\n constructLocals(ctrlLocals, true, false, true);\r\n\r\n // the third param will make the controller instantiate later,private api\r\n // @see https://github.com/angular/angular.js/blob/master/src/ng/controller.js#L126\r\n ctrlInstantiate = $controller(modalOptions.controller, ctrlLocals, true, modalOptions.controllerAs);\r\n if (modalOptions.controllerAs && modalOptions.bindToController) {\r\n ctrlInstance = ctrlInstantiate.instance;\r\n ctrlInstance.$close = modalScope.$close;\r\n ctrlInstance.$dismiss = modalScope.$dismiss;\r\n angular.extend(ctrlInstance, {\r\n $resolve: ctrlLocals.$scope.$resolve\r\n }, providedScope);\r\n }\r\n\r\n ctrlInstance = ctrlInstantiate();\r\n\r\n if (angular.isFunction(ctrlInstance.$onInit)) {\r\n ctrlInstance.$onInit();\r\n }\r\n }\r\n\r\n if (!modalOptions.component) {\r\n modal.content = tplAndVars[0];\r\n }\r\n\r\n $modalStack.open(modalInstance, modal);\r\n modalOpenedDeferred.resolve(true);\r\n\r\n function constructLocals(obj, template, instanceOnScope, injectable) {\r\n obj.$scope = modalScope;\r\n obj.$scope.$resolve = {};\r\n if (instanceOnScope) {\r\n obj.$scope.$uibModalInstance = modalInstance;\r\n } else {\r\n obj.$uibModalInstance = modalInstance;\r\n }\r\n\r\n var resolves = template ? tplAndVars[1] : tplAndVars;\r\n angular.forEach(resolves, function(value, key) {\r\n if (injectable) {\r\n obj[key] = value;\r\n }\r\n\r\n obj.$scope.$resolve[key] = value;\r\n });\r\n }\r\n }, function resolveError(reason) {\r\n modalOpenedDeferred.reject(reason);\r\n modalResultDeferred.reject(reason);\r\n })['finally'](function() {\r\n if (promiseChain === samePromise) {\r\n promiseChain = null;\r\n }\r\n });\r\n\r\n return modalInstance;\r\n };\r\n\r\n return $modal;\r\n }\r\n ]\r\n };\r\n\r\n return $modalProvider;\r\n });\r\n\r\nangular.module('ui.bootstrap.stackedMap', [])\r\n/**\r\n * A helper, internal data structure that acts as a map but also allows getting / removing\r\n * elements in the LIFO order\r\n */\r\n .factory('$$stackedMap', function() {\r\n return {\r\n createNew: function() {\r\n var stack = [];\r\n\r\n return {\r\n add: function(key, value) {\r\n stack.push({\r\n key: key,\r\n value: value\r\n });\r\n },\r\n get: function(key) {\r\n for (var i = 0; i < stack.length; i++) {\r\n if (key === stack[i].key) {\r\n return stack[i];\r\n }\r\n }\r\n },\r\n keys: function() {\r\n var keys = [];\r\n for (var i = 0; i < stack.length; i++) {\r\n keys.push(stack[i].key);\r\n }\r\n return keys;\r\n },\r\n top: function() {\r\n return stack[stack.length - 1];\r\n },\r\n remove: function(key) {\r\n var idx = -1;\r\n for (var i = 0; i < stack.length; i++) {\r\n if (key === stack[i].key) {\r\n idx = i;\r\n break;\r\n }\r\n }\r\n return stack.splice(idx, 1)[0];\r\n },\r\n removeTop: function() {\r\n return stack.pop();\r\n },\r\n length: function() {\r\n return stack.length;\r\n }\r\n };\r\n }\r\n };\r\n });\r\nangular.module('ui.bootstrap.paging', [])\r\n/**\r\n * Helper internal service for generating common controller code between the\r\n * pager and pagination components\r\n */\r\n.factory('uibPaging', ['$parse', function($parse) {\r\n return {\r\n create: function(ctrl, $scope, $attrs) {\r\n ctrl.setNumPages = $attrs.numPages ? $parse($attrs.numPages).assign : angular.noop;\r\n ctrl.ngModelCtrl = { $setViewValue: angular.noop }; // nullModelCtrl\r\n ctrl._watchers = [];\r\n\r\n ctrl.init = function(ngModelCtrl, config) {\r\n ctrl.ngModelCtrl = ngModelCtrl;\r\n ctrl.config = config;\r\n\r\n ngModelCtrl.$render = function() {\r\n ctrl.render();\r\n };\r\n\r\n if ($attrs.itemsPerPage) {\r\n ctrl._watchers.push($scope.$parent.$watch($attrs.itemsPerPage, function(value) {\r\n ctrl.itemsPerPage = parseInt(value, 10);\r\n $scope.totalPages = ctrl.calculateTotalPages();\r\n ctrl.updatePage();\r\n }));\r\n } else {\r\n ctrl.itemsPerPage = config.itemsPerPage;\r\n }\r\n\r\n $scope.$watch('totalItems', function(newTotal, oldTotal) {\r\n if (angular.isDefined(newTotal) || newTotal !== oldTotal) {\r\n $scope.totalPages = ctrl.calculateTotalPages();\r\n ctrl.updatePage();\r\n }\r\n });\r\n };\r\n\r\n ctrl.calculateTotalPages = function() {\r\n var totalPages = ctrl.itemsPerPage < 1 ? 1 : Math.ceil($scope.totalItems / ctrl.itemsPerPage);\r\n return Math.max(totalPages || 0, 1);\r\n };\r\n\r\n ctrl.render = function() {\r\n $scope.page = parseInt(ctrl.ngModelCtrl.$viewValue, 10) || 1;\r\n };\r\n\r\n $scope.selectPage = function(page, evt) {\r\n if (evt) {\r\n evt.preventDefault();\r\n }\r\n\r\n var clickAllowed = !$scope.ngDisabled || !evt;\r\n if (clickAllowed && $scope.page !== page && page > 0 && page <= $scope.totalPages) {\r\n if (evt && evt.target) {\r\n evt.target.blur();\r\n }\r\n ctrl.ngModelCtrl.$setViewValue(page);\r\n ctrl.ngModelCtrl.$render();\r\n }\r\n };\r\n\r\n $scope.getText = function(key) {\r\n return $scope[key + 'Text'] || ctrl.config[key + 'Text'];\r\n };\r\n\r\n $scope.noPrevious = function() {\r\n return $scope.page === 1;\r\n };\r\n\r\n $scope.noNext = function() {\r\n return $scope.page === $scope.totalPages;\r\n };\r\n\r\n ctrl.updatePage = function() {\r\n ctrl.setNumPages($scope.$parent, $scope.totalPages); // Readonly variable\r\n\r\n if ($scope.page > $scope.totalPages) {\r\n $scope.selectPage($scope.totalPages);\r\n } else {\r\n ctrl.ngModelCtrl.$render();\r\n }\r\n };\r\n\r\n $scope.$on('$destroy', function() {\r\n while (ctrl._watchers.length) {\r\n ctrl._watchers.shift()();\r\n }\r\n });\r\n }\r\n };\r\n}]);\r\n\r\nangular.module('ui.bootstrap.pagination', ['ui.bootstrap.paging', 'ui.bootstrap.tabindex'])\r\n.controller('UibPaginationController', ['$scope', '$attrs', '$parse', 'uibPaging', 'uibPaginationConfig', function($scope, $attrs, $parse, uibPaging, uibPaginationConfig) {\r\n var ctrl = this;\r\n // Setup configuration parameters\r\n var maxSize = angular.isDefined($attrs.maxSize) ? $scope.$parent.$eval($attrs.maxSize) : uibPaginationConfig.maxSize,\r\n rotate = angular.isDefined($attrs.rotate) ? $scope.$parent.$eval($attrs.rotate) : uibPaginationConfig.rotate,\r\n forceEllipses = angular.isDefined($attrs.forceEllipses) ? $scope.$parent.$eval($attrs.forceEllipses) : uibPaginationConfig.forceEllipses,\r\n boundaryLinkNumbers = angular.isDefined($attrs.boundaryLinkNumbers) ? $scope.$parent.$eval($attrs.boundaryLinkNumbers) : uibPaginationConfig.boundaryLinkNumbers,\r\n pageLabel = angular.isDefined($attrs.pageLabel) ? function(idx) { return $scope.$parent.$eval($attrs.pageLabel, {$page: idx}); } : angular.identity;\r\n $scope.boundaryLinks = angular.isDefined($attrs.boundaryLinks) ? $scope.$parent.$eval($attrs.boundaryLinks) : uibPaginationConfig.boundaryLinks;\r\n $scope.directionLinks = angular.isDefined($attrs.directionLinks) ? $scope.$parent.$eval($attrs.directionLinks) : uibPaginationConfig.directionLinks;\r\n $attrs.$set('role', 'menu');\r\n\r\n uibPaging.create(this, $scope, $attrs);\r\n\r\n if ($attrs.maxSize) {\r\n ctrl._watchers.push($scope.$parent.$watch($parse($attrs.maxSize), function(value) {\r\n maxSize = parseInt(value, 10);\r\n ctrl.render();\r\n }));\r\n }\r\n\r\n // Create page object used in template\r\n function makePage(number, text, isActive) {\r\n return {\r\n number: number,\r\n text: text,\r\n active: isActive\r\n };\r\n }\r\n\r\n function getPages(currentPage, totalPages) {\r\n var pages = [];\r\n\r\n // Default page limits\r\n var startPage = 1, endPage = totalPages;\r\n var isMaxSized = angular.isDefined(maxSize) && maxSize < totalPages;\r\n\r\n // recompute if maxSize\r\n if (isMaxSized) {\r\n if (rotate) {\r\n // Current page is displayed in the middle of the visible ones\r\n startPage = Math.max(currentPage - Math.floor(maxSize / 2), 1);\r\n endPage = startPage + maxSize - 1;\r\n\r\n // Adjust if limit is exceeded\r\n if (endPage > totalPages) {\r\n endPage = totalPages;\r\n startPage = endPage - maxSize + 1;\r\n }\r\n } else {\r\n // Visible pages are paginated with maxSize\r\n startPage = (Math.ceil(currentPage / maxSize) - 1) * maxSize + 1;\r\n\r\n // Adjust last page if limit is exceeded\r\n endPage = Math.min(startPage + maxSize - 1, totalPages);\r\n }\r\n }\r\n\r\n // Add page number links\r\n for (var number = startPage; number <= endPage; number++) {\r\n var page = makePage(number, pageLabel(number), number === currentPage);\r\n pages.push(page);\r\n }\r\n\r\n // Add links to move between page sets\r\n if (isMaxSized && maxSize > 0 && (!rotate || forceEllipses || boundaryLinkNumbers)) {\r\n if (startPage > 1) {\r\n if (!boundaryLinkNumbers || startPage > 3) { //need ellipsis for all options unless range is too close to beginning\r\n var previousPageSet = makePage(startPage - 1, '...', false);\r\n pages.unshift(previousPageSet);\r\n }\r\n if (boundaryLinkNumbers) {\r\n if (startPage === 3) { //need to replace ellipsis when the buttons would be sequential\r\n var secondPageLink = makePage(2, '2', false);\r\n pages.unshift(secondPageLink);\r\n }\r\n //add the first page\r\n var firstPageLink = makePage(1, '1', false);\r\n pages.unshift(firstPageLink);\r\n }\r\n }\r\n\r\n if (endPage < totalPages) {\r\n if (!boundaryLinkNumbers || endPage < totalPages - 2) { //need ellipsis for all options unless range is too close to end\r\n var nextPageSet = makePage(endPage + 1, '...', false);\r\n pages.push(nextPageSet);\r\n }\r\n if (boundaryLinkNumbers) {\r\n if (endPage === totalPages - 2) { //need to replace ellipsis when the buttons would be sequential\r\n var secondToLastPageLink = makePage(totalPages - 1, totalPages - 1, false);\r\n pages.push(secondToLastPageLink);\r\n }\r\n //add the last page\r\n var lastPageLink = makePage(totalPages, totalPages, false);\r\n pages.push(lastPageLink);\r\n }\r\n }\r\n }\r\n return pages;\r\n }\r\n\r\n var originalRender = this.render;\r\n this.render = function() {\r\n originalRender();\r\n if ($scope.page > 0 && $scope.page <= $scope.totalPages) {\r\n $scope.pages = getPages($scope.page, $scope.totalPages);\r\n }\r\n };\r\n}])\r\n\r\n.constant('uibPaginationConfig', {\r\n itemsPerPage: 10,\r\n boundaryLinks: false,\r\n boundaryLinkNumbers: false,\r\n directionLinks: true,\r\n firstText: 'First',\r\n previousText: 'Previous',\r\n nextText: 'Next',\r\n lastText: 'Last',\r\n rotate: true,\r\n forceEllipses: false\r\n})\r\n\r\n.directive('uibPagination', ['$parse', 'uibPaginationConfig', function($parse, uibPaginationConfig) {\r\n return {\r\n scope: {\r\n totalItems: '=',\r\n firstText: '@',\r\n previousText: '@',\r\n nextText: '@',\r\n lastText: '@',\r\n ngDisabled:'='\r\n },\r\n require: ['uibPagination', '?ngModel'],\r\n restrict: 'A',\r\n controller: 'UibPaginationController',\r\n controllerAs: 'pagination',\r\n templateUrl: function(element, attrs) {\r\n return attrs.templateUrl || 'uib/template/pagination/pagination.html';\r\n },\r\n link: function(scope, element, attrs, ctrls) {\r\n element.addClass('pagination');\r\n var paginationCtrl = ctrls[0], ngModelCtrl = ctrls[1];\r\n\r\n if (!ngModelCtrl) {\r\n return; // do nothing if no ng-model\r\n }\r\n\r\n paginationCtrl.init(ngModelCtrl, uibPaginationConfig);\r\n }\r\n };\r\n}]);\r\n\r\n/**\r\n * The following features are still outstanding: animation as a\r\n * function, placement as a function, inside, support for more triggers than\r\n * just mouse enter/leave, html tooltips, and selector delegation.\r\n */\r\nangular.module('ui.bootstrap.tooltip', ['ui.bootstrap.position', 'ui.bootstrap.stackedMap'])\r\n\r\n/**\r\n * The $tooltip service creates tooltip- and popover-like directives as well as\r\n * houses global options for them.\r\n */\r\n.provider('$uibTooltip', function() {\r\n // The default options tooltip and popover.\r\n var defaultOptions = {\r\n placement: 'top',\r\n placementClassPrefix: '',\r\n animation: true,\r\n popupDelay: 0,\r\n popupCloseDelay: 0,\r\n useContentExp: false\r\n };\r\n\r\n // Default hide triggers for each show trigger\r\n var triggerMap = {\r\n 'mouseenter': 'mouseleave',\r\n 'click': 'click',\r\n 'outsideClick': 'outsideClick',\r\n 'focus': 'blur',\r\n 'none': ''\r\n };\r\n\r\n // The options specified to the provider globally.\r\n var globalOptions = {};\r\n\r\n /**\r\n * `options({})` allows global configuration of all tooltips in the\r\n * application.\r\n *\r\n * var app = angular.module( 'App', ['ui.bootstrap.tooltip'], function( $tooltipProvider ) {\r\n * // place tooltips left instead of top by default\r\n * $tooltipProvider.options( { placement: 'left' } );\r\n * });\r\n */\r\n\tthis.options = function(value) {\r\n\t\tangular.extend(globalOptions, value);\r\n\t};\r\n\r\n /**\r\n * This allows you to extend the set of trigger mappings available. E.g.:\r\n *\r\n * $tooltipProvider.setTriggers( { 'openTrigger': 'closeTrigger' } );\r\n */\r\n this.setTriggers = function setTriggers(triggers) {\r\n angular.extend(triggerMap, triggers);\r\n };\r\n\r\n /**\r\n * This is a helper function for translating camel-case to snake_case.\r\n */\r\n function snake_case(name) {\r\n var regexp = /[A-Z]/g;\r\n var separator = '-';\r\n return name.replace(regexp, function(letter, pos) {\r\n return (pos ? separator : '') + letter.toLowerCase();\r\n });\r\n }\r\n\r\n /**\r\n * Returns the actual instance of the $tooltip service.\r\n * TODO support multiple triggers\r\n */\r\n this.$get = ['$window', '$compile', '$timeout', '$document', '$uibPosition', '$interpolate', '$rootScope', '$parse', '$$stackedMap', function($window, $compile, $timeout, $document, $position, $interpolate, $rootScope, $parse, $$stackedMap) {\r\n var openedTooltips = $$stackedMap.createNew();\r\n $document.on('keyup', keypressListener);\r\n\r\n $rootScope.$on('$destroy', function() {\r\n $document.off('keyup', keypressListener);\r\n });\r\n\r\n function keypressListener(e) {\r\n if (e.which === 27) {\r\n var last = openedTooltips.top();\r\n if (last) {\r\n last.value.close();\r\n last = null;\r\n }\r\n }\r\n }\r\n\r\n return function $tooltip(ttType, prefix, defaultTriggerShow, options) {\r\n options = angular.extend({}, defaultOptions, globalOptions, options);\r\n\r\n /**\r\n * Returns an object of show and hide triggers.\r\n *\r\n * If a trigger is supplied,\r\n * it is used to show the tooltip; otherwise, it will use the `trigger`\r\n * option passed to the `$tooltipProvider.options` method; else it will\r\n * default to the trigger supplied to this directive factory.\r\n *\r\n * The hide trigger is based on the show trigger. If the `trigger` option\r\n * was passed to the `$tooltipProvider.options` method, it will use the\r\n * mapped trigger from `triggerMap` or the passed trigger if the map is\r\n * undefined; otherwise, it uses the `triggerMap` value of the show\r\n * trigger; else it will just use the show trigger.\r\n */\r\n function getTriggers(trigger) {\r\n var show = (trigger || options.trigger || defaultTriggerShow).split(' ');\r\n var hide = show.map(function(trigger) {\r\n return triggerMap[trigger] || trigger;\r\n });\r\n return {\r\n show: show,\r\n hide: hide\r\n };\r\n }\r\n\r\n var directiveName = snake_case(ttType);\r\n\r\n var startSym = $interpolate.startSymbol();\r\n var endSym = $interpolate.endSymbol();\r\n var template =\r\n '
' +\r\n '
';\r\n\r\n return {\r\n compile: function(tElem, tAttrs) {\r\n var tooltipLinker = $compile(template);\r\n\r\n return function link(scope, element, attrs, tooltipCtrl) {\r\n var tooltip;\r\n var tooltipLinkedScope;\r\n var transitionTimeout;\r\n var showTimeout;\r\n var hideTimeout;\r\n var positionTimeout;\r\n var adjustmentTimeout;\r\n var appendToBody = angular.isDefined(options.appendToBody) ? options.appendToBody : false;\r\n var triggers = getTriggers(undefined);\r\n var hasEnableExp = angular.isDefined(attrs[prefix + 'Enable']);\r\n var ttScope = scope.$new(true);\r\n var repositionScheduled = false;\r\n var isOpenParse = angular.isDefined(attrs[prefix + 'IsOpen']) ? $parse(attrs[prefix + 'IsOpen']) : false;\r\n var contentParse = options.useContentExp ? $parse(attrs[ttType]) : false;\r\n var observers = [];\r\n var lastPlacement;\r\n\r\n var positionTooltip = function() {\r\n // check if tooltip exists and is not empty\r\n if (!tooltip || !tooltip.html()) { return; }\r\n\r\n if (!positionTimeout) {\r\n positionTimeout = $timeout(function() {\r\n var ttPosition = $position.positionElements(element, tooltip, ttScope.placement, appendToBody);\r\n var initialHeight = angular.isDefined(tooltip.offsetHeight) ? tooltip.offsetHeight : tooltip.prop('offsetHeight');\r\n var elementPos = appendToBody ? $position.offset(element) : $position.position(element);\r\n tooltip.css({ top: ttPosition.top + 'px', left: ttPosition.left + 'px' });\r\n var placementClasses = ttPosition.placement.split('-');\r\n\r\n if (!tooltip.hasClass(placementClasses[0])) {\r\n tooltip.removeClass(lastPlacement.split('-')[0]);\r\n tooltip.addClass(placementClasses[0]);\r\n }\r\n\r\n if (!tooltip.hasClass(options.placementClassPrefix + ttPosition.placement)) {\r\n tooltip.removeClass(options.placementClassPrefix + lastPlacement);\r\n tooltip.addClass(options.placementClassPrefix + ttPosition.placement);\r\n }\r\n\r\n adjustmentTimeout = $timeout(function() {\r\n var currentHeight = angular.isDefined(tooltip.offsetHeight) ? tooltip.offsetHeight : tooltip.prop('offsetHeight');\r\n var adjustment = $position.adjustTop(placementClasses, elementPos, initialHeight, currentHeight);\r\n if (adjustment) {\r\n tooltip.css(adjustment);\r\n }\r\n adjustmentTimeout = null;\r\n }, 0, false);\r\n\r\n // first time through tt element will have the\r\n // uib-position-measure class or if the placement\r\n // has changed we need to position the arrow.\r\n if (tooltip.hasClass('uib-position-measure')) {\r\n $position.positionArrow(tooltip, ttPosition.placement);\r\n tooltip.removeClass('uib-position-measure');\r\n } else if (lastPlacement !== ttPosition.placement) {\r\n $position.positionArrow(tooltip, ttPosition.placement);\r\n }\r\n lastPlacement = ttPosition.placement;\r\n\r\n positionTimeout = null;\r\n }, 0, false);\r\n }\r\n };\r\n\r\n // Set up the correct scope to allow transclusion later\r\n ttScope.origScope = scope;\r\n\r\n // By default, the tooltip is not open.\r\n // TODO add ability to start tooltip opened\r\n ttScope.isOpen = false;\r\n\r\n function toggleTooltipBind() {\r\n if (!ttScope.isOpen) {\r\n showTooltipBind();\r\n } else {\r\n hideTooltipBind();\r\n }\r\n }\r\n\r\n // Show the tooltip with delay if specified, otherwise show it immediately\r\n function showTooltipBind() {\r\n if (hasEnableExp && !scope.$eval(attrs[prefix + 'Enable'])) {\r\n return;\r\n }\r\n\r\n cancelHide();\r\n prepareTooltip();\r\n\r\n if (ttScope.popupDelay) {\r\n // Do nothing if the tooltip was already scheduled to pop-up.\r\n // This happens if show is triggered multiple times before any hide is triggered.\r\n if (!showTimeout) {\r\n showTimeout = $timeout(show, ttScope.popupDelay, false);\r\n }\r\n } else {\r\n show();\r\n }\r\n }\r\n\r\n function hideTooltipBind() {\r\n cancelShow();\r\n\r\n if (ttScope.popupCloseDelay) {\r\n if (!hideTimeout) {\r\n hideTimeout = $timeout(hide, ttScope.popupCloseDelay, false);\r\n }\r\n } else {\r\n hide();\r\n }\r\n }\r\n\r\n // Show the tooltip popup element.\r\n function show() {\r\n cancelShow();\r\n cancelHide();\r\n\r\n // Don't show empty tooltips.\r\n if (!ttScope.content) {\r\n return angular.noop;\r\n }\r\n\r\n createTooltip();\r\n\r\n // And show the tooltip.\r\n ttScope.$evalAsync(function() {\r\n ttScope.isOpen = true;\r\n assignIsOpen(true);\r\n positionTooltip();\r\n });\r\n }\r\n\r\n function cancelShow() {\r\n if (showTimeout) {\r\n $timeout.cancel(showTimeout);\r\n showTimeout = null;\r\n }\r\n\r\n if (positionTimeout) {\r\n $timeout.cancel(positionTimeout);\r\n positionTimeout = null;\r\n }\r\n }\r\n\r\n // Hide the tooltip popup element.\r\n function hide() {\r\n if (!ttScope) {\r\n return;\r\n }\r\n\r\n // First things first: we don't show it anymore.\r\n ttScope.$evalAsync(function() {\r\n if (ttScope) {\r\n ttScope.isOpen = false;\r\n assignIsOpen(false);\r\n // And now we remove it from the DOM. However, if we have animation, we\r\n // need to wait for it to expire beforehand.\r\n // FIXME: this is a placeholder for a port of the transitions library.\r\n // The fade transition in TWBS is 150ms.\r\n if (ttScope.animation) {\r\n if (!transitionTimeout) {\r\n transitionTimeout = $timeout(removeTooltip, 150, false);\r\n }\r\n } else {\r\n removeTooltip();\r\n }\r\n }\r\n });\r\n }\r\n\r\n function cancelHide() {\r\n if (hideTimeout) {\r\n $timeout.cancel(hideTimeout);\r\n hideTimeout = null;\r\n }\r\n\r\n if (transitionTimeout) {\r\n $timeout.cancel(transitionTimeout);\r\n transitionTimeout = null;\r\n }\r\n }\r\n\r\n function createTooltip() {\r\n // There can only be one tooltip element per directive shown at once.\r\n if (tooltip) {\r\n return;\r\n }\r\n\r\n tooltipLinkedScope = ttScope.$new();\r\n tooltip = tooltipLinker(tooltipLinkedScope, function(tooltip) {\r\n if (appendToBody) {\r\n $document.find('body').append(tooltip);\r\n } else {\r\n element.after(tooltip);\r\n }\r\n });\r\n\r\n openedTooltips.add(ttScope, {\r\n close: hide\r\n });\r\n\r\n prepObservers();\r\n }\r\n\r\n function removeTooltip() {\r\n cancelShow();\r\n cancelHide();\r\n unregisterObservers();\r\n\r\n if (tooltip) {\r\n tooltip.remove();\r\n\r\n tooltip = null;\r\n if (adjustmentTimeout) {\r\n $timeout.cancel(adjustmentTimeout);\r\n }\r\n }\r\n\r\n openedTooltips.remove(ttScope);\r\n\r\n if (tooltipLinkedScope) {\r\n tooltipLinkedScope.$destroy();\r\n tooltipLinkedScope = null;\r\n }\r\n }\r\n\r\n /**\r\n * Set the initial scope values. Once\r\n * the tooltip is created, the observers\r\n * will be added to keep things in sync.\r\n */\r\n function prepareTooltip() {\r\n ttScope.title = attrs[prefix + 'Title'];\r\n if (contentParse) {\r\n ttScope.content = contentParse(scope);\r\n } else {\r\n ttScope.content = attrs[ttType];\r\n }\r\n\r\n ttScope.popupClass = attrs[prefix + 'Class'];\r\n ttScope.placement = angular.isDefined(attrs[prefix + 'Placement']) ? attrs[prefix + 'Placement'] : options.placement;\r\n var placement = $position.parsePlacement(ttScope.placement);\r\n lastPlacement = placement[1] ? placement[0] + '-' + placement[1] : placement[0];\r\n\r\n var delay = parseInt(attrs[prefix + 'PopupDelay'], 10);\r\n var closeDelay = parseInt(attrs[prefix + 'PopupCloseDelay'], 10);\r\n ttScope.popupDelay = !isNaN(delay) ? delay : options.popupDelay;\r\n ttScope.popupCloseDelay = !isNaN(closeDelay) ? closeDelay : options.popupCloseDelay;\r\n }\r\n\r\n function assignIsOpen(isOpen) {\r\n if (isOpenParse && angular.isFunction(isOpenParse.assign)) {\r\n isOpenParse.assign(scope, isOpen);\r\n }\r\n }\r\n\r\n ttScope.contentExp = function() {\r\n return ttScope.content;\r\n };\r\n\r\n /**\r\n * Observe the relevant attributes.\r\n */\r\n attrs.$observe('disabled', function(val) {\r\n if (val) {\r\n cancelShow();\r\n }\r\n\r\n if (val && ttScope.isOpen) {\r\n hide();\r\n }\r\n });\r\n\r\n if (isOpenParse) {\r\n scope.$watch(isOpenParse, function(val) {\r\n if (ttScope && !val === ttScope.isOpen) {\r\n toggleTooltipBind();\r\n }\r\n });\r\n }\r\n\r\n function prepObservers() {\r\n observers.length = 0;\r\n\r\n if (contentParse) {\r\n observers.push(\r\n scope.$watch(contentParse, function(val) {\r\n ttScope.content = val;\r\n if (!val && ttScope.isOpen) {\r\n hide();\r\n }\r\n })\r\n );\r\n\r\n observers.push(\r\n tooltipLinkedScope.$watch(function() {\r\n if (!repositionScheduled) {\r\n repositionScheduled = true;\r\n tooltipLinkedScope.$$postDigest(function() {\r\n repositionScheduled = false;\r\n if (ttScope && ttScope.isOpen) {\r\n positionTooltip();\r\n }\r\n });\r\n }\r\n })\r\n );\r\n } else {\r\n observers.push(\r\n attrs.$observe(ttType, function(val) {\r\n ttScope.content = val;\r\n if (!val && ttScope.isOpen) {\r\n hide();\r\n } else {\r\n positionTooltip();\r\n }\r\n })\r\n );\r\n }\r\n\r\n observers.push(\r\n attrs.$observe(prefix + 'Title', function(val) {\r\n ttScope.title = val;\r\n if (ttScope.isOpen) {\r\n positionTooltip();\r\n }\r\n })\r\n );\r\n\r\n observers.push(\r\n attrs.$observe(prefix + 'Placement', function(val) {\r\n ttScope.placement = val ? val : options.placement;\r\n if (ttScope.isOpen) {\r\n positionTooltip();\r\n }\r\n })\r\n );\r\n }\r\n\r\n function unregisterObservers() {\r\n if (observers.length) {\r\n angular.forEach(observers, function(observer) {\r\n observer();\r\n });\r\n observers.length = 0;\r\n }\r\n }\r\n\r\n // hide tooltips/popovers for outsideClick trigger\r\n function bodyHideTooltipBind(e) {\r\n if (!ttScope || !ttScope.isOpen || !tooltip) {\r\n return;\r\n }\r\n // make sure the tooltip/popover link or tool tooltip/popover itself were not clicked\r\n if (!element[0].contains(e.target) && !tooltip[0].contains(e.target)) {\r\n hideTooltipBind();\r\n }\r\n }\r\n\r\n // KeyboardEvent handler to hide the tooltip on Escape key press\r\n function hideOnEscapeKey(e) {\r\n if (e.which === 27) {\r\n hideTooltipBind();\r\n }\r\n }\r\n\r\n var unregisterTriggers = function() {\r\n triggers.show.forEach(function(trigger) {\r\n if (trigger === 'outsideClick') {\r\n element.off('click', toggleTooltipBind);\r\n } else {\r\n element.off(trigger, showTooltipBind);\r\n element.off(trigger, toggleTooltipBind);\r\n }\r\n element.off('keypress', hideOnEscapeKey);\r\n });\r\n triggers.hide.forEach(function(trigger) {\r\n if (trigger === 'outsideClick') {\r\n $document.off('click', bodyHideTooltipBind);\r\n } else {\r\n element.off(trigger, hideTooltipBind);\r\n }\r\n });\r\n };\r\n\r\n function prepTriggers() {\r\n var showTriggers = [], hideTriggers = [];\r\n var val = scope.$eval(attrs[prefix + 'Trigger']);\r\n unregisterTriggers();\r\n\r\n if (angular.isObject(val)) {\r\n Object.keys(val).forEach(function(key) {\r\n showTriggers.push(key);\r\n hideTriggers.push(val[key]);\r\n });\r\n triggers = {\r\n show: showTriggers,\r\n hide: hideTriggers\r\n };\r\n } else {\r\n triggers = getTriggers(val);\r\n }\r\n\r\n if (triggers.show !== 'none') {\r\n triggers.show.forEach(function(trigger, idx) {\r\n if (trigger === 'outsideClick') {\r\n element.on('click', toggleTooltipBind);\r\n $document.on('click', bodyHideTooltipBind);\r\n } else if (trigger === triggers.hide[idx]) {\r\n element.on(trigger, toggleTooltipBind);\r\n } else if (trigger) {\r\n element.on(trigger, showTooltipBind);\r\n element.on(triggers.hide[idx], hideTooltipBind);\r\n }\r\n element.on('keypress', hideOnEscapeKey);\r\n });\r\n }\r\n }\r\n\r\n prepTriggers();\r\n\r\n var animation = scope.$eval(attrs[prefix + 'Animation']);\r\n ttScope.animation = angular.isDefined(animation) ? !!animation : options.animation;\r\n\r\n var appendToBodyVal;\r\n var appendKey = prefix + 'AppendToBody';\r\n if (appendKey in attrs && attrs[appendKey] === undefined) {\r\n appendToBodyVal = true;\r\n } else {\r\n appendToBodyVal = scope.$eval(attrs[appendKey]);\r\n }\r\n\r\n appendToBody = angular.isDefined(appendToBodyVal) ? appendToBodyVal : appendToBody;\r\n\r\n // Make sure tooltip is destroyed and removed.\r\n scope.$on('$destroy', function onDestroyTooltip() {\r\n unregisterTriggers();\r\n removeTooltip();\r\n ttScope = null;\r\n });\r\n };\r\n }\r\n };\r\n };\r\n }];\r\n})\r\n\r\n// This is mostly ngInclude code but with a custom scope\r\n.directive('uibTooltipTemplateTransclude', [\r\n '$animate', '$sce', '$compile', '$templateRequest',\r\nfunction ($animate, $sce, $compile, $templateRequest) {\r\n return {\r\n link: function(scope, elem, attrs) {\r\n var origScope = scope.$eval(attrs.tooltipTemplateTranscludeScope);\r\n\r\n var changeCounter = 0,\r\n currentScope,\r\n previousElement,\r\n currentElement;\r\n\r\n var cleanupLastIncludeContent = function() {\r\n if (previousElement) {\r\n previousElement.remove();\r\n previousElement = null;\r\n }\r\n\r\n if (currentScope) {\r\n currentScope.$destroy();\r\n currentScope = null;\r\n }\r\n\r\n if (currentElement) {\r\n $animate.leave(currentElement).then(function() {\r\n previousElement = null;\r\n });\r\n previousElement = currentElement;\r\n currentElement = null;\r\n }\r\n };\r\n\r\n scope.$watch($sce.parseAsResourceUrl(attrs.uibTooltipTemplateTransclude), function(src) {\r\n var thisChangeId = ++changeCounter;\r\n\r\n if (src) {\r\n //set the 2nd param to true to ignore the template request error so that the inner\r\n //contents and scope can be cleaned up.\r\n $templateRequest(src, true).then(function(response) {\r\n if (thisChangeId !== changeCounter) { return; }\r\n var newScope = origScope.$new();\r\n var template = response;\r\n\r\n var clone = $compile(template)(newScope, function(clone) {\r\n cleanupLastIncludeContent();\r\n $animate.enter(clone, elem);\r\n });\r\n\r\n currentScope = newScope;\r\n currentElement = clone;\r\n\r\n currentScope.$emit('$includeContentLoaded', src);\r\n }, function() {\r\n if (thisChangeId === changeCounter) {\r\n cleanupLastIncludeContent();\r\n scope.$emit('$includeContentError', src);\r\n }\r\n });\r\n scope.$emit('$includeContentRequested', src);\r\n } else {\r\n cleanupLastIncludeContent();\r\n }\r\n });\r\n\r\n scope.$on('$destroy', cleanupLastIncludeContent);\r\n }\r\n };\r\n}])\r\n\r\n/**\r\n * Note that it's intentional that these classes are *not* applied through $animate.\r\n * They must not be animated as they're expected to be present on the tooltip on\r\n * initialization.\r\n */\r\n.directive('uibTooltipClasses', ['$uibPosition', function($uibPosition) {\r\n return {\r\n restrict: 'A',\r\n link: function(scope, element, attrs) {\r\n // need to set the primary position so the\r\n // arrow has space during position measure.\r\n // tooltip.positionTooltip()\r\n if (scope.placement) {\r\n // // There are no top-left etc... classes\r\n // // in TWBS, so we need the primary position.\r\n var position = $uibPosition.parsePlacement(scope.placement);\r\n element.addClass(position[0]);\r\n }\r\n\r\n if (scope.popupClass) {\r\n element.addClass(scope.popupClass);\r\n }\r\n\r\n if (scope.animation) {\r\n element.addClass(attrs.tooltipAnimationClass);\r\n }\r\n }\r\n };\r\n}])\r\n\r\n.directive('uibTooltipPopup', function() {\r\n return {\r\n restrict: 'A',\r\n scope: { content: '@' },\r\n templateUrl: 'uib/template/tooltip/tooltip-popup.html'\r\n };\r\n})\r\n\r\n.directive('uibTooltip', [ '$uibTooltip', function($uibTooltip) {\r\n return $uibTooltip('uibTooltip', 'tooltip', 'mouseenter');\r\n}])\r\n\r\n.directive('uibTooltipTemplatePopup', function() {\r\n return {\r\n restrict: 'A',\r\n scope: { contentExp: '&', originScope: '&' },\r\n templateUrl: 'uib/template/tooltip/tooltip-template-popup.html'\r\n };\r\n})\r\n\r\n.directive('uibTooltipTemplate', ['$uibTooltip', function($uibTooltip) {\r\n return $uibTooltip('uibTooltipTemplate', 'tooltip', 'mouseenter', {\r\n useContentExp: true\r\n });\r\n}])\r\n\r\n.directive('uibTooltipHtmlPopup', function() {\r\n return {\r\n restrict: 'A',\r\n scope: { contentExp: '&' },\r\n templateUrl: 'uib/template/tooltip/tooltip-html-popup.html'\r\n };\r\n})\r\n\r\n.directive('uibTooltipHtml', ['$uibTooltip', function($uibTooltip) {\r\n return $uibTooltip('uibTooltipHtml', 'tooltip', 'mouseenter', {\r\n useContentExp: true\r\n });\r\n}]);\r\n\r\n/**\r\n * The following features are still outstanding: popup delay, animation as a\r\n * function, placement as a function, inside, support for more triggers than\r\n * just mouse enter/leave, and selector delegatation.\r\n */\r\nangular.module('ui.bootstrap.popover', ['ui.bootstrap.tooltip'])\r\n\r\n.directive('uibPopoverTemplatePopup', function() {\r\n return {\r\n restrict: 'A',\r\n scope: { uibTitle: '@', contentExp: '&', originScope: '&' },\r\n templateUrl: 'uib/template/popover/popover-template.html'\r\n };\r\n})\r\n\r\n.directive('uibPopoverTemplate', ['$uibTooltip', function($uibTooltip) {\r\n return $uibTooltip('uibPopoverTemplate', 'popover', 'click', {\r\n useContentExp: true\r\n });\r\n}])\r\n\r\n.directive('uibPopoverHtmlPopup', function() {\r\n return {\r\n restrict: 'A',\r\n scope: { contentExp: '&', uibTitle: '@' },\r\n templateUrl: 'uib/template/popover/popover-html.html'\r\n };\r\n})\r\n\r\n.directive('uibPopoverHtml', ['$uibTooltip', function($uibTooltip) {\r\n return $uibTooltip('uibPopoverHtml', 'popover', 'click', {\r\n useContentExp: true\r\n });\r\n}])\r\n\r\n.directive('uibPopoverPopup', function() {\r\n return {\r\n restrict: 'A',\r\n scope: { uibTitle: '@', content: '@' },\r\n templateUrl: 'uib/template/popover/popover.html'\r\n };\r\n})\r\n\r\n.directive('uibPopover', ['$uibTooltip', function($uibTooltip) {\r\n return $uibTooltip('uibPopover', 'popover', 'click');\r\n}]);\r\n\r\nangular.module('ui.bootstrap.tabs', [])\r\n\r\n.controller('UibTabsetController', ['$scope', function ($scope) {\r\n var ctrl = this,\r\n oldIndex;\r\n ctrl.tabs = [];\r\n\r\n ctrl.select = function(index, evt) {\r\n if (!destroyed) {\r\n var previousIndex = findTabIndex(oldIndex);\r\n var previousSelected = ctrl.tabs[previousIndex];\r\n if (previousSelected) {\r\n previousSelected.tab.onDeselect({\r\n $event: evt,\r\n $selectedIndex: index\r\n });\r\n if (evt && evt.isDefaultPrevented()) {\r\n return;\r\n }\r\n previousSelected.tab.active = false;\r\n }\r\n\r\n var selected = ctrl.tabs[index];\r\n if (selected) {\r\n selected.tab.onSelect({\r\n $event: evt\r\n });\r\n selected.tab.active = true;\r\n ctrl.active = selected.index;\r\n oldIndex = selected.index;\r\n } else if (!selected && angular.isDefined(oldIndex)) {\r\n ctrl.active = null;\r\n oldIndex = null;\r\n }\r\n }\r\n };\r\n\r\n ctrl.addTab = function addTab(tab) {\r\n ctrl.tabs.push({\r\n tab: tab,\r\n index: tab.index\r\n });\r\n ctrl.tabs.sort(function(t1, t2) {\r\n if (t1.index > t2.index) {\r\n return 1;\r\n }\r\n\r\n if (t1.index < t2.index) {\r\n return -1;\r\n }\r\n\r\n return 0;\r\n });\r\n\r\n if (tab.index === ctrl.active || !angular.isDefined(ctrl.active) && ctrl.tabs.length === 1) {\r\n var newActiveIndex = findTabIndex(tab.index);\r\n ctrl.select(newActiveIndex);\r\n }\r\n };\r\n\r\n ctrl.removeTab = function removeTab(tab) {\r\n var index;\r\n for (var i = 0; i < ctrl.tabs.length; i++) {\r\n if (ctrl.tabs[i].tab === tab) {\r\n index = i;\r\n break;\r\n }\r\n }\r\n\r\n if (ctrl.tabs[index].index === ctrl.active) {\r\n var newActiveTabIndex = index === ctrl.tabs.length - 1 ?\r\n index - 1 : index + 1 % ctrl.tabs.length;\r\n ctrl.select(newActiveTabIndex);\r\n }\r\n\r\n ctrl.tabs.splice(index, 1);\r\n };\r\n\r\n $scope.$watch('tabset.active', function(val) {\r\n if (angular.isDefined(val) && val !== oldIndex) {\r\n ctrl.select(findTabIndex(val));\r\n }\r\n });\r\n\r\n var destroyed;\r\n $scope.$on('$destroy', function() {\r\n destroyed = true;\r\n });\r\n\r\n function findTabIndex(index) {\r\n for (var i = 0; i < ctrl.tabs.length; i++) {\r\n if (ctrl.tabs[i].index === index) {\r\n return i;\r\n }\r\n }\r\n }\r\n}])\r\n\r\n.directive('uibTabset', function() {\r\n return {\r\n transclude: true,\r\n replace: true,\r\n scope: {},\r\n bindToController: {\r\n active: '=?',\r\n type: '@'\r\n },\r\n controller: 'UibTabsetController',\r\n controllerAs: 'tabset',\r\n templateUrl: function(element, attrs) {\r\n return attrs.templateUrl || 'uib/template/tabs/tabset.html';\r\n },\r\n link: function(scope, element, attrs) {\r\n scope.vertical = angular.isDefined(attrs.vertical) ?\r\n scope.$parent.$eval(attrs.vertical) : false;\r\n scope.justified = angular.isDefined(attrs.justified) ?\r\n scope.$parent.$eval(attrs.justified) : false;\r\n scope.centered = angular.isDefined(attrs.centered) ?\r\n scope.$parent.$eval(attrs.centered) : false;\r\n }\r\n };\r\n})\r\n\r\n.directive('uibTab', ['$parse', function($parse) {\r\n return {\r\n require: '^uibTabset',\r\n replace: true,\r\n templateUrl: function(element, attrs) {\r\n return attrs.templateUrl || 'uib/template/tabs/tab.html';\r\n },\r\n transclude: true,\r\n scope: {\r\n heading: '@',\r\n index: '=?',\r\n classes: '@?',\r\n onSelect: '&select', //This callback is called in contentHeadingTransclude\r\n //once it inserts the tab's content into the dom\r\n onDeselect: '&deselect'\r\n },\r\n controller: function() {\r\n //Empty controller so other directives can require being 'under' a tab\r\n },\r\n controllerAs: 'tab',\r\n link: function(scope, elm, attrs, tabsetCtrl, transclude) {\r\n scope.disabled = false;\r\n if (attrs.disable) {\r\n scope.$parent.$watch($parse(attrs.disable), function(value) {\r\n scope.disabled = !! value;\r\n });\r\n }\r\n\r\n scope.hide = false;\r\n if (attrs.hide) {\r\n scope.$parent.$watch($parse(attrs.hide), function(value) {\r\n scope.hide = !! value;\r\n });\r\n }\r\n\r\n if (angular.isUndefined(attrs.index)) {\r\n if (tabsetCtrl.tabs && tabsetCtrl.tabs.length) {\r\n scope.index = Math.max.apply(null, tabsetCtrl.tabs.map(function(t) { return t.index; })) + 1;\r\n } else {\r\n scope.index = 0;\r\n }\r\n }\r\n\r\n if (angular.isUndefined(attrs.classes)) {\r\n scope.classes = '';\r\n }\r\n\r\n scope.select = function(evt) {\r\n if (!scope.disabled) {\r\n var index;\r\n for (var i = 0; i < tabsetCtrl.tabs.length; i++) {\r\n if (tabsetCtrl.tabs[i].tab === scope) {\r\n index = i;\r\n break;\r\n }\r\n }\r\n\r\n tabsetCtrl.select(index, evt);\r\n }\r\n };\r\n\r\n tabsetCtrl.addTab(scope);\r\n scope.$on('$destroy', function() {\r\n tabsetCtrl.removeTab(scope);\r\n });\r\n\r\n //We need to transclude later, once the content container is ready.\r\n //when this link happens, we're inside a tab heading.\r\n scope.$transcludeFn = transclude;\r\n }\r\n };\r\n}])\r\n\r\n.directive('uibTabHeadingTransclude', function() {\r\n return {\r\n restrict: 'A',\r\n require: '^uibTab',\r\n link: function(scope, elm) {\r\n scope.$watch('headingElement', function updateHeadingElement(heading) {\r\n if (heading) {\r\n elm.html('');\r\n elm.append(heading);\r\n }\r\n });\r\n }\r\n };\r\n})\r\n\r\n.directive('uibTabContentTransclude', function() {\r\n return {\r\n restrict: 'A',\r\n require: '^uibTabset',\r\n link: function(scope, elm, attrs) {\r\n var tab = scope.$eval(attrs.uibTabContentTransclude).tab;\r\n\r\n //Now our tab is ready to be transcluded: both the tab heading area\r\n //and the tab content area are loaded. Transclude 'em both.\r\n tab.$transcludeFn(tab.$parent, function(contents) {\r\n angular.forEach(contents, function(node) {\r\n if (isTabHeading(node)) {\r\n //Let tabHeadingTransclude know.\r\n tab.headingElement = node;\r\n } else {\r\n elm.append(node);\r\n }\r\n });\r\n });\r\n }\r\n };\r\n\r\n function isTabHeading(node) {\r\n return node.tagName && (\r\n node.hasAttribute('uib-tab-heading') ||\r\n node.hasAttribute('data-uib-tab-heading') ||\r\n node.hasAttribute('x-uib-tab-heading') ||\r\n node.tagName.toLowerCase() === 'uib-tab-heading' ||\r\n node.tagName.toLowerCase() === 'data-uib-tab-heading' ||\r\n node.tagName.toLowerCase() === 'x-uib-tab-heading' ||\r\n node.tagName.toLowerCase() === 'uib:tab-heading'\r\n );\r\n }\r\n});\r\n\r\nangular.module('ui.bootstrap.rating', [])\r\n\r\n.constant('uibRatingConfig', {\r\n max: 5,\r\n stateOn: null,\r\n stateOff: null,\r\n enableReset: true,\r\n titles: ['one', 'two', 'three', 'four', 'five']\r\n})\r\n\r\n.controller('UibRatingController', ['$scope', '$attrs', 'uibRatingConfig', function($scope, $attrs, ratingConfig) {\r\n var ngModelCtrl = { $setViewValue: angular.noop },\r\n self = this;\r\n\r\n this.init = function(ngModelCtrl_) {\r\n ngModelCtrl = ngModelCtrl_;\r\n ngModelCtrl.$render = this.render;\r\n\r\n ngModelCtrl.$formatters.push(function(value) {\r\n if (angular.isNumber(value) && value << 0 !== value) {\r\n value = Math.round(value);\r\n }\r\n\r\n return value;\r\n });\r\n\r\n this.stateOn = angular.isDefined($attrs.stateOn) ? $scope.$parent.$eval($attrs.stateOn) : ratingConfig.stateOn;\r\n this.stateOff = angular.isDefined($attrs.stateOff) ? $scope.$parent.$eval($attrs.stateOff) : ratingConfig.stateOff;\r\n this.enableReset = angular.isDefined($attrs.enableReset) ?\r\n $scope.$parent.$eval($attrs.enableReset) : ratingConfig.enableReset;\r\n var tmpTitles = angular.isDefined($attrs.titles) ? $scope.$parent.$eval($attrs.titles) : ratingConfig.titles;\r\n this.titles = angular.isArray(tmpTitles) && tmpTitles.length > 0 ?\r\n tmpTitles : ratingConfig.titles;\r\n\r\n var ratingStates = angular.isDefined($attrs.ratingStates) ?\r\n $scope.$parent.$eval($attrs.ratingStates) :\r\n new Array(angular.isDefined($attrs.max) ? $scope.$parent.$eval($attrs.max) : ratingConfig.max);\r\n $scope.range = this.buildTemplateObjects(ratingStates);\r\n };\r\n\r\n this.buildTemplateObjects = function(states) {\r\n for (var i = 0, n = states.length; i < n; i++) {\r\n states[i] = angular.extend({ index: i }, { stateOn: this.stateOn, stateOff: this.stateOff, title: this.getTitle(i) }, states[i]);\r\n }\r\n return states;\r\n };\r\n\r\n this.getTitle = function(index) {\r\n if (index >= this.titles.length) {\r\n return index + 1;\r\n }\r\n\r\n return this.titles[index];\r\n };\r\n\r\n $scope.rate = function(value) {\r\n if (!$scope.readonly && value >= 0 && value <= $scope.range.length) {\r\n var newViewValue = self.enableReset && ngModelCtrl.$viewValue === value ? 0 : value;\r\n ngModelCtrl.$setViewValue(newViewValue);\r\n ngModelCtrl.$render();\r\n }\r\n };\r\n\r\n $scope.enter = function(value) {\r\n if (!$scope.readonly) {\r\n $scope.value = value;\r\n }\r\n $scope.onHover({value: value});\r\n };\r\n\r\n $scope.reset = function() {\r\n $scope.value = ngModelCtrl.$viewValue;\r\n $scope.onLeave();\r\n };\r\n\r\n $scope.onKeydown = function(evt) {\r\n if (/(37|38|39|40)/.test(evt.which)) {\r\n evt.preventDefault();\r\n evt.stopPropagation();\r\n $scope.rate($scope.value + (evt.which === 38 || evt.which === 39 ? 1 : -1));\r\n }\r\n };\r\n\r\n this.render = function() {\r\n $scope.value = ngModelCtrl.$viewValue;\r\n $scope.title = self.getTitle($scope.value - 1);\r\n };\r\n}])\r\n\r\n.directive('uibRating', function() {\r\n return {\r\n require: ['uibRating', 'ngModel'],\r\n restrict: 'A',\r\n scope: {\r\n readonly: '=?readOnly',\r\n onHover: '&',\r\n onLeave: '&'\r\n },\r\n controller: 'UibRatingController',\r\n templateUrl: 'uib/template/rating/rating.html',\r\n link: function(scope, element, attrs, ctrls) {\r\n var ratingCtrl = ctrls[0], ngModelCtrl = ctrls[1];\r\n ratingCtrl.init(ngModelCtrl);\r\n }\r\n };\r\n});\r\n\r\nangular.module('ui.bootstrap.dropdown', ['ui.bootstrap.multiMap', 'ui.bootstrap.position'])\r\n\r\n.constant('uibDropdownConfig', {\r\n appendToOpenClass: 'uib-dropdown-open',\r\n openClass: 'open'\r\n})\r\n\r\n.service('uibDropdownService', ['$document', '$rootScope', '$$multiMap', function($document, $rootScope, $$multiMap) {\r\n var openScope = null;\r\n var openedContainers = $$multiMap.createNew();\r\n\r\n this.isOnlyOpen = function(dropdownScope, appendTo) {\r\n var openedDropdowns = openedContainers.get(appendTo);\r\n if (openedDropdowns) {\r\n var openDropdown = openedDropdowns.reduce(function(toClose, dropdown) {\r\n if (dropdown.scope === dropdownScope) {\r\n return dropdown;\r\n }\r\n\r\n return toClose;\r\n }, {});\r\n if (openDropdown) {\r\n return openedDropdowns.length === 1;\r\n }\r\n }\r\n\r\n return false;\r\n };\r\n\r\n this.open = function(dropdownScope, element, appendTo) {\r\n if (!openScope) {\r\n $document.on('click', closeDropdown);\r\n }\r\n\r\n if (openScope && openScope !== dropdownScope) {\r\n openScope.isOpen = false;\r\n }\r\n\r\n openScope = dropdownScope;\r\n\r\n if (!appendTo) {\r\n return;\r\n }\r\n\r\n var openedDropdowns = openedContainers.get(appendTo);\r\n if (openedDropdowns) {\r\n var openedScopes = openedDropdowns.map(function(dropdown) {\r\n return dropdown.scope;\r\n });\r\n if (openedScopes.indexOf(dropdownScope) === -1) {\r\n openedContainers.put(appendTo, {\r\n scope: dropdownScope\r\n });\r\n }\r\n } else {\r\n openedContainers.put(appendTo, {\r\n scope: dropdownScope\r\n });\r\n }\r\n };\r\n\r\n this.close = function(dropdownScope, element, appendTo) {\r\n if (openScope === dropdownScope) {\r\n $document.off('click', closeDropdown);\r\n $document.off('keydown', this.keybindFilter);\r\n openScope = null;\r\n }\r\n\r\n if (!appendTo) {\r\n return;\r\n }\r\n\r\n var openedDropdowns = openedContainers.get(appendTo);\r\n if (openedDropdowns) {\r\n var dropdownToClose = openedDropdowns.reduce(function(toClose, dropdown) {\r\n if (dropdown.scope === dropdownScope) {\r\n return dropdown;\r\n }\r\n\r\n return toClose;\r\n }, {});\r\n if (dropdownToClose) {\r\n openedContainers.remove(appendTo, dropdownToClose);\r\n }\r\n }\r\n };\r\n\r\n var closeDropdown = function(evt) {\r\n // This method may still be called during the same mouse event that\r\n // unbound this event handler. So check openScope before proceeding.\r\n if (!openScope || !openScope.isOpen) { return; }\r\n\r\n if (evt && openScope.getAutoClose() === 'disabled') { return; }\r\n\r\n if (evt && evt.which === 3) { return; }\r\n\r\n var toggleElement = openScope.getToggleElement();\r\n if (evt && toggleElement && toggleElement[0].contains(evt.target)) {\r\n return;\r\n }\r\n\r\n var dropdownElement = openScope.getDropdownElement();\r\n if (evt && openScope.getAutoClose() === 'outsideClick' &&\r\n dropdownElement && dropdownElement[0].contains(evt.target)) {\r\n return;\r\n }\r\n\r\n openScope.focusToggleElement();\r\n openScope.isOpen = false;\r\n\r\n if (!$rootScope.$$phase) {\r\n openScope.$apply();\r\n }\r\n };\r\n\r\n this.keybindFilter = function(evt) {\r\n if (!openScope) {\r\n // see this.close as ESC could have been pressed which kills the scope so we can not proceed\r\n return;\r\n }\r\n\r\n var dropdownElement = openScope.getDropdownElement();\r\n var toggleElement = openScope.getToggleElement();\r\n var dropdownElementTargeted = dropdownElement && dropdownElement[0].contains(evt.target);\r\n var toggleElementTargeted = toggleElement && toggleElement[0].contains(evt.target);\r\n if (evt.which === 27) {\r\n evt.stopPropagation();\r\n openScope.focusToggleElement();\r\n closeDropdown();\r\n } else if (openScope.isKeynavEnabled() && [38, 40].indexOf(evt.which) !== -1 && openScope.isOpen && (dropdownElementTargeted || toggleElementTargeted)) {\r\n evt.preventDefault();\r\n evt.stopPropagation();\r\n openScope.focusDropdownEntry(evt.which);\r\n }\r\n };\r\n}])\r\n\r\n.controller('UibDropdownController', ['$scope', '$element', '$attrs', '$parse', 'uibDropdownConfig', 'uibDropdownService', '$animate', '$uibPosition', '$document', '$compile', '$templateRequest', function($scope, $element, $attrs, $parse, dropdownConfig, uibDropdownService, $animate, $position, $document, $compile, $templateRequest) {\r\n var self = this,\r\n scope = $scope.$new(), // create a child scope so we are not polluting original one\r\n templateScope,\r\n appendToOpenClass = dropdownConfig.appendToOpenClass,\r\n openClass = dropdownConfig.openClass,\r\n getIsOpen,\r\n setIsOpen = angular.noop,\r\n toggleInvoker = $attrs.onToggle ? $parse($attrs.onToggle) : angular.noop,\r\n keynavEnabled = false,\r\n selectedOption = null,\r\n body = $document.find('body');\r\n\r\n $element.addClass('dropdown');\r\n\r\n this.init = function() {\r\n if ($attrs.isOpen) {\r\n getIsOpen = $parse($attrs.isOpen);\r\n setIsOpen = getIsOpen.assign;\r\n\r\n $scope.$watch(getIsOpen, function(value) {\r\n scope.isOpen = !!value;\r\n });\r\n }\r\n\r\n keynavEnabled = angular.isDefined($attrs.keyboardNav);\r\n };\r\n\r\n this.toggle = function(open) {\r\n scope.isOpen = arguments.length ? !!open : !scope.isOpen;\r\n if (angular.isFunction(setIsOpen)) {\r\n setIsOpen(scope, scope.isOpen);\r\n }\r\n\r\n return scope.isOpen;\r\n };\r\n\r\n // Allow other directives to watch status\r\n this.isOpen = function() {\r\n return scope.isOpen;\r\n };\r\n\r\n scope.getToggleElement = function() {\r\n return self.toggleElement;\r\n };\r\n\r\n scope.getAutoClose = function() {\r\n return $attrs.autoClose || 'always'; //or 'outsideClick' or 'disabled'\r\n };\r\n\r\n scope.getElement = function() {\r\n return $element;\r\n };\r\n\r\n scope.isKeynavEnabled = function() {\r\n return keynavEnabled;\r\n };\r\n\r\n scope.focusDropdownEntry = function(keyCode) {\r\n var elems = self.dropdownMenu ? //If append to body is used.\r\n angular.element(self.dropdownMenu).find('a') :\r\n $element.find('ul').eq(0).find('a');\r\n\r\n switch (keyCode) {\r\n case 40: {\r\n if (!angular.isNumber(self.selectedOption)) {\r\n self.selectedOption = 0;\r\n } else {\r\n self.selectedOption = self.selectedOption === elems.length - 1 ?\r\n self.selectedOption :\r\n self.selectedOption + 1;\r\n }\r\n break;\r\n }\r\n case 38: {\r\n if (!angular.isNumber(self.selectedOption)) {\r\n self.selectedOption = elems.length - 1;\r\n } else {\r\n self.selectedOption = self.selectedOption === 0 ?\r\n 0 : self.selectedOption - 1;\r\n }\r\n break;\r\n }\r\n }\r\n elems[self.selectedOption].focus();\r\n };\r\n\r\n scope.getDropdownElement = function() {\r\n return self.dropdownMenu;\r\n };\r\n\r\n scope.focusToggleElement = function() {\r\n if (self.toggleElement) {\r\n self.toggleElement[0].focus();\r\n }\r\n };\r\n\r\n function removeDropdownMenu() {\r\n $element.append(self.dropdownMenu);\r\n }\r\n\r\n scope.$watch('isOpen', function(isOpen, wasOpen) {\r\n var appendTo = null,\r\n appendToBody = false;\r\n\r\n if (angular.isDefined($attrs.dropdownAppendTo)) {\r\n var appendToEl = $parse($attrs.dropdownAppendTo)(scope);\r\n if (appendToEl) {\r\n appendTo = angular.element(appendToEl);\r\n }\r\n }\r\n\r\n if (angular.isDefined($attrs.dropdownAppendToBody)) {\r\n var appendToBodyValue = $parse($attrs.dropdownAppendToBody)(scope);\r\n if (appendToBodyValue !== false) {\r\n appendToBody = true;\r\n }\r\n }\r\n\r\n if (appendToBody && !appendTo) {\r\n appendTo = body;\r\n }\r\n\r\n if (appendTo && self.dropdownMenu) {\r\n if (isOpen) {\r\n appendTo.append(self.dropdownMenu);\r\n $element.on('$destroy', removeDropdownMenu);\r\n } else {\r\n $element.off('$destroy', removeDropdownMenu);\r\n removeDropdownMenu();\r\n }\r\n }\r\n\r\n if (appendTo && self.dropdownMenu) {\r\n var pos = $position.positionElements($element, self.dropdownMenu, 'bottom-left', true),\r\n css,\r\n rightalign,\r\n scrollbarPadding,\r\n scrollbarWidth = 0;\r\n\r\n css = {\r\n top: pos.top + 'px',\r\n display: isOpen ? 'block' : 'none'\r\n };\r\n\r\n rightalign = self.dropdownMenu.hasClass('dropdown-menu-right');\r\n if (!rightalign) {\r\n css.left = pos.left + 'px';\r\n css.right = 'auto';\r\n } else {\r\n css.left = 'auto';\r\n scrollbarPadding = $position.scrollbarPadding(appendTo);\r\n\r\n if (scrollbarPadding.heightOverflow && scrollbarPadding.scrollbarWidth) {\r\n scrollbarWidth = scrollbarPadding.scrollbarWidth;\r\n }\r\n\r\n css.right = window.innerWidth - scrollbarWidth -\r\n (pos.left + $element.prop('offsetWidth')) + 'px';\r\n }\r\n\r\n // Need to adjust our positioning to be relative to the appendTo container\r\n // if it's not the body element\r\n if (!appendToBody) {\r\n var appendOffset = $position.offset(appendTo);\r\n\r\n css.top = pos.top - appendOffset.top + 'px';\r\n\r\n if (!rightalign) {\r\n css.left = pos.left - appendOffset.left + 'px';\r\n } else {\r\n css.right = window.innerWidth -\r\n (pos.left - appendOffset.left + $element.prop('offsetWidth')) + 'px';\r\n }\r\n }\r\n\r\n self.dropdownMenu.css(css);\r\n }\r\n\r\n var openContainer = appendTo ? appendTo : $element;\r\n var dropdownOpenClass = appendTo ? appendToOpenClass : openClass;\r\n var hasOpenClass = openContainer.hasClass(dropdownOpenClass);\r\n var isOnlyOpen = uibDropdownService.isOnlyOpen($scope, appendTo);\r\n\r\n if (hasOpenClass === !isOpen) {\r\n var toggleClass;\r\n if (appendTo) {\r\n toggleClass = !isOnlyOpen ? 'addClass' : 'removeClass';\r\n } else {\r\n toggleClass = isOpen ? 'addClass' : 'removeClass';\r\n }\r\n $animate[toggleClass](openContainer, dropdownOpenClass).then(function() {\r\n if (angular.isDefined(isOpen) && isOpen !== wasOpen) {\r\n toggleInvoker($scope, { open: !!isOpen });\r\n }\r\n });\r\n }\r\n\r\n if (isOpen) {\r\n if (self.dropdownMenuTemplateUrl) {\r\n $templateRequest(self.dropdownMenuTemplateUrl).then(function(tplContent) {\r\n templateScope = scope.$new();\r\n $compile(tplContent.trim())(templateScope, function(dropdownElement) {\r\n var newEl = dropdownElement;\r\n self.dropdownMenu.replaceWith(newEl);\r\n self.dropdownMenu = newEl;\r\n $document.on('keydown', uibDropdownService.keybindFilter);\r\n });\r\n });\r\n } else {\r\n $document.on('keydown', uibDropdownService.keybindFilter);\r\n }\r\n\r\n scope.focusToggleElement();\r\n uibDropdownService.open(scope, $element, appendTo);\r\n } else {\r\n uibDropdownService.close(scope, $element, appendTo);\r\n if (self.dropdownMenuTemplateUrl) {\r\n if (templateScope) {\r\n templateScope.$destroy();\r\n }\r\n var newEl = angular.element('
    ');\r\n self.dropdownMenu.replaceWith(newEl);\r\n self.dropdownMenu = newEl;\r\n }\r\n\r\n self.selectedOption = null;\r\n }\r\n\r\n if (angular.isFunction(setIsOpen)) {\r\n setIsOpen($scope, isOpen);\r\n }\r\n });\r\n}])\r\n\r\n.directive('uibDropdown', function() {\r\n return {\r\n controller: 'UibDropdownController',\r\n link: function(scope, element, attrs, dropdownCtrl) {\r\n dropdownCtrl.init();\r\n }\r\n };\r\n})\r\n\r\n.directive('uibDropdownMenu', function() {\r\n return {\r\n restrict: 'A',\r\n require: '?^uibDropdown',\r\n link: function(scope, element, attrs, dropdownCtrl) {\r\n if (!dropdownCtrl || angular.isDefined(attrs.dropdownNested)) {\r\n return;\r\n }\r\n\r\n element.addClass('dropdown-menu');\r\n\r\n var tplUrl = attrs.templateUrl;\r\n if (tplUrl) {\r\n dropdownCtrl.dropdownMenuTemplateUrl = tplUrl;\r\n }\r\n\r\n if (!dropdownCtrl.dropdownMenu) {\r\n dropdownCtrl.dropdownMenu = element;\r\n }\r\n }\r\n };\r\n})\r\n\r\n.directive('uibDropdownToggle', function() {\r\n return {\r\n require: '?^uibDropdown',\r\n link: function(scope, element, attrs, dropdownCtrl) {\r\n if (!dropdownCtrl) {\r\n return;\r\n }\r\n\r\n element.addClass('dropdown-toggle');\r\n\r\n dropdownCtrl.toggleElement = element;\r\n\r\n var toggleDropdown = function(event) {\r\n event.preventDefault();\r\n\r\n if (!element.hasClass('disabled') && !attrs.disabled) {\r\n scope.$apply(function() {\r\n dropdownCtrl.toggle();\r\n });\r\n }\r\n };\r\n\r\n element.on('click', toggleDropdown);\r\n\r\n // WAI-ARIA\r\n element.attr({ 'aria-haspopup': true, 'aria-expanded': false });\r\n scope.$watch(dropdownCtrl.isOpen, function(isOpen) {\r\n element.attr('aria-expanded', !!isOpen);\r\n });\r\n\r\n scope.$on('$destroy', function() {\r\n element.off('click', toggleDropdown);\r\n });\r\n }\r\n };\r\n});\r\n\r\nangular.module('ui.bootstrap.datepickerPopup', ['ui.bootstrap.datepicker', 'ui.bootstrap.position'])\r\n\r\n.value('$datepickerPopupLiteralWarning', true)\r\n\r\n.constant('uibDatepickerPopupConfig', {\r\n altInputFormats: [],\r\n appendToBody: false,\r\n clearText: 'Clear',\r\n closeOnDateSelection: true,\r\n closeText: 'Done',\r\n currentText: 'Today',\r\n datepickerPopup: 'yyyy-MM-dd',\r\n datepickerPopupTemplateUrl: 'uib/template/datepickerPopup/popup.html',\r\n datepickerTemplateUrl: 'uib/template/datepicker/datepicker.html',\r\n html5Types: {\r\n date: 'yyyy-MM-dd',\r\n 'datetime-local': 'yyyy-MM-ddTHH:mm:ss.sss',\r\n 'month': 'yyyy-MM'\r\n },\r\n onOpenFocus: true,\r\n showButtonBar: true,\r\n placement: 'auto bottom-left'\r\n})\r\n\r\n.controller('UibDatepickerPopupController', ['$scope', '$element', '$attrs', '$compile', '$log', '$parse', '$window', '$document', '$rootScope', '$uibPosition', 'dateFilter', 'uibDateParser', 'uibDatepickerPopupConfig', '$timeout', 'uibDatepickerConfig', '$datepickerPopupLiteralWarning',\r\nfunction($scope, $element, $attrs, $compile, $log, $parse, $window, $document, $rootScope, $position, dateFilter, dateParser, datepickerPopupConfig, $timeout, datepickerConfig, $datepickerPopupLiteralWarning) {\r\n var cache = {},\r\n isHtml5DateInput = false;\r\n var dateFormat, closeOnDateSelection, appendToBody, onOpenFocus,\r\n datepickerPopupTemplateUrl, datepickerTemplateUrl, popupEl, datepickerEl, scrollParentEl,\r\n ngModel, ngModelOptions, $popup, altInputFormats, watchListeners = [];\r\n\r\n this.init = function(_ngModel_) {\r\n ngModel = _ngModel_;\r\n ngModelOptions = extractOptions(ngModel);\r\n closeOnDateSelection = angular.isDefined($attrs.closeOnDateSelection) ?\r\n $scope.$parent.$eval($attrs.closeOnDateSelection) :\r\n datepickerPopupConfig.closeOnDateSelection;\r\n appendToBody = angular.isDefined($attrs.datepickerAppendToBody) ?\r\n $scope.$parent.$eval($attrs.datepickerAppendToBody) :\r\n datepickerPopupConfig.appendToBody;\r\n onOpenFocus = angular.isDefined($attrs.onOpenFocus) ?\r\n $scope.$parent.$eval($attrs.onOpenFocus) : datepickerPopupConfig.onOpenFocus;\r\n datepickerPopupTemplateUrl = angular.isDefined($attrs.datepickerPopupTemplateUrl) ?\r\n $attrs.datepickerPopupTemplateUrl :\r\n datepickerPopupConfig.datepickerPopupTemplateUrl;\r\n datepickerTemplateUrl = angular.isDefined($attrs.datepickerTemplateUrl) ?\r\n $attrs.datepickerTemplateUrl : datepickerPopupConfig.datepickerTemplateUrl;\r\n altInputFormats = angular.isDefined($attrs.altInputFormats) ?\r\n $scope.$parent.$eval($attrs.altInputFormats) :\r\n datepickerPopupConfig.altInputFormats;\r\n\r\n $scope.showButtonBar = angular.isDefined($attrs.showButtonBar) ?\r\n $scope.$parent.$eval($attrs.showButtonBar) :\r\n datepickerPopupConfig.showButtonBar;\r\n\r\n if (datepickerPopupConfig.html5Types[$attrs.type]) {\r\n dateFormat = datepickerPopupConfig.html5Types[$attrs.type];\r\n isHtml5DateInput = true;\r\n } else {\r\n dateFormat = $attrs.uibDatepickerPopup || datepickerPopupConfig.datepickerPopup;\r\n $attrs.$observe('uibDatepickerPopup', function(value, oldValue) {\r\n var newDateFormat = value || datepickerPopupConfig.datepickerPopup;\r\n // Invalidate the $modelValue to ensure that formatters re-run\r\n // FIXME: Refactor when PR is merged: https://github.com/angular/angular.js/pull/10764\r\n if (newDateFormat !== dateFormat) {\r\n dateFormat = newDateFormat;\r\n ngModel.$modelValue = null;\r\n\r\n if (!dateFormat) {\r\n throw new Error('uibDatepickerPopup must have a date format specified.');\r\n }\r\n }\r\n });\r\n }\r\n\r\n if (!dateFormat) {\r\n throw new Error('uibDatepickerPopup must have a date format specified.');\r\n }\r\n\r\n if (isHtml5DateInput && $attrs.uibDatepickerPopup) {\r\n throw new Error('HTML5 date input types do not support custom formats.');\r\n }\r\n\r\n // popup element used to display calendar\r\n popupEl = angular.element('
    ');\r\n\r\n popupEl.attr({\r\n 'ng-model': 'date',\r\n 'ng-change': 'dateSelection(date)',\r\n 'template-url': datepickerPopupTemplateUrl\r\n });\r\n\r\n // datepicker element\r\n datepickerEl = angular.element(popupEl.children()[0]);\r\n datepickerEl.attr('template-url', datepickerTemplateUrl);\r\n\r\n if (!$scope.datepickerOptions) {\r\n $scope.datepickerOptions = {};\r\n }\r\n\r\n if (isHtml5DateInput) {\r\n if ($attrs.type === 'month') {\r\n $scope.datepickerOptions.datepickerMode = 'month';\r\n $scope.datepickerOptions.minMode = 'month';\r\n }\r\n }\r\n\r\n datepickerEl.attr('datepicker-options', 'datepickerOptions');\r\n\r\n if (!isHtml5DateInput) {\r\n // Internal API to maintain the correct ng-invalid-[key] class\r\n ngModel.$$parserName = 'date';\r\n ngModel.$validators.date = validator;\r\n ngModel.$parsers.unshift(parseDate);\r\n ngModel.$formatters.push(function(value) {\r\n if (ngModel.$isEmpty(value)) {\r\n $scope.date = value;\r\n return value;\r\n }\r\n\r\n if (angular.isNumber(value)) {\r\n value = new Date(value);\r\n }\r\n\r\n $scope.date = dateParser.fromTimezone(value, ngModelOptions.getOption('timezone'));\r\n\r\n return dateParser.filter($scope.date, dateFormat);\r\n });\r\n } else {\r\n ngModel.$formatters.push(function(value) {\r\n $scope.date = dateParser.fromTimezone(value, ngModelOptions.getOption('timezone'));\r\n return value;\r\n });\r\n }\r\n\r\n // Detect changes in the view from the text box\r\n ngModel.$viewChangeListeners.push(function() {\r\n $scope.date = parseDateString(ngModel.$viewValue);\r\n });\r\n\r\n $element.on('keydown', inputKeydownBind);\r\n\r\n $popup = $compile(popupEl)($scope);\r\n // Prevent jQuery cache memory leak (template is now redundant after linking)\r\n popupEl.remove();\r\n\r\n if (appendToBody) {\r\n $document.find('body').append($popup);\r\n } else {\r\n $element.after($popup);\r\n }\r\n\r\n $scope.$on('$destroy', function() {\r\n if ($scope.isOpen === true) {\r\n if (!$rootScope.$$phase) {\r\n $scope.$apply(function() {\r\n $scope.isOpen = false;\r\n });\r\n }\r\n }\r\n\r\n $popup.remove();\r\n $element.off('keydown', inputKeydownBind);\r\n $document.off('click', documentClickBind);\r\n if (scrollParentEl) {\r\n scrollParentEl.off('scroll', positionPopup);\r\n }\r\n angular.element($window).off('resize', positionPopup);\r\n\r\n //Clear all watch listeners on destroy\r\n while (watchListeners.length) {\r\n watchListeners.shift()();\r\n }\r\n });\r\n };\r\n\r\n $scope.getText = function(key) {\r\n return $scope[key + 'Text'] || datepickerPopupConfig[key + 'Text'];\r\n };\r\n\r\n $scope.isDisabled = function(date) {\r\n if (date === 'today') {\r\n date = dateParser.fromTimezone(new Date(), ngModelOptions.getOption('timezone'));\r\n }\r\n\r\n var dates = {};\r\n angular.forEach(['minDate', 'maxDate'], function(key) {\r\n if (!$scope.datepickerOptions[key]) {\r\n dates[key] = null;\r\n } else if (angular.isDate($scope.datepickerOptions[key])) {\r\n dates[key] = new Date($scope.datepickerOptions[key]);\r\n } else {\r\n if ($datepickerPopupLiteralWarning) {\r\n $log.warn('Literal date support has been deprecated, please switch to date object usage');\r\n }\r\n\r\n dates[key] = new Date(dateFilter($scope.datepickerOptions[key], 'medium'));\r\n }\r\n });\r\n\r\n return $scope.datepickerOptions &&\r\n dates.minDate && $scope.compare(date, dates.minDate) < 0 ||\r\n dates.maxDate && $scope.compare(date, dates.maxDate) > 0;\r\n };\r\n\r\n $scope.compare = function(date1, date2) {\r\n return new Date(date1.getFullYear(), date1.getMonth(), date1.getDate()) - new Date(date2.getFullYear(), date2.getMonth(), date2.getDate());\r\n };\r\n\r\n // Inner change\r\n $scope.dateSelection = function(dt) {\r\n $scope.date = dt;\r\n var date = $scope.date ? dateParser.filter($scope.date, dateFormat) : null; // Setting to NULL is necessary for form validators to function\r\n $element.val(date);\r\n ngModel.$setViewValue(date);\r\n\r\n if (closeOnDateSelection) {\r\n $scope.isOpen = false;\r\n $element[0].focus();\r\n }\r\n };\r\n\r\n $scope.keydown = function(evt) {\r\n if (evt.which === 27) {\r\n evt.stopPropagation();\r\n $scope.isOpen = false;\r\n $element[0].focus();\r\n }\r\n };\r\n\r\n $scope.select = function(date, evt) {\r\n evt.stopPropagation();\r\n\r\n if (date === 'today') {\r\n var today = new Date();\r\n if (angular.isDate($scope.date)) {\r\n date = new Date($scope.date);\r\n date.setFullYear(today.getFullYear(), today.getMonth(), today.getDate());\r\n } else {\r\n date = dateParser.fromTimezone(today, ngModelOptions.getOption('timezone'));\r\n date.setHours(0, 0, 0, 0);\r\n }\r\n }\r\n $scope.dateSelection(date);\r\n };\r\n\r\n $scope.close = function(evt) {\r\n evt.stopPropagation();\r\n\r\n $scope.isOpen = false;\r\n $element[0].focus();\r\n };\r\n\r\n $scope.disabled = angular.isDefined($attrs.disabled) || false;\r\n if ($attrs.ngDisabled) {\r\n watchListeners.push($scope.$parent.$watch($parse($attrs.ngDisabled), function(disabled) {\r\n $scope.disabled = disabled;\r\n }));\r\n }\r\n\r\n $scope.$watch('isOpen', function(value) {\r\n if (value) {\r\n if (!$scope.disabled) {\r\n $timeout(function() {\r\n positionPopup();\r\n\r\n if (onOpenFocus) {\r\n $scope.$broadcast('uib:datepicker.focus');\r\n }\r\n\r\n $document.on('click', documentClickBind);\r\n\r\n var placement = $attrs.popupPlacement ? $attrs.popupPlacement : datepickerPopupConfig.placement;\r\n if (appendToBody || $position.parsePlacement(placement)[2]) {\r\n scrollParentEl = scrollParentEl || angular.element($position.scrollParent($element));\r\n if (scrollParentEl) {\r\n scrollParentEl.on('scroll', positionPopup);\r\n }\r\n } else {\r\n scrollParentEl = null;\r\n }\r\n\r\n angular.element($window).on('resize', positionPopup);\r\n }, 0, false);\r\n } else {\r\n $scope.isOpen = false;\r\n }\r\n } else {\r\n $document.off('click', documentClickBind);\r\n if (scrollParentEl) {\r\n scrollParentEl.off('scroll', positionPopup);\r\n }\r\n angular.element($window).off('resize', positionPopup);\r\n }\r\n });\r\n\r\n function cameltoDash(string) {\r\n return string.replace(/([A-Z])/g, function($1) { return '-' + $1.toLowerCase(); });\r\n }\r\n\r\n function parseDateString(viewValue) {\r\n var date = dateParser.parse(viewValue, dateFormat, $scope.date);\r\n if (isNaN(date)) {\r\n for (var i = 0; i < altInputFormats.length; i++) {\r\n date = dateParser.parse(viewValue, altInputFormats[i], $scope.date);\r\n if (!isNaN(date)) {\r\n return date;\r\n }\r\n }\r\n }\r\n return date;\r\n }\r\n\r\n function parseDate(viewValue) {\r\n if (angular.isNumber(viewValue)) {\r\n // presumably timestamp to date object\r\n viewValue = new Date(viewValue);\r\n }\r\n\r\n if (!viewValue) {\r\n return null;\r\n }\r\n\r\n if (angular.isDate(viewValue) && !isNaN(viewValue)) {\r\n return viewValue;\r\n }\r\n\r\n if (angular.isString(viewValue)) {\r\n var date = parseDateString(viewValue);\r\n if (!isNaN(date)) {\r\n return dateParser.toTimezone(date, ngModelOptions.getOption('timezone'));\r\n }\r\n }\r\n\r\n return ngModelOptions.getOption('allowInvalid') ? viewValue : undefined;\r\n }\r\n\r\n function validator(modelValue, viewValue) {\r\n var value = modelValue || viewValue;\r\n\r\n if (!$attrs.ngRequired && !value) {\r\n return true;\r\n }\r\n\r\n if (angular.isNumber(value)) {\r\n value = new Date(value);\r\n }\r\n\r\n if (!value) {\r\n return true;\r\n }\r\n\r\n if (angular.isDate(value) && !isNaN(value)) {\r\n return true;\r\n }\r\n\r\n if (angular.isString(value)) {\r\n return !isNaN(parseDateString(value));\r\n }\r\n\r\n return false;\r\n }\r\n\r\n function documentClickBind(event) {\r\n if (!$scope.isOpen && $scope.disabled) {\r\n return;\r\n }\r\n\r\n var popup = $popup[0];\r\n var dpContainsTarget = $element[0].contains(event.target);\r\n // The popup node may not be an element node\r\n // In some browsers (IE) only element nodes have the 'contains' function\r\n var popupContainsTarget = popup.contains !== undefined && popup.contains(event.target);\r\n if ($scope.isOpen && !(dpContainsTarget || popupContainsTarget)) {\r\n $scope.$apply(function() {\r\n $scope.isOpen = false;\r\n });\r\n }\r\n }\r\n\r\n function inputKeydownBind(evt) {\r\n if (evt.which === 27 && $scope.isOpen) {\r\n evt.preventDefault();\r\n evt.stopPropagation();\r\n $scope.$apply(function() {\r\n $scope.isOpen = false;\r\n });\r\n $element[0].focus();\r\n } else if (evt.which === 40 && !$scope.isOpen) {\r\n evt.preventDefault();\r\n evt.stopPropagation();\r\n $scope.$apply(function() {\r\n $scope.isOpen = true;\r\n });\r\n }\r\n }\r\n\r\n function positionPopup() {\r\n if ($scope.isOpen) {\r\n var dpElement = angular.element($popup[0].querySelector('.uib-datepicker-popup'));\r\n var placement = $attrs.popupPlacement ? $attrs.popupPlacement : datepickerPopupConfig.placement;\r\n // hack\r\n /*var position = $position.positionElements($element, dpElement, placement, appendToBody);*/\r\n var position = $position.positionElements($element.parent(), dpElement, placement, appendToBody);\r\n // hack end\r\n dpElement.css({top: position.top + 'px', left: position.left + 'px'});\r\n if (dpElement.hasClass('uib-position-measure')) {\r\n dpElement.removeClass('uib-position-measure');\r\n }\r\n }\r\n }\r\n\r\n function extractOptions(ngModelCtrl) {\r\n var ngModelOptions;\r\n\r\n if (angular.version.minor < 6) { // in angular < 1.6 $options could be missing\r\n // guarantee a value\r\n ngModelOptions = angular.isObject(ngModelCtrl.$options) ?\r\n ngModelCtrl.$options :\r\n {\r\n timezone: null\r\n };\r\n\r\n // mimic 1.6+ api\r\n ngModelOptions.getOption = function (key) {\r\n return ngModelOptions[key];\r\n };\r\n } else { // in angular >=1.6 $options is always present\r\n ngModelOptions = ngModelCtrl.$options;\r\n }\r\n\r\n return ngModelOptions;\r\n }\r\n\r\n $scope.$on('uib:datepicker.mode', function() {\r\n $timeout(positionPopup, 0, false);\r\n });\r\n}])\r\n\r\n.directive('uibDatepickerPopup', function() {\r\n return {\r\n require: ['ngModel', 'uibDatepickerPopup'],\r\n controller: 'UibDatepickerPopupController',\r\n scope: {\r\n datepickerOptions: '=?',\r\n isOpen: '=?',\r\n currentText: '@',\r\n clearText: '@',\r\n closeText: '@'\r\n },\r\n link: function(scope, element, attrs, ctrls) {\r\n var ngModel = ctrls[0],\r\n ctrl = ctrls[1];\r\n\r\n ctrl.init(ngModel);\r\n }\r\n };\r\n})\r\n\r\n.directive('uibDatepickerPopupWrap', function() {\r\n return {\r\n restrict: 'A',\r\n transclude: true,\r\n templateUrl: function(element, attrs) {\r\n return attrs.templateUrl || 'uib/template/datepickerPopup/popup.html';\r\n }\r\n };\r\n});\r\n\r\nangular.module(\"uib/template/accordion/accordion-group.html\", []).run([\"$templateCache\", function($templateCache) {\r\n $templateCache.put(\"uib/template/accordion/accordion-group.html\",\r\n \"
    \\n\" +\r\n \"

    \\n\" +\r\n \" {{heading}}\\n\" +\r\n \"

    \\n\" +\r\n \"
    \\n\" +\r\n \"
    \\n\" +\r\n \"
    \\n\" +\r\n \"
    \\n\" +\r\n \"\");\r\n}]);\r\n\r\nangular.module(\"uib/template/accordion/accordion.html\", []).run([\"$templateCache\", function($templateCache) {\r\n $templateCache.put(\"uib/template/accordion/accordion.html\",\r\n \"
    \");\r\n}]);\r\n\r\nangular.module(\"uib/template/alert/alert.html\", []).run([\"$templateCache\", function($templateCache) {\r\n $templateCache.put(\"uib/template/alert/alert.html\",\r\n \"\\n\" +\r\n \"
    \\n\" +\r\n \"\");\r\n}]);\r\n\r\nangular.module(\"uib/template/datepicker/datepicker.html\", []).run([\"$templateCache\", function($templateCache) {\r\n $templateCache.put(\"uib/template/datepicker/datepicker.html\",\r\n \"
    \\n\" +\r\n \"
    \\n\" +\r\n \"
    \\n\" +\r\n \"
    \\n\" +\r\n \"
    \\n\" +\r\n \"\");\r\n}]);\r\n\r\nangular.module(\"uib/template/datepicker/day.html\", []).run([\"$templateCache\", function($templateCache) {\r\n $templateCache.put(\"uib/template/datepicker/day.html\",\r\n \"\\n\" +\r\n \" \\n\" +\r\n \" \\n\" +\r\n \" \\n\" +\r\n \" \\n\" +\r\n \" \\n\" +\r\n \" \\n\" +\r\n \" \\n\" +\r\n \" \\n\" +\r\n \" \\n\" +\r\n \" \\n\" +\r\n \" \\n\" +\r\n \" \\n\" +\r\n \" \\n\" +\r\n \" \\n\" +\r\n \" \\n\" +\r\n \" \\n\" +\r\n \" \\n\" +\r\n \"
    {{::label.abbr}}
    {{ weekNumbers[$index] }}\\n\" +\r\n \" \\n\" +\r\n \"
    \\n\" +\r\n \"\");\r\n}]);\r\n\r\nangular.module(\"uib/template/datepicker/month.html\", []).run([\"$templateCache\", function($templateCache) {\r\n $templateCache.put(\"uib/template/datepicker/month.html\",\r\n \"\\n\" +\r\n \" \\n\" +\r\n \" \\n\" +\r\n \" \\n\" +\r\n \" \\n\" +\r\n \" \\n\" +\r\n \" \\n\" +\r\n \" \\n\" +\r\n \" \\n\" +\r\n \" \\n\" +\r\n \" \\n\" +\r\n \" \\n\" +\r\n \" \\n\" +\r\n \"
    \\n\" +\r\n \" \\n\" +\r\n \"
    \\n\" +\r\n \"\");\r\n}]);\r\n\r\nangular.module(\"uib/template/datepicker/year.html\", []).run([\"$templateCache\", function($templateCache) {\r\n $templateCache.put(\"uib/template/datepicker/year.html\",\r\n \"\\n\" +\r\n \" \\n\" +\r\n \" \\n\" +\r\n \" \\n\" +\r\n \" \\n\" +\r\n \" \\n\" +\r\n \" \\n\" +\r\n \" \\n\" +\r\n \" \\n\" +\r\n \" \\n\" +\r\n \" \\n\" +\r\n \" \\n\" +\r\n \" \\n\" +\r\n \"
    \\n\" +\r\n \" \\n\" +\r\n \"
    \\n\" +\r\n \"\");\r\n}]);\r\n\r\nangular.module(\"uib/template/modal/window.html\", []).run([\"$templateCache\", function($templateCache) {\r\n $templateCache.put(\"uib/template/modal/window.html\",\r\n \"
    \\n\" +\r\n \"\");\r\n}]);\r\n\r\nangular.module(\"uib/template/pagination/pagination.html\", []).run([\"$templateCache\", function($templateCache) {\r\n $templateCache.put(\"uib/template/pagination/pagination.html\",\r\n \"
  • {{::getText('first')}}
  • \\n\" +\r\n \"
  • {{::getText('previous')}}
  • \\n\" +\r\n \"
  • {{page.text}}
  • \\n\" +\r\n \"
  • {{::getText('next')}}
  • \\n\" +\r\n \"
  • {{::getText('last')}}
  • \\n\" +\r\n \"\");\r\n}]);\r\n\r\nangular.module(\"uib/template/tooltip/tooltip-html-popup.html\", []).run([\"$templateCache\", function($templateCache) {\r\n $templateCache.put(\"uib/template/tooltip/tooltip-html-popup.html\",\r\n \"
    \\n\" +\r\n \"
    \\n\" +\r\n \"\");\r\n}]);\r\n\r\nangular.module(\"uib/template/tooltip/tooltip-popup.html\", []).run([\"$templateCache\", function($templateCache) {\r\n $templateCache.put(\"uib/template/tooltip/tooltip-popup.html\",\r\n \"
    \\n\" +\r\n \"
    \\n\" +\r\n \"\");\r\n}]);\r\n\r\nangular.module(\"uib/template/tooltip/tooltip-template-popup.html\", []).run([\"$templateCache\", function($templateCache) {\r\n $templateCache.put(\"uib/template/tooltip/tooltip-template-popup.html\",\r\n \"
    \\n\" +\r\n \"
    \\n\" +\r\n \"\");\r\n}]);\r\n\r\nangular.module(\"uib/template/popover/popover-html.html\", []).run([\"$templateCache\", function($templateCache) {\r\n $templateCache.put(\"uib/template/popover/popover-html.html\",\r\n \"
    \\n\" +\r\n \"\\n\" +\r\n \"
    \\n\" +\r\n \"

    \\n\" +\r\n \"
    \\n\" +\r\n \"
    \\n\" +\r\n \"\");\r\n}]);\r\n\r\nangular.module(\"uib/template/popover/popover-template.html\", []).run([\"$templateCache\", function($templateCache) {\r\n $templateCache.put(\"uib/template/popover/popover-template.html\",\r\n \"
    \\n\" +\r\n \"\\n\" +\r\n \"
    \\n\" +\r\n \"

    \\n\" +\r\n \"
    \\n\" +\r\n \"
    \\n\" +\r\n \"\");\r\n}]);\r\n\r\nangular.module(\"uib/template/popover/popover.html\", []).run([\"$templateCache\", function($templateCache) {\r\n $templateCache.put(\"uib/template/popover/popover.html\",\r\n \"
    \\n\" +\r\n \"\\n\" +\r\n \"
    \\n\" +\r\n \"

    \\n\" +\r\n \"
    \\n\" +\r\n \"
    \\n\" +\r\n \"\");\r\n}]);\r\n\r\nangular.module(\"uib/template/tabs/tab.html\", []).run([\"$templateCache\", function($templateCache) {\r\n $templateCache.put(\"uib/template/tabs/tab.html\",\r\n \"
  • \\n\" +\r\n \" {{heading}}\\n\" +\r\n \"
  • \\n\" +\r\n \"\");\r\n}]);\r\n\r\nangular.module(\"uib/template/tabs/tabset.html\", []).run([\"$templateCache\", function($templateCache) {\r\n $templateCache.put(\"uib/template/tabs/tabset.html\",\r\n \"
    \\n\" +\r\n \"
      \\n\" +\r\n \"
      \\n\" +\r\n \"
      \\n\" +\r\n \"
      \\n\" +\r\n \"
      \\n\" +\r\n \"
      \\n\" +\r\n \"\");\r\n}]);\r\n\r\nangular.module(\"uib/template/rating/rating.html\", []).run([\"$templateCache\", function($templateCache) {\r\n $templateCache.put(\"uib/template/rating/rating.html\",\r\n \"\\n\" +\r\n \" ({{ $index < value ? '*' : ' ' }})\\n\" +\r\n \" \\n\" +\r\n \"\\n\" +\r\n \"\");\r\n}]);\r\n\r\nangular.module(\"uib/template/datepickerPopup/popup.html\", []).run([\"$templateCache\", function($templateCache) {\r\n $templateCache.put(\"uib/template/datepickerPopup/popup.html\",\r\n \"
        \\n\" +\r\n \"
      • \\n\" +\r\n \"
      • \\n\" +\r\n \" \\n\" +\r\n \" \\n\" +\r\n \" \\n\" +\r\n \" \\n\" +\r\n \" \\n\" +\r\n \"
      • \\n\" +\r\n \"
      \\n\" +\r\n \"\");\r\n}]);","(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('module.modal-controllers', [])\r\n\r\n /* @ngInject */\r\n .controller('modalCtrl', [\"data\", \"device\", \"options\", \"$scope\", function (data, device, options, $scope) {\r\n var ctrl = this;\r\n ctrl.data = data;\r\n ctrl.device = device;\r\n ctrl.options = options;\r\n ctrl.showLoader = true;\r\n $scope.device = device;\r\n\r\n ctrl.onLoad = function () {\r\n ctrl.showLoader = false;\r\n };\r\n }])\r\n\r\n /* @ngInject */\r\n .controller('modalSendByEMailCtrl', [\"data\", \"device\", \"options\", \"HttpService\", \"AppService\", \"ModalService\", \"toastr\", function (data, device, options, HttpService, AppService, ModalService, toastr) {\r\n var ctrl = this;\r\n\r\n ctrl.data = data;\r\n ctrl.data.Message = '';\r\n ctrl.data.Recipients = [{}];\r\n ctrl.modalTitle = options.modalTitle;\r\n\r\n ctrl.addRecipient = function () {\r\n ctrl.data.Recipients.push({});\r\n };\r\n ctrl.removeRecipient = function (index) {\r\n ctrl.data.Recipients.splice(index, 1);\r\n };\r\n\r\n AppService.getParams()\r\n .then(function (params) {\r\n if (params.IsLogged) {\r\n ctrl.data.Email = params.Visitor.Email;\r\n ctrl.data.FirstName = params.Visitor.FirstName;\r\n ctrl.data.LastName = params.Visitor.LastName;\r\n }\r\n })\r\n .catch(function (error) {\r\n console.error(error);\r\n });\r\n\r\n ctrl.submit = function () {\r\n ctrl.loading = true;\r\n\r\n HttpService.post({\r\n url: '/SendByEmail',\r\n data: ctrl.data\r\n })\r\n .then(function (response) {\r\n AppService.getTranslate()\r\n .then(function (translate) {\r\n if (response.status === 'OK') {\r\n ModalService.close();\r\n toastr.success('', options.resultMessage, {\r\n allowHtml: true,\r\n extraData: {\r\n template: 'toast_message.tpl'\r\n }\r\n });\r\n } else {\r\n toastr.warning(translate.errors.TryLater, translate.errors.ErrorHasOccurred, {\r\n allowHtml: true,\r\n extraData: {\r\n template: 'toast_message.tpl'\r\n }\r\n });\r\n }\r\n ctrl.loading = false;\r\n })\r\n .catch(function (error) {\r\n console.error(error);\r\n });\r\n })\r\n .catch(function (error) {\r\n console.error(error);\r\n });\r\n };\r\n\r\n }])\r\n\r\n /* @ngInject */\r\n .controller('modalAddToCartCtrl', [\"data\", \"device\", \"options\", \"$scope\", function (data, device, options, $scope) {\r\n var ctrl = this;\r\n ctrl.data = data;\r\n ctrl.device = device;\r\n ctrl.options = options;\r\n $scope.device = device;\r\n\r\n if (ctrl.data.length === 1) {\r\n ctrl.suggestionsUrl = 'GetProductSuggestions/Modal/ModalAddToCartSuggestions/' + ctrl.data[0].idProduct + '?' + (new Date().getTime());\r\n }\r\n\r\n }]);\r\n\r\n})();\r\n","(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('service.gtm', [])\r\n\r\n /* @ngInject */\r\n .factory('GtmService', [\"$cookies\", \"AppService\", \"DateService\", function ($cookies, AppService, DateService) {\r\n var gtmId;\r\n var service = {\r\n inject: inject,\r\n dataLayerPush: dataLayerPush,\r\n push: push,\r\n tmpPush: tmpPush,\r\n addToCart: addToCart,\r\n removeFromCart: removeFromCart,\r\n searchResults: searchResults\r\n };\r\n return service;\r\n\r\n ////////////\r\n function inject(key) {\r\n gtmId = key;\r\n var script = document.createElement('script');\r\n script.type = 'text/javascript';\r\n script.innerHTML = getContent(key);\r\n $('head')[0].appendChild(script);\r\n $cookies.put('gtmOK', 'true', {\r\n path: '/',\r\n expires: DateService.nextYear()\r\n });\r\n }\r\n\r\n function dataLayerPush(data) {\r\n window.tmp_DataLayer = window.tmp_DataLayer || [];\r\n\r\n var eventProperty = window.tmp_DataLayer.find(function (i) { i.event })\r\n if (eventProperty === null) {\r\n window.tmp_DataLayer.push(_.merge(data, {\r\n event: 'pageView'\r\n }));\r\n }\r\n \r\n var newData = _.reduce(window.tmp_DataLayer, function (obj, param) {\r\n _.merge(obj, param);\r\n return obj;\r\n }, {});\r\n\r\n window.google_tag_manager && window.google_tag_manager[gtmId].dataLayer.reset();\r\n window.dataLayer = window.dataLayer || [];\r\n window.dataLayer.push(newData);\r\n window.tmp_DataLayer = [];\r\n }\r\n\r\n function tmpPush(data) {\r\n window.tmp_DataLayer = window.tmp_DataLayer || [];\r\n window.tmp_DataLayer.push(data);\r\n }\r\n\r\n function push(data) {\r\n window.dataLayer = window.dataLayer || [];\r\n window.dataLayer.push(data);\r\n }\r\n\r\n function getContent(key) {\r\n /* eslint-disable */\r\n return \"(function (w, d, s, l, i) {\" +\r\n \"w[l] = w[l] || []; w[l].push({\" +\r\n \"'gtm.start':\" +\r\n \"new Date().getTime(), event: 'gtm.js'\" +\r\n \"}); var f = d.getElementsByTagName(s)[0],\" +\r\n \"j = d.createElement(s), dl = l != 'dataLayer' ? '&l=' + l : ''; j.async = true; j.src =\" +\r\n \"'https://www.googletagmanager.com/gtm.js?id=' + i + dl; f.parentNode.insertBefore(j, f);\" +\r\n \"})(window, document, 'script', 'dataLayer', '\" + key + \"');\";\r\n /* eslint-enable */\r\n }\r\n\r\n function addToCart(idProduct, cartLines, context) {\r\n if (!context) return;\r\n var line = _.find(cartLines, { 'IDProduct': idProduct });\r\n gtmPush('addToCart', 'add to cart', context, line);\r\n }\r\n\r\n function removeFromCart(idProduct) {\r\n AppService.getParams()\r\n .then(function (params) {\r\n var context = $('title').html();\r\n var line = _.find(params.Cart.Products, { 'IDProduct': idProduct });\r\n gtmPush('removeCart', 'remove from cart', context, line);\r\n })\r\n .catch(function (error) {\r\n console.error(error);\r\n });\r\n }\r\n\r\n function gtmPush(event, action, category, line) {\r\n if (!line) return;\r\n\r\n push({\r\n 'event': event,\r\n 'eventAction': action,\r\n 'eventCategory': category,\r\n 'ecommerce': {\r\n 'add': {\r\n 'products': [{\r\n 'id': line.Product.Reference,\r\n 'name': line.Product.Designation,\r\n 'price': line.Product.Price ? Math.floor(line.Product.Price.TTCDiscountedPrice * 100) / 100 : 0,\r\n 'quantity': line.Quantity,\r\n 'productId': line.Product.Reference,\r\n 'productBrand': line.Product.Brand ? line.Product.Brand.Designation : '',\r\n 'productName': line.Product.Designation,\r\n 'productUnitPriceAti': line.Product.Price ? Math.floor(line.Product.Price.TTCDiscountedPrice * 100) / 100 : 0,\r\n 'productUnitPriceTf': line.Product.Price ? Math.floor(line.Product.Price.HTDiscountedPrice * 100) / 100 : 0,\r\n 'productDiscountAti': line.Product.Price.HasDiscount ? Math.floor(line.Product.Price.TTCPrice * 100) / 100 : 0,\r\n 'productDiscountTf': line.Product.Price.HasDiscount ? Math.floor(line.Product.Price.HTPrice * 100) / 100 : 0,\r\n 'productInstock': line.Product.Availability.ClickAndCollectAvailability && line.Product.Availability.ClickAndCollectAvailability.CentralStock + line.Product.Availability.ClickAndCollectAvailability.StoreStock > 0,\r\n 'productQuantity': line.Quantity\r\n }]\r\n }\r\n }\r\n });\r\n }\r\n\r\n function searchResults(post, result) {\r\n //eventCategory is name of action her internal search\r\n push({\r\n 'event': 'rechercheInterne',\r\n 'eventLabel': post.QueryFullText,\r\n 'eventAction': result.total > 0 ? 'search with results' : 'search without results',\r\n 'searchPage': post.page,\r\n 'searchNbresults': result.total,\r\n 'eventCategory':'rechercheInterne'\r\n });\r\n\r\n _.each(post.FacetsSelected, function (facet) {\r\n push({\r\n 'event': 'refreshFilters',\r\n 'filterType': facet.Name,\r\n 'filterName': facet.Values[0]\r\n });\r\n });\r\n }\r\n }])\r\n\r\n /* @ngInject */\r\n .directive('gtm', function () {\r\n return {\r\n restrict: 'A',\r\n bindToController: {\r\n content: '@'\r\n },\r\n /* @ngInject */\r\n controller: [\"GtmService\", function (GtmService) {\r\n var ctrl = this;\r\n\r\n ctrl.$onInit = function () {\r\n GtmService.inject(ctrl.content);\r\n };\r\n }]\r\n };\r\n })\r\n\r\n /* @ngInject */\r\n .directive('gtmPush', [\"GtmService\", function (GtmService) {\r\n return {\r\n restrict: 'E',\r\n bindToController: {\r\n device: '<'\r\n },\r\n /* @ngInject */\r\n controller: function () {\r\n var ctrl = this;\r\n\r\n ctrl.$onInit = function () {\r\n if (ctrl.device) {\r\n var device = 'tablet';\r\n device = ctrl.device.desktop ? 'desktop' : device;\r\n device = ctrl.device.mobile ? 'mobile' : device;\r\n GtmService.tmpPush({\r\n 'envChannel': device,\r\n 'userDevice': device\r\n });\r\n }\r\n };\r\n }\r\n };\r\n }])\r\n\r\n /* @ngInject */\r\n .directive('gtmClickEvent', [\"GtmService\", function (GtmService) {\r\n return {\r\n restrict: 'A',\r\n link: function (scope, element, attrs) {\r\n var config = scope.$eval(attrs.gtmClickEvent);\r\n element.on('click.gtm', function () {\r\n var push = {\r\n 'event': config.event\r\n };\r\n if (config.action) {\r\n push = angular.extend(push, {\r\n 'eventAction': config.action\r\n });\r\n }\r\n if (config.category) {\r\n push = angular.extend(push, {\r\n 'eventCategory': config.category === 'getPage' ? $('title').html().replace(/[']/g, '\\'') : config.category\r\n });\r\n }\r\n if (config.label) {\r\n push = angular.extend(push, {\r\n 'eventLabel': config.label\r\n });\r\n }\r\n if (config.data) {\r\n push = angular.extend(push, config.data);\r\n }\r\n\r\n GtmService.push(push);\r\n });\r\n scope.$on('$destroy', function () {\r\n element.off('click.gtm');\r\n });\r\n }\r\n };\r\n }]);\r\n})();\r\n","/*\r\n * Modal directive\r\n * Version 1.0\r\n * Octave\r\n * Modified from .\r\n **/\r\n\r\n\r\n(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('module.modal', [])\r\n\r\n /* @ngInject */\r\n .factory('ModalService', [\"$uibModal\", function ($uibModal) {\r\n var modalInstance = [];\r\n return {\r\n show: function (template, data, size, ctrl, ctrlAs, device, options, onClosed, onOpened) {\r\n var modal = $uibModal.open({\r\n size: size,\r\n templateUrl: template,\r\n controller: ctrl || 'modalCtrl',\r\n controllerAs: ctrlAs || 'modalCtrl',\r\n bindToController: true,\r\n resolve: {\r\n data: function () { return data; },\r\n device: function () { return device; },\r\n options: function () { return options; }\r\n },\r\n windowClass: data && data.windowClass || null,\r\n backdrop: data && data.backdrop || true\r\n });\r\n modal.result.catch(function (error) {\r\n if (!(error === 'cancel' || error === 'backdrop click' || error === 'escape key press')) {\r\n console.error(error);\r\n }\r\n });\r\n modal.id = new Date().getTime();\r\n modal.closed.then(function () {\r\n modalInstance = _.filter(modalInstance, function (o) {\r\n return o.id !== modal.id;\r\n });\r\n if (onClosed) {\r\n onClosed();\r\n }\r\n })\r\n .catch(function (error) {\r\n console.error(error);\r\n });\r\n modal.opened.then(function () {\r\n if (onOpened) {\r\n onOpened();\r\n }\r\n })\r\n .catch(function (error) {\r\n console.error(error);\r\n });\r\n modalInstance.push(modal);\r\n return modal;\r\n },\r\n close: function () {\r\n _.each(modalInstance, function (modal) {\r\n modal.close();\r\n });\r\n modalInstance = [];\r\n }\r\n };\r\n }])\r\n\r\n /* @ngInject */\r\n .directive('openModal', [\"ModalService\", function (ModalService) {\r\n var directive = {\r\n restrict: 'A',\r\n transclude: true,\r\n replace: true,\r\n template: '{{name}}',\r\n scope: {\r\n openModal: '@',\r\n module: '@',\r\n class: '@',\r\n ctrl: '@?',\r\n data: '{{name}}',\r\n scope: {\r\n openCmsModal: '@',\r\n class: '@',\r\n autoScroll: '@?',\r\n title: '@?',\r\n ctrl: '@?',\r\n size: '@?',\r\n device: '',\r\n resolve: resolve,\r\n name: route.Controller,\r\n ngRoute: true\r\n });\r\n }\r\n } else if (route.Controller.indexOf('Cart') !== -1) { // Panier\r\n if (route.Name === 'QuickOrder') {\r\n when(route, {\r\n templateUrl: '/Template/Cart/QuickOrderForm',\r\n name: route.Name,\r\n cart: true,\r\n resolve: {\r\n /* @ngInject */\r\n css: [\"LoadService\", function (LoadService) {\r\n return LoadService.load('css', 'cssCart', $(document.body).data('css-cart'));\r\n }],\r\n /* @ngInject */\r\n module: [\"LoadService\", function (LoadService) {\r\n return LoadService.load('js', 'app.cart', $(document.body).data('js-cart'));\r\n }]\r\n },\r\n ngRoute: true\r\n });\r\n } else if (route.Name === 'Cart' || route.Name === 'CartRecognition') {\r\n when(route, {\r\n templateUrl: '/Template/Cart/Display',\r\n name: route.Name,\r\n cart: true,\r\n resolve: {\r\n /* @ngInject */\r\n css: [\"LoadService\", function (LoadService) {\r\n return LoadService.load('css', 'cssCart', $(document.body).data('css-cart'));\r\n }],\r\n /* @ngInject */\r\n module: [\"LoadService\", function (LoadService) {\r\n return LoadService.load('js', 'app.cart', $(document.body).data('js-cart'));\r\n }]\r\n },\r\n ngRoute: true\r\n });\r\n } else {\r\n when(route, {\r\n templateUrl: function () {\r\n return '/Template/Cart/' + route.Name.split('Cart')[1];\r\n },\r\n name: route.Name,\r\n cart: true,\r\n resolve: {\r\n /* @ngInject */\r\n authorize: [\"$location\", \"authService\", \"RoutesService\", function ($location, authService, RoutesService) {\r\n if ($location.path() === '/' + RoutesService.getUrlByName('CartIdentification') || $location.path() === '/' + RoutesService.getUrlByName('CartOutdated')) return true;\r\n return authService.authorize(true);\r\n }],\r\n /* @ngInject */\r\n css: [\"LoadService\", function (LoadService) {\r\n return LoadService.load('css', 'cssCart', $(document.body).data('css-cart'));\r\n }],\r\n /* @ngInject */\r\n module: [\"LoadService\", function (LoadService) {\r\n return LoadService.load('js', 'app.cart', $(document.body).data('js-cart'));\r\n }]\r\n },\r\n authorize: true,\r\n ngRoute: true\r\n });\r\n }\r\n } else {\r\n when(route, {\r\n templateUrl: function () {\r\n return routingService.getLocation();\r\n },\r\n name: route.Name\r\n });\r\n }\r\n });\r\n\r\n if (window.isBot || window.isCache) {\r\n $locationProvider.html5Mode({\r\n enabled: true,\r\n requireBase: true,\r\n rewriteLinks: false\r\n });\r\n // désactivation du routing pour Google\r\n return;\r\n }\r\n\r\n $routeProvider.otherwise({\r\n templateUrl: function () {\r\n return routingService.getLocation();\r\n }\r\n });\r\n\r\n $routeProvider.when('/404', {\r\n templateUrl: '/Template/Error/Error',\r\n name: '404'\r\n });\r\n\r\n $locationProvider.html5Mode({\r\n enabled: true\r\n });\r\n\r\n }])\r\n\r\n /* @ngInject */\r\n .factory('RoutesService', function () {\r\n var routesService = {};\r\n return {\r\n set: function (value) {\r\n if (!_.isEmpty(routesService)) return;\r\n routesService = value;\r\n return routesService;\r\n },\r\n get: function () {\r\n return routesService;\r\n },\r\n getUrlByName: function (name) {\r\n return routesService[name] && routesService[name].url ? routesService[name].url : '';\r\n }\r\n };\r\n })\r\n\r\n /* @ngInject */\r\n .factory('RoutingService', [\"$timeout\", \"$location\", \"$window\", function ($timeout, $location, $window) {\r\n var _this = this;\r\n this.routing = {};\r\n this.scrollCache = {};\r\n\r\n this.set = function (value) {\r\n _this.routing = value;\r\n };\r\n this.get = function () {\r\n return _this.routing;\r\n };\r\n this.getLocation = function () {\r\n return $location.path() + '?t';\r\n };\r\n this.getRoute = function (url) {\r\n return '/' + url.replace(/\\:(\\S+?)\\}/g, '}').replace(/\\{(\\S+?)\\}/g, ':$1');\r\n };\r\n this.getPath = function (url) {\r\n var path = url || $window.location.pathname;\r\n path = path.indexOf('http') !== -1 && $window.location && $window.location.origin ? path.substr($window.location.origin.length).split('?')[0] : path;\r\n // Pour les articles, on récupère l'url du regroupement\r\n if (path.indexOf('-p-') !== -1 && path.indexOf('-p-') > path.indexOf('-c-')) {\r\n var arr = path.split('-p-');\r\n path = arr[0] + '-p-' + arr[1].split('/')[0];\r\n }\r\n return path;\r\n };\r\n this.windowScroll = function (getScrollPos) {\r\n var top = !getScrollPos ? 0 : _this.scrollCache[_this.getPath()] || 0;\r\n\r\n $('html, body').scrollTop(top);\r\n $timeout(function () {\r\n $('html, body').scrollTop(top);\r\n }, 400);\r\n };\r\n\r\n return {\r\n set: this.set,\r\n get: this.get,\r\n getLocation: this.getLocation,\r\n getRoute: this.getRoute,\r\n getPath: this.getPath,\r\n windowScroll: this.windowScroll,\r\n scrollCache: this.scrollCache\r\n };\r\n }])\r\n\r\n /* @ngInject */\r\n .service('authService', [\"AppService\", function (AppService) {\r\n this.authorize = function (isCart) {\r\n return AppService.getParams()\r\n .then(function (params) {\r\n if (params.IsLogged && (!isCart || (isCart && params.HasCart))) return true;\r\n throw new Error(isCart && !params.HasCart ? 'noCart' : '');\r\n });\r\n };\r\n }])\r\n\r\n /* @ngInject */\r\n .factory('httpRequestInterceptor', [\"$q\", \"$location\", \"RoutingService\", \"$rootScope\", function ($q, $location, RoutingService, $rootScope) {\r\n return {\r\n 'response': function (res) {\r\n if (res.status === 210) {\r\n $rootScope.$broadcast('cartUpdateWithRefresh');\r\n }\r\n return res;\r\n },\r\n 'responseError': function (rejection) {\r\n if (rejection.status === 404) {\r\n RoutingService.set({\r\n to: undefined,\r\n from: undefined\r\n });\r\n $location.path('/404/');\r\n } else if (rejection.status === 409) {\r\n $rootScope.$broadcast('cartUpdateWithRefresh');\r\n }\r\n return $q.reject(rejection);\r\n }\r\n };\r\n }])\r\n\r\n /* @ngInject */\r\n .run([\"RoutesService\", \"RoutingService\", function (RoutesService, RoutingService) {\r\n routes.Cart.step = 1;\r\n routes.CartIdentification.step = 2;\r\n routes.CartShipping.step = 3;\r\n routes.CartPayment.step = 4;\r\n routes.CartValidation.step = 5;\r\n routes.CartOnePageCheckout.step = 2;\r\n RoutesService.set(routes);\r\n\r\n routingService = RoutingService;\r\n }]);\r\n\r\n})();\r\n","(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('service.account', [])\r\n\r\n /* @ngInject */\r\n .factory('AccountService', [\"$rootScope\", \"AppService\", \"HttpService\", \"RoutesService\", function ($rootScope, AppService, HttpService, RoutesService) {\r\n var _this = this;\r\n this.getLinks = function () {\r\n var _routes = RoutesService.get(),\r\n links = {};\r\n\r\n _.each(_routes, function (route, key) {\r\n if (key.indexOf('Account') === 0) {\r\n links[key] = '/' + route.url;\r\n }\r\n });\r\n\r\n return links;\r\n };\r\n this.initAccount = function (ctrl) {\r\n ctrl.links = _this.getLinks();\r\n ctrl.logout = function () {\r\n $rootScope.$broadcast('logout');\r\n };\r\n _this.setManagement(ctrl);\r\n AppService.getParams()\r\n .then(function (data) {\r\n ctrl.userIcon = 'glyphicon-user';\r\n ctrl.pageLoaded = true;\r\n })\r\n .catch(function (error) {\r\n console.error(error);\r\n });\r\n $rootScope.$broadcast('showPageLoader', false);\r\n };\r\n this.setManagement = function (ctrl) {\r\n AppService.getParams()\r\n .then(function (params) {\r\n ctrl.Account = _.cloneDeep(params.Account);\r\n ctrl.Account.hasServices = params.Account.IsManagementGiftCards || params.Account.IsManagementCredits || params.Account.IsManagementLoyaltyPoints;\r\n ctrl.Account.hasOrders = params.Account.IsManagementOrderTracking || params.Account.IsManagementInvoicesAndCreditsTracking || params.Account.IsManagementWebCartTracking || params.Account.IsManagementReturns || params.Account.IsManagementComplaint || params.Account.IsManagementNumericProducts;\r\n })\r\n .catch(function (error) {\r\n console.error(error);\r\n });\r\n };\r\n this.getOrders = function () {\r\n return HttpService.get({\r\n url: '/Account/GetOrders',\r\n cache: false\r\n })\r\n .then(function (response) {\r\n return response.results;\r\n })\r\n .catch(function (error) {\r\n console.error(error);\r\n });\r\n };\r\n this.getOrder = function (id) {\r\n return HttpService.post({\r\n url: '/Account/GetOrder',\r\n data: id\r\n })\r\n .then(function (response) {\r\n return response.results;\r\n })\r\n .catch(function (error) {\r\n console.error(error);\r\n });\r\n };\r\n this.getEligibleReturnFolders = function () {\r\n return HttpService.get({\r\n url: '/AccountReturns/EligibleFolders',\r\n cache: false\r\n })\r\n .then(function (response) {\r\n return response.results;\r\n })\r\n .catch(function (error) {\r\n console.error(error);\r\n });\r\n };\r\n this.getReturnFolders = function () {\r\n $rootScope.$broadcast('showPageLoader', true);\r\n return HttpService.get({\r\n url: '/AccountReturns/ReturnFolders',\r\n cache: false\r\n })\r\n .then(function (response) {\r\n $rootScope.$broadcast('showPageLoader', false);\r\n return response.results;\r\n })\r\n .catch(function (error) {\r\n console.error(error);\r\n });\r\n };\r\n this.getShippingAddresses = function () {\r\n $rootScope.$broadcast('showPageLoader', true);\r\n return HttpService.get({\r\n url: '/AccountGetUserShippingAddresses',\r\n cache: false\r\n })\r\n .then(function (response) {\r\n $rootScope.$broadcast('showPageLoader', false);\r\n return response.results;\r\n })\r\n .catch(function (error) {\r\n console.error(error);\r\n });\r\n };\r\n this.getInvoiceToken = function (idFolder) {\r\n return HttpService.post({\r\n url: '/Facture/Token/',\r\n data: idFolder\r\n })\r\n .then(function (response) {\r\n return response;\r\n })\r\n .catch(function (error) {\r\n console.error(error);\r\n });\r\n };\r\n return {\r\n getLinks: this.getLinks,\r\n initAccount: this.initAccount,\r\n setManagement: this.setManagement,\r\n getOrders: this.getOrders,\r\n getOrder: this.getOrder,\r\n getEligibleReturnFolders: this.getEligibleReturnFolders,\r\n getReturnFolders: this.getReturnFolders,\r\n getShippingAddresses: this.getShippingAddresses,\r\n getInvoiceToken: this.getInvoiceToken\r\n };\r\n }]);\r\n\r\n})();\r\n","(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('service.app', [])\r\n\r\n /* @ngInject */\r\n .factory('AppService', [\"$http\", \"$rootScope\", \"$q\", \"$timeout\", \"HttpService\", \"toastr\", function ($http, $rootScope, $q, $timeout, HttpService, toastr) {\r\n var _this = this,\r\n appPromise,\r\n cartRequests = [],\r\n translate;\r\n this.getParams = function (refresh) {\r\n refresh = refresh || false;\r\n if (refresh || angular.isUndefined(appPromise)) {\r\n appPromise = $http({\r\n method: 'GET',\r\n url: '/App' + (refresh ? '?' + (new Date().getTime()) : ''), // Fix IE11 cache\r\n headers: {\r\n 'Content-type': 'application/json',\r\n 'X-Requested-With': 'jsonHttpRequest'\r\n }\r\n })\r\n .then(function (response) {\r\n var data = _.cloneDeep(response.data.VisitorContext);\r\n data.Visitor.isPro = false;\r\n if (response.data.WebsiteVisitorContext && response.data.WebsiteVisitorContext.VisitorIsPro) {\r\n data.Visitor.isPro = response.data.WebsiteVisitorContext.VisitorIsPro;\r\n }\r\n return data;\r\n })\r\n .catch(function (error) {\r\n throw error;\r\n });\r\n }\r\n\r\n return appPromise;\r\n };\r\n this.updateParams = function (data, noevent) {\r\n appPromise = $q.resolve(data);\r\n if (noevent) return;\r\n $rootScope.$broadcast('cartUpdate');\r\n };\r\n this.getTranslate = function () {\r\n if (typeof translate === 'undefined') {\r\n translate = $http({\r\n method: 'GET',\r\n url: '/Template/Translate/Translate',\r\n headers: {\r\n 'Content-type': 'application/json',\r\n 'X-Requested-With': 'jsonHttpRequest'\r\n }\r\n })\r\n .then(function (response) {\r\n return response.data;\r\n })\r\n .catch(function (error) {\r\n throw error;\r\n });\r\n }\r\n return translate;\r\n };\r\n this.addToCart = function (products) {\r\n var productsToCart = {\r\n Products: []\r\n };\r\n\r\n _.each(products, function (product) {\r\n productsToCart.Products.push({\r\n IDLine: product.idLine || 0,\r\n IDProduct: product.idProduct || 0,\r\n Reference: product.Reference || '',\r\n Quantity: product.quantity,\r\n Comment: product.Comment || '',\r\n Elements: product.Elements || null,\r\n Customization: product.Customization || null\r\n });\r\n });\r\n var tmpId = new Date().getTime();\r\n cartRequests.push({ id: tmpId });\r\n return $http({\r\n method: 'POST',\r\n url: '/Product/AddToCart',\r\n headers: {\r\n 'Content-type': 'application/json',\r\n 'X-Requested-With': 'jsonHttpRequest'\r\n },\r\n data: productsToCart\r\n })\r\n .then(function (response) {\r\n _.pullAllBy(cartRequests, [{ id: tmpId }], 'id');\r\n return response.data;\r\n })\r\n .catch(function (error) {\r\n throw error;\r\n });\r\n };\r\n this.deleteLine = function (idLine, designation, img, message, fromCart) {\r\n $rootScope.$broadcast('showPageLoader', true);\r\n HttpService.get({\r\n url: '/RemoveCartLine/' + idLine,\r\n cache: false\r\n })\r\n .then(function (response) {\r\n if (response.status === 'OK') {\r\n _this.updateParams(response.results);\r\n toastr.success(designation, message, {\r\n allowHtml: true,\r\n extraData: {\r\n template: 'toast_addtocart.tpl',\r\n data: {\r\n img: img\r\n }\r\n }\r\n });\r\n if (fromCart && !response.results.Cart.Products.length) {\r\n $rootScope.$broadcast('showPageLoader', true);\r\n $timeout(function () {\r\n $rootScope.$broadcast('showPageLoader', true);\r\n }, 450);\r\n window.location = $rootScope.backToStore;\r\n }\r\n } else {\r\n _this.getTranslate()\r\n .then(function (messages) {\r\n toastr.warning(messages.errors.TryLater, messages.errors.ErrorHasOccurred, {\r\n allowHtml: true,\r\n extraData: {\r\n template: 'toast_message.tpl'\r\n }\r\n });\r\n })\r\n .catch(function (error) {\r\n console.error(error);\r\n });\r\n }\r\n $rootScope.$broadcast('showPageLoader', false);\r\n })\r\n .catch(function (error) {\r\n console.error(error);\r\n });\r\n };\r\n this.itemQuantityInCart = function (id, hash) {\r\n hash = hash || '';\r\n return this.getParams()\r\n .then(function (data) {\r\n if (!data.HasCart) return 0;\r\n var qty = 0;\r\n _.each(data.Cart.Products, function (product) {\r\n if (product.IDProduct === id) {\r\n if (hash !== '') {\r\n if (product.Comment === hash) {\r\n qty = product.Quantity;\r\n return false;\r\n }\r\n } else {\r\n qty = product.Quantity;\r\n return false;\r\n }\r\n }\r\n });\r\n return qty;\r\n })\r\n .catch(function (error) {\r\n console.error(error);\r\n });\r\n };\r\n this.checkAvailability = function () {\r\n return HttpService.post({\r\n url: '/Cart/checkAvailability'\r\n })\r\n .then(function (response) {\r\n return response;\r\n })\r\n .catch(function (error) {\r\n console.error(error);\r\n });\r\n };\r\n this.getProductPrice = function (priceObj, qty) {\r\n if (!priceObj.prices) {\r\n var prices = [{\r\n qty: 1,\r\n range: [0],\r\n HasDiscount: priceObj.HasDiscount,\r\n Discount: priceObj.Discount,\r\n HTDiscountedPrice: priceObj.HTDiscountedPrice,\r\n TTCDiscountedPrice: priceObj.TTCDiscountedPrice,\r\n HTPrice: priceObj.HTPrice,\r\n TTCPrice: priceObj.TTCPrice\r\n }];\r\n if (priceObj.DegressivePrice) {\r\n var i = 0;\r\n _.each(priceObj.DegressivePrice, function (item, key) {\r\n prices[i].range.push(Number(key));\r\n\r\n prices.push({\r\n qty: Number(key),\r\n range: [Number(key)],\r\n HasDiscount: item.HasDiscount,\r\n Discount: item.Discount,\r\n HTDiscountedPrice: item.HTDiscountedPrice,\r\n TTCDiscountedPrice: item.TTCDiscountedPrice,\r\n HTPrice: item.HTPrice,\r\n TTCPrice: item.TTCPrice\r\n });\r\n\r\n i++;\r\n });\r\n }\r\n priceObj.prices = prices;\r\n }\r\n var current = {};\r\n _.each(priceObj.prices, function (price) {\r\n if (_.inRange(qty, price.range[0], price.range[1] || 10000)) {\r\n current = price;\r\n return false;\r\n }\r\n });\r\n return current;\r\n };\r\n this.updateStore = function (visitorContext) {\r\n appPromise.$$state.value.Store = visitorContext.Store;\r\n appPromise.$$state.value.Visitor.Store = visitorContext.Visitor.Store;\r\n };\r\n this.updateKey = function (key, object) {\r\n appPromise.$$state.value[key] = object;\r\n };\r\n return {\r\n getParams: this.getParams,\r\n updateParams: this.updateParams,\r\n getTranslate: this.getTranslate,\r\n addToCart: this.addToCart,\r\n deleteLine: this.deleteLine,\r\n itemQuantityInCart: this.itemQuantityInCart,\r\n checkAvailability: this.checkAvailability,\r\n getProductPrice: this.getProductPrice,\r\n cartRequests: cartRequests,\r\n updateStore: this.updateStore,\r\n updateKey: this.updateKey\r\n };\r\n }]);\r\n})();\r\n","(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('service.cdn', [])\r\n\r\n /* @ngInject */\r\n .factory('CdnService', [\"AppService\", function (AppService) {\r\n this.get = function (id, size, designation, extension, quality, absolute) {\r\n if (size === undefined) {\r\n size = '1200x1200';\r\n }\r\n if (designation === undefined) {\r\n designation = 'Image';\r\n }\r\n if (extension === undefined) {\r\n extension = 'jpg';\r\n }\r\n if (quality === undefined) {\r\n quality = 80;\r\n }\r\n if (absolute === undefined) {\r\n absolute = false;\r\n }\r\n\r\n return AppService.getParams()\r\n .then(function (params) {\r\n var split1 = params.Localization.UrlImages.substr(0, params.Localization.UrlImages.indexOf('.'));\r\n var split2 = params.Localization.UrlImages.substr(params.Localization.UrlImages.indexOf('.') + 1);\r\n var url = split1 === '' ? split2 : (split1 + id % 5 + '.' + split2);\r\n\r\n if (absolute && url.substr(0, 6) === '/Image') {\r\n url = params.Localization.URLSite.substr(0, params.Localization.URLSite.length - 1) + url;\r\n }\r\n\r\n if (quality <= 0) {\r\n quality = 1;\r\n }\r\n\r\n if (quality > 100) {\r\n quality = 100;\r\n }\r\n\r\n return quality === 80 ? url + '/' + id + '/' + size + '/' + _.kebabCase(_.deburr(designation)) + '.' + extension : url + '/' + id + '/' + size + '/' + _.kebabCase(_.deburr(designation)) + '.' + extension + '?quality=' + quality;\r\n })\r\n .catch(function (error) {\r\n throw error;\r\n });\r\n };\r\n\r\n return {\r\n get: this.get\r\n };\r\n }]);\r\n})();\r\n","(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('service.date', [])\r\n\r\n /* @ngInject */\r\n .factory('DateService', function () {\r\n return {\r\n stringToDate: function (value) {\r\n return new Date(value.replace('T', ' ').replace(/-/g, '/'));\r\n },\r\n today: function () {\r\n var now = new Date();\r\n return new Date(now.getFullYear(), now.getMonth(), now.getDate());\r\n },\r\n tomorrow: function () {\r\n var now = new Date();\r\n return new Date(now.getFullYear(), now.getMonth(), now.getDate() + 1);\r\n },\r\n nextYear: function () {\r\n var now = new Date();\r\n return new Date(now.getFullYear() + 1, now.getMonth(), now.getDate());\r\n },\r\n dateDay: function (date) {\r\n return new Date(date.getFullYear(), date.getMonth(), date.getDate());\r\n }\r\n };\r\n });\r\n\r\n})();\r\n","(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('service.gmap', [])\r\n\r\n /* @ngInject */\r\n .factory('GMaps', [\"$window\", \"$q\", \"$cacheFactory\", \"AppService\", function ($window, $q, $cacheFactory, AppService) {\r\n var _this = this,\r\n addressCache = $cacheFactory('addressCache'),\r\n gpsCache = $cacheFactory('gpsCache'),\r\n getDefer = $q.defer(),\r\n getClustererDefer = $q.defer();\r\n this.get = function () {\r\n if (typeof google === 'undefined' || typeof google.maps === 'undefined') {\r\n AppService.getParams()\r\n .then(function (params) {\r\n var url = '';\r\n if (params.Localization.GMAP.GMAPOAuthClient) {\r\n url = 'https://maps.googleapis.com/maps/api/js?client=' + params.Localization.GMAP.GMAPOAuthClient;\r\n if (params.Localization.GMAP.GMAPOAuthChannel) {\r\n url += '&channel=' + params.Localization.GMAP.GMAPOAuthChannel;\r\n }\r\n url += '&libraries=geometry,places&callback=';\r\n }\r\n else {\r\n url = 'https://maps.googleapis.com/maps/api/js?key=' + params.Localization.GMAP.GMAPKey + '&libraries=geometry,places&callback=';\r\n }\r\n $window.gMapsInit = function () {\r\n getDefer.resolve();\r\n };\r\n var script = document.createElement('script');\r\n script.src = url + 'gMapsInit';\r\n document.body.appendChild(script);\r\n })\r\n .catch(function (error) {\r\n console.error(error);\r\n });\r\n }\r\n return getDefer.promise;\r\n };\r\n this.getClusterer = function () {\r\n if (typeof MarkerClusterer === 'undefined') {\r\n $.ajax({\r\n url: '/js/markerclusterer.min.js',\r\n dataType: 'script',\r\n cache: true,\r\n success: function () {\r\n getClustererDefer.resolve();\r\n }\r\n });\r\n }\r\n return getClustererDefer.promise;\r\n };\r\n this.getGeoCode = function (address) {\r\n var defer = $q.defer();\r\n _this.get()\r\n .then(function () {\r\n var cache = addressCache.get(address);\r\n if (cache) {\r\n defer.resolve(cache);\r\n } else {\r\n var geocoder = new google.maps.Geocoder();\r\n geocoder.geocode( { 'address': address}, function (results, status) {\r\n if (status === 'OK') {\r\n var country = _.filter(results[0].address_components, function (item) {\r\n return item.types[0] === 'country';\r\n });\r\n country = country[0].long_name;\r\n var result = {\r\n Latitude: results[0].geometry.location.lat(),\r\n Longitude: results[0].geometry.location.lng(),\r\n Country: country\r\n };\r\n addressCache.put(address, result);\r\n defer.resolve(result);\r\n } else {\r\n defer.reject({\r\n status: status\r\n });\r\n }\r\n });\r\n }\r\n })\r\n .catch(function (error) {\r\n return error;\r\n });\r\n return defer.promise;\r\n };\r\n this.getGeoCodeByGps = function (gps) {\r\n var defer = $q.defer(),\r\n strGps = angular.toJson(gps);\r\n _this.get()\r\n .then(function () {\r\n var cache = gpsCache.get(strGps);\r\n if (cache) {\r\n defer.resolve(cache);\r\n } else {\r\n var geocoder = new google.maps.Geocoder();\r\n geocoder.geocode( { 'location': {lat: gps.lat, lng: gps.lng}}, function (results, status) {\r\n if (status === 'OK') {\r\n var country = _.filter(results[0].address_components, function (item) {\r\n return item.types[0] === 'country';\r\n });\r\n var result = {\r\n gps: {\r\n Latitude: results[0].geometry.location.lat(),\r\n Longitude: results[0].geometry.location.lng(),\r\n Country: country[0].long_name,\r\n CountryCode: country[0].short_name\r\n },\r\n address: results[0].formatted_address\r\n };\r\n gpsCache.put(strGps, result);\r\n defer.resolve(result);\r\n } else {\r\n defer.reject('error');\r\n }\r\n });\r\n }\r\n })\r\n .catch(function (error) {\r\n console.error(error);\r\n });\r\n return defer.promise;\r\n };\r\n return {\r\n get: this.get,\r\n getClusterer: this.getClusterer,\r\n getGeoCode: this.getGeoCode,\r\n getGeoCodeByGps: this.getGeoCodeByGps\r\n };\r\n }]);\r\n\r\n})();\r\n","(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('service.http', [])\r\n\r\n /* @ngInject */\r\n .factory('HttpService', [\"$http\", function ($http) {\r\n return {\r\n get: function (object) {\r\n return $http({\r\n method: 'GET',\r\n url: object.url,\r\n cache: object.cache,\r\n headers: {\r\n 'Content-type': 'application/json',\r\n 'X-Requested-With': 'jsonHttpRequest'\r\n }\r\n })\r\n .then(function (response) {\r\n return response.data;\r\n })\r\n .catch(function (error) {\r\n throw error;\r\n });\r\n },\r\n post: function (object) {\r\n return $http({\r\n method: 'POST',\r\n data: object.data,\r\n url: object.url,\r\n headers: {\r\n 'Content-type': 'application/json',\r\n 'X-Requested-With': 'jsonHttpRequest'\r\n }\r\n })\r\n .then(function (response) {\r\n return response.data;\r\n })\r\n .catch(function (error) {\r\n throw error;\r\n });\r\n }\r\n };\r\n }]);\r\n\r\n})();\r\n","(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('service.load', [])\r\n\r\n /* @ngInject */\r\n .factory('LoadService', [\"$window\", \"$interval\", \"$injector\", \"$q\", function ($window, $interval, $injector, $q) {\r\n var files = [];\r\n return {\r\n load: function (type, name, path) {\r\n var deferred = $q.defer(),\r\n element,\r\n loaded;\r\n\r\n if (files.indexOf(name) !== -1) {\r\n deferred.resolve();\r\n } else {\r\n switch (type) {\r\n case 'css':\r\n element = $window.document.createElement('link');\r\n element.type = 'text/css';\r\n element.rel = 'stylesheet';\r\n element.href = path;\r\n break;\r\n case 'js':\r\n element = $window.document.createElement('script');\r\n element.src = path;\r\n break;\r\n }\r\n /* eslint-disable */\r\n element.onload = element['onreadystatechange'] = function () {\r\n if ((element['readyState'] && !/^c|loade/.test(element['readyState'])) || loaded) return;\r\n element.onload = element['onreadystatechange'] = null;\r\n loaded = true;\r\n files.push(name);\r\n if (type === 'js') {\r\n $injector.loadNewModules([name]);\r\n }\r\n deferred.resolve();\r\n };\r\n /* eslint-enable */\r\n element.onerror = function () {\r\n deferred.reject(new Error('Unable to load ' + path));\r\n };\r\n\r\n var insertBeforeElem = $window.document.getElementsByTagName('head')[0].lastChild;\r\n insertBeforeElem.parentNode.insertBefore(element, insertBeforeElem.nextSibling);\r\n\r\n /*\r\n The event load or readystatechange doesn't fire in:\r\n - PhantomJS 1.9 (headless webkit browser)\r\n - iOS < 6 (default mobile browser)\r\n - Android < 4.4 (default mobile browser)\r\n - Safari < 6 (desktop browser)\r\n */\r\n if (type === 'css') {\r\n var useCssLoadPatch = false,\r\n ua = $window.navigator.userAgent.toLowerCase();\r\n\r\n if (ua.indexOf('phantomjs/1.9') > -1) {\r\n // PhantomJS ~1.9\r\n useCssLoadPatch = true;\r\n } else if (/iP(hone|od|ad)/.test($window.navigator.platform)) {\r\n // iOS < 6\r\n var v = $window.navigator.appVersion.match(/OS (\\d+)_(\\d+)_?(\\d+)?/);\r\n var iOSVersion = parseFloat([parseInt(v[1], 10), parseInt(v[2], 10), parseInt(v[3] || 0, 10)].join('.'));\r\n useCssLoadPatch = iOSVersion < 6;\r\n } else if (ua.indexOf('android') > -1) {\r\n // Android < 4.4\r\n var androidVersion = parseFloat(ua.slice(ua.indexOf('android') + 8));\r\n useCssLoadPatch = androidVersion < 4.4;\r\n } else if (ua.indexOf('safari') > -1) {\r\n // Safari < 6\r\n var versionMatch = ua.match(/version\\/([\\.\\d]+)/i);\r\n useCssLoadPatch = (versionMatch && versionMatch[1] && parseFloat(versionMatch[1]) < 6);\r\n }\r\n\r\n if (useCssLoadPatch) {\r\n var tries = 1000; // * 20 = 20000 miliseconds\r\n var interval = $interval(function () {\r\n try {\r\n element.sheet.cssRules;\r\n $interval.cancel(interval);\r\n element.onload();\r\n } catch (e) {\r\n if (--tries <= 0) {\r\n element.onerror();\r\n }\r\n }\r\n }, 20);\r\n }\r\n }\r\n }\r\n return deferred.promise;\r\n }\r\n };\r\n }]);\r\n\r\n})();\r\n","/*!\r\n * Angular responsive Module\r\n * Version 1.0.0\r\n * Uses Bootstrap 3 breakpoint sizes with HTML CSS font-family value\r\n * Exposes service \"device\" which returns true if breakpoint(s) matches.\r\n *\r\n * Modified from © Jack Tarantino .\r\n **/\r\n\r\n(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('service.responsive', [])\r\n\r\n /* @ngInject */\r\n .service('DeviceService', [\"WindowEventsService\", \"$rootScope\", \"$q\", function (WindowEventsService, $rootScope, $q) {\r\n\r\n this.isTouch = function () {\r\n return touchevents();\r\n };\r\n\r\n this.isIE = function () {\r\n var _el = document.createElement('DIV'),\r\n d = {};\r\n\r\n d.isOpera = ('opera' in window); // 12-\r\n d.isIE = (('all' in document) && ('attachEvent' in _el) && !d.isOpera); // IE10-\r\n d.isIE9 = d.isIE && ('performance' in window) && (document.documentMode === 9);\r\n d.isIE10 = d.isIE && ('performance' in window) && (document.documentMode === 10);\r\n d.isIE11 = ('msRequestFullscreen' in _el) && (document.documentMode >= 11); // IE11+\r\n d.isIEEdge = (navigator.userAgent.match(/Edge\\/12\\./)); // IE Edge 12\r\n\r\n d.isIE = d.isIE11 ? true : d.isIE;\r\n d.isIE = d.isIEEdge ? true : d.isIE;\r\n\r\n d.version = null;\r\n d.version = d.isIE ? 12 : d.version;\r\n d.version = d.isIE11 ? 11 : d.version;\r\n d.version = d.isIE10 ? 10 : d.version;\r\n d.version = d.isIE9 ? 9 : d.version;\r\n\r\n return d;\r\n };\r\n\r\n var that = this;\r\n\r\n // Executes Angular $apply in a safe way\r\n var safeApply = function (fn, scope) {\r\n scope = scope || $rootScope;\r\n var phase = scope.$root.$$phase;\r\n if (phase === '$apply' || phase === '$digest') {\r\n if (fn && (angular.isFunction(fn))) {\r\n fn();\r\n }\r\n } else {\r\n scope.$apply(fn);\r\n }\r\n };\r\n\r\n // Validates that we're getting a string or array.\r\n // When string: converts string(comma seperated) to an array.\r\n var assureList = function (list) {\r\n if (!angular.isString(list) && !angular.isArray(list)) {\r\n throw new Error('device requires array or comma-separated list');\r\n }\r\n\r\n return angular.isString(list) ? list.split(/\\s*,\\s*/) : list;\r\n };\r\n\r\n var getCurrentMatch = function () {\r\n if (!window.getComputedStyle) return document.documentElement.currentStyle.fontFamily.replace(/['\",]/g, '');\r\n return window.getComputedStyle(document.documentElement, null).getPropertyValue('font-family').replace(/['\",]/g, '');\r\n };\r\n\r\n // Return the actual size (it's string name defined in the rules)\r\n this.get = getCurrentMatch;\r\n\r\n this.is = function (list) {\r\n list = assureList(list);\r\n return list.indexOf(getCurrentMatch()) !== -1;\r\n };\r\n\r\n this.getSize = function (scope, callback) {\r\n\r\n WindowEventsService.listen(true, 'resize', listenerFunc, 500);\r\n\r\n if (scope) {\r\n scope.$on('$destroy', function () {\r\n WindowEventsService.listen(false, 'resize', listenerFunc);\r\n });\r\n }\r\n\r\n return that.get();\r\n\r\n function listenerFunc() {\r\n safeApply(callback(that.get()), scope);\r\n }\r\n };\r\n\r\n // Executes the callback function ONLY when the match differs from previous match.\r\n // Returns the current match truthiness.\r\n // The 'scope' parameter is required for cleanup reasons (destroy event).\r\n this.onChange = function (scope, list, callback) {\r\n var currentMatch = getCurrentMatch();\r\n list = assureList(list);\r\n if (!scope) {\r\n throw new Error('scope has to be applied for cleanup reasons. (destroy)');\r\n }\r\n\r\n WindowEventsService.listen(true, 'resize', listenerFunc, 500);\r\n\r\n scope.$on('$destroy', function () {\r\n WindowEventsService.listen(false, 'resize', listenerFunc);\r\n });\r\n\r\n return that.is(list);\r\n\r\n function listenerFunc() {\r\n var previousMatch = currentMatch;\r\n currentMatch = getCurrentMatch();\r\n\r\n var wasPreviousMatch = list.indexOf(previousMatch) !== -1;\r\n var doesCurrentMatch = list.indexOf(currentMatch) !== -1;\r\n if (wasPreviousMatch !== doesCurrentMatch) {\r\n safeApply(callback(doesCurrentMatch), scope);\r\n }\r\n }\r\n };\r\n\r\n // WebP\r\n\r\n this.isWebp = function () {\r\n var defer = $q.defer();\r\n checkWebp('lossy', function (result) {\r\n defer.resolve(result !== false);\r\n });\r\n\r\n return defer.promise;\r\n };\r\n\r\n function checkWebp(feature, callback) {\r\n var testImg = {\r\n lossy: 'UklGRiIAAABXRUJQVlA4IBYAAAAwAQCdASoBAAEADsD+JaQAA3AAAAAA'/*,\r\n lossless: 'UklGRhoAAABXRUJQVlA4TA0AAAAvAAAAEAcQERGIiP4HAA==',\r\n alpha: 'UklGRkoAAABXRUJQVlA4WAoAAAAQAAAAAAAAAAAAQUxQSAwAAAARBxAR/Q9ERP8DAABWUDggGAAAABQBAJ0BKgEAAQAAAP4AAA3AAP7mtQAAAA==',\r\n animation: 'UklGRlIAAABXRUJQVlA4WAoAAAASAAAAAAAAAAAAQU5JTQYAAAD/////AABBTk1GJgAAAAAAAAAAAAAAAAAAAGQAAABWUDhMDQAAAC8AAAAQBxAREYiI/gcA'*/\r\n };\r\n var img = new Image();\r\n img.onload = function () {\r\n var result = (img.width > 0) && (img.height > 0);\r\n callback(result);\r\n };\r\n img.onerror = function () {\r\n callback(false);\r\n };\r\n img.src = 'data:image/webp;base64,' + testImg[feature];\r\n }\r\n\r\n function touchevents() {\r\n var bool;\r\n if (('ontouchstart' in window) || window.DocumentTouch && document instanceof window.DocumentTouch) {\r\n bool = true;\r\n } else {\r\n var prefixes = ' -webkit- -moz- -o- -ms- '.split(' ');\r\n var query = ['@media (', prefixes.join('touch-enabled),('), 'heartz', ')', '{#modernizr{top:9px;position:absolute}}'].join('');\r\n testStyles(query, function (node) {\r\n bool = node.offsetTop === 9;\r\n });\r\n }\r\n return bool;\r\n }\r\n\r\n function testStyles(rule, callback) {\r\n var mod = 'modernizr',\r\n style,\r\n ret,\r\n docOverflow,\r\n docElement = document.documentElement,\r\n div = document.createElement('div'),\r\n body = getBody();\r\n\r\n style = document.createElement('style');\r\n style.type = 'text/css';\r\n style.id = 's' + mod;\r\n\r\n (!body.fake ? div : body).appendChild(style);\r\n body.appendChild(div);\r\n\r\n if (style.styleSheet) {\r\n style.styleSheet.cssText = rule;\r\n } else {\r\n style.appendChild(document.createTextNode(rule));\r\n }\r\n div.id = mod;\r\n\r\n if (body.fake) {\r\n body.style.background = '';\r\n body.style.overflow = 'hidden';\r\n docOverflow = docElement.style.overflow;\r\n docElement.style.overflow = 'hidden';\r\n docElement.appendChild(body);\r\n }\r\n\r\n ret = callback(div, rule);\r\n\r\n if (body.fake) {\r\n body.parentNode.removeChild(body);\r\n docElement.style.overflow = docOverflow;\r\n // eslint-disable-next-line\r\n docElement.offsetHeight;\r\n } else {\r\n div.parentNode.removeChild(div);\r\n }\r\n\r\n return !!ret;\r\n }\r\n\r\n function getBody() {\r\n var body = document.body;\r\n if (!body) {\r\n body = document.createElement('body');\r\n body.fake = true;\r\n }\r\n return body;\r\n }\r\n }]);\r\n\r\n})();\r\n","/*\r\n*\r\n* Version : 1.0.0\r\n* 04/09/2016 - 10h18\r\n*\r\n*! Octave Web7 !*/\r\n\r\n(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('service.window-events', [])\r\n\r\n /* @ngInject */\r\n .service('WindowEventsService', [\"$window\", function ($window) {\r\n\r\n var api = {\r\n throttleTime: 200,\r\n listen: listen,\r\n fn: {}\r\n };\r\n\r\n function listen(isOn, type, method, time) {\r\n var debounceTime = isNaN(time) ? api.throttleTime : time,\r\n listenerType = isOn ? 'addEventListener' : 'removeEventListener';\r\n if (isOn) {\r\n api.fn[method] = _.throttle(method, debounceTime);\r\n }\r\n $window[listenerType](type, api.fn[method]);\r\n if (!isOn) {\r\n delete api.fn[method];\r\n }\r\n }\r\n\r\n return api;\r\n\r\n }]);\r\n\r\n})();\r\n","(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('app.account-create', [])\r\n\r\n /* @ngInject */\r\n .controller('accountCreateCtrl', [\"$scope\", \"$rootScope\", \"$timeout\", \"$location\", \"HttpService\", \"AppService\", \"LogService\", \"Routes\", \"RoutesService\", \"DefaultLocalization\", \"ModalService\", \"GtmService\", function ($scope, $rootScope, $timeout, $location, HttpService, AppService, LogService, Routes, RoutesService, DefaultLocalization, ModalService, GtmService) {\r\n var unwatch;\r\n\r\n var ctrl = this;\r\n\r\n AppService.getParams()\r\n .then(function (params) {\r\n ctrl.Store = params.Store;\r\n });\r\n\r\n ctrl.openStoreChoice = function () {\r\n ModalService.show(\r\n '/Template/Product/ClickAndCollect/ModalStoreChoice',\r\n {\r\n isAccountCreate: true,\r\n idProduct: 0,\r\n targetCtrl: ctrl,\r\n postalCode: $scope.formData.PostCode\r\n },\r\n 'lg',\r\n 'modalStoreChoiceCtrl',\r\n null,\r\n $scope.device\r\n );\r\n };\r\n ctrl.setStore = function (data) {\r\n ModalService.close();\r\n ctrl.Store = data.VisitorContext.Visitor.Store;\r\n };\r\n\r\n $scope.formData = {\r\n RememberMe: false,\r\n errors: [],\r\n returnUrl: '/Account',\r\n Address: ' ',\r\n AddressApartment: ' ',\r\n AddressBuilding: ' ',\r\n AddressLocality: ' ',\r\n Phone: ' ',\r\n MobilePhone: ' '\r\n };\r\n\r\n $timeout(function () {\r\n $scope.formData.Address = '';\r\n $scope.formData.AddressApartment = '';\r\n $scope.formData.AddressBuilding = '';\r\n $scope.formData.AddressLocality = '';\r\n $scope.formData.Phone = '';\r\n $scope.formData.MobilePhone = '';\r\n });\r\n\r\n $scope.focus = function () {\r\n $scope.formData.errors = [];\r\n };\r\n\r\n $scope.submit = function () {\r\n $scope.formData.ConfirmEmail = $scope.formData.Email;\r\n\r\n $scope.$emit('showPageLoader', true);\r\n\r\n $scope.formData.errors = [];\r\n\r\n if (ctrl.Store) {\r\n $scope.formData.IDSign = ctrl.Store.IDCard;\r\n }\r\n\r\n HttpService.post({\r\n url: !ctrl.privateArea ? '/AccountCreateOverride' : '/' + RoutesService.getUrlByName('AccountCreatePrivate'),\r\n data: $scope.formData\r\n })\r\n .then(function (response) {\r\n if (response.status === 'OK') {\r\n AppService.getParams(true)\r\n .then(function () {\r\n $rootScope.$broadcast('logUpdate', true);\r\n if (LogService.redirect) {\r\n if (LogService.redirect.url) $location.path(LogService.redirect.url).replace();\r\n if (LogService.redirect.action) LogService.redirect.action();\r\n LogService.redirect = null;\r\n } else {\r\n $location.path('/' + Routes.filter(function (route) { return route.Name === 'AccountHome'; })[0][DefaultLocalization].URL).replace();\r\n }\r\n\r\n GtmService.push({\r\n 'event': 'signUp',\r\n 'eventAction': 'sign-up',\r\n 'eventCategory': 'compte',\r\n 'eventLabel': 'creation de compte'\r\n });\r\n })\r\n .catch(function (error) {\r\n console.error(error);\r\n });\r\n } else {\r\n AppService.getTranslate()\r\n .then(function (translate) {\r\n _.each(response.errors, function (error) {\r\n $scope.formData.errors.push(translate.errors[error.Errors[0].ErrorMessage]);\r\n });\r\n GtmService.push({\r\n 'event': 'erreurSignUp',\r\n 'eventAction': 'sign-up',\r\n 'eventCategory': 'compte',\r\n 'eventLabel': $scope.formData.errors[0]\r\n });\r\n })\r\n .catch(function (error) {\r\n console.error(error);\r\n });\r\n $scope.$emit('showPageLoader', false);\r\n\r\n }\r\n })\r\n .catch(function (error) {\r\n console.error(error);\r\n });\r\n };\r\n\r\n $scope.$on('$destroy', function () {\r\n if (typeof unwatch !== 'undefined') {\r\n unwatch();\r\n }\r\n });\r\n }])\r\n\r\n /* @ngInject */\r\n .directive('accountActivities', function () {\r\n return {\r\n restrict: 'E',\r\n bindToController: {\r\n activitiesJson: '<',\r\n formData: '='\r\n },\r\n controllerAs: 'activitiesCtrl',\r\n /* @ngInject */\r\n controller: [\"$element\", \"$timeout\", function ($element, $timeout) {\r\n var ctrl = this;\r\n\r\n ctrl.$onInit = function () {\r\n refreshSelects();\r\n };\r\n\r\n ctrl.initActivity = function (IDActivity) {\r\n $timeout(function () {\r\n ctrl.formData.IDActivity = IDActivity.toString();\r\n\r\n ctrl.activities = _.find(ctrl.activitiesJson, {\r\n Activities: [{\r\n IDActivity: Number(ctrl.formData.IDActivity)\r\n }]\r\n });\r\n\r\n ctrl.formData.IDActivityDomain = ctrl.activities.IDActivityDomain.toString();\r\n\r\n refreshSelects();\r\n });\r\n\r\n };\r\n\r\n ctrl.domainSelected = function () {\r\n if (ctrl.formData.IDActivityDomain) {\r\n ctrl.activities = _.find(ctrl.activitiesJson, { IDActivityDomain: Number(ctrl.formData.IDActivityDomain) });\r\n refreshSelects();\r\n }\r\n };\r\n\r\n function refreshSelects() {\r\n setTimeout(function () {\r\n $element.find('select').each(function (index, el) {\r\n $(el).selectpicker('refresh');\r\n });\r\n });\r\n }\r\n }]\r\n };\r\n })\r\n\r\n /* @ngInject */\r\n .directive('accountPhone', [\"$timeout\", function ($timeout) {\r\n return {\r\n restrict: 'A',\r\n require: 'ngModel',\r\n link: function (scope, elt, attrs, modelCtrl) {\r\n var std = /^[0-9().+ ]+$/;\r\n var regex = std;\r\n var spe = {\r\n 1: /^(01|02|03|04|05|09)( ?\\d){8}$/ // France métropolitaine \r\n };\r\n var stdPhoneMessage = 'Merci de saisir un numéro valide';\r\n var spePhoneMessages = {\r\n 1: 'Le numéro de téléphone renseigné
      ne correspond pas à un numéro
      de téléphone Fixe',\r\n };\r\n\r\n var watcher = scope.$watch(attrs.accountPhone, function (value) {\r\n regex = (value in spe) ? spe[value] : std;\r\n refreshField(value);\r\n });\r\n\r\n scope.$on('$destroy', function () {\r\n watcher();\r\n });\r\n\r\n modelCtrl.$validators.phone = phoneValidator;\r\n\r\n function phoneValidator(modelValue) {\r\n if (!modelValue) {\r\n return true;\r\n }\r\n\r\n return regex.test(modelValue);\r\n }\r\n\r\n function refreshField(country) {\r\n modelCtrl.$setValidity('phone', true);\r\n $timeout(function () {\r\n scope.$apply(function () {\r\n var message = (country in spePhoneMessages) ? spePhoneMessages[country] : stdPhoneMessage;\r\n attrs.$set('phone-notification', message);\r\n modelCtrl.$validate();\r\n });\r\n });\r\n }\r\n }\r\n };\r\n }])\r\n\r\n /* @ngInject */\r\n .directive('accountMobile', [\"$timeout\", function ($timeout) {\r\n return {\r\n restrict: 'A',\r\n require: 'ngModel',\r\n link: function (scope, elt, attrs, modelCtrl) {\r\n var std = /^[0-9().+ ]+$/;\r\n var regex = std;\r\n var spe = {\r\n 1: /^(06|07)( ?\\d){8}$/ // France métropolitaine\r\n };\r\n var stdMobileMessage = 'Merci de saisir un numéro valide';\r\n var speMobileMessage = {\r\n 1: 'Le numéro de téléphone renseigné
      ne correspond pas à un numéro
      de téléphone portable',\r\n };\r\n\r\n var watcher = scope.$watch(attrs.accountMobile, function (value) {\r\n regex = (value in spe) ? spe[value] : std;\r\n refreshField(value);\r\n });\r\n\r\n scope.$on('$destroy', function () {\r\n watcher();\r\n });\r\n\r\n modelCtrl.$validators.mobile = mobileValidator;\r\n\r\n function mobileValidator(modelValue) {\r\n if (!modelValue) {\r\n return true;\r\n }\r\n\r\n return regex.test(modelValue);\r\n }\r\n\r\n function refreshField(country) {\r\n modelCtrl.$setValidity('mobile', true);\r\n $timeout(function () {\r\n scope.$apply(function () {\r\n var message = (country in speMobileMessage) ? speMobileMessage[country] : stdMobileMessage;\r\n attrs.$set('mobile-notification', message);\r\n modelCtrl.$validate();\r\n });\r\n });\r\n }\r\n }\r\n };\r\n }])\r\n\r\n /* @ngInject */\r\n .directive('accountPostcode', [\"$timeout\", function ($timeout) {\r\n return {\r\n restrict: 'A',\r\n require: 'ngModel',\r\n link: function (scope, elt, attrs, modelCtrl) {\r\n var std = /^[a-zA-Z0-9]+$/;\r\n var regex = std;\r\n var spe = {\r\n 1: /^( ?\\d){5}$/ // France métropolitaine\r\n };\r\n var stdPostCodeMessage = 'Merci de saisir un code postal valide';\r\n var spePostCodeMessage = {\r\n 1: 'Le code postal renseigné ne correspond pas à un code postal valide',\r\n };\r\n\r\n var watcher = scope.$watch(attrs.accountPostcode, function (value) {\r\n regex = (value in spe) ? spe[value] : std;\r\n refreshField(value);\r\n });\r\n\r\n scope.$on('$destroy', function () {\r\n watcher();\r\n });\r\n\r\n modelCtrl.$validators.postCode = postCodeValidator;\r\n\r\n function postCodeValidator(modelValue) {\r\n if (!modelValue) {\r\n return true;\r\n }\r\n\r\n return regex.test(modelValue);\r\n }\r\n\r\n function refreshField(country) {\r\n modelCtrl.$setValidity('postcode', true);\r\n $timeout(function () {\r\n scope.$apply(function () {\r\n var message = (country in spePostCodeMessage) ? spePostCodeMessage[country] : stdPostCodeMessage;\r\n attrs.$set('postcode-notification', message);\r\n modelCtrl.$validate();\r\n });\r\n });\r\n }\r\n }\r\n };\r\n }])\r\n})();\r\n","(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('app.authentication', [])\r\n\r\n /* @ngInject */\r\n .controller('authenticationCtrl', [\"$scope\", \"$timeout\", \"$window\", \"AppService\", function ($scope, $timeout, $window, AppService) {\r\n var ctrl = this;\r\n ctrl.newClient = {};\r\n ctrl.templateCreate = '';\r\n ctrl.createOpen = false;\r\n\r\n ctrl.loadedAccountCreate = function () {\r\n $scope.$emit('showPageLoader', false);\r\n $timeout(function () {\r\n ctrl.createOpen = true;\r\n });\r\n };\r\n\r\n ctrl.toggleAccountCreate = function () {\r\n ctrl.createOpen = !ctrl.createOpen;\r\n };\r\n\r\n ctrl.back = function () {\r\n $window.history.back();\r\n };\r\n\r\n AppService.getTranslate()\r\n .then(function () {\r\n ctrl.active = true;\r\n $timeout(function () {\r\n ctrl.activeIn = true;\r\n }, 100);\r\n });\r\n }])\r\n\r\n /* @ngInject */\r\n .controller('loginCtrl', [\"$scope\", \"$rootScope\", \"$timeout\", \"$location\", \"AccountService\", \"AppService\", \"LogService\", \"ModalService\", \"RoutesService\", \"HttpService\", \"GtmService\", \"toastr\", function ($scope, $rootScope, $timeout, $location, AccountService, AppService, LogService, ModalService, RoutesService, HttpService, GtmService, toastr) {\r\n\r\n $timeout(function () {\r\n $rootScope.$broadcast('showPageLoader', false);\r\n }, 500);\r\n\r\n $scope.formData = {\r\n RememberMe: false,\r\n errors: {}\r\n };\r\n\r\n $scope.focus = function () {\r\n $scope.formData.errors.Global = null;\r\n };\r\n\r\n $scope.submit = function (event) {\r\n $(event.target).find('input').blur();\r\n $scope.showLoader = true;\r\n\r\n $scope.formData.errors = {};\r\n\r\n LogService.login(_.merge({}, $scope.formData, { CartRecovery: $location.path() !== '/' + RoutesService.getUrlByName('CartIdentification') }))\r\n .then(function (response) {\r\n if (response.status === 'OK') {\r\n if (response.lastCart) {\r\n AppService.getParams()\r\n .then(function (params) {\r\n if (params.HasCart) {\r\n response.lastCart.showTTCPrice = params.Visitor.CardType.ShowTTCPrice;\r\n ModalService.show(\r\n '/Template/Authentication/ModalCartRecovery',\r\n {\r\n lastCart: response.lastCart,\r\n action: cartRecovery\r\n },\r\n null,\r\n 'modalCartRecoveryCtrl'\r\n );\r\n } else {\r\n cartRecovery(true, response.lastCart.IDFolder);\r\n }\r\n })\r\n .catch(function (error) {\r\n console.error(error);\r\n });\r\n } else {\r\n loginOK(response.VisitorContext);\r\n }\r\n\r\n GtmService.push({\r\n 'event': 'signIn',\r\n 'eventAction': 'sign-in',\r\n 'eventCategory': 'compte',\r\n 'eventLabel': 'connexion'\r\n });\r\n } else {\r\n AppService.getTranslate()\r\n .then(function (translate) {\r\n _.each(response.errors, function (error, key) {\r\n if (key === 'Global') {\r\n $scope.formData.errors[key] = translate.errors[error.Errors[0].ErrorMessage];\r\n }\r\n });\r\n\r\n GtmService.push({\r\n 'event': 'erreurSignIn',\r\n 'eventAction': 'sign-in',\r\n 'eventCategory': 'compte',\r\n 'eventLabel': $scope.formData.errors.Global\r\n });\r\n })\r\n .catch(function (error) {\r\n console.error(error);\r\n });\r\n $scope.showLoader = false;\r\n }\r\n })\r\n .catch(function (error) {\r\n console.error(error);\r\n });\r\n };\r\n\r\n $scope.openForgotPassword = function () {\r\n LogService.email = $scope.formData.Login;\r\n ModalService.show(\r\n '/Template/Authentication/ModalForgotPassword',\r\n null,\r\n null,\r\n 'forgotPasswordModalCtrl'\r\n );\r\n GtmService.push({\r\n 'event': 'signIn',\r\n 'eventAction': 'sign-in',\r\n 'eventCategory': 'compte',\r\n 'eventLabel': 'mot de passe oublié'\r\n });\r\n };\r\n\r\n function cartRecovery(recover, id) {\r\n HttpService.post({\r\n url: '/Cart/Recovery',\r\n data: {\r\n Recover: recover,\r\n IDFolder: id\r\n }\r\n })\r\n .then(function (response) {\r\n ModalService.close();\r\n if (recover) {\r\n AppService.getTranslate()\r\n .then(function (translate) {\r\n toastr.success('', translate.messages.CartRecovered, {\r\n allowHtml: true,\r\n extraData: {\r\n template: 'toast_message.tpl'\r\n }\r\n });\r\n })\r\n .catch(function (error) {\r\n console.error(error);\r\n });\r\n }\r\n loginOK(response.VisitorContext);\r\n })\r\n .catch(function (error) {\r\n console.error(error);\r\n });\r\n }\r\n\r\n function loginOK(visitorContext) {\r\n AppService.updateParams(_.merge(visitorContext, { IsLogged: true }));\r\n $rootScope.$broadcast('logUpdate', true);\r\n\r\n if (LogService.redirect) {\r\n if (LogService.redirect.action) {\r\n LogService.redirect.action(LogService.redirect.url);\r\n } else if (LogService.redirect.url) {\r\n $location.path(LogService.redirect.url).replace();\r\n }\r\n LogService.redirect = null;\r\n } else {\r\n $location.path(AccountService.getLinks().AccountHome).replace();\r\n }\r\n }\r\n\r\n }])\r\n\r\n /* @ngInject */\r\n .controller('loginModalCtrl', [\"data\", \"device\", \"options\", \"$scope\", \"$rootScope\", \"$location\", \"$window\", \"HttpService\", \"AppService\", \"LogService\", \"RoutesService\", \"ModalService\", \"GtmService\", \"toastr\", function (data, device, options, $scope, $rootScope, $location, $window, HttpService, AppService, LogService, RoutesService, ModalService, GtmService, toastr) {\r\n var ctrl = this;\r\n ctrl.data = data;\r\n ctrl.device = device;\r\n ctrl.options = options;\r\n $scope.device = device;\r\n\r\n if (data && data.mailRecognized) {\r\n setTimeout(function () {\r\n $('.modal').find('[ng-model=\"formData.Password\"]').focus();\r\n });\r\n }\r\n\r\n if (data && data.action) {\r\n LogService.redirect = {\r\n url: data.url || null,\r\n action: data.action\r\n };\r\n }\r\n\r\n $scope.linkCreate = '/' + RoutesService.getUrlByName('Login');\r\n\r\n $scope.formData = {\r\n RememberMe: false,\r\n errors: {},\r\n returnUrl: '/'\r\n };\r\n\r\n $scope.focus = function () {\r\n $scope.formData.errors.Global = null;\r\n };\r\n\r\n $scope.submit = function (event) {\r\n $(event.target).find('input').blur();\r\n $scope.showLoader = true;\r\n\r\n $scope.formData.errors = {};\r\n\r\n LogService.login(_.merge({}, $scope.formData, { CartRecovery: $location.path() !== '/' + RoutesService.getUrlByName('CartIdentification') }))\r\n .then(function (response) {\r\n if (response.status === 'OK') {\r\n ModalService.close();\r\n if (response.lastCart) {\r\n AppService.getParams()\r\n .then(function (params) {\r\n if (params.HasCart) {\r\n response.lastCart.showTTCPrice = params.Visitor.CardType.ShowTTCPrice;\r\n ModalService.show(\r\n '/Template/Authentication/ModalCartRecovery',\r\n {\r\n lastCart: response.lastCart,\r\n action: cartRecovery\r\n },\r\n null,\r\n 'modalCartRecoveryCtrl'\r\n );\r\n } else {\r\n cartRecovery(true, response.lastCart.IDFolder);\r\n }\r\n })\r\n .catch(function (error) {\r\n console.error(error);\r\n });\r\n } else {\r\n loginOK(response.VisitorContext);\r\n }\r\n\r\n GtmService.push({\r\n 'event': 'signIn',\r\n 'eventAction': 'sign-in',\r\n 'eventCategory': 'compte',\r\n 'eventLabel': 'connexion'\r\n });\r\n } else {\r\n AppService.getTranslate()\r\n .then(function (translate) {\r\n _.each(response.errors, function (error, key) {\r\n if (key === 'Global') {\r\n $scope.formData.errors[key] = translate.errors[error.Errors[0].ErrorMessage];\r\n }\r\n });\r\n\r\n GtmService.push({\r\n 'event': 'erreurSignIn',\r\n 'eventAction': 'sign-in',\r\n 'eventCategory': 'compte',\r\n 'eventLabel': $scope.formData.errors.Global\r\n });\r\n })\r\n .catch(function (error) {\r\n console.error(error);\r\n });\r\n $scope.showLoader = false;\r\n }\r\n })\r\n .catch(function (error) {\r\n console.error(error);\r\n });\r\n };\r\n\r\n $scope.openForgotPassword = function () {\r\n LogService.email = $scope.formData.Login;\r\n ModalService.close();\r\n ModalService.show(\r\n '/Template/Authentication/ModalForgotPassword',\r\n null,\r\n null,\r\n 'forgotPasswordModalCtrl'\r\n );\r\n GtmService.push({\r\n 'event': 'signIn',\r\n 'eventAction': 'sign-in',\r\n 'eventCategory': 'compte',\r\n 'eventLabel': 'mot de passe oublié'\r\n });\r\n };\r\n\r\n function cartRecovery(recover, id) {\r\n HttpService.post({\r\n url: '/Cart/Recovery',\r\n data: {\r\n Recover: recover,\r\n IDFolder: id\r\n }\r\n })\r\n .then(function (response) {\r\n ModalService.close();\r\n if (recover) {\r\n AppService.getTranslate()\r\n .then(function (translate) {\r\n toastr.success('', translate.messages.CartRecovered, {\r\n allowHtml: true,\r\n extraData: {\r\n template: 'toast_message.tpl'\r\n }\r\n });\r\n })\r\n .catch(function (error) {\r\n console.error(error);\r\n });\r\n }\r\n loginOK(response.VisitorContext);\r\n })\r\n .catch(function (error) {\r\n console.error(error);\r\n });\r\n }\r\n\r\n function loginOK(visitorContext) {\r\n AppService.updateParams(_.merge(visitorContext, { IsLogged: true }));\r\n $rootScope.$broadcast('logUpdate', true);\r\n\r\n if (LogService.redirect) {\r\n if (LogService.redirect.action) {\r\n LogService.redirect.action(LogService.redirect.url);\r\n } else if (LogService.redirect.url) {\r\n $location.path(LogService.redirect.url).replace();\r\n }\r\n LogService.redirect = null;\r\n } else {\r\n $window.location.href = window.location.href;\r\n }\r\n }\r\n }])\r\n\r\n /* @ngInject */\r\n .controller('newClientCtrl', [\"$scope\", \"HttpService\", \"AppService\", function ($scope, HttpService, AppService) {\r\n\r\n $scope.formData = {\r\n errors: {}\r\n };\r\n\r\n $scope.focus = function () {\r\n $scope.formData.errors.Global = null;\r\n };\r\n\r\n $scope.submit = function (event) {\r\n\r\n $(event.target).find('input').blur();\r\n $scope.$emit('showPageLoader', true);\r\n\r\n $scope.formData.errors = {};\r\n\r\n HttpService.post({\r\n url: '/TestMailExist',\r\n data: $scope.authCtrl.newClient\r\n })\r\n .then(function (response) {\r\n if (response.status === 'OK') {\r\n $scope.showCreate();\r\n $('html, body').animate({ scrollTop: 0 }, 350);\r\n } else {\r\n AppService.getTranslate()\r\n .then(function (translate) {\r\n _.each(response.errors, function (error, key) {\r\n if (key === 'Global') {\r\n $scope.formData.errors[key] = translate.errors[error.Errors[0].ErrorMessage];\r\n }\r\n });\r\n })\r\n .catch(function (error) {\r\n console.error(error);\r\n });\r\n $scope.$emit('showPageLoader', false);\r\n }\r\n })\r\n .catch(function (error) {\r\n console.error(error);\r\n });\r\n };\r\n\r\n $scope.showCreate = function () {\r\n if ($scope.authCtrl.templateCreate === '') {\r\n $scope.$emit('showPageLoader', true);\r\n $scope.authCtrl.templateCreate = '/AccountCreate';\r\n } else {\r\n $scope.$emit('showPageLoader', false);\r\n $scope.authCtrl.createOpen = true;\r\n }\r\n };\r\n }])\r\n\r\n /* @ngInject */\r\n .controller('forgotPasswordModalCtrl', [\"$scope\", \"HttpService\", \"AppService\", \"LogService\", \"ModalService\", function ($scope, HttpService, AppService, LogService, ModalService) {\r\n\r\n $scope.formData = {\r\n errors: {}\r\n };\r\n $scope.formData.Email = LogService.email;\r\n\r\n $scope.focus = function () {\r\n $scope.formData.errors.Global = null;\r\n };\r\n\r\n $scope.submit = function () {\r\n\r\n $scope.showLoader = true;\r\n\r\n $scope.formData.errors = {};\r\n\r\n HttpService.post({\r\n url: '/ForgotPassword',\r\n data: $scope.formData\r\n })\r\n .then(function (response) {\r\n if (response.status === 'OK') {\r\n ModalService.close();\r\n ModalService.show(\r\n '/Template/Authentication/ModalForgotPasswordConfirm'\r\n );\r\n } else {\r\n AppService.getTranslate()\r\n .then(function (translate) {\r\n _.each(response.errors, function (error, key) {\r\n if (key === 'Global') {\r\n $scope.formData.errors[key] = translate.errors[error.Errors[0].ErrorMessage];\r\n }\r\n });\r\n })\r\n .catch(function (error) {\r\n console.error(error);\r\n });\r\n }\r\n $scope.showLoader = false;\r\n })\r\n .catch(function (error) {\r\n console.error(error);\r\n });\r\n };\r\n }])\r\n /* @ngInject */\r\n .controller('modalCartRecoveryCtrl', [\"data\", function (data) {\r\n var ctrl = this;\r\n ctrl.data = data;\r\n\r\n ctrl.restore = function (value) {\r\n ctrl.showLoader = true;\r\n ctrl.data.action(value, ctrl.data.lastCart.IDFolder);\r\n };\r\n }]);\r\n\r\n})();\r\n","(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('minilogin', [])\r\n\r\n /* @ngInject */\r\n .directive('miniLogin', function () {\r\n return {\r\n restrict: 'E',\r\n bindToController: {\r\n titleLogin: '@',\r\n titleLogout: '@'\r\n },\r\n controllerAs: 'miniLoginCtrl',\r\n /* @ngInject */\r\n controller: [\"$scope\", \"$rootScope\", \"$element\", \"$document\", \"$location\", \"$route\", \"toastr\", \"AccountService\", \"LogService\", \"AppService\", function ($scope, $rootScope, $element, $document, $location, $route, toastr, AccountService, LogService, AppService) {\r\n var ctrl = this;\r\n\r\n ctrl.links = AccountService.getLinks();\r\n\r\n update();\r\n\r\n var $body = $(document.body);\r\n $body.addClass('offcanvas');\r\n\r\n ctrl.toggle = function () {\r\n toggle();\r\n };\r\n\r\n ctrl.logout = function () {\r\n ctrl.isLogged = false;\r\n toggle();\r\n $rootScope.$broadcast('showPageLoader', true);\r\n LogService.logout()\r\n .then(function (response) {\r\n if (response.status === 'OK') {\r\n AppService.updateParams(_.merge(response.VisitorContext, { IsLogged: false }));\r\n $rootScope.$broadcast('logUpdate', false);\r\n update();\r\n\r\n toastr.success('', ctrl.titleLogout, {\r\n allowHtml: true,\r\n extraData: {\r\n template: 'toast_authentication.tpl'\r\n }\r\n });\r\n if ($route.current && $route.current.resolve && $route.current.resolve.authorize) {\r\n $location.path('/');\r\n }\r\n }\r\n $rootScope.$broadcast('showPageLoader', false);\r\n location.reload();\r\n })\r\n .catch(function (error) {\r\n console.error(error);\r\n });\r\n };\r\n\r\n // Functions\r\n\r\n $scope.$on('userUpdate', function () {\r\n update(true);\r\n });\r\n\r\n $scope.$on('logUpdate', function (event, value) {\r\n if (value) {\r\n toastr.success('', ctrl.titleLogin, {\r\n allowHtml: true,\r\n extraData: {\r\n template: 'toast_authentication.tpl'\r\n }\r\n });\r\n }\r\n update();\r\n });\r\n\r\n $scope.$on('logout', function () {\r\n ctrl.logout();\r\n });\r\n\r\n // Functions\r\n\r\n function toggle() {\r\n if ($body.hasClass('offcanvas-right')) {\r\n $body.removeClass('offcanvas-right');\r\n $document.off('click', onBodyClick);\r\n } else {\r\n $body.addClass('offcanvas-right');\r\n $document.on('click', onBodyClick);\r\n }\r\n }\r\n\r\n function onBodyClick(event) {\r\n if (!$element[0].contains(event.target)) {\r\n toggle();\r\n }\r\n }\r\n\r\n function update(refresh) {\r\n AppService.getParams(refresh)\r\n .then(function (params) {\r\n ctrl.userIcon = 'glyphicon-user';\r\n ctrl.isLogged = params.IsLogged;\r\n if (ctrl.isLogged) {\r\n ctrl.visitor = params.Visitor.FullName;\r\n ctrl.userIcon = 'glyphicon-user';\r\n }\r\n AccountService.setManagement(ctrl);\r\n if (refresh) {\r\n $rootScope.$broadcast('cartUpdate');\r\n }\r\n })\r\n .catch(function (error) {\r\n console.error(error);\r\n });\r\n }\r\n }]\r\n };\r\n });\r\n\r\n})();\r\n","(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('app.modal-account-update', [])\r\n\r\n /* @ngInject */\r\n .controller('modalAccountUpdateController', [\"$scope\", \"$rootScope\", \"$templateCache\", \"HttpService\", \"AppService\", \"AccountService\", function ($scope, $rootScope, $templateCache, HttpService, AppService, AccountService) {\r\n var ctrl = this;\r\n $rootScope.$broadcast('showPageLoader', false);\r\n ctrl.links = AccountService.getLinks();\r\n\r\n ctrl.formData = {\r\n errors: {}\r\n };\r\n\r\n ctrl.focus = function () {\r\n ctrl.formData.errors.Global = null;\r\n };\r\n\r\n ctrl.submit = function () {\r\n ctrl.loading = true;\r\n\r\n ctrl.formData.errors = {};\r\n\r\n _.replace(ctrl.formData.Phone, / /g, '');\r\n _.replace(ctrl.formData.MobilePhone, / /g, '');\r\n\r\n HttpService.post({\r\n url: '/AccountUpdateInvoiceAddress',\r\n data: ctrl.formData\r\n })\r\n .then(function (response) {\r\n AppService.getTranslate()\r\n .then(function (translate) {\r\n if (response.status === 'OK') {\r\n $templateCache.remove(AccountService.getLinks().AccountUpdate);\r\n AppService.updateParams(response.results);\r\n $rootScope.$broadcast('invoiceUpdate');\r\n } else {\r\n ctrl.loading = false;\r\n _.each(response.errors, function (error, key) {\r\n if (key === 'Global') {\r\n ctrl.formData.errors[key] = translate.errors[error.Errors[0].ErrorMessage];\r\n }\r\n });\r\n }\r\n });\r\n })\r\n .catch(function (error) {\r\n console.error(error);\r\n });\r\n };\r\n }]);\r\n\r\n})();\r\n","(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('service.authentication', [])\r\n\r\n /* @ngInject */\r\n .factory('LogService', [\"$templateCache\", \"AccountService\", \"HttpService\", \"Routes\", \"DefaultLocalization\", function ($templateCache, AccountService, HttpService, Routes, DefaultLocalization) {\r\n var redirect,\r\n email;\r\n\r\n return {\r\n login: function (data) {\r\n return HttpService.post({\r\n url: '/' + Routes.filter(function (r) { return r.Name === 'Login'; })[0][DefaultLocalization].URL,\r\n data: data\r\n })\r\n .then(function (response) {\r\n return response;\r\n })\r\n .catch(function (error) {\r\n console.error(error);\r\n });\r\n },\r\n logout: function () {\r\n return HttpService.post({\r\n url: '/Logout',\r\n data: {}\r\n })\r\n .then(function (response) {\r\n $templateCache.remove(AccountService.getLinks().AccountUpdate);\r\n $templateCache.remove(AccountService.getLinks().AccountHome);\r\n return response;\r\n })\r\n .catch(function (error) {\r\n console.error(error);\r\n });\r\n },\r\n redirect: redirect,\r\n email: email\r\n };\r\n }]);\r\n\r\n})();\r\n","(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('app.autocomplete', [])\r\n\r\n .directive('autoCompleteSearch', function () {\r\n return {\r\n restrict: 'E',\r\n scope: true,\r\n controllerAs: 'searchCtrl',\r\n /* @ngInject */\r\n controller: [\"$rootScope\", \"$element\", \"$location\", \"$timeout\", \"RoutesService\", \"searchFinderService\", function ($rootScope, $element, $location, $timeout, RoutesService, searchFinderService) {\r\n var ctrl = this;\r\n\r\n ctrl.inputChangeHandler = function () {\r\n $rootScope.$broadcast('searchUpdate');\r\n };\r\n\r\n\r\n ctrl.goSearch = function (event, fromBtn) {\r\n if (fromBtn) {\r\n event.stopPropagation();\r\n } else {\r\n\r\n if (event.which === 13) {\r\n $(event.target).blur();\r\n } else {\r\n return;\r\n }\r\n }\r\n $timeout(goSearch, 600);\r\n };\r\n\r\n ctrl.$onInit = function () {\r\n searchFinderService.setCtrl(ctrl);\r\n };\r\n\r\n function goSearch() {\r\n if (!ctrl.searchStr || ctrl.searchStr === '') return;\r\n var url = RoutesService.get().Search.route + '/' + encodeURIComponent(ctrl.searchStr.split(' ').join('+')).replace(new RegExp('%2F', 'g'), '%252F');\r\n $location.url(url);\r\n $rootScope.$broadcast('searchClose');\r\n ctrl.searchStr = '';\r\n }\r\n\r\n }]\r\n };\r\n });\r\n\r\n})();\r\n","(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('app.searchfinder', [])\r\n\r\n /* @ngInject */\r\n .factory('searchFinderService', [\"$http\", \"$q\", \"GtmService\", function ($http, $q, GtmService) {\r\n var canceler = $q.defer(),\r\n ctrl;\r\n\r\n return {\r\n setCtrl: function (value) {\r\n ctrl = value;\r\n },\r\n getCtrl: function () {\r\n return ctrl;\r\n },\r\n get: function (str, page, nbPerPage, prices, categories, facets, brands, reviews, types) {\r\n canceler.resolve('cancel');\r\n canceler = $q.defer();\r\n\r\n var filters = [];\r\n _.each(categories, function (category) {\r\n filters.push({\r\n FieldName: 'IDCatalogueTheme',\r\n FieldValue: String(category.IDCategory)\r\n });\r\n });\r\n\r\n var data = {\r\n QueryFullText: str,\r\n NbFrom: (page - 1) * nbPerPage,\r\n NbSize: nbPerPage,\r\n FiltersSelected: filters,\r\n FacetsSelected: facets,\r\n BrandsSelected: brands,\r\n ReviewsSelected: reviews,\r\n ProductTypesSelected: types,\r\n PriceRangeSelected: prices,\r\n Sort: null\r\n };\r\n\r\n return $http({\r\n url: '/Search/Query',\r\n method: 'POST',\r\n headers: {\r\n 'Content-type': 'application/json',\r\n 'X-Requested-With': 'jsonHttpRequest'\r\n },\r\n data: data,\r\n timeout: canceler.promise\r\n })\r\n .then(function (response) {\r\n // GTM\r\n GtmService.searchResults(angular.extend({}, { page: page }, data), response.data);\r\n\r\n return response.data;\r\n })\r\n .catch(function (error) {\r\n throw error;\r\n });\r\n },\r\n cancel: function () {\r\n canceler.resolve('cancel');\r\n },\r\n setGTMFilters: function (name, value) {\r\n GtmService.tmpPush({\r\n 'filterType': name,\r\n 'filterName': value\r\n });\r\n }\r\n };\r\n }])\r\n\r\n /* @ngInject */\r\n .factory('SearchFinderApi', [\"$timeout\", \"searchFinderService\", \"AppService\", function ($timeout, searchFinderService, AppService) {\r\n var api = function () {\r\n this.ctrl = null;\r\n this.items = [];\r\n this.filters = {};\r\n this.total = 0;\r\n this.busy = false;\r\n this.page = 0;\r\n this.search = '';\r\n this.PriceRange = {};\r\n this.CategoriesSelected = [];\r\n this.BrandsSelected = [];\r\n this.FacetsSelected = [];\r\n this.ReviewsSelected = [];\r\n this.ProductTypesSelected = [];\r\n this.getSearch = function () {\r\n return this.search;\r\n };\r\n };\r\n\r\n api.prototype.nextPage = function () {\r\n var _this = this;\r\n if ((!this.update && this.busy) || (!this.update && this.page === this.maxPage)) return;\r\n\r\n this.busy = true;\r\n\r\n var facets = _.filter(this.FacetsSelected, function (item) {\r\n return item.Values.length;\r\n });\r\n\r\n searchFinderService.get(this.search, ++this.page, this.nbPerPage, this.PriceRange, this.CategoriesSelected, facets, this.BrandsSelected, this.ReviewsSelected, this.ProductTypesSelected)\r\n .then(function (data) {\r\n if (_this.update) {\r\n _this.items = [];\r\n }\r\n $timeout(function () {\r\n _this.items = _this.items.concat(data.products);\r\n\r\n _.each(_this.items, function (item) {\r\n item.esURL = item.URL + '/es/' + _this.search.split(' ').join('+').toLowerCase();\r\n });\r\n\r\n if (!_this.FacetsSelected.length) {\r\n _.each(data.facets, function (item) {\r\n _this.FacetsSelected.push({ Id: item.Id, Name: item.Name, Key: item.Key, Values: [] });\r\n });\r\n }\r\n _this.setDataFilters(data)\r\n .then(function (filters) {\r\n _this.filters = filters;\r\n _this.setSelectedFilters();\r\n });\r\n\r\n _this.total = data.total;\r\n _this.maxPage = Math.ceil(_this.total / _this.nbPerPage) ? Math.ceil(_this.total / _this.nbPerPage) : 1;\r\n _this.busy = false;\r\n _this.update = false;\r\n _this.searchCtrl.searching = false;\r\n\r\n\r\n _this.ctrl.updateSearchApi();\r\n\r\n // Alice Délice\r\n _.each(_this.items, function (item) {\r\n _.each(item.Themes, function (th) {\r\n if (th.KeyTheme === 'Top-prix') {\r\n item.themeClass = 'top-prix';\r\n item.themeName = th.Designation;\r\n } else if (th.KeyTheme === 'Essentiels') {\r\n item.themeClass = 'essentiels';\r\n item.themeName = th.Designation;\r\n }\r\n });\r\n // dataLayer\r\n var designation = item.Designation.replace(/[']/g, '\\'');\r\n var productData = 'eventLabel: \"' + designation + '\", productId: ' + item.IDProduct + ', productName: \"' + designation + '\"';\r\n productData += ', productUnitPriceAti: ' + Math.floor(item.Price.TTCDiscountedPrice * 100) / 100;\r\n productData += ', productUnitPriceTf: ' + Math.floor(item.Price.HTDiscountedPrice * 100) / 100;\r\n if (item.Price.HasDiscount) {\r\n productData += ', productDiscountAti: ' + Math.floor(item.Price.TTCPrice * 100) / 100;\r\n productData += ', productDiscountTf: ' + Math.floor(item.Price.HTPrice * 100) / 100;\r\n }\r\n productData += item.Availability ? ', productInstock: ' + (item.Availability.ClickAndCollectAvailability.CentralStock + item.Availability.ClickAndCollectAvailability.StoreStock > 0 ? 'true' : 'false') : '';\r\n productData += item.Brand !== null ? ', productBrand: \"' + item.Brand.Designation + '\"' : '';\r\n\r\n item.datalayer = '{ event: \"productClic\", action: \"clic\", category: \"getPage\", data: {' + productData + '} }';\r\n });\r\n });\r\n })\r\n .catch(function (error) {\r\n console.error(error);\r\n });\r\n };\r\n\r\n api.prototype.setSelectedFilters = function () {\r\n var _this = this;\r\n\r\n _this.filters.categories.open = false;\r\n _.each(_this.filters.categories.items, function (item) {\r\n item.Selected = typeof _.find(_this.CategoriesSelected, { IDCategory: item.IDCategory }) != 'undefined';\r\n if (item.Selected) _this.filters.categories.open = true;\r\n });\r\n\r\n _this.filters.brands.open = false;\r\n _.each(_this.filters.brands.items, function (item) {\r\n item.selected = typeof _.find(_this.BrandsSelected, { Id: item.Id }) != 'undefined';\r\n if (item.selected) _this.filters.brands.open = true;\r\n });\r\n\r\n _.each(_this.filters.facets, function (facet) {\r\n facet.open = false;\r\n var sel = _.find(_this.FacetsSelected, { Id: facet.Id });\r\n if (sel && sel.Values) {\r\n _.each(facet.Values, function (itemValue) {\r\n itemValue.selected = _.includes(sel.Values, itemValue.Value);\r\n if (itemValue.selected) facet.open = true;\r\n // itemValue.selected = facet.isColor ? !itemValue.selected : itemValue.selected;\r\n });\r\n }\r\n });\r\n\r\n _this.filters.reviews.open = false;\r\n _.each(_this.filters.reviews.items, function (item) {\r\n item.selected = _.includes(_this.ReviewsSelected, String(item.Name));\r\n if (item.selected) _this.filters.reviews.open = true;\r\n });\r\n\r\n _this.filters.types.open = false;\r\n _.each(_this.filters.types.items, function (item) {\r\n item.selected = typeof _.find(_this.ProductTypesSelected, { Id: item.Id }) != 'undefined';\r\n if (item.selected) _this.filters.types.open = true;\r\n });\r\n\r\n };\r\n\r\n api.prototype.selectPrices = function (min, max) {\r\n var _this = this;\r\n\r\n _this.PriceRange = {};\r\n _this.filters.prices.selectedMinPrice = min >= _this.filters.prices.minPrice ? min : _this.filters.prices.minPrice;\r\n _this.filters.prices.selectedMaxPrice = max <= _this.filters.prices.maxPrice ? max : _this.filters.prices.maxPrice;\r\n\r\n if (min !== _this.filters.prices.minPrice || max !== _this.filters.prices.maxPrice) {\r\n _this.PriceRange = {\r\n Gte: min,\r\n Lte: max\r\n };\r\n var rangeText = 'de ' + min + ' € à ' + max + ' €';\r\n searchFinderService.setGTMFilters('Prix', rangeText);\r\n }\r\n };\r\n\r\n api.prototype.setDataFilters = function (data) {\r\n var _this = this;\r\n return AppService.getTranslate()\r\n .then(function (translate) {\r\n var filters = {};\r\n\r\n filters.prices = {\r\n open: false,\r\n minPrice: data.prices.minPrice,\r\n maxPrice: data.prices.maxPrice,\r\n options: {},\r\n selectedMinPrice: null,\r\n selectedMaxPrice: null\r\n };\r\n filters.pricesActive = false;\r\n if (filters.prices.minPrice !== filters.prices.maxPrice) {\r\n filters.prices.minPrice = Math.floor(filters.prices.minPrice / 10) * 10;\r\n filters.prices.maxPrice = Math.ceil(filters.prices.maxPrice / 10) * 10;\r\n\r\n if (typeof _this.PriceRange.Gte === 'undefined') {\r\n filters.prices.selectedMinPrice = filters.prices.minPrice;\r\n filters.prices.selectedMaxPrice = filters.prices.maxPrice;\r\n } else {\r\n filters.prices.selectedMinPrice = _this.PriceRange.Gte;\r\n filters.prices.selectedMaxPrice = _this.PriceRange.Lte;\r\n }\r\n\r\n if (filters.prices.selectedMinPrice < filters.prices.minPrice) {\r\n filters.prices.selectedMinPrice = filters.prices.minPrice;\r\n }\r\n if (filters.prices.selectedMaxPrice > filters.prices.maxPrice) {\r\n filters.prices.selectedMaxPrice = filters.prices.maxPrice;\r\n }\r\n\r\n var startMin,\r\n startMax;\r\n filters.prices.options = {\r\n floor: filters.prices.minPrice,\r\n ceil: filters.prices.maxPrice,\r\n step: 10,\r\n minRange: 10,\r\n translate: function (value) {\r\n return value + ' €';\r\n },\r\n onStart: function () {\r\n startMin = filters.prices.selectedMinPrice;\r\n startMax = filters.prices.selectedMaxPrice;\r\n },\r\n // eslint-disable-next-line\r\n onEnd: function (sliderId, min, max) {\r\n if (min !== startMin || max !== startMax) {\r\n _this.selectPrices(min, max);\r\n _this.update = true;\r\n _this.page = 0;\r\n _this.nextPage();\r\n }\r\n startMin = null;\r\n startMax = null;\r\n }\r\n };\r\n filters.pricesActive = true;\r\n }\r\n\r\n filters.categories = {\r\n open: false,\r\n items: data.categories\r\n };\r\n\r\n filters.brands = {\r\n open: false,\r\n items: data.brands\r\n };\r\n\r\n filters.facets = data.facets;\r\n filters.facetsSpe = [];\r\n _.each(filters.facets, function (facet) {\r\n facet.open = false;\r\n _.each(facet.Values, function (itemValue) {\r\n itemValue.checkValue = itemValue.Value;\r\n itemValue.selectedValue = itemValue.Value;\r\n itemValue.ref = _.camelCase(itemValue.Value);\r\n itemValue.selected = false;\r\n if (facet.Name.indexOf('Couleur') !== -1) {\r\n facet.isColor = true;\r\n itemValue.colorImg = '/img/colors/21x21/' + _.kebabCase(itemValue.Value) + '.png';\r\n }\r\n if (facet.Type === 'Vrai/Faux') {\r\n itemValue.checkValue = parseInt(itemValue.Value) === 0 ? translate.messages.No : translate.messages.Yes;\r\n itemValue.selectedValue = parseInt(itemValue.Value) === 0 ? facet.Name + translate.messages.Colon + ' ' + translate.messages.No : facet.Name + translate.messages.Colon + ' ' + translate.messages.Yes;\r\n itemValue.ref = _.camelCase(itemValue.checkValue);\r\n }\r\n });\r\n if (facet.Key === 'CocheEssentielsFacette' || facet.Key === 'CocheTopPrixFacette') {\r\n if (!_.some(filters.facetsSpe, {'Id': facet.Id})) {\r\n filters.facetsSpe.push(facet);\r\n }\r\n }\r\n });\r\n\r\n filters.reviews = {\r\n open: false,\r\n items: _.filter(data.reviews, function (item) {\r\n return item.Name > 0;\r\n })\r\n };\r\n\r\n filters.types = {\r\n open: false,\r\n items: data.types\r\n };\r\n\r\n return filters;\r\n })\r\n .catch(function (response) {\r\n console.error(response);\r\n });\r\n };\r\n\r\n return api;\r\n }])\r\n\r\n /* @ngInject */\r\n .component('searchFinder', {\r\n bindings: {\r\n device: '<',\r\n nbPerPage: '<'\r\n },\r\n /* @ngInject */\r\n templateUrl: [\"$sce\", function ($sce) {\r\n return $sce.trustAsResourceUrl('/Template/Autocomplete/SearchFinder');\r\n }],\r\n /* @ngInject */\r\n controller: [\"$scope\", \"$element\", \"$timeout\", \"WindowEventsService\", \"productsGridService\", \"searchFinderService\", \"SearchFinderApi\", function ($scope, $element, $timeout, WindowEventsService, productsGridService, searchFinderService, SearchFinderApi) {\r\n var ctrl = this;\r\n\r\n ctrl.$onInit = function () {\r\n ctrl.api = new SearchFinderApi();\r\n ctrl.api.ctrl = ctrl;\r\n ctrl.api.nbPerPage = ctrl.nbPerPage;\r\n ctrl.api.searchCtrl = searchFinderService.getCtrl();\r\n resize();\r\n };\r\n\r\n ctrl.close = function () {\r\n clearResults();\r\n };\r\n\r\n ctrl.loaded = function () {\r\n $timeout(function () {\r\n productsGridService.resizeGrid('searchGrid', ctrl.device.size, !ctrl.api.update);\r\n });\r\n };\r\n\r\n ctrl.setCategory = function (item) {\r\n if (item.Selected) {\r\n ctrl.api.CategoriesSelected.push({IDCategory: item.IDCategory});\r\n } else {\r\n _.pullAllBy(ctrl.api.CategoriesSelected, [{ IDCategory: item.IDCategory }], 'IDCategory');\r\n }\r\n ctrl.api.setSelectedFilters();\r\n updateSearch();\r\n };\r\n\r\n ctrl.setFacet = function (item, itemValue) {\r\n if (item.isColor) {\r\n itemValue.selected = !itemValue.selected;\r\n }\r\n\r\n var facet = _.find(ctrl.api.FacetsSelected, { Id: item.Id });\r\n if (facet) {\r\n if (itemValue.selected) {\r\n facet.Values.push(itemValue.Value);\r\n searchFinderService.setGTMFilters(item.Name, itemValue.Value);\r\n } else {\r\n _.pull(facet.Values, itemValue.Value);\r\n }\r\n }\r\n ctrl.api.setSelectedFilters();\r\n updateSearch();\r\n };\r\n ctrl.setBrand = function (item) {\r\n selectFilter(item, ctrl.api.BrandsSelected, false);\r\n searchFinderService.setGTMFilters('Marque', item.Name);\r\n };\r\n ctrl.setReview = function (item) {\r\n selectFilter(item, ctrl.api.ReviewsSelected, true);\r\n searchFinderService.setGTMFilters('Note', item.Name);\r\n };\r\n ctrl.setType = function (item) {\r\n selectFilter(item, ctrl.api.ProductTypesSelected, false);\r\n searchFinderService.setGTMFilters('Type', item.Name);\r\n };\r\n\r\n ctrl.updateSearchApi = function () {\r\n var $body = $(document.body);\r\n $body.addClass('fixed-search');\r\n if (ctrl.device.mobile && ctrl.device.isTouch) {\r\n $body.css('top', '-' + ($('#header').height() - $('.auto-complete-search').height()) + 'px');\r\n resize();\r\n setTimeout(resize, 800);\r\n }\r\n };\r\n\r\n // Events\r\n\r\n $scope.$on('searchClose', function () {\r\n clearResults();\r\n });\r\n\r\n $scope.$on('searchUpdate', function () {\r\n if (ctrl.api.searchCtrl.searchStr === '') {\r\n clearResults();\r\n return;\r\n }\r\n if (ctrl.api.searchCtrl && ctrl.api.searchCtrl.searchStr && ctrl.api.searchCtrl.searchStr.length < 3) return;\r\n ctrl.api.PriceRange = {};\r\n ctrl.api.CategoriesSelected = [];\r\n ctrl.api.BrandsSelected = [];\r\n ctrl.api.FacetsSelected = [];\r\n ctrl.api.ReviewsSelected = [];\r\n ctrl.api.ProductTypesSelected = [];\r\n ctrl.api.search = ctrl.api.searchCtrl.searchStr;\r\n ctrl.api.searchCtrl.searching = true;\r\n updateSearch();\r\n $element.addClass('active');\r\n $(document.body).on('click', onBodyClick);\r\n });\r\n\r\n $scope.$on('topUpdate', resize);\r\n\r\n WindowEventsService.listen(true, 'resize', resize, 500);\r\n\r\n $scope.$on('$destroy', function () {\r\n WindowEventsService.listen(false, 'resize', resize);\r\n });\r\n\r\n // Functions\r\n function onBodyClick(event) {\r\n if (!$(event.target).hasClass('search-query') && !$(event.target).closest('#search-finder').length) {\r\n clearResults();\r\n }\r\n }\r\n\r\n function selectFilter(item, target, byName) {\r\n if (byName) {\r\n if (item.selected) {\r\n target.push(String(item.Name));\r\n } else {\r\n _.pull(target, String(item.Name));\r\n }\r\n } else if (item.selected) {\r\n target.push({Id: item.Id});\r\n } else {\r\n _.pullAllBy(target, [{ Id: item.Id }], 'Id');\r\n }\r\n ctrl.api.setSelectedFilters();\r\n updateSearch();\r\n }\r\n\r\n function updateSearch() {\r\n ctrl.api.update = true;\r\n ctrl.api.page = 0;\r\n ctrl.api.nextPage();\r\n }\r\n\r\n function resize() {\r\n\r\n var elementHeader = $('#header');\r\n var elementMainNav = $('#main-nav'),\r\n pos = elementHeader.offset().top + elementHeader.height() - elementMainNav.height(),\r\n height = 'calc(100vh - ' + pos + 'px)';\r\n\r\n if (!ctrl.device.desktop && ctrl.device.isTouch) {\r\n pos = $('#header').height() + $('.headerTop-promos').height() + 5;\r\n height = ($(document.body).height() - $('.auto-complete-search').height() - $('.headerTop-promos').height()) + 'px';\r\n }\r\n\r\n pos = ctrl.device.desktop ? pos - 4 : pos;\r\n if (ctrl.device.mobile && ctrl.device.isTouch) {\r\n pos = $('#header').height();\r\n height = ($(document.body).height() - $('.auto-complete-search').height()) + 'px';\r\n }\r\n\r\n $element.css({\r\n top: pos,\r\n height: height\r\n });\r\n\r\n $timeout(function () {\r\n productsGridService.resizeGrid('searchGrid', ctrl.device.size, false);\r\n });\r\n\r\n }\r\n\r\n function clearResults() {\r\n searchFinderService.cancel();\r\n ctrl.api.search = '';\r\n ctrl.api.total = 0;\r\n ctrl.api.searchCtrl.searchStr = '';\r\n ctrl.api.searchCtrl.searching = false;\r\n $element.removeClass('active');\r\n $(document.body).removeClass('fixed-search').removeAttr('style').off('click', onBodyClick);\r\n }\r\n }]\r\n })\r\n\r\n /* @ngInject */\r\n .filter('matchstring', [\"$sce\", function ($sce) {\r\n return function (value, str) {\r\n if (!value || !str) { return; }\r\n if (!value.match || !value.replace) { value = value.toString(); }\r\n var matches, reg;\r\n\r\n var words = str.split(' '),\r\n tmp;\r\n _.each(words, function (word) {\r\n tmp = word.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\r\n if (tmp.length > 2) {\r\n reg = new RegExp(tmp, 'ig');\r\n matches = value.match(reg);\r\n if (matches) {\r\n value = value.split(reg).join('#|#' + matches[0] + '#/#');\r\n }\r\n }\r\n });\r\n\r\n value = value.split('#|#').join('').split('#/#').join('');\r\n return $sce.trustAsHtml(value).valueOf();\r\n };\r\n }]);\r\n\r\n})();\r\n","(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('app.category.background', [])\r\n\r\n .directive('categoryBg', function () {\r\n return {\r\n restrict: 'A',\r\n scope: true,\r\n bindToController: {\r\n idPictureLg: '<',\r\n idPictureSm: '<',\r\n pictureSizeLg: '@',\r\n pictureSizeSm: '@'\r\n },\r\n controllerAs: 'categoryBgCtrl',\r\n /* @ngInject */\r\n controller: [\"$scope\", \"CdnService\", function ($scope, CdnService) {\r\n var ctrl = this;\r\n\r\n ctrl.$onInit = function () {\r\n if (ctrl.idPictureLg !== 0) {\r\n setPictures(ctrl.idPictureLg, ctrl.idPictureSm);\r\n return;\r\n }\r\n\r\n setTimeout(getPictures);\r\n };\r\n\r\n function getPictures() {\r\n var lg = 0,\r\n sm = 0;\r\n\r\n var items = $('#breadcrumb').children(),\r\n len = $('#breadcrumb').children().length - 1;\r\n while (len > 0) {\r\n var $item = $(items[len]);\r\n var id = $item.data('id-picture-lg');\r\n if (id !== 0) {\r\n lg = id;\r\n sm = $item.data('id-picture-sm');\r\n len = 0;\r\n }\r\n len--;\r\n }\r\n if (lg !== 0) {\r\n setPictures(lg, sm);\r\n }\r\n\r\n }\r\n\r\n function setPictures(lg, sm) {\r\n CdnService.get(lg, ctrl.pictureSizeLg)\r\n .then(function (response) {\r\n ctrl.srcLg = response;\r\n })\r\n .catch(function (err) {\r\n console.error(err);\r\n });\r\n CdnService.get(sm, ctrl.pictureSizeSm)\r\n .then(function (response) {\r\n ctrl.srcSm = response;\r\n })\r\n .catch(function (err) {\r\n console.error(err);\r\n });\r\n }\r\n\r\n }]\r\n };\r\n });\r\n\r\n})();\r\n","(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('app.category.filters', ['rzModule'])\r\n\r\n .directive('filters', function () {\r\n return {\r\n restrict: 'E',\r\n scope: true,\r\n bindToController: {\r\n idCategory: '<',\r\n searchQuery: '@?',\r\n scroll: '<',\r\n device: '<'\r\n },\r\n controllerAs: 'filtersCtrl',\r\n /* @ngInject */\r\n controller: [\"$scope\", \"$rootScope\", \"$timeout\", \"$location\", \"$document\", \"AppService\", \"RoutingService\", \"RoutesService\", \"CategoryFiltersCacheService\", \"CategoryService\", \"CategoryCacheService\", \"GtmService\", \"smoothScroll\", function ($scope, $rootScope, $timeout, $location, $document, AppService, RoutingService, RoutesService, CategoryFiltersCacheService, CategoryService, CategoryCacheService, GtmService, smoothScroll) {\r\n if (window.isBot || window.isCache) return;\r\n var ctrl = this;\r\n\r\n ctrl.search = '';\r\n ctrl.words = [];\r\n ctrl.selected = [];\r\n ctrl.filters = null;\r\n ctrl.BrandsSelected = [];\r\n ctrl.FacetsSelected = [];\r\n ctrl.ReviewsSelected = [];\r\n ctrl.ProductTypesSelected = [];\r\n\r\n ctrl.$onInit = function () {\r\n get();\r\n };\r\n\r\n ctrl.submitSearch = function (event) {\r\n if (ctrl.search === '') return;\r\n\r\n if (typeof event === 'undefined') {\r\n addWord(ctrl.search);\r\n } else if (event && event.which === 13) {\r\n event.preventDefault();\r\n $(event.target).blur();\r\n addWord(ctrl.search);\r\n }\r\n };\r\n ctrl.removeWord = function (word) {\r\n _.pull(ctrl.words, word);\r\n updateUrl();\r\n };\r\n\r\n //Get price selected in filter\r\n ctrl.openDropdown = function (event) {\r\n var $button = $(event.currentTarget),\r\n $menu = $button.siblings('.dropdown-menu');\r\n if ($button.parent().hasClass('open')) {\r\n $menu.removeAttr('style');\r\n } else {\r\n if (ctrl.device.xxs) {\r\n $menu.css({\r\n left: $button.offset().left * -1 + 10,\r\n width: $(document.body).width() - 20\r\n });\r\n } else {\r\n $menu.removeClass('dropdown-menu-right').show();\r\n if ($menu.offset().left + $menu.width() > $(document.body).width()) {\r\n $menu.addClass('dropdown-menu-right');\r\n }\r\n $menu.removeAttr('style');\r\n }\r\n\r\n $timeout(function () {\r\n $rootScope.$broadcast('rzSliderForceRender');\r\n }, 10);\r\n\r\n var closeDropdown = function () {\r\n $menu.removeAttr('style');\r\n $document.off('click', closeDropdown);\r\n };\r\n\r\n $menu.find('.rzslider').removeClass('opened');\r\n $timeout(function () {\r\n $rootScope.$broadcast('rzSliderForceRender');\r\n $menu.find('.rzslider').addClass('opened');\r\n $document.on('click', closeDropdown);\r\n }, 500);\r\n }\r\n };\r\n\r\n //get facet selected from filter\r\n ctrl.setFacet = function (item, itemValue, initCheck) {\r\n var facet = _.find(ctrl.FacetsSelected, { 'Id': item.Id , 'Name': item.Name });\r\n if (item.isColor) {\r\n itemValue.selected = !itemValue.selected;\r\n }\r\n if (itemValue.selected) {\r\n facet.Values.push(itemValue.Value);\r\n ctrl.selected.push({\r\n id: itemValue.ref,\r\n name: itemValue.selectedValue,\r\n value: itemValue.Value,\r\n type: item.Id,\r\n selectId: 'f' + item.Id\r\n });\r\n if (!initCheck) {\r\n setGTMFilters(item.Name, true);\r\n } \r\n } else {\r\n _.pull(facet.Values, itemValue.Value);\r\n _.remove(ctrl.selected, function (elem) {\r\n return elem.selectId === 'f' + item.Id && elem.id === itemValue.ref;\r\n });\r\n }\r\n if (!initCheck) {\r\n updateUrl();\r\n }\r\n };\r\n\r\n //Function value selected filter\r\n ctrl.setBrand = function (item) {\r\n selectFilter(item, 'b', ctrl.BrandsSelected);\r\n //setGTMFilters('Marque', item.Name);\r\n setGTMFilters('Marque', true);\r\n };\r\n ctrl.setReview = function (item) {\r\n selectFilter(item, 'r', ctrl.ReviewsSelected, 'reviews');\r\n //setGTMFilters('Note', item.Name);\r\n setGTMFilters('Note', true);\r\n };\r\n ctrl.setType = function (item) {\r\n selectFilter(item, 't', ctrl.ProductTypesSelected);\r\n //setGTMFilters('Type', item.Name);\r\n setGTMFilters('Type', true);\r\n };\r\n\r\n ctrl.removeFilter = function (item) {\r\n switch (item.type) {\r\n case 'b':\r\n _.pullAllBy(ctrl.BrandsSelected, [{ Id: item.id }], 'Id');\r\n break;\r\n case 'r':\r\n _.pull(ctrl.ReviewsSelected, String(item.id));\r\n break;\r\n case 't':\r\n _.pullAllBy(ctrl.ProductTypesSelected, [{ Id: item.id }], 'Id');\r\n break;\r\n case 'p':\r\n ctrl.PriceRange = null;\r\n break;\r\n default:\r\n _.pull(_.find(ctrl.FacetsSelected, { Id: item.type }).Values, item.value);\r\n break;\r\n }\r\n _.remove(ctrl.selected, function (elem) {\r\n return elem.selectId === item.selectId && elem.id === item.id;\r\n });\r\n updateUrl();\r\n };\r\n\r\n ctrl.removeFilters = function () {\r\n ctrl.selected = [];\r\n ctrl.words = [];\r\n ctrl.BrandsSelected = [];\r\n ctrl.ReviewsSelected = [];\r\n ctrl.ProductTypesSelected = [];\r\n _.each(ctrl.FacetsSelected, function (item) {\r\n item.Values = [];\r\n });\r\n ctrl.PriceRange = null;\r\n updateUrl();\r\n };\r\n\r\n // Functions\r\n\r\n function addWord(str, initCheck) {\r\n initCheck = initCheck || false;\r\n ctrl.search = '';\r\n ctrl.words.push(str);\r\n if (!initCheck) {\r\n updateUrl();\r\n }\r\n }\r\n\r\n function selectFilter(item, type, target, byName, initCheck) {\r\n if (byName) {\r\n if (item.selected) {\r\n target.push(String(item.Name));\r\n ctrl.selected.push({\r\n id: item.Name,\r\n name: item.Name,\r\n type: type,\r\n selectId: type + item.Name,\r\n isReview: byName === 'reviews' ? true : false\r\n });\r\n \r\n } else {\r\n _.pull(target, String(item.Name));\r\n _.pullAllBy(ctrl.selected, [{ selectId: type + item.Name }], 'selectId');\r\n }\r\n } else if (item.selected) {\r\n target.push({ Id: item.Id , Name: item.Name});\r\n ctrl.selected.push({\r\n id: item.Id,\r\n name: item.Name,\r\n type: type,\r\n selectId: type + item.Id,\r\n isReview: false\r\n });\r\n \r\n } else {\r\n _.pullAllBy(target, [{ Id: item.Id }], 'Id');\r\n _.pullAllBy(ctrl.selected, [{ selectId: type + item.Id }], 'selectId');\r\n }\r\n\r\n if (!initCheck) {\r\n updateUrl();\r\n }\r\n }\r\n\r\n function selectPrices(min, max) {\r\n ctrl.PriceRange = null;\r\n var newPriceSelected = false;\r\n _.pullAllBy(ctrl.selected, [{ isPrices: true }], 'isPrices');\r\n ctrl.filters.prices.selectedMinPrice = min >= ctrl.filters.prices.minPrice ? min : ctrl.filters.prices.minPrice;\r\n ctrl.filters.prices.selectedMaxPrice = max <= ctrl.filters.prices.maxPrice ? max : ctrl.filters.prices.maxPrice;\r\n\r\n if (min !== ctrl.filters.prices.minPrice || max !== ctrl.filters.prices.maxPrice) {\r\n ctrl.PriceRange = {\r\n Gte: min,\r\n Lte: max\r\n };\r\n var rangeText = 'de ' + min + ' € à ' + max + ' €';\r\n ctrl.selected.push({\r\n id: min + ',' + max,\r\n name: rangeText,\r\n type: 'p',\r\n selectId: min + ',' + max,\r\n isPrices: true\r\n });\r\n //clickGTMFilters('Price');\r\n }\r\n $document.click();\r\n }\r\n\r\n function updateUrl() {\r\n var object = _.reduce(ctrl.selected, function (result, item) {\r\n (result['f' + item.type] || (result['f' + item.type] = [])).push(item.id);\r\n return result;\r\n }, {});\r\n\r\n var params = {};\r\n _.each(object, function (item, key) {\r\n params[key] = item.join(',');\r\n });\r\n\r\n if (ctrl.words.length) {\r\n params.fs = _.replace(_.deburr(ctrl.words.join(',')), / /g, '|');\r\n }\r\n\r\n var routing = RoutingService.get(),\r\n url,\r\n routeUrl;\r\n if (!routing.to.params.categoryId) {\r\n routeUrl = '/' + RoutesService.getUrlByName(routing.to.name.indexOf('SearchProducts') !== -1 ? 'SortedSearchProductsPageAngular' : 'SortedSearchPageAngular');\r\n url = routeUrl\r\n .replace('{q}', routing.to.params.q ? routing.to.params.q : '')\r\n .replace('/{p:int}', '')\r\n .replace('/{sort:alpha}', !routing.to.params.sort || routing.to.params.sort === '' ? '' : '/' + routing.to.params.sort);\r\n } else {\r\n routeUrl = '/' + RoutesService.getUrlByName('SortedCategoryPage');\r\n url = routeUrl\r\n .replace('{categoryName}', routing.to.params.categoryName)\r\n .replace('{categoryId:int}', routing.to.params.categoryId)\r\n .replace('-{page:int}', '')\r\n .replace('/{sortType:alpha}', routing.to.params.sortType ? '/' + routing.to.params.sortType : '');\r\n }\r\n $location.path(url).search(params).replace();\r\n }\r\n\r\n function get() {\r\n var gridCtrl = CategoryService.getGridCtrl();\r\n ctrl.searchQuery = angular.isDefined(gridCtrl.searchQuery) ? gridCtrl.searchQuery : null;\r\n if (gridCtrl.api && gridCtrl.api.filtered) {\r\n ctrl.noScroll = true;\r\n }\r\n\r\n // on récupère tous les filtres existants de la catégorie - soit en cache soit en ajax\r\n var cache = CategoryFiltersCacheService.get('filters_' + ctrl.idCategory);\r\n if (cache) {\r\n setFilters(_.cloneDeep(cache));\r\n return;\r\n }\r\n\r\n ctrl.loading = true;\r\n CategoryService.getFilters(String(ctrl.idCategory), ctrl.searchQuery)\r\n .then(function (data) {\r\n ctrl.loading = false;\r\n CategoryFiltersCacheService.set('filters_' + ctrl.idCategory, _.cloneDeep(data));\r\n setFilters(data);\r\n })\r\n .catch(function (error) {\r\n console.error(error);\r\n });\r\n }\r\n\r\n function setFilters(data) {\r\n if (!data) return;\r\n if (!ctrl.FacetsSelected.length) {\r\n _.each(data.facets, function (item) {\r\n ctrl.FacetsSelected.push({ 'Id': item.Id, 'Name': item.Name, 'Key': item.Key, 'Values': [] });\r\n });\r\n }\r\n updateFilters(data, true);\r\n }\r\n\r\n function set() {\r\n if (!ctrl.noScroll && ctrl.scroll && $('#topGridProducts').offset().top < 10) {\r\n smoothScroll(document.getElementById('topGridProducts'), { offset: 60 });\r\n }\r\n ctrl.noScroll = false;\r\n\r\n var gridCtrl = CategoryService.getGridCtrl(),\r\n cache = CategoryCacheService.get($location.url());\r\n if (!cache) {\r\n gridCtrl.api.items = [];\r\n }\r\n gridCtrl.noresult = false;\r\n\r\n var facets = _.filter(ctrl.FacetsSelected, function (item) {\r\n return item.Values.length;\r\n });\r\n var brands = ctrl.BrandsSelected;\r\n var reviews = ctrl.ReviewsSelected;\r\n var types = ctrl.ProductTypesSelected;\r\n var search = !ctrl.words.length ? '' : ctrl.words.join(' ');\r\n search += ctrl.searchQuery !== null ? (search !== '' ? ' ' : '') + ctrl.searchQuery : '';\r\n var prices = ctrl.PriceRange || {};\r\n\r\n ctrl.removeAllEnabled = ctrl.selected.length + ctrl.words.length > 1;\r\n\r\n if (!facets.length && !brands.length && !reviews.length && !types.length && search === '' && _.isEmpty(prices)) {\r\n gridCtrl.nbProducts = gridCtrl.totalProducts;\r\n gridCtrl.api.maxPage = gridCtrl.maxPage;\r\n gridCtrl.api.busy = false;\r\n gridCtrl.api.filtered = false;\r\n\r\n ctrl.FacetsSelected = [];\r\n\r\n $timeout(function () {\r\n gridCtrl.loaded(true);\r\n });\r\n\r\n get();\r\n\r\n return;\r\n }\r\n\r\n $timeout(function () {\r\n $rootScope.$broadcast('showPageLoader', true);\r\n });\r\n\r\n gridCtrl.api.busy = true;\r\n gridCtrl.reload = true;\r\n gridCtrl.api.filtered = true;\r\n gridCtrl.api.filteredActive = false;\r\n\r\n gridCtrl.api.facets = facets;\r\n gridCtrl.api.brands = brands;\r\n gridCtrl.api.reviews = reviews;\r\n gridCtrl.api.types = types;\r\n gridCtrl.api.prices = prices;\r\n gridCtrl.api.search = search;\r\n\r\n if (cache) {\r\n updateFilterData(gridCtrl);\r\n } else {\r\n CategoryService.getProducts(gridCtrl.api.page, true, gridCtrl.sort, facets, brands, reviews, types, prices, search, ctrl.searchQuery !== null ? 0 : ctrl.idCategory, gridCtrl.nbPerPage)\r\n .then(function (data) {\r\n gridCtrl.api.items = gridCtrl.api.items.concat(data.products);\r\n gridCtrl.nbProducts = data.total;\r\n updateFilterData(gridCtrl);\r\n\r\n $timeout(function () {\r\n $rootScope.$broadcast('showPageLoader', false);\r\n });\r\n\r\n updateFilters(data, false);\r\n })\r\n .catch(function (error) {\r\n console.error(error);\r\n });\r\n }\r\n }\r\n\r\n function updateFilterData(gridCtrl) {\r\n gridCtrl.api.filteredActive = true;\r\n gridCtrl.api.busy = false;\r\n gridCtrl.reload = false;\r\n gridCtrl.noresult = gridCtrl.nbProducts === 0 ? true : false;\r\n gridCtrl.api.maxPage = Math.ceil(gridCtrl.nbProducts / gridCtrl.nbPerPage) ? Math.ceil(gridCtrl.nbProducts / gridCtrl.nbPerPage) : 1;\r\n gridCtrl.paginationEnabled = true;\r\n }\r\n\r\n function updateFilters(data, initCheck) {\r\n AppService.getTranslate()\r\n .then(function (translate) {\r\n ctrl.filters = ctrl.filters || {};\r\n ctrl.filters.brands = data.brands;\r\n ctrl.filters.facets = data.facets;\r\n ctrl.filters.reviews = data.reviews;\r\n ctrl.filters.types = data.types;\r\n ctrl.filters.products = data.products;\r\n ctrl.filters.total = data.total;\r\n\r\n /* Facette prix */\r\n if (!ctrl.filters.prices) {\r\n ctrl.filters.prices = data.prices;\r\n } else {\r\n ctrl.filters.prices.minPrice = data.prices.minPrice;\r\n ctrl.filters.prices.maxPrice = data.prices.maxPrice;\r\n }\r\n\r\n ctrl.filters.pricesActive = false;\r\n if (ctrl.filters.prices.minPrice !== ctrl.filters.prices.maxPrice) {\r\n ctrl.filters.prices.minPrice = Math.floor(ctrl.filters.prices.minPrice / 10) * 10;\r\n ctrl.filters.prices.maxPrice = Math.ceil(ctrl.filters.prices.maxPrice / 10) * 10;\r\n if (!ctrl.PriceRange) {\r\n ctrl.filters.prices.selectedMinPrice = ctrl.filters.prices.minPrice;\r\n ctrl.filters.prices.selectedMaxPrice = ctrl.filters.prices.maxPrice;\r\n }\r\n\r\n if (ctrl.filters.prices.selectedMinPrice < ctrl.filters.prices.minPrice) {\r\n ctrl.filters.prices.selectedMinPrice = ctrl.filters.prices.minPrice;\r\n }\r\n if (ctrl.filters.prices.selectedMaxPrice > ctrl.filters.prices.maxPrice) {\r\n ctrl.filters.prices.selectedMaxPrice = ctrl.filters.prices.maxPrice;\r\n }\r\n\r\n var startMin,\r\n startMax;\r\n ctrl.filters.prices.options = {\r\n floor: ctrl.filters.prices.minPrice,\r\n ceil: ctrl.filters.prices.maxPrice,\r\n step: 10,\r\n minRange: 10,\r\n translate: function (value) {\r\n return value + ' €';\r\n },\r\n onStart: function () {\r\n startMin = ctrl.filters.prices.selectedMinPrice;\r\n startMax = ctrl.filters.prices.selectedMaxPrice;\r\n },\r\n // eslint-disable-next-line\r\n onEnd: function (sliderId, min, max) {\r\n if (min !== startMin || max !== startMax) {\r\n selectPrices(min, max);\r\n setGTMFilters('Price', true);\r\n updateUrl();\r\n }\r\n startMin = null;\r\n startMax = null;\r\n }\r\n };\r\n ctrl.filters.pricesActive = true;\r\n }\r\n /* Facette prix end */\r\n\r\n var filtered = false;\r\n if (ctrl.filters.facets.length || ctrl.filters.brands.length || ctrl.filters.reviews.length || ctrl.filters.types.length) {\r\n ctrl.filters.reviews = _.filter(ctrl.filters.reviews, function (item) {\r\n return item.Name > 0;\r\n });\r\n var totalSelectedCount = 0;\r\n ctrl.filters.brands.selectedCount = 0;\r\n ctrl.filters.reviews.selectedCount = 0;\r\n ctrl.filters.types.selectedCount = 0;\r\n\r\n ctrl.filters.facetsSpe = [];\r\n\r\n _.each(ctrl.filters.facets, function (item) {\r\n item.selectedCount = 0;\r\n _.each(item.Values, function (itemValue) {\r\n var value = itemValue.Value;\r\n if (itemValue.Value.length > 50) {\r\n value = value.substring(0, 50);\r\n if (value.lastIndexOf(' ') > 40) {\r\n value = value.substring(0, value.lastIndexOf(' '));\r\n }\r\n value += ' ...';\r\n }\r\n itemValue.checkValue = value;\r\n itemValue.selectedValue = value;\r\n itemValue.ref = _.camelCase(itemValue.Value);\r\n itemValue.selected = false;\r\n if (item.Name.indexOf('Couleur') !== -1) {\r\n item.isColor = true;\r\n itemValue.colorImg = '/img/colors/21x21/' + _.kebabCase(itemValue.Value) + '.png';\r\n }\r\n if (item.Type === 'Vrai/Faux') {\r\n itemValue.checkValue = parseInt(itemValue.Value) === 0 ? translate.messages.No : translate.messages.Yes;\r\n itemValue.selectedValue = parseInt(itemValue.Value) === 0 ? item.Name + translate.messages.Colon + ' ' + translate.messages.No : item.Name + translate.messages.Colon + ' ' + translate.messages.Yes;\r\n itemValue.selectedValue = item.Key === 'CocheTopPrixFacette' || item.Key === 'CocheEssentielsFacette' ? item.Name : itemValue.selectedValue;\r\n itemValue.ref = _.camelCase(itemValue.checkValue);\r\n }\r\n });\r\n if (item.Key === 'CocheEssentielsFacette' || item.Key === 'CocheTopPrixFacette') {\r\n if (!_.some(ctrl.filters.facetsSpe, { 'Id': item.Id })) {\r\n ctrl.filters.facetsSpe.push(item);\r\n }\r\n }\r\n });\r\n\r\n var locSearch = {};\r\n _.each($location.search(), function (value, key) {\r\n if (key.indexOf('f') === 0) {\r\n locSearch[key] = value;\r\n }\r\n });\r\n if (!_.isEmpty(locSearch)) {\r\n _.each(locSearch, function (value, key) {\r\n if (key === 'fb') {\r\n _.each(ctrl.filters.brands, function (item) {\r\n item.selected = _.includes(value.split(','), String(item.Id));\r\n if (item.selected) {\r\n ctrl.filters.brands.selectedCount += 1;\r\n totalSelectedCount += 1;\r\n if (initCheck) {\r\n selectFilter(item, 'b', ctrl.BrandsSelected, null, true);\r\n }\r\n }\r\n });\r\n } else if (key === 'fr') {\r\n _.each(ctrl.filters.reviews, function (item) {\r\n item.selected = _.includes(value.split(','), String(item.Name));\r\n if (item.selected) {\r\n ctrl.filters.reviews.selectedCount += 1;\r\n totalSelectedCount += 1;\r\n if (initCheck) {\r\n selectFilter(item, 'r', ctrl.ReviewsSelected, 'reviews', true);\r\n }\r\n }\r\n });\r\n } else if (key === 'ft') {\r\n _.each(ctrl.filters.types, function (item) {\r\n item.selected = _.includes(value.split(','), String(item.Id));\r\n if (item.selected) {\r\n ctrl.filters.types.selectedCount += 1;\r\n totalSelectedCount += 1;\r\n if (initCheck) {\r\n selectFilter(item, 't', ctrl.ProductTypesSelected, null, true);\r\n }\r\n }\r\n });\r\n } else if (key === 'fp') {\r\n if (initCheck) {\r\n var arr = value.split(',');\r\n selectPrices(Number(arr[0]), Number(arr[1]));\r\n }\r\n } else if (key === 'fs') {\r\n ctrl.words = _.replace(value, /\\|/g, ' ').split(',');\r\n filtered = true;\r\n } else if (key.indexOf('f') === 0) {\r\n var item = _.find(ctrl.filters.facets, { Id: parseInt(key.slice(1)) });\r\n if (item) {\r\n _.each(item.Values, function (itemValue) {\r\n itemValue.selected = _.includes(value.split(','), String(itemValue.ref));\r\n if (itemValue.selected) {\r\n item.selectedCount += 1;\r\n totalSelectedCount += 1;\r\n if (initCheck) {\r\n itemValue.selected = item.isColor ? !itemValue.selected : itemValue.selected;\r\n ctrl.setFacet(item, itemValue, true);\r\n }\r\n }\r\n });\r\n }\r\n }\r\n });\r\n\r\n if (!locSearch.c && !locSearch.q && !locSearch.p && ctrl.selected.length) {\r\n filtered = true;\r\n }\r\n }\r\n\r\n if (ctrl.filters.prices.selectedMinPrice !== ctrl.filters.prices.minPrice || ctrl.filters.prices.selectedMaxPrice !== ctrl.filters.prices.maxPrice) {\r\n totalSelectedCount += 1;\r\n }\r\n var gridCtrl = CategoryService.getGridCtrl();\r\n gridCtrl.totalSelectedCount = totalSelectedCount;\r\n\r\n if (!filtered) {\r\n var queries = {};\r\n _.each($location.search(), function (value, key) {\r\n if (key.indexOf('f') !== 0) {\r\n queries[key] = value;\r\n }\r\n });\r\n $location.search(queries);\r\n }\r\n }\r\n\r\n if (initCheck && filtered) {\r\n set();\r\n }\r\n\r\n ctrl.active = true;\r\n })\r\n .catch(function (error) {\r\n console.error(error);\r\n });\r\n }\r\n\r\n //Set filter and push if value is false\r\n function setGTMFilters(name, value) {\r\n\r\n //Add choice filter in variable\r\n var choiceFilter = \"\";\r\n\r\n var min = ctrl.filters.prices.selectedMinPrice;\r\n var max = ctrl.filters.prices.selectedMaxPrice;\r\n\r\n choiceFilter += \"de \" + min + \" à \" + max + \"€ |\";\r\n\r\n //Get brand selected\r\n if (ctrl.BrandsSelected.length > 0) {\r\n choiceFilter += ctrl.BrandsSelected[0].Name + \"|\";\r\n }\r\n\r\n //Get Color and topic selected\r\n if (ctrl.FacetsSelected.length > 0) {\r\n angular.forEach(ctrl.FacetsSelected, function (item, key) {\r\n if (item.Values.length > 0) {\r\n angular.forEach(item.Values, function (value, index) {\r\n choiceFilter += value + \"|\";\r\n });\r\n }\r\n }); \r\n }\r\n\r\n //Check if string is correct to push filter selected\r\n var words = choiceFilter.split(\"|\");\r\n var index = 0;\r\n //words = words.filter(f => f !== 'Matière' && f !== 'Price' && f !== 'Marques' && f !== 'Couleur');\r\n angular.forEach(words, function (item) {\r\n if (item == 'Matière') {\r\n delete words[index];\r\n }\r\n\r\n if (item == 'Marques') {\r\n delete words[index];\r\n }\r\n\r\n if (item == 'Couleur') {\r\n delete words[index];\r\n }\r\n\r\n if (item == 'Price') {\r\n delete words[index];\r\n }\r\n index = index + 1;\r\n })\r\n\r\n //Convert array to string to get if is different choiceFilter\r\n var resultDeleteBadItemFilter = words.join(\"|\");\r\n if (choiceFilter.length != resultDeleteBadItemFilter.length) {\r\n choiceFilter = null;\r\n choiceFilter = resultDeleteBadItemFilter;\r\n }\r\n\r\n\r\n \r\n //If false push to gtm all value filter selected\r\n //if (!value) {\r\n \r\n var breadcrumb = '';\r\n $('#breadcrumb').children().each(function (index) {\r\n breadcrumb += (index > 0 ? ' > ' : '') + _.trim($(this).text());\r\n });\r\n\r\n //Push\r\n GtmService.push({\r\n 'event': 'clicFiltre',\r\n 'eventAction': 'Filtre',\r\n 'eventCategory': breadcrumb,\r\n 'eventLabel': choiceFilter\r\n });\r\n \r\n /*} else {\r\n\r\n //Temp push\r\n GtmService.tmpPush({\r\n 'filterType': name,\r\n 'filterName': choiceFilter\r\n });\r\n }*/\r\n console.log(choiceFilter);\r\n }\r\n }]\r\n };\r\n });\r\n})();\r\n","(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('app.category', [])\r\n\r\n /* @ngInject */\r\n .factory('InfiniteScrollApi', [\"$location\", \"CategoryService\", \"CategoryCacheService\", \"RoutesService\", function ($location, CategoryService, CategoryCacheService, RoutesService) {\r\n var api = function (ctrl) {\r\n this.ctrl = ctrl;\r\n this.items = [];\r\n this.busy = false;\r\n this.page = ctrl.currentPage;\r\n this.facets = [];\r\n this.search = '';\r\n };\r\n\r\n api.prototype.nextPage = function () {\r\n if ($location.path().indexOf('-c-') === -1 && $location.path().indexOf('-a-') === -1) return;\r\n\r\n if (!preProcess(this)) return;\r\n\r\n postProcess(this);\r\n };\r\n\r\n api.prototype.nextSearchPage = function () {\r\n if (!preProcess(this)) return;\r\n\r\n this.search = $location.search().q || '';\r\n if (!this.search) {\r\n var routeUrl = '/' + RoutesService.getUrlByName('Search') + '/';\r\n var search = $location.path().split(routeUrl)[1];\r\n if (search) {\r\n this.search = search.indexOf('/') === -1 ? search : search.split('/')[0];\r\n }\r\n }\r\n this.search = decodeURI(this.search.replace('+', ' '));\r\n\r\n postProcess(this);\r\n };\r\n\r\n function preProcess(_this) {\r\n if (_this.maxPage === 0) return false;\r\n if (_this.busy || _this.page === _this.maxPage) return false;\r\n if (_this.filtered && !_this.filteredActive) return false;\r\n if (_this.page % _this.ctrl.iScrollMaxPages === 0) return false;\r\n\r\n return true;\r\n }\r\n\r\n function postProcess(_this) {\r\n _this.busy = true;\r\n CategoryService.getProducts(++_this.page, _this.filtered, _this.sort, _this.facets, _this.brands, _this.reviews, _this.types, _this.prices, _this.search, _this.idCategory, _this.nbPerPage)\r\n .then(function (data) {\r\n if (data) {\r\n _this.items = _this.items.concat(data.products);\r\n CategoryCacheService.set($location.url(), _this.page, _this.items, data.total);\r\n _this.busy = false;\r\n\r\n setGTMProducts(_this.items, { idCategory: _this.idCategory, page: _this.page, search: _this.search, sort: _this.sort });\r\n }\r\n })\r\n .catch(function (error) {\r\n console.error(error);\r\n });\r\n }\r\n\r\n function setGTMProducts(products, params) {\r\n var listProducts = [];\r\n _.each(products, function (product, index) {\r\n if (product.IDProduct > 0) {\r\n listProducts.push({\r\n productId: product.Reference,\r\n productBrand: product.Brand ? product.Brand.Designation : '',\r\n productName: product.Designation,\r\n productUnitPriceAti: product.Price ? Math.floor(product.Price.TTCDiscountedPrice * 100) / 100 : 0,\r\n productUnitPriceTf: product.Price ? Math.floor(product.Price.HTDiscountedPrice * 100) / 100 : 0,\r\n productDiscountAti: product.Price.HasDiscount ? Math.floor(product.Price.TTCPrice * 100) / 100 : 0,\r\n productDiscountTf: product.Price.HasDiscount ? Math.floor(product.Price.HTPrice * 100) / 100 : 0,\r\n productInstock: product.Availability.ClickAndCollectAvailability && product.Availability.ClickAndCollectAvailability.CentralStock + product.Availability.ClickAndCollectAvailability.StoreStock > 0,\r\n productPosition: index + 1\r\n });\r\n }\r\n });\r\n\r\n var url = CategoryService.getUrl(params);\r\n var pageView = window.dataLayer.find(function (item) {\r\n return item.event === 'pageView';\r\n });\r\n var newData = _.merge(pageView, {\r\n url: url,\r\n list_products: listProducts\r\n });\r\n var gtmId = $('meta[gtm]').attr('content');\r\n window.google_tag_manager && window.google_tag_manager[gtmId].dataLayer.reset();\r\n window.dataLayer = window.dataLayer || [];\r\n window.dataLayer.push(newData);\r\n }\r\n\r\n return api;\r\n }])\r\n\r\n /* @ngInject */\r\n .directive('categoryProducts', function () {\r\n return {\r\n restrict: 'A',\r\n scope: true,\r\n bindToController: {\r\n idCategory: '<',\r\n searchQuery: '@?',\r\n currentPage: '<',\r\n totalProducts: '<',\r\n nbPerPage: '<',\r\n maxPage: '<',\r\n sort: '@',\r\n sortTitle: '@',\r\n iScrollMaxPages: '<',\r\n device: '<',\r\n privateArea: '<'\r\n },\r\n controllerAs: 'categoryCtrl',\r\n /* @ngInject */\r\n controller: [\"$scope\", \"$element\", \"$rootScope\", \"$document\", \"$timeout\", \"$location\", \"$route\", \"$templateCache\", \"$filter\", \"InfiniteScrollApi\", \"productsGridService\", \"CategoryCacheService\", \"CategoryService\", \"RoutingService\", \"RoutesService\", function ($scope, $element, $rootScope, $document, $timeout, $location, $route, $templateCache, $filter, InfiniteScrollApi, productsGridService, CategoryCacheService, CategoryService, RoutingService, RoutesService) {\r\n var ctrl = this,\r\n loadCache;\r\n\r\n CategoryService.setGridCtrl(ctrl);\r\n\r\n // Init filters as it is async\r\n $filter('discount')(1, 'value');\r\n $filter('price')(1, 'value');\r\n\r\n ctrl.$onInit = function () {\r\n if (window.isBot || window.isCache) {\r\n ctrl.nbProducts = ctrl.totalProducts;\r\n return;\r\n }\r\n\r\n ctrl.api = new InfiniteScrollApi(ctrl);\r\n\r\n var locSearch = {};\r\n _.each($location.search(), function (value, key) {\r\n if (key.indexOf('f') === 0) {\r\n locSearch[key] = value;\r\n }\r\n });\r\n ctrl.api.filtered = !_.isEmpty(locSearch);\r\n\r\n ctrl.api.idCategory = ctrl.idCategory;\r\n ctrl.api.searchQuery = angular.isDefined(ctrl.searchQuery) ? ctrl.searchQuery : null;\r\n ctrl.api.nbPerPage = ctrl.nbPerPage;\r\n ctrl.api.maxPage = ctrl.maxPage;\r\n ctrl.api.sort = ctrl.sort || '';\r\n\r\n var cache = CategoryCacheService.get($location.url());\r\n if (cache) {\r\n loadCache = true;\r\n $timeout(function () {\r\n $rootScope.$broadcast('showPageLoader', true);\r\n });\r\n\r\n ctrl.api.page = cache[0];\r\n ctrl.api.items = cache[1];\r\n ctrl.nbProducts = cache[2];\r\n }\r\n\r\n if (!ctrl.api.filtered) {\r\n ctrl.nbProducts = ctrl.totalProducts;\r\n ctrl.paginationEnabled = true;\r\n }\r\n\r\n if (ctrl.currentPage > 1) {\r\n ctrl.iScrollPage = Math.floor(ctrl.currentPage / ctrl.iScrollMaxPages);\r\n }\r\n \r\n ctrl.iScrollNbPerPage = ctrl.api.nbPerPage * ctrl.iScrollMaxPages;\r\n $timeout(function () {\r\n ctrl.iScrollPageEnabled = true;\r\n });\r\n\r\n if (ctrl.privateArea) {\r\n $scope.$on('logUpdate', function (event, value) {\r\n if (!value) {\r\n $templateCache.remove($location.path());\r\n $rootScope.$broadcast('showPageLoader', true);\r\n $route.reload();\r\n }\r\n });\r\n }\r\n };\r\n ctrl.$onDestroy = function () {\r\n ctrl.api.busy = true;\r\n };\r\n\r\n ctrl.loaded = function (reload) {\r\n reload = reload || false;\r\n $timeout(function () {\r\n productsGridService.resizeGrid('productsGrid2', ctrl.device.size, !reload);\r\n $rootScope.$emit('lazyImg:refresh');\r\n if (loadCache) {\r\n loadCache = false;\r\n setTimeout(RoutingService.windowScroll, 100);\r\n $timeout(function () {\r\n $rootScope.$broadcast('showPageLoader', false);\r\n });\r\n }\r\n });\r\n };\r\n\r\n ctrl.openDropdown = function (event) {\r\n var $button = $(event.currentTarget),\r\n $menu = $button.siblings('.dropdown-menu');\r\n if ($button.parent().hasClass('open')) {\r\n $menu.removeAttr('style');\r\n } else if (ctrl.device.xxs) {\r\n $menu.css({\r\n left: $button.offset().left * -1 + 10,\r\n width: $(document.body).width() - 20\r\n });\r\n\r\n var closeDropdown = function () {\r\n $menu.removeAttr('style');\r\n $document.off('click', closeDropdown);\r\n };\r\n\r\n $timeout(function () {\r\n $document.on('click', closeDropdown);\r\n }, 500);\r\n }\r\n };\r\n\r\n ctrl.setSort = function (event, value) {\r\n event.preventDefault();\r\n ctrl.sort = value;\r\n ctrl.sortTitle = event.target.innerText;\r\n $location.path($(event.target).attr('href'));\r\n };\r\n\r\n ctrl.gotoPage = function () {\r\n var page = ((ctrl.iScrollPage - 1) * ctrl.iScrollMaxPages) + 1,\r\n routing = RoutingService.get(),\r\n routeUrl = '/' + RoutesService.getUrlByName('SortedCategoryPage'),\r\n url = routeUrl\r\n .replace('{categoryName}', routing.to.params.categoryName)\r\n .replace('{categoryId:int}', routing.to.params.categoryId.split('-')[0])\r\n .replace('-{page:int}', page === 1 ? '' : '-' + page)\r\n .replace('/{sortType:alpha}', ctrl.api.sort === '' ? '' : '/' + ctrl.api.sort);\r\n\r\n RoutingService.scrollCache[RoutingService.getPath(url)] = 0;\r\n $location.path(url);\r\n };\r\n\r\n ctrl.gotoSearchPage = function () {\r\n var page = ((ctrl.iScrollPage - 1) * ctrl.iScrollMaxPages) + 1,\r\n routing = RoutingService.get(),\r\n routeUrl = '/' + RoutesService.getUrlByName(routing.to.name.indexOf('SearchProducts') !== -1 ? 'SortedSearchProductsPageAngular' : 'SortedSearchPageAngular'),\r\n url = routeUrl\r\n .replace('{q}', routing.to.params.q ? routing.to.params.q : '')\r\n .replace('/{p:int}', page === 1 ? '' : '/' + page)\r\n .replace('/{sort:alpha}', ctrl.api.sort === '' ? '' : '/' + ctrl.api.sort);\r\n\r\n RoutingService.scrollCache[RoutingService.getPath(url)] = 0;\r\n $location.path(url);\r\n };\r\n\r\n ctrl.showPagination = function () {\r\n if (window.isBot) return false;\r\n\r\n if (ctrl.api.busy) return false;\r\n if (ctrl.api.maxPage === 1) return false;\r\n if (ctrl.api.maxPage <= ctrl.iScrollMaxPages) return false;\r\n if (ctrl.api.page % ctrl.iScrollMaxPages !== 0 && ctrl.api.page !== ctrl.api.maxPage) return false;\r\n\r\n return true;\r\n };\r\n\r\n }]\r\n };\r\n });\r\n\r\n})();\r\n","(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('app.category.service', [])\r\n\r\n /* @ngInject */\r\n .factory('CategoryCacheService', [\"$cacheFactory\", function ($cacheFactory) {\r\n var cache = $cacheFactory('categoryCache');\r\n return {\r\n set: function (key, page, obj, total) {\r\n cache.put(key, [page, obj, total]);\r\n },\r\n get: function (key) {\r\n return cache.get(key);\r\n },\r\n reset: function () {\r\n cache.removeAll();\r\n }\r\n };\r\n }])\r\n\r\n /* @ngInject */\r\n .factory('CategoryFiltersCacheService', [\"$cacheFactory\", function ($cacheFactory) {\r\n var cache = $cacheFactory('filtersCache');\r\n return {\r\n set: function (key, obj) {\r\n cache.put(key, obj);\r\n },\r\n get: function (key) {\r\n return cache.get(key);\r\n }\r\n };\r\n }])\r\n\r\n /* @ngInject */\r\n .factory('CategoryService', [\"$filter\", \"$route\", \"AppService\", \"RoutesService\", \"RoutingService\", \"HttpService\", function ($filter, $route, AppService, RoutesService, RoutingService, HttpService) {\r\n var ctrl;\r\n return {\r\n setGridCtrl: function (value) {\r\n ctrl = value;\r\n },\r\n getGridCtrl: function () {\r\n return ctrl;\r\n },\r\n getFilters: getFilters,\r\n setProducts: setProducts,\r\n getProducts: getProducts,\r\n getUrl: getUrl\r\n };\r\n\r\n // Functions\r\n\r\n function getFilters(idCategory, searchQuery) {\r\n return HttpService.post({\r\n url: '/Search/Query',\r\n data: {\r\n QueryFullText: searchQuery !== null ? searchQuery : '',\r\n NbFrom: '0',\r\n NbSize: '0',\r\n FiltersSelected: searchQuery !== null ? [] : [\r\n {\r\n FieldName: 'IDCatalogueTheme',\r\n FieldValue: String(idCategory)\r\n }\r\n ]\r\n }\r\n })\r\n .then(function (data) {\r\n return data;\r\n })\r\n .catch(function (error) {\r\n console.error(error);\r\n });\r\n }\r\n\r\n function setProducts(data) {\r\n return AppService.getParams()\r\n .then(function (params) {\r\n var arr = [];\r\n\r\n _.each(data, function (current) {\r\n var obj = {};\r\n\r\n obj.IDProduct = current.IDProduct;\r\n obj.Designation = current.Designation;\r\n obj.URL = current.URL;\r\n obj.IDPicture = current.MainPicture ? current.MainPicture.IDPicture : current.IDPicture;\r\n obj.ReviewsInfo = { Count: current.ReviewsInfo.Count, Average: Math.round(current.ReviewsInfo.Average) };\r\n //obj.Themes = current.Themes;\r\n obj.HTMLShortDescription = current.HTMLShortDescription;\r\n obj.Price = current.Price;\r\n obj.Availability = current.Availability;\r\n obj.IsGroupingProduct = current.IsGroupingProduct;\r\n obj.isNumeric = current.isNumeric;\r\n obj.IsCustomizable = current.IsCustomizable;\r\n obj.AllowAddToCart = current.AllowAddToCart;\r\n obj.htmlReduction = !obj.Price.HasDiscount ? '' : '-' + $filter('discount')(obj.Price.Discount) + '';\r\n obj.htmlPrice = '' + $filter('price')(obj.Price, 'final-price') + '';\r\n if (obj.Price.HasDiscount) {\r\n obj.htmlPrice = '' + $filter('price')(obj.Price) + '' + obj.htmlPrice;\r\n }\r\n // obj.Brand = current.Brand;\r\n if (current.Properties && current.Properties.length) {\r\n var properties = {};\r\n _.each(current.Properties, function (prop) {\r\n properties[prop.KeyProperty] = prop.Value;\r\n });\r\n obj.Properties = properties;\r\n }\r\n\r\n // Alice Délice\r\n obj.Reference = current.Reference;\r\n obj.ClickAndCollectInfo = current.ClickAndCollectInfo;\r\n obj.Themes = [];\r\n obj.ThemesLabel = [];\r\n obj.Pictos = [];\r\n for (var i = 0; i < current.Themes.length; i++) {\r\n var th = current.Themes[i];\r\n if (th.KeyTheme === 'Comparateur') {\r\n obj.isComparable = true;\r\n }\r\n // Alice Délice\r\n if (th.KeyTheme === 'Top-prix') {\r\n obj.themeClass = 'top-prix';\r\n obj.themeName = th.Designation;\r\n } else if (th.KeyTheme === 'Essentiels') {\r\n obj.themeClass = 'essentiels';\r\n obj.themeName = th.Designation;\r\n } else if (th.KeyTheme === 'VentesPrivees' && params.IsLogged && params.Visitor.IDCardType === 3) {\r\n obj.themeClass = 'ventes-privees';\r\n obj.themeName = th.Text1;\r\n }\r\n\r\n if (th.KeyTheme === 'Nouveaute' || th.KeyTheme === 'Promotion') {\r\n obj.Themes.push(th);\r\n }\r\n if (th.KeyTheme.indexOf('globalpr') !== -1 && th.KeyTheme.indexOf('globalpr') === th.KeyTheme.length - 8) {\r\n th.Text1 = String(current.Price.TTCDiscountedPrice).replace('.', ',') + ' €';\r\n obj.ThemesLabel.push(th);\r\n }\r\n\r\n if (th.ThemeGroup === 'Pictos') {\r\n var array = th.Text1.split(' 1 ? array[1].substr(0, array[1].indexOf('>')) : '';\r\n var color = array.length > 1 ? array[1].substr(array[1].indexOf('')) : '';\r\n if (bg !== '') {\r\n th.style = {\r\n 'background': '#' + bg,\r\n 'color': '#' + color\r\n };\r\n }\r\n obj.Pictos.push(th);\r\n }\r\n }\r\n\r\n obj.reductionClass = current.Price.Discount >= 30 ? 'up-30' : '';\r\n obj.reductionClass = current.Price.Discount >= 50 ? 'up-50' : obj.reductionClass;\r\n obj.reductionClass = current.Price.Discount >= 70 ? 'up-70' : obj.reductionClass;\r\n\r\n // dataLayer\r\n var designation = obj.Designation.replace(/[']/g, '\\'');\r\n var productData = 'eventLabel: \"' + designation + '\", productId: ' + obj.IDProduct + ', productName: \"' + designation + '\"';\r\n productData += ', productUnitPriceAti: ' + Math.floor(obj.Price.TTCDiscountedPrice * 100) / 100;\r\n productData += ', productUnitPriceTf: ' + Math.floor(obj.Price.HTDiscountedPrice * 100) / 100;\r\n if (obj.Price.HasDiscount) {\r\n productData += ', productDiscountAti: ' + Math.floor(obj.Price.TTCPrice * 100) / 100;\r\n productData += ', productDiscountTf: ' + Math.floor(obj.Price.HTPrice * 100) / 100;\r\n }\r\n productData += obj.Availability ? ', productInstock: ' + (obj.Availability.ClickAndCollectAvailability.CentralStock + obj.Availability.ClickAndCollectAvailability.StoreStock > 0 ? 'true' : 'false') : '';\r\n productData += current.Brand !== null ? ', productBrand: \"' + current.Brand.Designation + '\"' : '';\r\n\r\n obj.datalayer = '{ event: \"productClic\", action: \"clic\", category: \"getPage\", data: {' + productData + '} }';\r\n\r\n arr.push(obj);\r\n });\r\n return arr;\r\n })\r\n .catch(function (error) {\r\n console.error(error);\r\n });\r\n }\r\n\r\n function getUrl(params) {\r\n var routing = RoutingService.get(),\r\n url,\r\n routeUrl;\r\n\r\n if (params.idCategory) {\r\n routeUrl = '/' + RoutesService.getUrlByName('SortedCategoryPage');\r\n if ($route.current.name.indexOf('CategoryRecrutement') !== -1) {\r\n routeUrl = '/' + RoutesService.getUrlByName('CategoryRecrutementPage');\r\n }\r\n url = routeUrl\r\n .replace('{categoryName}', routing.to.params.categoryName)\r\n .replace('{categoryId:int}', params.idCategory)\r\n .replace('{page:int}', params.page)\r\n .replace('{sortType:alpha}', params.sort);\r\n } else {\r\n routeUrl = '/' + RoutesService.getUrlByName(routing.to.name.indexOf('SearchProducts') !== -1 ? 'SearchProducts' : 'Search');\r\n url = routeUrl + '?q=' + params.search + '&p=' + params.page + '&sort=' + params.sort;\r\n }\r\n return url;\r\n }\r\n\r\n function getProducts(page, filtered, sort, facets, brands, reviews, types, prices, search, idCategory, nbPerPage) {\r\n if (!filtered) {\r\n\r\n var url = getUrl({ idCategory: idCategory, page: page, search: search, sort: sort });\r\n\r\n return HttpService.get({\r\n url: url,\r\n cache: true\r\n })\r\n .then(function (data) {\r\n return setProducts(data.products)\r\n .then(function (results) {\r\n data.products = results;\r\n return data;\r\n })\r\n .catch(function (error) {\r\n console.error(error);\r\n });\r\n })\r\n .catch(function (error) {\r\n console.error(error);\r\n });\r\n }\r\n\r\n var sortParam = null;\r\n if (sort !== '') {\r\n switch (sort) {\r\n case 'ALPHAASC':\r\n sortParam = { FieldName: 'ArtDesignation', SortType: 'asc' };\r\n break;\r\n case 'ALPHADESC':\r\n sortParam = { FieldName: 'ArtDesignation', SortType: 'desc' };\r\n break;\r\n case 'PRICEASC':\r\n sortParam = { FieldName: 'PrixTTC', SortType: 'asc' };\r\n break;\r\n case 'PRICEDESC':\r\n sortParam = { FieldName: 'PrixTTC', SortType: 'desc' };\r\n break;\r\n }\r\n }\r\n return HttpService.post({\r\n url: '/Search/Query',\r\n data: {\r\n QueryFullText: search,\r\n NbFrom: (page - 1) * nbPerPage,\r\n NbSize: nbPerPage,\r\n FiltersSelected: !idCategory ? [] : [\r\n {\r\n FieldName: 'IDCatalogueTheme',\r\n FieldValue: String(idCategory)\r\n }\r\n ],\r\n FacetsSelected: facets,\r\n BrandsSelected: brands,\r\n ReviewsSelected: reviews,\r\n ProductTypesSelected: types,\r\n PriceRangeSelected: prices,\r\n Sort: sortParam\r\n }\r\n })\r\n .then(function (data) {\r\n return setProducts(data.products)\r\n .then(function (results) {\r\n data.products = results;\r\n return data;\r\n })\r\n .catch(function (error) {\r\n console.error(error);\r\n });\r\n })\r\n .catch(function (error) {\r\n console.error(error);\r\n });\r\n\r\n }\r\n }]);\r\n\r\n})();\r\n","(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('app.form', ['thatisuday.dropzone'])\r\n\r\n /* @ngInject */\r\n .factory('FormService', [\"HttpService\", \"AppService\", \"ModalService\", function (HttpService, AppService, ModalService) {\r\n return {\r\n emailChanged: function (ctrl) {\r\n if (ctrl.form.Email.$valid) {\r\n AppService.getParams()\r\n .then(function (params) {\r\n if (!params.IsLogged) {\r\n HttpService.post({\r\n url: '/TestMailExist',\r\n data: {\r\n Email: ctrl.formData.Email\r\n }\r\n })\r\n .then(function (response) {\r\n if (response.status === 'ERROR') {\r\n for (var fieldName in response.errors) {\r\n if (fieldName === 'Global' && response.errors[fieldName].Errors[0].ErrorMessage === 'AccountExist') {\r\n ModalService.show(\r\n '/Template/Authentication/ModalAuthentication',\r\n {\r\n mailRecognized: ctrl.formData.Email\r\n },\r\n null,\r\n 'loginModalCtrl'\r\n );\r\n }\r\n }\r\n }\r\n })\r\n .catch(function (error) {\r\n console.error(error);\r\n });\r\n }\r\n });\r\n }\r\n }\r\n };\r\n }])\r\n\r\n /* @ngInject */\r\n .controller('ContactController', [\"$scope\", \"$timeout\", \"HttpService\", \"AppService\", \"FormService\", \"smoothScroll\", \"RoutesService\", function ($scope, $timeout, HttpService, AppService, FormService, smoothScroll, RoutesService) {\r\n var ctrl = this;\r\n\r\n ctrl.formData = {\r\n Attachments: [],\r\n errors: {}\r\n };\r\n\r\n ctrl.focus = function () {\r\n ctrl.formData.errors.Global = null;\r\n };\r\n\r\n ctrl.dzOptions = {\r\n paramName: 'files',\r\n acceptedFiles: 'image/jpeg, images/jpg, image/png, image/gif, .pdf, .doc, .docx, .xls, .xlsx, .zip',\r\n uploadMultiple: true,\r\n renameFilename: function (name) {\r\n return new Date().getTime() + '_!_' + name;\r\n }\r\n };\r\n\r\n ctrl.dzCallbacks = {\r\n successmultiple: function (files) {\r\n _.each(files, function (file) {\r\n ctrl.formData.Attachments.push({\r\n Name: file.name,\r\n ServerName: file.serverName\r\n });\r\n });\r\n },\r\n removedfile: function (file) {\r\n _.remove(ctrl.formData.Attachments, { Name: file.Name });\r\n }\r\n };\r\n\r\n ctrl.emailChanged = function () {\r\n FormService.emailChanged(ctrl);\r\n };\r\n\r\n ctrl.submit = function () {\r\n\r\n $scope.$emit('showPageLoader', true);\r\n\r\n ctrl.formData.errors = {};\r\n\r\n _.replace(ctrl.formData.Phone, / /g, '');\r\n _.replace(ctrl.formData.MobilePhone, / /g, '');\r\n\r\n HttpService.post({\r\n url: '/' + RoutesService.getUrlByName('Contact'),\r\n data: ctrl.formData\r\n })\r\n .then(function (response) {\r\n AppService.getTranslate()\r\n .then(function (translate) {\r\n if (response.status === 'OK') {\r\n smoothScroll(document.body);\r\n ctrl.messageSent = true;\r\n $timeout(function () {\r\n ctrl.messageSentOK = true;\r\n }, 350);\r\n } else {\r\n _.each(response.errors, function (error, key) {\r\n if (key === 'Global') {\r\n ctrl.formData.errors[key] = translate.errors[error.Errors[0].ErrorMessage];\r\n }\r\n });\r\n }\r\n $scope.$emit('showPageLoader', false);\r\n })\r\n .catch(function (error) {\r\n console.error(error);\r\n });\r\n })\r\n .catch(function (error) {\r\n console.error(error);\r\n });\r\n };\r\n\r\n }])\r\n\r\n /* @ngInject */\r\n .controller('CandidatureController', [\"$scope\", \"$timeout\", \"HttpService\", \"AppService\", \"smoothScroll\", \"RoutesService\", function ($scope, $timeout, HttpService, AppService, smoothScroll, RoutesService) {\r\n var ctrl = this;\r\n\r\n ctrl.formData = {\r\n Object: 'Candidature',\r\n Attachments: [],\r\n errors: {}\r\n };\r\n\r\n ctrl.init = function (targetCtrl) {\r\n ctrl.infos = {\r\n designation: targetCtrl.designation,\r\n ref: targetCtrl.ref,\r\n date: targetCtrl.date,\r\n ville: targetCtrl.ville,\r\n dep: targetCtrl.dep\r\n };\r\n };\r\n\r\n ctrl.close = function (targetCtrl) {\r\n targetCtrl.formOpened = false;\r\n $timeout(function () {\r\n ctrl.messageSentOK = false;\r\n ctrl.messageSent = false;\r\n ctrl.formData = {\r\n Attachments: [],\r\n errors: {},\r\n Object: 'Candidature'\r\n };\r\n ctrl.form.$hideValidation();\r\n ctrl.form.$resetValidation();\r\n }, 350);\r\n };\r\n\r\n ctrl.focus = function () {\r\n ctrl.formData.errors.Global = null;\r\n };\r\n\r\n ctrl.dzOptions = {\r\n paramName: 'files',\r\n acceptedFiles: 'image/jpeg, images/jpg, image/png, image/gif, .pdf, .doc, .docx, .xls, .xlsx, .zip',\r\n uploadMultiple: true,\r\n renameFilename: function (name) {\r\n return new Date().getTime() + '_!_' + name;\r\n }\r\n };\r\n\r\n ctrl.dzCallbacks = {\r\n successmultiple: function (files) {\r\n _.each(files, function (file) {\r\n ctrl.formData.Attachments.push({\r\n Name: file.name,\r\n ServerName: file.serverName\r\n });\r\n });\r\n },\r\n removedfile: function (file) {\r\n _.remove(ctrl.formData.Attachments, { Name: file.Name });\r\n }\r\n };\r\n\r\n ctrl.submit = function () {\r\n\r\n $scope.$emit('showPageLoader', true);\r\n\r\n _.replace(ctrl.formData.Phone, / /g, '');\r\n _.replace(ctrl.formData.MobilePhone, / /g, '');\r\n\r\n if (ctrl.infos) {\r\n var infos = '- ' + ctrl.infos.designation + ' - ' + ctrl.infos.date + '\\n';\r\n infos += '- Ref. ' + ctrl.infos.ref + '\\n';\r\n infos += '- ' + ctrl.infos.ville + ' (' + ctrl.infos.dep + ')' + '\\n\\n\\n';\r\n ctrl.formData.Message = infos + ctrl.formData.Message;\r\n\r\n ctrl.formData.Object += ' - Ref. ' + ctrl.infos.ref + ' - ' + ctrl.infos.ville + ' (' + ctrl.infos.dep + ')';\r\n }\r\n\r\n ctrl.formData.errors = {};\r\n\r\n HttpService.post({\r\n url: '/' + RoutesService.getUrlByName('Candidature'),\r\n data: ctrl.formData\r\n })\r\n .then(function (response) {\r\n AppService.getTranslate()\r\n .then(function (translate) {\r\n if (response.status === 'OK') {\r\n smoothScroll(document.body);\r\n ctrl.messageSent = true;\r\n $timeout(function () {\r\n ctrl.messageSentOK = true;\r\n }, 350);\r\n } else {\r\n _.each(response.errors, function (error, key) {\r\n if (key === 'Global') {\r\n ctrl.formData.errors[key] = translate.errors[error.Errors[0].ErrorMessage];\r\n }\r\n });\r\n }\r\n $scope.$emit('showPageLoader', false);\r\n })\r\n .catch(function (error) {\r\n console.error(error);\r\n });\r\n })\r\n .catch(function (error) {\r\n console.error(error);\r\n });\r\n };\r\n }])\r\n /* @ngInject */\r\n .directive('contactPhone', [\"$timeout\", function ($timeout) {\r\n return {\r\n restrict: 'A',\r\n require: 'ngModel',\r\n link: function (scope, elt, attrs, modelCtrl) {\r\n var standard = /^[0-9().+ ]+$/;\r\n var regexp = standard;\r\n var specific = {\r\n 1: /^(01|02|03|04|05|09)( ?\\d){8}$/ // France métropolitaine \r\n };\r\n var stdPhoneMessage = 'Merci de saisir un numéro valide';\r\n var spePhoneMessages = {\r\n 1: 'Le numéro de téléphone renseigné
      ne correspond pas à un numéro
      de téléphone Fixe',\r\n };\r\n\r\n var watcher = scope.$watch(attrs.contactPhone, function (value) {\r\n regexp = (value in specific) ? specific[value] : standard;\r\n refreshField(value);\r\n });\r\n\r\n scope.$on('$destroy', function () {\r\n watcher();\r\n });\r\n\r\n modelCtrl.$validators.phone = phoneValidator;\r\n\r\n function phoneValidator(modelValue) {\r\n if (!modelValue) {\r\n return true;\r\n }\r\n\r\n return regexp.test(modelValue);\r\n }\r\n\r\n function refreshField(country) {\r\n modelCtrl.$setValidity('phone', true);\r\n $timeout(function () {\r\n scope.$apply(function () {\r\n var message = (country in spePhoneMessages) ? spePhoneMessages[country] : stdPhoneMessage;\r\n attrs.$set('phone-notification', message);\r\n modelCtrl.$validate();\r\n });\r\n });\r\n }\r\n }\r\n };\r\n }])\r\n\r\n /* @ngInject */\r\n .directive('contactMobile', [\"$timeout\", function ($timeout) {\r\n return {\r\n restrict: 'A',\r\n require: 'ngModel',\r\n link: function (scope, elt, attrs, modelCtrl) {\r\n var std = /^[0-9().+ ]+$/;\r\n var regex = std;\r\n var spe = {\r\n 1: /^(06|07)( ?\\d){8}$/ // France métropolitaine\r\n };\r\n var stdMobileMessage = 'Merci de saisir un numéro valide';\r\n var speMobileMessage = {\r\n 1: 'Le numéro de téléphone renseigné
      ne correspond pas à un numéro
      de téléphone portable',\r\n };\r\n\r\n var watcher = scope.$watch(attrs.contactMobile, function (value) {\r\n regex = (value in spe) ? spe[value] : std;\r\n refreshField(value);\r\n });\r\n\r\n scope.$on('$destroy', function () {\r\n watcher();\r\n });\r\n\r\n modelCtrl.$validators.mobile = mobileValidator;\r\n\r\n function mobileValidator(modelValue) {\r\n if (!modelValue) {\r\n return true;\r\n }\r\n\r\n return regex.test(modelValue);\r\n }\r\n\r\n function refreshField(country) {\r\n modelCtrl.$setValidity('mobile', true);\r\n $timeout(function () {\r\n scope.$apply(function () {\r\n var message = (country in speMobileMessage) ? speMobileMessage[country] : stdMobileMessage;\r\n attrs.$set('mobile-notification', message);\r\n modelCtrl.$validate();\r\n });\r\n });\r\n }\r\n }\r\n };\r\n }]);\r\n})();\r\n","(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('app.home', [])\r\n\r\n /* @ngInject */\r\n .directive('rbPolas', function () {\r\n return {\r\n restrict: 'A',\r\n link: function (scope, element) {\r\n\r\n element.find('.pola').each(function () {\r\n var $this = $(this);\r\n var scale = Number($this.data('scale')) / 100 || 1,\r\n rotation = $this.data('rotation') || 0,\r\n x = $this.data('x') || 0,\r\n y = $this.data('y') || 0,\r\n index = $this.data('index') || 1;\r\n if ($this.data('selected') === 'True') {\r\n scale = 1;\r\n rotation = 1;\r\n x = 0;\r\n y = 0;\r\n }\r\n $this.addClass('active').css({\r\n 'z-index': index,\r\n 'transform': 'scale(' + scale + ') rotate(' + rotation + 'deg) translate(' + x + 'px, ' + y + 'px)',\r\n '-webkit-transform': 'scale(' + scale + ') rotate(' + rotation + 'deg) translate(' + x + 'px, ' + y + 'px)'\r\n });\r\n });\r\n }\r\n };\r\n })\r\n\r\n .directive('lazyBg', function () {\r\n return {\r\n restrict: 'A',\r\n link: function (scope, element, attrs) {\r\n if (!scope.device.xxs) {\r\n scope.socialsBg = attrs.lazyBg;\r\n }\r\n }\r\n };\r\n })\r\n\r\n /* @ngInject */\r\n .directive('inspiration', [\"$timeout\", function ($timeout) {\r\n return {\r\n restrict: 'A',\r\n scope: true,\r\n link: function (scope, element, attrs) {\r\n var delay = attrs.inspiration * 60;\r\n scope.inspirIsInView = function (inView) {\r\n $timeout(function () {\r\n scope.inView = inView;\r\n }, inView ? delay : 0);\r\n };\r\n }\r\n };\r\n }])\r\n\r\n /* @ngInject */\r\n .controller('homeStoreController', [\"$timeout\", \"$location\", \"GMaps\", \"StoresService\", \"RoutesService\", \"GtmService\", function ($timeout, $location, GMaps, StoresService, RoutesService, GtmService) {\r\n var ctrl = this;\r\n\r\n ctrl.$onInit = function () {\r\n GMaps.get()\r\n .then(initAutocomplete)\r\n .catch(function (error) {\r\n console.error(error);\r\n });\r\n };\r\n\r\n ctrl.submitStore = function () {\r\n StoresService.setAddress(ctrl.search);\r\n $location.path('/' + RoutesService.getUrlByName('Stores'));\r\n\r\n GtmService.push({\r\n 'event': 'storeLocator',\r\n 'eventAction': 'Store locator',\r\n 'eventCategory': 'HP|Store locator',\r\n 'eventLabel': ctrl.search\r\n });\r\n };\r\n\r\n function initAutocomplete() {\r\n if (!$('#autocompleteGmapHome').data('init')) {\r\n $('#autocompleteGmapHome').data('init', true);\r\n var autocomplete = new google.maps.places.Autocomplete(document.getElementById('autocompleteGmapHome'), {\r\n types: ['geocode'],\r\n componentRestrictions: { country: 'fr' }\r\n });\r\n\r\n google.maps.event.addListener(autocomplete, 'place_changed', function () {\r\n $timeout(function () {\r\n ctrl.search = $('#autocompleteGmapHome').val();\r\n ctrl.submitStore();\r\n });\r\n });\r\n }\r\n }\r\n\r\n }]);\r\n\r\n})();\r\n","(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('app.password-revovery', [])\r\n\r\n .directive('accountPasswordRecovery', function () {\r\n return {\r\n restrict: 'E',\r\n bindToController: {\r\n token: '@',\r\n isTokenValid: '<'\r\n },\r\n controllerAs: 'passwordRecoveryCtrl',\r\n /* @ngInject */\r\n controller: [\"$element\", \"$rootScope\", \"$location\", \"HttpService\", \"AppService\", \"ModalService\", \"toastr\", function ($element, $rootScope, $location, HttpService, AppService, ModalService, toastr) {\r\n var ctrl = this;\r\n\r\n ctrl.$onInit = function () {\r\n ctrl.formData = {\r\n Token: ctrl.token,\r\n errors: []\r\n };\r\n\r\n if (!ctrl.isTokenValid) {\r\n $element.find('.invalid-token').find('a')\r\n .attr({\r\n 'class': 'btn-underline',\r\n 'href': ''\r\n })\r\n .click(function () {\r\n ModalService.show(\r\n '/Template/Authentication/ModalForgotPassword',\r\n null,\r\n null,\r\n 'forgotPasswordModalCtrl'\r\n );\r\n });\r\n }\r\n };\r\n\r\n ctrl.submit = function () {\r\n $rootScope.$broadcast('showPageLoader', true);\r\n\r\n ctrl.formData.errors = [];\r\n\r\n HttpService.post({\r\n url: '/ChangePassword',\r\n data: ctrl.formData\r\n })\r\n .then(function (response) {\r\n AppService.getTranslate()\r\n .then(function (translate) {\r\n if (response.status === 'OK') {\r\n toastr.success('', translate.messages.PasswordModified, {\r\n allowHtml: true,\r\n extraData: {\r\n template: 'toast_message.tpl'\r\n }\r\n });\r\n $location.path('/').replace();\r\n } else {\r\n _.each(response.errors, function (error) {\r\n ctrl.formData.errors.push(translate.errors[error.Errors[0].ErrorMessage]);\r\n });\r\n $rootScope.$broadcast('showPageLoader', false);\r\n }\r\n })\r\n .catch(function (error) {\r\n console.error(error);\r\n });\r\n })\r\n .catch(function (error) {\r\n console.error(error);\r\n });\r\n };\r\n\r\n }]\r\n };\r\n });\r\n\r\n})();\r\n","(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('app.payment-error', [])\r\n\r\n .directive('cartPaymentError', function () {\r\n return {\r\n restrict: 'A',\r\n controllerAs: 'cartCtrl',\r\n /* @ngInject */\r\n controller: [\"RoutesService\", function (RoutesService) {\r\n var ctrl = this;\r\n ctrl.backLink = '/' + RoutesService.getUrlByName('CartPayment');\r\n }]\r\n };\r\n });\r\n\r\n})();\r\n","(function () {\r\n 'use strict';\r\n\r\n customizationController.$inject = [\"$element\", \"$timeout\", \"$filter\", \"productService\"];\r\n angular\r\n .module('app.product.customization', [])\r\n\r\n .component('customization', {\r\n require: {\r\n productCtrl: '^^productDetail'\r\n },\r\n bindings: {\r\n model: '<',\r\n tooltip: '@'\r\n },\r\n /* @ngInject */\r\n templateUrl: [\"$sce\", function ($sce) {\r\n return $sce.trustAsResourceUrl('/Template/Product/ProductCustomization');\r\n }],\r\n controller: customizationController\r\n })\r\n\r\n .component('chequeCustomization', {\r\n require: {\r\n productCtrl: '^^productDetail'\r\n },\r\n bindings: {\r\n model: '<',\r\n tooltip: '@'\r\n },\r\n templateUrl: '/Template/Product/ProductChequeCustomization',\r\n controller: customizationController\r\n });\r\n\r\n /* @ngInject */\r\n function customizationController($element, $timeout, $filter, productService) {\r\n var ctrl = this;\r\n\r\n ctrl.$onInit = function () {\r\n ctrl.showTTCPrice = ctrl.productCtrl.showTTCPrice;\r\n ctrl.device = ctrl.productCtrl.device;\r\n $timeout(function () {\r\n var currentModel = productService.getProductCustomisation(ctrl.productCtrl.idGroup);\r\n if (currentModel) {\r\n ctrl.model = currentModel;\r\n } else {\r\n _.each(ctrl.model.Items, function (item) {\r\n if (!item.Group) {\r\n if (item.Field.CustomizationType === 1 && item.Field.Code.indexOf('Date') !== -1) {\r\n item.Field.isDate = true;\r\n item.Field.Value = new Date(new Date().setHours(23, 59));\r\n item.Field.reqPlaceholder = item.Field.Required ? ' *' : '';\r\n }\r\n if (item.Field.CustomizationType === 3) {\r\n _.each(item.Field.Items, function (option) {\r\n option.content = option.Designation;\r\n if (ctrl.showTTCPrice && option.AdditionalCostTTC) {\r\n option.content = option.Designation + ' (+ ' + $filter('price')(option.AdditionalCostTTC, 'value') + ')';\r\n option.content = option.content.replace(/\"/g, '\\'');\r\n }\r\n if (!ctrl.showTTCPrice && option.AdditionalCostHT) {\r\n option.content = option.Designation + ' (+ ' + $filter('price')(option.AdditionalCostHT, 'value', 'ht') + ')';\r\n option.content = option.content.replace(/\"/g, '\\'');\r\n }\r\n });\r\n }\r\n }\r\n if (item.Group) {\r\n _.each(item.Group.Fields, function (field) {\r\n if (field.CustomizationType === 1 && field.Code.indexOf('Date') !== -1) {\r\n field.isDate = true;\r\n field.reqPlaceholder = field.Required ? ' *' : '';\r\n }\r\n if (field.CustomizationType === 3) {\r\n _.each(field.Items, function (option) {\r\n option.content = option.Designation;\r\n if (ctrl.showTTCPrice && option.AdditionalCostTTC) {\r\n option.content = option.Designation + ' (+ ' + $filter('price')(option.AdditionalCostTTC, 'value') + ')';\r\n option.content = option.content.replace(/\"/g, '\\'');\r\n }\r\n if (!ctrl.showTTCPrice && option.AdditionalCostHT) {\r\n option.content = option.Designation + ' (+ ' + $filter('price')(option.AdditionalCostHT, 'value', 'ht') + ')';\r\n option.content = option.content.replace(/\"/g, '\\'');\r\n }\r\n });\r\n }\r\n });\r\n }\r\n });\r\n }\r\n refreshSelects();\r\n\r\n ctrl.update();\r\n ctrl.init = true;\r\n });\r\n\r\n };\r\n\r\n ctrl.dateOptions = {\r\n showWeeks: false,\r\n minDate: new Date(),\r\n yearRows: 2\r\n };\r\n ctrl.dateFormat = 'dd/MM/yyyy';\r\n\r\n ctrl.successfile = function (file, field) {\r\n field.Value = file.name;\r\n field.Comment = file.serverName;\r\n ctrl.update();\r\n };\r\n ctrl.removedfile = function (field) {\r\n field.Value = '';\r\n field.Comment = '';\r\n ctrl.update();\r\n };\r\n\r\n ctrl.update = function () {\r\n ctrl.productCtrl.setCustomization(ctrl.model, ctrl.tooltip);\r\n };\r\n\r\n // Functions\r\n\r\n function refreshSelects() {\r\n setTimeout(function () {\r\n $element.find('select.refresh').each(function (index, el) {\r\n $(el).selectpicker('refresh');\r\n });\r\n });\r\n }\r\n }\r\n})();\r\n","(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('app.product-inspirations', [])\r\n\r\n /* @ngInject */\r\n .directive('asideInspiration', function () {\r\n return {\r\n restrict: 'A',\r\n controllerAs: 'asideInspirationCtrl',\r\n /* @ngInject */\r\n controller: [\"$scope\", \"$element\", \"$window\", \"$timeout\", \"WindowEventsService\", function ($scope, $element, $window, $timeout, WindowEventsService) {\r\n var ctrl = this;\r\n\r\n WindowEventsService.listen(true, 'resize', initAside, 500);\r\n\r\n $scope.$on('$destroy', function () {\r\n WindowEventsService.listen(false, 'resize', initAside);\r\n });\r\n\r\n $timeout(initAside);\r\n\r\n function initAside() {\r\n if ($window.innerWidth >= 1830) {\r\n $element.children('.wrapper').children('.inner').removeClass('container');\r\n $timeout(function () {\r\n $element.addClass('active');\r\n ctrl.showAside = true;\r\n }, 3000);\r\n $timeout(function () {\r\n $scope.$emit('lazyImg:refresh');\r\n }, 3200);\r\n } else {\r\n ctrl.showAside = false;\r\n $element.removeAttr('style').children('.wrapper').children('.inner').addClass('container');\r\n }\r\n\r\n }\r\n }]\r\n };\r\n });\r\n\r\n})();\r\n","(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('app.product-kit', [])\r\n\r\n .component('kitComponents', {\r\n require: {\r\n productCtrl: '^^productDetail'\r\n },\r\n bindings: {\r\n idKit: '@',\r\n device: '<'\r\n },\r\n /* @ngInject */\r\n templateUrl: [\"$sce\", function ($sce) {\r\n return $sce.trustAsResourceUrl('/Template/Product/KitComponents');\r\n }],\r\n controllerAs: 'kitCtrl',\r\n /* @ngInject */\r\n controller: [\"$rootScope\", \"$element\", \"productService\", \"HttpService\", function ($rootScope, $element, productService, HttpService) {\r\n var ctrl = this;\r\n\r\n ctrl.attributes = {};\r\n\r\n ctrl.$onInit = function () {\r\n getComponents(ctrl.idKit);\r\n };\r\n\r\n ctrl.changeAttribute = function (uniqueId) {\r\n var current = _.find(ctrl.Components, function (component) {\r\n return component.uniqueId === uniqueId;\r\n });\r\n\r\n var url = current.URL || current.Product.URL;\r\n _.each(ctrl.attributes[uniqueId], function (attr) {\r\n url = attr === '' ? url : url + '/' + attr;\r\n });\r\n\r\n if (_.includes(url, '?')) {\r\n url += '&checkVisibility=false';\r\n } else {\r\n url += '?checkVisibility=false';\r\n }\r\n\r\n current.showLoader = true;\r\n HttpService.get({\r\n url: url,\r\n cache: true\r\n })\r\n .then(function (response) {\r\n current.Product = response;\r\n current.isPrimary = !current.Product.IsGroupingProduct || (current.Product.IsGroupingProduct && current.Product.SelectedProduct !== null);\r\n current.currentModel = current.Product.SelectedProduct || current.Product;\r\n updateComponent(current);\r\n current.showLoader = false;\r\n })\r\n .catch(function (error) {\r\n console.error(error);\r\n });\r\n };\r\n\r\n ctrl.selectCustomComponent = function (component, element) {\r\n if (element && !element.Product.AllowAddToCart) return;\r\n component.Product = !element ? null : element.Product;\r\n component.currentModel = !element ? null : component.Product;\r\n component.AdditionalCostHT = !element ? 0 : element.AdditionalCostHT;\r\n component.AdditionalCostTTC = !element ? 0 : element.AdditionalCostTTC;\r\n updateComponent(component);\r\n };\r\n\r\n // Functions\r\n\r\n function getComponents(id) {\r\n ctrl.showLoader = true;\r\n HttpService.post({\r\n url: '/Product/GetComponents',\r\n data: id\r\n })\r\n .then(function (response) {\r\n if (response.status === 'OK') {\r\n ctrl.Components = [];\r\n var customGroups = {},\r\n i = 0;\r\n _.each(response.results, function (component) {\r\n if (!component.Type) { // Pack standard\r\n var qty = component.KitQuantity;\r\n component = {\r\n Product: component,\r\n Quantity: qty\r\n };\r\n } else { // Pack Personnalisable\r\n if (!customGroups[component.Id]) {\r\n customGroups[component.Id] = true;\r\n component.groupTitle = component.Designation;\r\n component.groupFirstElement = true;\r\n }\r\n if ((component.Type === 901 || component.Type === 903) && !component.Product) return; // Fallback personnalisation sans article\r\n if (component.Type === 902) { // Liste d'articles\r\n var productDefault = _.find(component.Elements, function (element) {\r\n return element.Product.IDProduct === component.IDProductDefault && element.Product.AllowAddToCart;\r\n });\r\n if (component.groupFirstElement && productDefault) { // Si produit par défaut\r\n ctrl.selectCustomComponent(component, productDefault);\r\n }\r\n }\r\n }\r\n\r\n if (!((component.Type === 901 || component.Type === 903) && !component.Product)) { // Si le composant a bien un article on l'ajoute à la liste du controlleur\r\n component.uniqueId = component.Product ? component.Product.IDProduct + '_' + i : component.Id + '_' + i;\r\n ctrl.attributes[component.uniqueId] = [];\r\n initComponent(component);\r\n ctrl.Components.push(component);\r\n }\r\n\r\n i++;\r\n });\r\n\r\n refreshSelects();\r\n\r\n $rootScope.$broadcast('updateProduct');\r\n $rootScope.$broadcast('updateComment', productService.getProduct()[ctrl.idKit].Comment);\r\n }\r\n ctrl.showLoader = false;\r\n })\r\n .catch(function (error) {\r\n console.error(error);\r\n });\r\n }\r\n\r\n function initComponent(component) {\r\n if (component.Type === 901 || component.Type === 902) { // Pack personnalisable - Article simple ou liste d'articles\r\n component.isPrimary = true;\r\n component.currentModel = component.Product;\r\n } else if (component.Type === 903) { // Pack personnalisable - Article décliné\r\n component.isPrimary = !component.Product ? false : !component.Product.IsGroupingProduct || (component.Product.IsGroupingProduct && component.Product.SelectedProduct !== null);\r\n component.currentModel = !component.Product ? null : component.Product.SelectedProduct || component.Product;\r\n component.Attributes = !component.Product ? null : component.Product.Attributes;\r\n if (component.isPrimary) {\r\n var i = 0;\r\n _.each(component.Attributes, function (attr) {\r\n ctrl.attributes[component.uniqueId][i] = _.find(attr.Values, { 'Selected': true }).Key;\r\n i++;\r\n });\r\n }\r\n } else if (!component.Type) { // Pack standard -Article simple ou décliné\r\n component.isPrimary = !component.Product.IsGroupingProduct || (component.Product.IsGroupingProduct && component.Product.SelectedProduct !== null);\r\n component.currentModel = component.Product.SelectedProduct || component.Product;\r\n }\r\n\r\n productService.setKitElement(ctrl.idKit, component);\r\n }\r\n\r\n function updateComponent(component) {\r\n productService.setKitElement(ctrl.idKit, component);\r\n $rootScope.$broadcast('updateProduct');\r\n $rootScope.$broadcast('updateComment', productService.getProduct()[ctrl.idKit].Comment);\r\n }\r\n\r\n function refreshSelects() {\r\n setTimeout(function () {\r\n $element.find('select.refresh').each(function (index, el) {\r\n $(el).selectpicker('refresh');\r\n });\r\n });\r\n }\r\n }]\r\n });\r\n\r\n})();\r\n","(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('app.product.price', [])\r\n\r\n .directive('productPrice', function () {\r\n return {\r\n restrict: 'E',\r\n require: {\r\n productCtrl: '^^productDetail'\r\n },\r\n bindToController: {\r\n jsonPrice: '=',\r\n prices: '<',\r\n txtFirstRange: '@',\r\n txtRange: '@',\r\n txtLastRange: '@'\r\n },\r\n /* @ngInject */\r\n controller: [\"$timeout\", function ($timeout) {\r\n var ctrl = this;\r\n\r\n ctrl.$onInit = function () {\r\n $timeout(function () {\r\n var prices = [{\r\n qty: 1,\r\n range: [0],\r\n HasDiscount: ctrl.jsonPrice.HasDiscount,\r\n Discount: ctrl.jsonPrice.Discount,\r\n HTDiscountedPrice: ctrl.jsonPrice.HTDiscountedPrice,\r\n TTCDiscountedPrice: ctrl.jsonPrice.TTCDiscountedPrice,\r\n HTPrice: ctrl.jsonPrice.HTPrice,\r\n TTCPrice: ctrl.jsonPrice.TTCPrice\r\n }];\r\n if (ctrl.jsonPrice.DegressivePrice) {\r\n var i = 0;\r\n _.each(ctrl.jsonPrice.DegressivePrice, function (item, key) {\r\n\r\n prices[i].range.push(Number(key));\r\n if (i === 0) {\r\n prices[i].caption = ctrl.txtFirstRange.replace('{0}', String(key));\r\n } else {\r\n prices[i].caption = ctrl.txtRange.replace('{0}', String(prices[i].range[0])).replace('{1}', String(key - 1));\r\n }\r\n\r\n prices.push({\r\n qty: Number(key),\r\n range: [Number(key)],\r\n caption: ctrl.txtLastRange.replace('{0}', String(key)),\r\n HasDiscount: item.HasDiscount,\r\n Discount: item.Discount,\r\n HTDiscountedPrice: item.HTDiscountedPrice,\r\n TTCDiscountedPrice: item.TTCDiscountedPrice,\r\n HTPrice: item.HTPrice,\r\n TTCPrice: item.TTCPrice\r\n });\r\n\r\n i++;\r\n });\r\n }\r\n ctrl.prices = prices;\r\n ctrl.productCtrl.setPricesData(prices, ctrl.jsonPrice.EcoContribution);\r\n });\r\n };\r\n }]\r\n };\r\n });\r\n\r\n})();\r\n","(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('app.product-attributes', [])\r\n\r\n /* @ngInject */\r\n .directive('productAttributesSliders', function () {\r\n return {\r\n restrict: 'E',\r\n require: {\r\n productCtrl: '?^^productDetail'\r\n },\r\n bindToController: {\r\n sliders: '<'\r\n },\r\n controllerAs: 'attributesCtrl',\r\n /* @ngInject */\r\n controller: function () {\r\n var ctrl = this;\r\n\r\n ctrl.$onInit = function () {\r\n ctrl.sliders = _.cloneDeep(ctrl.sliders);\r\n ctrl.productCtrl.attributes = [];\r\n _.each(ctrl.sliders, function (slider, key) {\r\n slider.key = key;\r\n var steps = [];\r\n _.each(slider.Values, function (attr, index) {\r\n attr.value = parseInt(attr.Value);\r\n if (index === 0) {\r\n slider.min = attr.value;\r\n }\r\n if (index === slider.Values.length - 1) {\r\n slider.max = attr.value;\r\n }\r\n steps.push({\r\n value: attr.value,\r\n key: attr.Key\r\n });\r\n if (attr.Selected) {\r\n slider.value = attr.value;\r\n slider.selected = true;\r\n }\r\n slider.options = {\r\n stepsArray: steps,\r\n translate: function (value) {\r\n return !slider.selected ? '' : value + ' €';\r\n },\r\n onStart: function () {\r\n slider.selected = true;\r\n },\r\n // eslint-disable-next-line\r\n onEnd: function (id, value) {\r\n if (value === slider.lastValue) return;\r\n slider.lastValue = value;\r\n ctrl.productCtrl.attributes[slider.key] = _.find(steps, {'value': value}).key;\r\n ctrl.productCtrl.changeAttribute();\r\n }\r\n };\r\n });\r\n });\r\n\r\n console.info({ctrl: ctrl});\r\n };\r\n }\r\n };\r\n });\r\n\r\n})();\r\n","(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('app.product-gallery', [])\r\n\r\n /* @ngInject */\r\n .directive('productGallery', [\"$rootScope\", \"$compile\", \"$timeout\", \"CdnService\", function ($rootScope, $compile, $timeout, CdnService) {\r\n var directive = {\r\n restrict: 'A',\r\n link: link\r\n };\r\n return directive;\r\n\r\n function link(scope, element, attrs) {\r\n\r\n var $main = element.find('.main-picture'),\r\n $img = $main.find('.main-img'),\r\n $sub = element.find('.sub-pictures'),\r\n $video = element.find('.main-video');\r\n\r\n var openLightGallery = function () {\r\n var dynamicEl = [];\r\n $sub.find('a').not('.video').each(function () {\r\n var $this = $(this);\r\n dynamicEl.push({ thumb: $this.data('zoom-thumb-url'), src: $this.data('zoom-url') });\r\n });\r\n $sub\r\n .on('onCloseAfter.lg', function (event) {\r\n $(event.target).removeData('lightGallery');\r\n })\r\n .lightGallery({\r\n nextHtml: '',\r\n prevHtml: '',\r\n fullscreenHtml: '',\r\n closeHtml: '',\r\n dynamic: true,\r\n dynamicEl: dynamicEl,\r\n index: $main.data('index'),\r\n mode: 'lg-slide',\r\n startClass: 'active',\r\n thumbnail: navigator.userAgent.toLowerCase().match(/(iphone|ipod)/) ? false : true\r\n });\r\n };\r\n\r\n /* suppression du loader lorsque l'image est chargée */\r\n $img.on('load', function () {\r\n scope.$apply(function () {\r\n scope.productCtrl.galleryImgLoader = false;\r\n });\r\n });\r\n\r\n scope.$on('initZoom', function (event) {\r\n scope.productCtrl.galleryImgLoader = true;\r\n CdnService.get(attrs.zoomId, attrs.zoomSize, attrs.zoomDesignation)\r\n .then(function (res) {\r\n $main.children('.inner').zoom({\r\n url: res,\r\n touch: false,\r\n duration: 400,\r\n callback: function () {\r\n scope.$apply(function () {\r\n scope.productCtrl.galleryImgLoader = false;\r\n });\r\n },\r\n onStartZoom: function () {\r\n $(this).addClass('active');\r\n },\r\n onZoomOut: function () {\r\n $(this).removeClass('active');\r\n }\r\n });\r\n })\r\n .catch(function (err) {\r\n console.error(err);\r\n });\r\n });\r\n\r\n /* détruit le plugin Zoom */\r\n scope.$on('$destroy', function (event) {\r\n $main.children('.inner').trigger('zoom.destroy');\r\n });\r\n\r\n /* clic sur les images secondaires */\r\n $sub.on('mousedown', '.visual', function (event) {\r\n event.preventDefault();\r\n var $this = $(this);\r\n\r\n /* class active sur image sélectionnée */\r\n $sub.find('.visual').removeClass('active');\r\n $this.addClass('active');\r\n\r\n if ($this.hasClass('video')) {\r\n $main.addClass('hidden');\r\n $video.removeClass('hidden');\r\n var html = '';\r\n var el = $compile(html)(scope);\r\n $video.children('.inner').html(el);\r\n return;\r\n }\r\n\r\n $main.removeClass('hidden');\r\n $video.addClass('hidden').html('
      ');\r\n\r\n /* définition de l'index pour galerie plein écran */\r\n $main.data('index', $this.parent().index());\r\n\r\n /* ajoute le loader */\r\n scope.$apply(function () {\r\n scope.productCtrl.galleryImgLoader = true;\r\n });\r\n\r\n /* change les src de l'image principale et du Zoom */\r\n $img.attr('src', $this.data('size-url'));\r\n $main.find('.zoomImg').attr('src', $this.data('zoom-url'));\r\n });\r\n\r\n /* clic sur l'image principale - ouvre la galerie plein écran */\r\n $main.data('index', 0).click(function (event) {\r\n if (typeof $.fn.lightGallery === 'undefined') {\r\n $timeout(function () {\r\n $rootScope.$broadcast('showPageLoader', true);\r\n });\r\n /* chargement ajax du plugin Lightgallery */\r\n $.ajax({\r\n url: '/js/jquery.lightgallery.min.js',\r\n dataType: 'script',\r\n cache: true,\r\n success: function () {\r\n $timeout(function () {\r\n $rootScope.$broadcast('showPageLoader', false);\r\n });\r\n openLightGallery();\r\n }\r\n });\r\n } else {\r\n openLightGallery();\r\n }\r\n });\r\n }\r\n }]);\r\n})();\r\n","(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('app.product-share', [])\r\n\r\n .directive('socialshare', function () {\r\n return {\r\n restrict: 'A',\r\n scope: true,\r\n bindToController: {\r\n socialshare: '@',\r\n socialshareUrl: '@',\r\n socialshareText: '@?',\r\n socialshareMedia: '@?',\r\n socialshareHashtags: '@?',\r\n socialshareEmail: '@?',\r\n modalTitle: '@',\r\n resultMessage: '@?'\r\n },\r\n /* @ngInject */\r\n controller: [\"$element\", \"$window\", \"ModalService\", function ($element, $window, ModalService) {\r\n var ctrl = this;\r\n\r\n var appId = '143402606292797';\r\n\r\n $element.on('click', function () {\r\n switch (ctrl.socialshare) {\r\n case 'facebook':\r\n facebookShare();\r\n break;\r\n case 'twitter':\r\n twitterShare();\r\n break;\r\n case 'googleplus':\r\n googleplusShare();\r\n break;\r\n case 'email':\r\n emailShare();\r\n break;\r\n // no default\r\n }\r\n });\r\n\r\n function facebookShare() {\r\n var winWidth = 673,\r\n winHeight = 413;\r\n\r\n var urlString = 'https://www.facebook.com/dialog/share?app_id=' + appId + '&display=popup';\r\n urlString += '&href=' + encodeURIComponent(ctrl.socialshareUrl);\r\n urlString += ctrl.socialshareText ? '&title=' + encodeURIComponent(ctrl.socialshareText) : '';\r\n urlString += ctrl.socialshareHashtags ? '&hashtag=' + encodeURIComponent(ctrl.socialshareHashtags) : '';\r\n urlString += '&picture=';\r\n if (ctrl.socialshareMedia) urlString += encodeURIComponent(ctrl.socialshareMedia);\r\n\r\n $window.open(\r\n urlString,\r\n 'Facebook', 'toolbar=0,status=0,resizable=yes,width=' + winWidth + ',height=' + winHeight +\r\n ',top=' + ($window.innerHeight - winHeight) / 2 + ',left=' + ($window.innerWidth - winWidth) / 2);\r\n }\r\n function twitterShare() {\r\n var winWidth = 673,\r\n winHeight = 487;\r\n\r\n var urlString = 'https://www.twitter.com/intent/tweet?';\r\n urlString += ctrl.socialshareText ? 'text=' + encodeURIComponent(ctrl.socialshareText) : '';\r\n urlString += ctrl.socialshareHashtags ? '&hashtags=' + encodeURIComponent(ctrl.socialshareHashtags) : '';\r\n urlString += '&url=' + encodeURIComponent(ctrl.socialshareUrl);\r\n\r\n $window.open(\r\n urlString,\r\n 'Twitter', 'toolbar=0,status=0,resizable=yes,width=' + winWidth + ',height=' + winHeight +\r\n ',top=' + ($window.innerHeight - winHeight) / 2 + ',left=' + ($window.innerWidth - winWidth) / 2);\r\n }\r\n function googleplusShare() {\r\n var winWidth = 400,\r\n winHeight = 640;\r\n\r\n $window.open(\r\n 'https://plus.google.com/share?url=' + encodeURIComponent(ctrl.socialshareUrl),\r\n 'Google+', 'toolbar=0,status=0,resizable=yes,width=' + winWidth + ',height=' + winHeight +\r\n ',top=' + ($window.innerHeight - winHeight) / 2 + ',left=' + ($window.innerWidth - winWidth) / 2);\r\n }\r\n function emailShare() {\r\n ModalService.show(\r\n '/Template/Modal/ModalSendByEMail',\r\n {\r\n ViewEmail: ctrl.socialshareEmail,\r\n Url: ctrl.socialshareUrl\r\n },\r\n null,\r\n 'modalSendByEMailCtrl',\r\n null,\r\n null,\r\n {\r\n modalTitle: ctrl.modalTitle,\r\n resultMessage: ctrl.resultMessage\r\n }\r\n );\r\n }\r\n\r\n }]\r\n };\r\n });\r\n\r\n})();\r\n","(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('app.product', ['app.bxslider'])\r\n\r\n /* @ngInject */\r\n .directive('productDetail', function () {\r\n return {\r\n restrict: 'E',\r\n scope: false,\r\n bindToController: {\r\n device: '<',\r\n url: '@productUrl',\r\n id: ' 1) startAnimate();\r\n } else {\r\n $element.parent().addClass('top-promos-closed');\r\n }\r\n }, 3000);\r\n\r\n };\r\n\r\n ctrl.close = function () {\r\n ctrl.active = 2;\r\n $element.parent().addClass('top-promos-closed');\r\n $timeout(function () {\r\n $rootScope.$broadcast('topUpdate');\r\n }, 400, false);\r\n stopAnimate();\r\n var now = new Date(),\r\n exp = new Date(now.getFullYear(), now.getMonth() + 1, now.getDate());\r\n $cookies.put('cookieTopPromos', 'true', {\r\n path: '/',\r\n expires: exp\r\n });\r\n };\r\n\r\n ctrl.open = function () {\r\n ctrl.active = 1;\r\n $element.parent().removeClass('top-promos-closed');\r\n $timeout(function () {\r\n $rootScope.$broadcast('topUpdate');\r\n }, 400, false);\r\n $cookies.remove('cookieTopPromos');\r\n startAnimate();\r\n };\r\n\r\n // ////\r\n\r\n function startAnimate() {\r\n interval = $interval(function () {\r\n ctrl.index = ctrl.index === ctrl.count - 1 ? 0 : ctrl.index + 1;\r\n }, 5000);\r\n\r\n ctrl.$onDestroy = function () {\r\n stopAnimate();\r\n };\r\n }\r\n function stopAnimate() {\r\n $interval.cancel(interval);\r\n }\r\n }]\r\n\r\n };\r\n });\r\n})();\r\n","/*\r\n * Link directive\r\n * Version 1.0.0\r\n * Octave\r\n **/\r\n\r\n(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('app.switch', [])\r\n /* @ngInject */\r\n .directive('switchWebsite', function () {\r\n var directive = {\r\n restrict: 'A',\r\n controllerAs: 'switchCtrl',\r\n /* @ngInject */\r\n controller: [\"$rootScope\", \"$scope\", \"HttpService\", function ($rootScope, $scope, HttpService) {\r\n\r\n var ctrl = this;\r\n\r\n var isActive = false;\r\n\r\n\r\n ctrl.switchWebSite = function (keySiteInstance) {\r\n $scope.showLoader = true;\r\n\r\n HttpService.post({\r\n url: '/Switch/SwitchInstance',\r\n data: { keyWebInstanceSite: keySiteInstance }\r\n }\r\n ).then(function (data) {\r\n $scope.showLoader = false;\r\n\r\n console.log(keyWebInstanceSite);\r\n\r\n\r\n\r\n if (data.status === 'OK' && data.url !== '') {window.location.href = data.url;}\r\n }).catch(function (error) {\r\n console.error(error);\r\n });\r\n };\r\n\r\n }]\r\n };\r\n\r\n return directive;\r\n });\r\n\r\n})();\r\n","/*\r\n * Nav directive\r\n * Version 1.0.0\r\n * Octave\r\n * Modified from .\r\n **/\r\n\r\n(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('main.nav', [])\r\n\r\n /* @ngInject */\r\n .directive('rbMainNav', function () {\r\n var directive = {\r\n restrict: 'A',\r\n bindToController: true,\r\n /* @ngInject */\r\n controller: [\"$scope\", \"$element\", \"$timeout\", \"WindowEventsService\", function ($scope, $element, $timeout, WindowEventsService) {\r\n var ctrl = this;\r\n\r\n ctrl.open = false;\r\n ctrl.children = [];\r\n\r\n ctrl.toggle = function () {\r\n ctrl.open = !ctrl.open;\r\n var i, len = ctrl.children.length;\r\n for (i = 0; i < len; i++) {\r\n ctrl.children[i].open = false;\r\n }\r\n };\r\n\r\n var $nav = $element.children('.nav'),\r\n size = parseFloat($nav.css('font-size')),\r\n padding = parseFloat($nav.children().eq(0).children('span').css('padding-left')),\r\n origSize = size;\r\n ctrl.style = '';\r\n ctrl.menuStyle = '';\r\n resizeMenus();\r\n\r\n // Events\r\n\r\n WindowEventsService.listen(true, 'resize', resize, 500);\r\n\r\n $scope.$on('$destroy', function () {\r\n WindowEventsService.listen(false, 'resize', resize);\r\n });\r\n\r\n // Functions\r\n\r\n function resize() {\r\n ctrl.style = '';\r\n ctrl.menuStyle = '';\r\n $timeout(function () {\r\n size = parseFloat($nav.css('font-size'));\r\n padding = parseFloat($nav.children().eq(0).children('span').css('padding-left'));\r\n ctrl.active = false;\r\n size = origSize;\r\n $timeout(resizeMenus);\r\n });\r\n }\r\n\r\n function resizeMenus() {\r\n if ($scope.device.desktop) {\r\n if ($nav.width() > $element.width()) {\r\n if (padding > 5) {\r\n padding -= 1;\r\n ctrl.menuStyle = {'padding-left': padding + 'px', 'padding-right': padding + 'px'};\r\n } else {\r\n size -= 0.5;\r\n ctrl.style = {'font-size': size + 'px'};\r\n }\r\n $timeout(resizeMenus);\r\n } else {\r\n ctrl.active = true;\r\n }\r\n } else {\r\n ctrl.style = '';\r\n ctrl.menuStyle = '';\r\n ctrl.active = true;\r\n }\r\n }\r\n\r\n }],\r\n controllerAs: 'mainNavCtrl'\r\n };\r\n return directive;\r\n })\r\n\r\n /* @ngInject */\r\n .directive('rbNav', [\"$document\", \"$animate\", function ($document, $animate) {\r\n var directive = {\r\n restrict: 'A',\r\n scope: {\r\n psOpen: '=?'\r\n },\r\n link: link\r\n };\r\n return directive;\r\n\r\n function link(scope, element) {\r\n\r\n element.addClass('ng-pageslide');\r\n\r\n // DOM manipulation\r\n\r\n var slider, body, $body;\r\n\r\n body = document.body;\r\n $body = $(body);\r\n\r\n function onBodyClick(e) {\r\n if (scope.psOpen && !slider.contains(e.target)) {\r\n scope.$apply(function () {\r\n scope.psOpen = false;\r\n });\r\n }\r\n }\r\n\r\n $body.addClass('offcanvas');\r\n\r\n slider = element[0];\r\n\r\n if (slider.children.length === 0) {\r\n throw new Error('You need to have content inside the ');\r\n }\r\n\r\n // Closed\r\n function psClose() {\r\n if ($body.hasClass('offcanvas-left')) {\r\n $('.move-out').removeClass('move-out'); // TODO\r\n $animate.removeClass(body, 'offcanvas-left').then(closeDone);\r\n $document.off('click', onBodyClick);\r\n }\r\n }\r\n function closeDone() {\r\n scope.psOpen = false;\r\n }\r\n // Open\r\n function psOpen() {\r\n if (!$body.hasClass('offcanvas-left')) {\r\n $animate.addClass(body, 'offcanvas-left').then(openDone);\r\n $document.on('click', onBodyClick);\r\n }\r\n }\r\n function openDone() {\r\n scope.psOpen = true;\r\n }\r\n\r\n // Watchers\r\n\r\n scope.$watch('psOpen', function (value) {\r\n if (!!value) {\r\n psOpen();\r\n } else {\r\n psClose();\r\n }\r\n });\r\n\r\n // Events\r\n\r\n scope.$on('$destroy', function () {\r\n if (slider.parentNode === body) {\r\n $document.off('click', onBodyClick);\r\n }\r\n });\r\n\r\n scope.$on('$locationChangeStart', function () {\r\n psClose();\r\n });\r\n }\r\n\r\n }])\r\n\r\n /* @ngInject */\r\n .directive('rbMenu', [\"$animate\", \"$injector\", \"$location\", function ($animate, $injector, $location) {\r\n var $animateCss = $injector.has('$animateCss') ? $injector.get('$animateCss') : null;\r\n var directive = {\r\n restrict: 'A',\r\n scope: true,\r\n link: link\r\n };\r\n return directive;\r\n\r\n function link(scope, element) {\r\n\r\n scope.mainNavCtrl.children.push(scope);\r\n //\r\n scope.open = false;\r\n scope.element = element;\r\n\r\n initMenu();\r\n initLevelsLinks();\r\n\r\n scope.expandMenu = function () {\r\n var $menu = element.addClass('in').children('.menu');\r\n element.children('a').addClass('in');\r\n\r\n $menu.addClass('collapsing')\r\n .attr('aria-expanded', true)\r\n .attr('aria-hidden', false);\r\n\r\n if (scope.device.isTouch) {\r\n $('#main-nav').addClass('in');\r\n $menu.after('
      ');\r\n element.children('.backdrop').on('click', function () {\r\n $(this).remove();\r\n scope.reduceMenu();\r\n });\r\n }\r\n\r\n function expandDone() {\r\n $menu.removeClass('collapsing')\r\n .css({height: 'auto'});\r\n }\r\n\r\n if ($animateCss) {\r\n $animateCss($menu, {\r\n addClass: 'in',\r\n easing: 'ease',\r\n to: { height: $menu[0].scrollHeight + 'px' }\r\n }).start().finally(expandDone);\r\n } else {\r\n $animate.addClass($menu, 'in', {\r\n to: { height: $menu[0].scrollHeight + 'px' }\r\n }).then(expandDone);\r\n }\r\n\r\n setTimeout(function () {\r\n $(window).trigger('scroll');\r\n }, 350);\r\n };\r\n\r\n scope.reduceMenu = function () {\r\n var $menu = element.removeClass('in').children('.menu');\r\n if (!$menu.length) return;\r\n\r\n element.children('a').removeClass('in');\r\n element.children('.backdrop').remove();\r\n $('#main-nav').removeClass('in');\r\n\r\n $menu.css({height: $menu[0].scrollHeight + 'px'})\r\n .addClass('collapsing')\r\n .attr('aria-expanded', false)\r\n .attr('aria-hidden', true);\r\n\r\n function collapseDone() {\r\n $menu.css({height: '0'})\r\n .removeClass('collapsing');\r\n }\r\n\r\n if ($animateCss) {\r\n $animateCss($menu, {\r\n removeClass: 'in',\r\n to: {height: '0'}\r\n }).start().finally(collapseDone);\r\n } else {\r\n $animate.removeClass($menu, 'in', {\r\n to: {height: '0'}\r\n }).then(collapseDone);\r\n }\r\n };\r\n\r\n scope.openMenu = function (event) {\r\n if (window.isBot || window.isCache) return;\r\n event.preventDefault();\r\n if (!scope.device.desktop) {\r\n scope.open = !scope.open;\r\n element\r\n .siblings().addClass('move-out').end()\r\n .closest('.nav').scrollTop(0);\r\n } else {\r\n if (element.hasClass('level1')) {\r\n var $menu = element.children('.menu');\r\n if (!$menu.hasClass('collapsing') && !$menu.hasClass('in')) {\r\n var ctrl = scope.mainNavCtrl,\r\n i, len = ctrl.children.length;\r\n for (i = 0; i < len; i++) {\r\n if (ctrl.children[i].element !== element && ctrl.children[i].element.children('.menu.in').length) {\r\n ctrl.children[i].reduceMenu();\r\n }\r\n }\r\n scope.expandMenu();\r\n }\r\n return;\r\n }\r\n\r\n $location.path(element.children('a').attr('href'));\r\n }\r\n };\r\n\r\n scope.backMenu = function (event) {\r\n event.preventDefault();\r\n scope.open = !scope.open;\r\n element.siblings().removeClass('move-out');\r\n };\r\n\r\n scope.closeMenu = function () {\r\n scope.mainNavCtrl.open = false;\r\n };\r\n\r\n // Functions\r\n\r\n function initMenu() {\r\n if (scope.device.isTouch || !scope.device.desktop || !element.hasClass('level1')) return;\r\n\r\n hoverintent(element[0],\r\n function () {\r\n scope.expandMenu();\r\n },\r\n function () {\r\n scope.reduceMenu();\r\n }).options({\r\n timeout: 200,\r\n interval: 100\r\n });\r\n }\r\n function initLevelsLinks() {\r\n element.find('.menu-list').on('click', 'a', function (event) {\r\n if (scope.device.desktop) {\r\n scope.reduceMenu();\r\n }\r\n });\r\n }\r\n\r\n }\r\n\r\n }]);\r\n\r\n})();\r\n","(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('app.club-gourmand', [])\r\n\r\n .directive('clubGourmand', function () {\r\n return {\r\n restrict: 'A',\r\n bindToController: {\r\n memberYet: '@'\r\n },\r\n controllerAs: 'clubCtrl',\r\n /* @ngInject */\r\n controller: [\"$scope\", \"$rootScope\", \"$compile\", \"AppService\", \"LogService\", \"ModalService\", \"HttpService\", \"toastr\", function ($scope, $rootScope, $compile, AppService, LogService, ModalService, HttpService, toastr) {\r\n var ctrl = this;\r\n\r\n updateCtrl();\r\n\r\n ctrl.join = function () {\r\n if (!ctrl.isLogged) {\r\n LogService.redirect = {\r\n url: null,\r\n action: function () {\r\n updateCtrl(true);\r\n }\r\n };\r\n ModalService.close();\r\n ModalService.show(\r\n '/Template/Authentication/ModalAuthentication',\r\n null,\r\n null,\r\n 'loginModalCtrl',\r\n null,\r\n null,\r\n null,\r\n function () {\r\n LogService.redirect = null;\r\n }\r\n );\r\n } else {\r\n setMember(ctrl.idCard);\r\n }\r\n };\r\n\r\n function updateCtrl(afterLogin) {\r\n AppService.getParams()\r\n .then(function (params) {\r\n ctrl.isLogged = params.IsLogged;\r\n ctrl.isNotMember = params.Visitor.IDCardType !== 3;\r\n ctrl.idCard = params.Visitor.IDCard;\r\n\r\n if (afterLogin) {\r\n if (ctrl.isNotMember) {\r\n setMember(ctrl.idCard);\r\n } else {\r\n toastr.success('', ctrl.memberYet, {\r\n allowHtml: true,\r\n extraData: {\r\n template: 'toast_message.tpl'\r\n }\r\n });\r\n }\r\n }\r\n });\r\n }\r\n\r\n function setMember(id) {\r\n $rootScope.$broadcast('showPageLoader', true);\r\n HttpService.post({\r\n url: '/SetMember',\r\n data: id\r\n })\r\n .then(function (response) {\r\n if (response.status === 'OK') {\r\n AppService.updateParams(response.results);\r\n $rootScope.$broadcast('cartUpdate');\r\n $rootScope.$broadcast('showPageLoader', false);\r\n\r\n ctrl.isNotMember = false;\r\n ModalService.close();\r\n ModalService.show(\r\n '/Template/Modal/ModalCms',\r\n {\r\n url: '/page-cms/le-club-gourmand-felicitations'\r\n },\r\n null,\r\n 'modalCtrl',\r\n null,\r\n null,\r\n {\r\n modalTitle: '',\r\n modalAutoScroll: false\r\n }\r\n );\r\n\r\n if ($('#clubGourmand').length) {\r\n HttpService.post({\r\n url: '/ClubGourmandGetProductView',\r\n data: $('#clubGourmand').data('id')\r\n })\r\n .then(function (content) {\r\n var el = $compile(content)($scope);\r\n $('#clubGourmand').html(el);\r\n })\r\n .catch(function (error) {\r\n console.error(error);\r\n });\r\n }\r\n\r\n } else {\r\n $rootScope.$broadcast('showPageLoader', false);\r\n }\r\n })\r\n .catch(function (error) {\r\n console.error(error);\r\n });\r\n }\r\n }]\r\n };\r\n })\r\n\r\n .directive('clubGourmandLanding', function () {\r\n return {\r\n restrict: 'A',\r\n controllerAs: 'clubCtrl',\r\n /* @ngInject */\r\n controller: [\"$rootScope\", \"$location\", \"$templateCache\", \"$window\", \"RoutesService\", \"LogService\", \"RoutingService\", function ($rootScope, $location, $templateCache, $window, RoutesService, LogService, RoutingService) {\r\n var ctrl = this;\r\n var url = $location.path();\r\n\r\n ctrl.linkCreate = '/' + RoutesService.getUrlByName('AccountCreatePrivate');\r\n\r\n LogService.redirect = {\r\n action: function () {\r\n $rootScope.$broadcast('showPageLoader', true);\r\n if ($location.path() === url) {\r\n $templateCache.remove(url + '?t');\r\n $window.location.href = $location.path();\r\n } else {\r\n $location.path(url);\r\n }\r\n }\r\n };\r\n\r\n // eslint-disable-next-line\r\n var unevent = $rootScope.$on('$locationChangeStart', function (event, next, current) {\r\n RoutingService.scrollCache[RoutingService.getPath(current)] = 0;\r\n });\r\n\r\n ctrl.$onDestroy = function () {\r\n unevent();\r\n };\r\n }]\r\n };\r\n })\r\n\r\n .directive('clubGourmandCreate', function () {\r\n return {\r\n restrict: 'A',\r\n bindToController: {\r\n url: '@'\r\n },\r\n controllerAs: 'clubCtrl',\r\n /* @ngInject */\r\n controller: [\"$rootScope\", \"$location\", \"$templateCache\", \"LogService\", function ($rootScope, $location, $templateCache, LogService) {\r\n var ctrl = this;\r\n\r\n ctrl.$onInit = function () {\r\n LogService.redirect = {\r\n action: function () {\r\n $rootScope.$broadcast('showPageLoader', true);\r\n $templateCache.remove(ctrl.url);\r\n $location.path(ctrl.url);\r\n }\r\n };\r\n };\r\n\r\n }]\r\n };\r\n })\r\n\r\n .directive('clubGourmandRegister', function () {\r\n return {\r\n restrict: 'A',\r\n controllerAs: 'clubCtrl',\r\n /* @ngInject */\r\n controller: [\"$scope\", \"$rootScope\", \"$location\", \"$templateCache\", \"$window\", \"AppService\", \"HttpService\", \"ModalService\", \"RoutesService\", function ($scope, $rootScope, $location, $templateCache, $window, AppService, HttpService, ModalService, RoutesService) {\r\n var ctrl = this;\r\n ctrl.check = true;\r\n\r\n ctrl.submit = function () {\r\n if (ctrl.check) {\r\n AppService.getParams()\r\n .then(function (params) {\r\n setMember(params.Visitor.IDCard);\r\n });\r\n } else {\r\n $location.path('/' + RoutesService.getUrlByName('PrivateAccessDenied'));\r\n }\r\n };\r\n\r\n function setMember(id) {\r\n $rootScope.$broadcast('showPageLoader', true);\r\n HttpService.post({\r\n url: '/SetMember',\r\n data: id\r\n })\r\n .then(function (response) {\r\n if (response.status === 'OK') {\r\n AppService.updateParams(response.results);\r\n $rootScope.$broadcast('cartUpdate');\r\n\r\n $templateCache.remove($location.path());\r\n $window.location.href = $location.path();\r\n\r\n ModalService.show(\r\n '/Template/Modal/ModalCms',\r\n {\r\n url: '/page-cms/le-club-gourmand-felicitations'\r\n },\r\n null,\r\n 'modalCtrl',\r\n null,\r\n null,\r\n {\r\n modalTitle: '',\r\n modalAutoScroll: false\r\n }\r\n );\r\n\r\n } else {\r\n $rootScope.$broadcast('showPageLoader', false);\r\n }\r\n })\r\n .catch(function (error) {\r\n console.error(error);\r\n });\r\n }\r\n }]\r\n };\r\n });\r\n\r\n})();\r\n","(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('module.modal-store-choice', [])\r\n\r\n /* @ngInject */\r\n .controller('modalStoreChoiceCtrl', [\"data\", \"device\", \"options\", \"HttpService\", \"AppService\", function (data, device, options, HttpService, AppService) {\r\n var ctrl = this;\r\n ctrl.data = data;\r\n ctrl.device = device;\r\n ctrl.options = options;\r\n\r\n ctrl.selectStore = function (idStore) {\r\n ctrl.loading = true;\r\n HttpService.post({\r\n url: ctrl.data.isAccountUpdate || ctrl.data.isAccountCreate ? '/Store/AccountSelect' : '/Store/Select',\r\n data: {\r\n IDStore: idStore,\r\n IDProduct: ctrl.data.idProduct,\r\n IsAccountCreate: ctrl.data.isAccountCreate ? true : false\r\n }\r\n })\r\n .then(function (response) {\r\n AppService.updateStore(response.VisitorContext);\r\n ctrl.loading = false;\r\n if (ctrl.data.targetCtrl.ClickAndCollect) {\r\n ctrl.data.targetCtrl.ClickAndCollect.setStore(ctrl.data.targetCtrl, response);\r\n }\r\n else {\r\n ctrl.data.targetCtrl.setStore(response);\r\n }\r\n if (ctrl.data.action) {\r\n ctrl.data.action();\r\n }\r\n })\r\n .catch(function (error) {\r\n console.error(error);\r\n });\r\n };\r\n\r\n }]);\r\n\r\n})();\r\n","(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('module.modal-store-map', [])\r\n\r\n /* @ngInject */\r\n .controller('modalStoreMapCtrl', [\"data\", \"device\", \"options\", function (data, device, options) {\r\n var ctrl = this;\r\n ctrl.data = data;\r\n ctrl.device = device;\r\n ctrl.options = options;\r\n\r\n }])\r\n\r\n .directive('storeMap', function () {\r\n return {\r\n restrict: 'E',\r\n bindToController: {\r\n device: '<',\r\n model: '' + day.Exception + '' : obj.value;\r\n } else {\r\n obj.value = day.Exception ? '' + day.Exception + '' : strClosed;\r\n }\r\n tmp.push(obj);\r\n });\r\n point.OpeningHours = tmp;\r\n }\r\n }\r\n };\r\n }]);\r\n\r\n})();\r\n","(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('app.stores', [])\r\n\r\n .directive('stores', function () {\r\n return {\r\n restrict: 'E',\r\n bindToController: {\r\n device: '<',\r\n modalCtrl: '= 1000) {\r\n var km = (point.Distance / 1000).toFixed(2);\r\n km = km === Math.floor(km) ? Math.floor(km) : km;\r\n km = km > 10 ? Math.floor(km) : km;\r\n point.DistanceKm = String(km).replace('.', ',');\r\n }\r\n if (minDist === -1 || point.Distance <= minDist) {\r\n minDist = point.Distance;\r\n nearPoint = point;\r\n }\r\n }\r\n ctrl.markers.push({\r\n id: point.IDCard,\r\n name: point.FullName,\r\n lat: point.Coordinate.Latitude,\r\n lng: point.Coordinate.Longitude,\r\n selected: false\r\n });\r\n bounds.extend(new google.maps.LatLng(point.Coordinate.Latitude, point.Coordinate.Longitude));\r\n });\r\n\r\n ctrl.options = {\r\n map: {\r\n center: bounds.getCenter(),\r\n gestureHandling: ctrl.device.mobile ? 'cooperative' : 'greedy',\r\n styles: [\r\n {\r\n 'stylers': [\r\n {\r\n 'saturation': -100\r\n },\r\n {\r\n 'lightness': 50\r\n }\r\n ]\r\n },\r\n {\r\n 'featureType': 'poi',\r\n 'stylers': [\r\n {\r\n 'visibility': 'off'\r\n }\r\n ]\r\n }\r\n ]\r\n }\r\n };\r\n ctrl.showMap = true;\r\n\r\n var gmapPromise = angulargmContainer.getMapPromise('map');\r\n gmapPromise.then(function (map) {\r\n setTimeout(function () {\r\n google.maps.event.trigger(map, 'resize');\r\n map.fitBounds(bounds);\r\n\r\n var markers = angulargmContainer.getMarkers('map');\r\n for (var i = 0; i < markers.length; i++) {\r\n markers[i].setMap(null);\r\n }\r\n\r\n var options = {\r\n gridSize: 50,\r\n maxZoom: 15,\r\n styles: [\r\n {\r\n width: 53,\r\n height: 53,\r\n url: '/img/gmap/m1.png',\r\n textColor: '#333'\r\n },\r\n {\r\n width: 56,\r\n height: 56,\r\n url: '/img/gmap/m2.png',\r\n textColor: '#333'\r\n },\r\n {\r\n width: 66,\r\n height: 66,\r\n url: '/img/gmap/m3.png',\r\n textColor: '#333'\r\n },\r\n {\r\n width: 78,\r\n height: 78,\r\n url: '/img/gmap/m4.png',\r\n textColor: '#333'\r\n },\r\n {\r\n width: 90,\r\n height: 90,\r\n url: '/img/gmap/m5.png',\r\n textColor: '#333'\r\n }\r\n ]\r\n };\r\n if (markerClusterer) {\r\n markerClusterer.clearMarkers();\r\n }\r\n markerClusterer = new MarkerClusterer(map, markers, options);\r\n });\r\n })\r\n .catch(function (error) {\r\n console.error(error);\r\n });\r\n\r\n ctrl.loading = false;\r\n $rootScope.$broadcast('showPageLoader', false);\r\n\r\n var getAddress = StoresService.getAddress();\r\n if (getAddress) {\r\n $timeout(function () {\r\n ctrl.addressSearch = getAddress;\r\n ctrl.newSearch();\r\n StoresService.setAddress(null);\r\n });\r\n } else if (ctrl.searchLocation && nearPoint) {\r\n ctrl.showStore(nearPoint, null);\r\n }\r\n }\r\n\r\n function scrollToPoint(id) {\r\n var $list = $('#pointsListInner'),\r\n $point = $('#point_' + id);\r\n\r\n if ($point.length) {\r\n $list.animate({ scrollTop: $list.scrollTop() + $point.position().top }, 350);\r\n }\r\n }\r\n }]\r\n };\r\n });\r\n})();\r\n"]}