{"version":3,"sources":["App/js/plugins/googleTranslate.js","App/js/plugins/ie10fix.js","App/js/plugins/bootstrap-select.js","App/js/plugins/clipboard.js","App/js/plugins/dropzone.js","App/js/plugins/format.js","App/js/plugins/hoverintent.min.js","App/js/plugins/pointer_events_polyfill.js","App/js/plugins/jquery.bxslider.js","App/js/plugins/jquery.equal-heights.js","App/js/plugins/jquery.pplayer.js","App/js/plugins/jquery.zoom.js","App/js/plugins/load-image.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-classic.js","App/js/components/component.addtocart-quantity.js","App/js/components/component.addtocart.js","App/js/components/component.addtowishlist.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.clear-uib-tab.js","App/js/directives/directive.collapse-menu.js","App/js/directives/directive.cookies-info.js","App/js/directives/directive.debug.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.searchlink.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-sticky.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/ngclipboard.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.cdn.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.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/service.authentication.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/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.kit.js","App/Modules/Product/js/directive.list-gallery.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/directive.treviews.js","App/Modules/Product/js/module.product.js","App/Modules/Product/js/service.product.js","App/Modules/Product/Views/Reviews/js/module.reviews.js","App/Modules/Quotation/js/service.quotation.js","App/Modules/Reviews/js/module.reviews.js","App/Modules/Search/js/search.js","App/Modules/Shared/Autocomplete/js/angucomplete-alt.js","App/Modules/Shared/Autocomplete/js/autocomplete-select.js","App/Modules/Shared/Autocomplete/js/autocomplete.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/newsletter.js","App/Modules/Shared/Header1/js/switch.directive.js","App/Modules/Shared/Menu/js/nav.directive.js","App/Modules/Shared/Payment/Alma/js/directive.alma.widget.js","App/Modules/Stores/js/store-detail.js","App/Modules/Stores/js/stores-service.js","App/Modules/Stores/js/stores.js","App/Modules/WishList/js/whishlist.js"],"names":["googleTranslateChangeTitle","$","eq","text","hide","remove","html","show","setTimeout","root","factory","define","amd","a0","module","exports","require","this","jQuery","toString","defineProperty","indexOf","includes","startsWith","String","prototype","object","$defineProperty","Object","result","error","search","TypeError","string","call","stringLength","length","searchString","searchLength","position","arguments","undefined","pos","Number","Math","min","max","value","configurable","writable","start","index","charCodeAt","keys","o","k","r","hasOwnProperty","push","valHooks","useDefault","_set","select","set","elem","data","apply","changed_arguments","EventIsSupported","Event","e","normalizeToBase","each","re","ch","replace","fn","triggerNative","eventName","event","el","dispatchEvent","bubbles","document","createEvent","initEvent","fireEvent","createEventObject","eventType","trigger","expr","pseudos","icontains","obj","meta","$obj","find","toUpperCase","ibegins","aicontains","aibegins","createEscaper","map","escaper","match","source","join","testRegexp","RegExp","replaceRegexp","test","htmlEscape","&","<",">","\"","'","`","htmlUnescape","&","<",">",""","'","`","Selectpicker","element","options","$element","$newElement","$button","$menu","$lis","title","attr","winPad","windowPadding","val","render","refresh","setStyle","selectAll","deselectAll","destroy","init","Plugin","option","args","_option","shift","chain","$this","is","i","config","extend","DEFAULTS","selectpicker","defaults","template","Function","VERSION","noneSelectedText","noneResultsText","countSelectedText","numSelected","numTotal","maxOptionsText","numAll","numGroup","selectAllText","deselectAllText","doneButton","doneButtonText","multipleSeparator","styleBase","style","caret","size","selectedTextFormat","width","container","hideDisabled","showSubtext","showIcon","showContent","dropupAuto","header","liveSearch","liveSearchPlaceholder","liveSearchNormalize","liveSearchStyle","actionsBox","iconBase","tickIcon","showTick","maxOptions","mobile","selectOnTab","dropdownAlignRight","constructor","that","id","addClass","liObj","multiple","prop","autofocus","createView","after","appendTo","children","$menuInner","$searchbox","removeClass","click","preventDefault","focus","checkDisabled","clickListener","liveSearchListener","setWidth","selectPosition","on","hide.bs.dropdown","hidden.bs.dropdown","show.bs.dropdown","shown.bs.dropdown","hasAttribute","focus.bs.select","off","shown.bs.select","rendered.bs.select","validity","valid","blur","createDropdown","inputGroup","parent","hasClass","searchbox","actionsbox","donebutton","drop","$drop","li","createLi","innerHTML","reloadLi","_li","optID","titleOption","createElement","liIndex","generateLI","content","classes","optgroup","generateA","inline","tokens","className","insertBefore","firstChild","selectedIndex","selected","$selectOptions","prevHiddenIndex","optionClass","cssText","subtext","icon","$parent","isOptgroup","tagName","isOptgroupDisabled","disabled","isDisabled","next","$options","filter","optGroupClass","label","labelSubtext","showDivider","previousElementSibling","prevHidden","findLis","updateLi","notDisabled","setDisabled","parentNode","setSelected","togglePlaceholder","tabIndex","selectedItems","toArray","split","totalCount","not","trim","status","buttonClass","liHeight","sizeInfo","newElement","menu","menuInner","divider","a","cloneNode","actions","appendChild","createTextNode","input","body","offsetHeight","headerHeight","searchHeight","actionsHeight","doneButtonHeight","dividerHeight","outerHeight","menuStyle","getComputedStyle","menuPadding","vert","parseInt","paddingTop","css","paddingBottom","borderTopWidth","borderBottomWidth","horiz","paddingLeft","paddingRight","borderLeftWidth","borderRightWidth","menuExtras","marginTop","marginBottom","marginLeft","marginRight","removeChild","setSize","menuHeight","menuWidth","getHeight","getWidth","selectOffsetTop","selectOffsetBot","selectOffsetLeft","selectOffsetRight","$window","window","selectHeight","selectWidth","offsetWidth","divHeight","getPos","containerPos","offset","$container","top","left","scrollTop","height","scrollLeft","getSize","minHeight","include","classList","contains","lis","getElementsByTagName","lisVisible","Array","optGroup","toggleClass","max-height","overflow","min-height","menuInnerHeight","overflow-y","optIndex","slice","last","divLength","$selectClone","clone","$selectClone2","ulWidth","outerWidth","btnWidth","$bsContainer","actualHeight","getPlacement","append","detach","removeAttr","$document","keyCode","offsetTop","clickedIndex","prevValue","prevIndex","triggerChange","stopPropagation","$option","state","$optgroup","maxOptionsGrp","maxReached","maxReachedGrp","optgroupID","maxOptionsArr","maxTxt","maxTxtGrp","$notify","delay","fadeOut","currentTarget","target","change","$no_results","$hideItems","$searchBase","_searchStyle","$foundDiv","$lisVisible","first","begins","changeAll","lisVisLen","selectedOptions","origIndex","getAttribute","toggle","keydown","$items","isActive","selector","keyCodeMap","32","48","49","50","51","52","53","54","55","56","57","59","65","66","67","68","69","70","71","72","73","74","75","76","77","78","79","80","81","82","83","84","85","86","87","88","89","90","96","97","98","99","100","101","102","103","104","105","count","keyIndex","toLowerCase","substring","before","removeData","old","Constructor","noConflict","$selectpicker","Dropdown","getParent","clearMenus","which","relatedTarget","type","isDefaultPrevented","documentElement","closest","insertAfter","dropdown","f","global","self","Clipboard","t","n","s","u","Error","code","l","1","Element","matches","proto","matchesSelector","mozMatchesSelector","msMatchesSelector","oMatchesSelector","webkitMatchesSelector","nodeType","2","callback","useCapture","listenerFn","delegateTarget","addEventListener","removeEventListener","./closest","3","node","HTMLElement","nodeList","4","delegate","forEach","./is","5","selectedText","nodeName","isReadOnly","setAttribute","setSelectionRange","removeAttribute","selection","getSelection","range","createRange","selectNodeContents","removeAllRanges","addRange","6","E","name","ctx","once","listener","_","emit","evtArr","len","evts","liveEvents","7","mod","clipboardAction","_select","_select2","__esModule","default","_typeof","Symbol","iterator","_createClass","defineProperties","props","descriptor","enumerable","key","protoProps","staticProps","ClipboardAction","instance","_classCallCheck","resolveOptions","initSelection","action","emitter","selectFake","selectTarget","_this","isRTL","removeFake","fakeHandlerCallback","fakeHandler","fakeElem","fontSize","border","padding","margin","yPosition","pageYOffset","copyText","succeeded","execCommand","err","handleResult","clearSelection","bind","_action","get","_target","8","tinyEmitter","goodListener","clipboard","_clipboardAction","_tinyEmitter","_goodListener","_clipboardAction2","_interopRequireDefault","_tinyEmitter2","_goodListener2","_Emitter","ReferenceError","_possibleConstructorReturn","__proto__","getPrototypeOf","listenClick","subClass","superClass","create","setPrototypeOf","_inherits","defaultAction","defaultTarget","defaultText","_this2","onClick","getAttributeValue","querySelector","support","queryCommandSupported","suffix","attribute","./clipboard-action","good-listener","tiny-emitter","Dropzone","Emitter","camelize","contentLoaded","detectVerticalSquash","drawImageIOSFix","noop","without","__slice","__hasProp","_callbacks","callbacks","_i","_len","removeListener","removeAllListeners","splice","_super","resolveOption","elementOptions","fallback","_ref","version","defaultOptions","previewTemplate","clickableElements","listeners","files","dropzone","instances","optionsForElement","forceFallback","isBrowserSupported","url","acceptedFiles","acceptedMimeTypes","method","getExistingFallback","previewsContainer","getElement","clickable","getElements","child","ctor","__super__","__extends","events","withCredentials","parallelUploads","uploadMultiple","maxFilesize","paramName","createImageThumbnails","maxThumbnailFilesize","thumbnailWidth","thumbnailHeight","filesizeBase","maxFiles","params","ignoreHiddenFiles","autoProcessQueue","autoQueue","addRemoveLinks","hiddenInputContainer","capture","renameFilename","dictDefaultMessage","dictFallbackMessage","dictFallbackText","dictFileTooBig","dictInvalidFileType","dictResponseError","dictCancelUpload","dictCancelUploadConfirmation","dictRemoveFile","dictRemoveFileConfirmation","dictMaxFilesExceeded","accept","file","done","messageElement","span","textContent","innerText","getFallbackForm","resize","info","srcRatio","trgRatio","srcX","srcY","srcWidth","srcHeight","optWidth","optHeight","trgHeight","trgWidth","dragstart","dragend","dragenter","add","dragover","dragleave","paste","reset","addedfile","removeFileEvent","removeLink","_j","_k","_len1","_len2","_ref1","_ref2","_results","previewElement","querySelectorAll","filesize","_removeLink","UPLOADING","confirm","removeFile","removedfile","_updateMaxFilesReachedClass","thumbnail","dataUrl","thumbnailElement","alt","src","message","errormultiple","processing","processingmultiple","uploadprogress","progress","bytesSent","totaluploadprogress","sending","sendingmultiple","success","successmultiple","canceled","canceledmultiple","complete","completemultiple","maxfilesexceeded","maxfilesreached","queuecomplete","addedfiles","objects","getAcceptedFiles","accepted","getRejectedFiles","getFilesWithStatus","getQueuedFiles","QUEUED","getUploadingFiles","getAddedFiles","ADDED","getActiveFiles","noPropagation","setupHiddenFileInput","hiddenFileInput","visibility","addFile","URL","webkitURL","updateTotalUploadProgress","returnValue","efct","dataTransfer","effectAllowed","_error","dropEffect","clickableElement","evt","elementInside","enable","disable","removeAllFiles","totalBytes","totalBytesSent","totalUploadProgress","upload","total","_getParamName","_renameFilename","existingFallback","fields","fieldsString","form","getFallback","elements","setupEventListeners","elementListeners","_results1","removeEventListeners","cancelUpload","selectedSize","selectedUnit","unit","units","pow","round","items","webkitGetAsEntry","_addFilesFromItems","handleFiles","clipboardData","entry","item","isFile","getAsFile","isDirectory","_addFilesFromDirectory","kind","directory","path","dirReader","errorHandler","readEntries","createReader","console","log","entries","fullPath","isValidFile","serverName","_enqueueThumbnail","_errorProcessing","enqueueFile","enqueueFiles","processQueue","_thumbnailQueue","_processingThumbnail","_processThumbnailQueue","createThumbnail","cancelIfNecessary","fileReader","FileReader","onload","createThumbnailFromUrl","readAsDataURL","imageUrl","crossOrigin","img","canvas","resizeInfo","_ref3","getContext","trgX","trgY","toDataURL","onerror","processingLength","queuedFiles","processFiles","processFile","uploadFiles","_getFilesWithXhr","xhr","groupedFile","groupedFiles","CANCELED","abort","uploadFile","formData","handleError","headerName","headerValue","headers","inputName","inputType","response","updateProgress","_l","_len3","_m","_ref4","_ref5","XMLHttpRequest","open","allFilesFinished","loaded","readyState","responseText","getResponseHeader","JSON","parse","_finished","onprogress","Accept","Cache-Control","X-Requested-With","setRequestHeader","FormData","checked","submitRequest","send","SUCCESS","ERROR","forElement","autoDiscover","discover","checkElements","dropzones","blacklistedBrowsers","capableBrowser","File","FileList","Blob","navigator","userAgent","list","rejectedItem","str","charAt","div","childNodes","els","question","rejected","baseMimeType","mimeType","validType","ACCEPTED","PROCESSING","ey","ih","py","ratio","sy","naturalWidth","naturalHeight","drawImage","getImageData","sx","sw","sh","dx","dy","dw","dh","vertSquashRatio","win","doc","poll","pre","rem","doScroll","frameElement","_autoDiscoverFunction","format","mask","isNaN","isNegative","decimal","group","posLeadZero","posTrailZero","posSeparator","part","szSep","integer","prefix","reverse","end","substr","indx","toFixed","lastIndexOf","hoverintent","c","clientX","clientY","p","clearTimeout","v","m","abs","y","sensitivity","interval","timeout","d","xtend","msViewportStyle","PointerEventsPolyfill","mouseEvents","usePolyfillIf","appName","parseFloat","$1","register_mouse_events","mode","slideSelector","infiniteLoop","hideControlOnEnd","speed","easing","slideMargin","startSlide","randomStart","captions","ticker","tickerHover","adaptiveHeight","adaptiveHeightSpeed","video","useCSS","preloadImages","responsive","slideZIndex","wrapperClass","touchEnabled","swipeThreshold","oneToOneTouch","preventDefaultSwipeX","preventDefaultSwipeY","ariaLive","ariaHidden","keyboardEnabled","pager","pagerType","pagerShortSeparator","pagerSelector","buildPager","pagerCustom","controls","nextText","prevText","nextSelector","prevSelector","autoControls","startText","stopText","autoControlsCombine","autoControlsSelector","auto","pause","autoStart","autoDirection","stopAutoOnClick","autoHover","autoDelay","autoSlideForOnePage","minSlides","maxSlides","moveSlides","slideWidth","shrinkItems","onSliderLoad","onSlideBefore","onSlideAfter","onSlideNext","onSlidePrev","onSliderResize","onAutoChange","bxSlider","slider","windowWidth","windowHeight","settings","floor","random","active","carousel","minThreshold","maxThreshold","working","animProp","usingCSS","cssPrefix","setup","preloadSelector","wrap","viewport","loader","prepend","maxWidth","getViewportMaxWidth","float","listStyle","getSlideWidth","zIndex","display","appendCaptions","getPagerQty","fitVids","appendControls","appendControlsAuto","appendPager","loadElements","one","sliceAppend","slicePrepend","setSlidePosition","getViewportHeight","redrawSlider","initialized","resizeWindow","initAuto","initTicker","updatePagerActive","updateDirectionControls","initTouch","keyPress","currentIndex","getMoveBy","newElWidth","wrapWidth","ceil","getNumberSlidesShowing","slidesShowing","childWidth","pagerQty","breakPoint","counter","lastChild","lastShowingIndex","setPositionProperty","duration","animateObj","propValue","updateAfterSlideTransition","resetValue","tickerLoop","animate","populatePager","pagerHtml","linkContent","isFunction","pagerEl","clickPagerBind","prev","clickNextBind","clickPrevBind","directionEl","stop","autoEl","clickStartBind","clickStopBind","updateAutoControls","stopAuto","goToNextSlide","goToPrevSlide","startAuto","pagerLink","pagerIndex","goToSlide","slideIndex","oldIndex","windowFocusHandler","windowBlurHandler","hover","autoPaused","transform","idx","property","newSpeed","totalDimens","startPosition","resumeSpeed","animateProperty","bounds","activeElementTag","activeElement","exec","right","bottom","touch","x","onTouchStart","button","originalPos","orig","originalEvent","touchPoints","changedTouches","PointerEvent","pointerId","pageX","pageY","setPointerCapture","originalClickTarget","originalTarget","originalClickButton","originalClickButtons","buttons","originalEventType","hasMove","onTouchMove","onTouchEnd","onPointerCancel","releasePointerCapture","xMovement","yMovement","distance","windowWidthNew","windowHeightNew","applyAriaHiddenAttributes","startVisibleIndex","numberOfSlidesShowing","direction","requestEl","performTransition","moveBy","fadeIn","preventControlUpdate","setInterval","clearInterval","getCurrentSlide","getCurrentSlideElement","getSlideElement","getSlideCount","isWorking","destroySlider","unwrap","reloadSlider","equalHeights","h","$elems","_isLoadRequested","_instanceCounter","YoutubeApi","loadAsynchronously","tag","firstScriptTag","isLoadRequested","isReady","YT","Player","ready","timerFn","ApiAdapter","Youtube","handlers","_player","api","videoElId","boundingBox","videoId","youtubeVideoId","playerVars","autoplay","showinfo","hd","html5","wmode","rel","origin","onReady","onStateChange","UNSTARTED","ENDED","PLAYING","PAUSED","BUFFERING","CUED","getTarget","play","playVideo","stopVideo","pauseVideo","mute","flag","currentTime","curTime","seekTo","getCurrentTime","getDuration","VideoElement","onloadstart","onplay","onpause","mue","pPlayer","adapter","$pauseBtn","$playBtn","$overBtn","$muteBtn","$unmuteBtn","$enterFullscreenBtn","$leaveFullscreenBtn","$timer","$progressBar","$progressBarCursor","$quality","playingTrigger","tpls","playpause","quality","timer","fullscreen","$boundingBox","features","resizeVideo","afterInit","getPlayerHtml","inx","feature","hasPlayerVideoElements","hasBrowserVideoElementSupport","hasDivXWebPlayerOn","divx","fallbackOnDivX","renderUI","apapterClass","startTimer","onPlayerReady","onPlaying","syncUI","proxy","muteVideo","unmuteVideo","handleProgressBar","enterFullscreen","leaveFullscreen","handleFullscreenChange","renderQualityOptions","siblings","setPlaybackQuality","qLevelMap","small","medium","large","hd720","hd1080","highres","getAvailableQualityLevels","level","getPlaybackQuality","getTimeByFloat","ctFloat","hours","sec","minFloat","hourFloat","fullScreenElement","mozFullScreen","webkitIsFullScreen","requestFullScreen","mozRequestFullScreen","webkitRequestFullScreen","cancelFullScreen","mozCancelFullScreen","webkitCancelFullScreen","percent","newCurTime","updateProgressBarCursor","updateTimer","line","progressPercents","timerOut","sprintf02d","player","scale","onZoomIn","onZoomOut","magnify","zoom","targetHeight","targetWidth","sourceHeight","sourceWidth","xRatio","yRatio","$target","$source","opacity","maxHeight","move","$img","touched","srcElement","currentSrc","fadeTo","touches","fetchBlob","createObjectURL","isInstanceOf","_objectURL","readFile","noRevoke","revokeObjectURL","loadImage","transformCoordinates","getTransformedOptions","aspectRatio","crop","renderImageToCanvas","hasCanvasOption","P","g","S","b","minWidth","contain","cover","pixelRatio","downsamplingRatio","webkitSlice","mozSlice","blobSlice","metaDataParsers","jpeg","65505","parseMetaData","maxMetaDataSize","DataView","byteLength","getUint16","disableImageHead","imageHead","Uint8Array","subarray","hasMetaOption","fetch","Request","then","blob","catch","ExifMap","Orientation","getExifThumbnail","getUint8","exifTagTypes","getValue","fromCharCode","ascii","getUint32","9","getInt32","10","getExifValue","parseExifTag","exif","parseExifTags","parseExifData","disableExif","disableExifThumbnail","Thumbnail","disableExifSub","disableExifGps","tags","256","257","34665","34853","40965","258","259","262","274","277","284","530","531","282","283","296","273","278","279","513","514","301","318","319","529","532","306","270","271","272","305","315","33432","36864","40960","40961","40962","40963","42240","37121","37122","37500","37510","40964","36867","36868","37520","37521","37522","33434","33437","34850","34852","34855","34856","34864","34865","34866","34867","34868","34869","37377","37378","37379","37380","37381","37382","37383","37384","37385","37396","37386","41483","41484","41486","41487","41488","41492","41493","41495","41728","41729","41730","41985","41986","41987","41988","41989","41990","41991","41992","41993","41994","41995","41996","42016","42032","42033","42034","42035","42036","42037","0","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26","27","28","29","30","31","stringValues","ExposureProgram","MeteringMode","255","LightSource","Flash","93","95","SensingMethod","SceneCaptureType","SceneType","CustomRendered","WhiteBalance","GainControl","Contrast","Saturation","Sharpness","SubjectDistanceRange","FileSource","ComponentsConfiguration","getText","getAll","orientation","translate","rotate","PI","Xr","ti","T","L","U","Xu","lastIndex","C","bi","N","F","clear","G","K","en","__data__","cn","pn","mo","wo","Oo","Ao","j","Ai","Dt","vn","br","jn","gn","yn","bn","fo","Pi","xn","ie","oe","ce","Ar","st","po","we","me","tt","Ee","ye","$t","ht","Nr","ho","Dr","so","ui","Re","rt","_e","je","De","buffer","byteOffset","Ne","Fe","Pe","Be","Ze","Me","We","Ge","qe","ft","Oe","Ae","ke","Te","eu","Le","Ue","io","Ct","zt","At","wn","An","Xn","Kt","zn","En","$e","ze","Fi","Ei","Lt","In","Tn","zr","Ln","be","wt","ki","xe","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","Yn","Jn","Kn","Sr","oo","he","go","$r","nt","Ui","copy","jt","qr","Zr","Ku","has","iteratee","Yr","It","Tt","co","$i","Rt","Ni","pe","fu","Nt","Je","Ye","wi","Oi","Xt","Lr","nr","tr","ir","hr","xo","Gi","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","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","fi","ai","si","hi","pi","vi","process","gi","binding","yi","isTypedArray","À","Á","Â","Ã","Ä","Å","à","á","â","ã","ä","å","Ç","ç","Ð","ð","È","É","Ê","Ë","è","é","ê","ë","Ì","Í","Î","Ï","ì","í","î","ï","Ñ","ñ","Ò","Ó","Ô","Õ","Ö","Ø","ò","ó","ô","õ","ö","ø","Ù","Ú","Û","Ü","ù","ú","û","ü","Ý","ý","ÿ","Æ","æ","Þ","þ","ß","Ā","Ă","Ą","ā","ă","ą","Ć","Ĉ","Ċ","Č","ć","ĉ","ċ","č","Ď","Đ","ď","đ","Ē","Ĕ","Ė","Ę","Ě","ē","ĕ","ė","ę","ě","Ĝ","Ğ","Ġ","Ģ","ĝ","ğ","ġ","ģ","Ĥ","Ħ","ĥ","ħ","Ĩ","Ī","Ĭ","Į","İ","ĩ","ī","ĭ","į","ı","Ĵ","ĵ","Ķ","ķ","ĸ","Ĺ","Ļ","Ľ","Ŀ","Ł","ĺ","ļ","ľ","ŀ","ł","Ń","Ņ","Ň","Ŋ","ń","ņ","ň","ŋ","Ō","Ŏ","Ő","ō","ŏ","ő","Ŕ","Ŗ","Ř","ŕ","ŗ","ř","Ś","Ŝ","Ş","Š","ś","ŝ","ş","š","Ţ","Ť","Ŧ","ţ","ť","ŧ","Ũ","Ū","Ŭ","Ů","Ű","Ų","ũ","ū","ŭ","ů","ű","ų","Ŵ","ŵ","Ŷ","ŷ","Ÿ","Ź","Ż","Ž","ź","ż","ž","IJ","ij","Œ","œ","ʼn","ſ","'","ji","xi","mi","IE_PROTO","Ti","Buffer","Li","allocUnsafe","Ci","Ri","propertyIsEnumerable","isConcatSpreadable","toStringTag","Bi","getOwnPropertySymbols","Zi","isBuffer","qi","Date","now","Vi","Hi","Yi","Ji","Ki","Qi","Xi","no","to","ro","eo","uo","pop","hash","te","lo","ArrayBuffer","resolve","yo","bo","_o","jo","mn","isArray","zo","Eo","Io","constant","debounce","keyBy","keysIn","memoize","merge","negate","pull","pullAll","pullAllBy","reject","Vn","sortBy","throttle","toPlainObject","values","words","camelCase","capitalize","cloneDeep","deburr","findIndex","hasIn","identity","inRange","isArguments","isArrayLike","isArrayLikeObject","isEmpty","isEqual","isInteger","isLength","isObject","isObjectLike","isPlainObject","isString","isSymbol","kebabCase","stubArray","stubFalse","reduce","some","toFinite","toInteger","toNumber","O","A","unescape","upperFirst","w","Int32Array","I","md5","Owl","Defaults","_handlers","_plugins","_supress","_current","_speed","_coordinates","_breakpoint","_width","_items","_clones","_mergers","_widths","_invalidated","_pipe","_drag","time","pointer","stage","current","_states","initializing","animating","dragging","handler","Plugins","plugin","Workers","priority","worker","run","initialize","loop","center","rewind","mouseDrag","touchDrag","pullDrag","freeDrag","stagePadding","mergeFit","autoWidth","rtl","smartSpeed","fluidSpeed","dragEndSpeed","responsiveRefreshRate","responsiveBaseElement","fallbackEasing","nestedItemSelector","itemElement","stageElement","refreshClass","loadedClass","loadingClass","rtlClass","responsiveClass","dragClass","itemClass","stageClass","stageOuterClass","grabClass","Width","Default","Inner","Outer","Type","State","relative","$stage","grid","margin-left","margin-right","widths","clones","view","repeat","normalize","outerHTML","prependTo","previous","coordinates","padding-left","padding-right","minimum","maximum","inner","outer","begin","op","imgs","nestedSelector","enter","preloadAutoWidthImages","invalidate","registerEventHandlers","leave","overwrites","breakpoint","optionsLogic","prepare","update","all","grep","dimension","onThrottledResize","resizeTimer","onResize","transition","onTransitionEnd","onDragStart","onDragEnd","getTime","delta","difference","onDragMove","coordinate","transform3d","suppress","release","isNumeric","reciprocalItemsWidth","elementWidth","mergers","odd","even","multiplier","newPosition","from","factor","revert","innerWidth","clientWidth","empty","addBack","images","Image","contents","attachEvent","detachEvent","namespace","onTrigger","register","concat","special","owl","_default","inArray","number","second","owlCarousel","Zepto","AutoRefresh","_core","_interval","_visible","initialized.owl.carousel","autoRefresh","watch","autoRefreshInterval","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","AutoHeight","initialized.owl.carousel refreshed.owl.carousel","autoHeight","changed.owl.carousel","loaded.owl.lazy","autoHeightClass","maxheight","visible","heights","Video","_videos","_playing","resize.owl.carousel","isInFullScreen","refreshed.owl.carousel","prepared.owl.carousel","videoHeight","videoWidth","tnLink","dimensions","customTn","srcType","lazyClass","ajax","jsonp","dataType","thumbnail_large","framegrab_url","fullscreenElement","mozFullScreenElement","webkitFullscreenElement","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","_setAutoPlayInterval","play.owl.autoplay","stop.owl.autoplay","mouseover.owl.autoplay","autoplayHoverPause","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","$absolute","control","overides","lower","upper","getPosition","successor","standard","prefixes","WebkitTransition","MozTransition","OTransition","WebkitAnimation","MozAnimation","OAnimation","tests","prefixed","singleton","origDisplayAttribute","underneathElem","elementFromPoint","Spinner","useCssAnimations","sheet","animations","createEl","ins","vendor","pp","def","getColor","color","lines","radius","corners","trail","fps","shadow","hwaccel","opts","spin","alpha","ostep","astep","anim","seg","z","fill","background","boxShadow","transformOrigin","borderRadius","insertRule","cssRules","head","styleSheet","probe","behavior","adj","vml","addRule","grp","coordsize","coordorigin","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","fix","isPrefix","klass","stripCommentsFromElement","jqLite","extractElementNode","elm","applyAnimationClassesFactory","$$jqLite","prepareAnimationOptions","$$prepared","domOperation","$$domOperationFired","applyAnimationStyles","applyAnimationFromStyles","applyAnimationToStyles","mergeAnimationDetails","oldAnimation","newAnimation","newOptions","toAdd","toRemove","existing","flags","splitClassesToLookup","allow","resolveElementClasses","preparationClasses","concatWithSpace","realDomOperation","getDomNode","blockTransitions","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","isKeyframeAnimation","computeCssStyles","properties","styles","detectedStyles","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","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","setProperty","removeProperty","onDone","onAnimationProgress","animationTimerData","ev","timeStamp","$manualTimeStamp","elapsedTime","playPause","playAnimation","arr","maxStagger","triggerAnimationStart","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","bodyNode","rootNode","rootBodyElement","animationDetails","anchors","fromAnimation","prepareRegularAnimation","toAnimation","anchorAnimations","anchor","animator","outAnchor","inAnchor","startingClasses","filterCssClasses","getClassVal","animatorIn","animatorOut","calculateAnchorStyles","prepareInAnimation","startingAnimator","currentAnimation","coords","getBoundingClientRect","endingClasses","getUniqueValues","NG_IN_ANCHOR_CLASS_NAME","prepareAnchoredAnimation","animationRunners","prepareFromToAnchorAnimation","$$AnimateJsProvider","$injector","afterFn","beforeFn","classesToAdd","classesToRemove","flagMap","animationFactory","$$registeredAnimations","lookupAnimations","packageAnimations","closeActiveAnimations","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","deregisterWatch","$watch","totalPendingRequests","$$postDigest","callbackRegistry","customFilter","classNameFilter","returnTrue","isAnimatableByFilter","isAnimatableClassName","normalizeAnimationDetails","Node","compareDocumentPosition","filterFromRegistry","matchContainer","matchCallback","containerNode","cleanupEventListeners","phase","$animate","pin","parentElement","originalElement","runInNextPostDigestOrNow","postDigestCalled","documentHidden","skipAnimations","existingAnimation","hasExistingAnimation","animateChildren","bodyNodeDetected","rootNodeDetected","parentAnimationDetected","elementDisabled","parentHost","details","parentNodeDisabled","areAnimationsAllowed","notifyProgress","skipAnimationFlag","cancelAnimationFlag","joinAnimationFlag","isValidAnimation","clearElementAnimationState","markElementAnimationState","animationCancelled","realRunner","targetParentNode","targetNode","queueAnimation","bool","argCount","oldValue","newValue","$$AnimationProvider","NG_ANIMATE_REF_ATTR","RUNNER_STORAGE_KEY","PREPARE_CLASSES_KEY","getRunner","animationQueue","tempClasses","beforeStart","prepareClassName","handleDestroyedElement","groupedAnimations","preparedAnimations","refLookup","enterOrMove","anchorNodes","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","provider","KEY","parentCounter","parts","isValid","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","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","getRedirectionData","handlePossibleRedirection","keepProcessingRoute","resolveLocals","locals","finally","$$completeOutstandingRequest","hasRedirection","oldPath","oldSearch","newUrl","resolveRedirectTo","invoke","oldUrl","templateUrl","loadedTemplateUrl","getTemplateFor","segment","segmentMatch","instantiateRoute","ngViewFactory","$anchorScroll","currentScope","currentElement","previousLeaveAnimation","autoScrollExp","autoscroll","onloadExp","cleanupLastView","$template","newScope","$new","$eval","$emit","ngViewFillContentFactory","$compile","$controller","controller","$scope","controllerAs","resolveAs","$inject","Name","Controller","Action","fr","ng","$templateCache","DeviceService","HttpService","checkout","showPageLoader","device","xxs","onChange","xs","sm","md","lg","desktop","isTouch","isFirefox","wichUserAgent","isSafari","wichUserAgentSafari","isWebp","webp","isIe","isIE","ieVersion","$compileProvider","Environment","commentDirectivesEnabled","cssClassDirectivesEnabled","debugInfoEnabled","lazyImgConfigProvider","setOptions","errorClass","successClass","usSpinnerConfigProvider","setDefaults","setTheme","setDelay","toastrConfig","timeOut","closeButton","closeHtml","iconClasses","warning","templates","toast","progressbar","bsValidationConfigProvider","setValidateFieldsOn","setDisplayErrorsAs","tooltipAppendToBody","errorMessagePrefix","dropzoneOpsProvider","AppService","bsValidationConfig","getParams","getTranslate","forms","setMessages","onunload","bootstrap","strictDi","component","productCtrl","comparatorCtrl","bindings","isProductButton","isCartButton","btnClass","inputClass","idLine","commentLine","productQuantity","isPrimary","addToCartActive","allowAddToCart","price","designation","titleAdd","titleAlert","titleDetail","tooltip","btnTooltip","modalCtrl","ModalService","RoutesService","toastr","tmpQuantity","showTTCPrice","setValue","addToCart","products","isModalButton","mess","titleModifyOk","allowHtml","extraData","cartLink","getUrlByName","quantity","results","errors","TryLater","ErrorHasOccurred","$onInit","defaultTooltip","Visitor","CardType","ShowTTCPrice","openQuickView","windowClass","keypress","changed","qty","inc","product","fromClassicBtn","Comment","idProduct","Price","getProductPrice","costTTC","costHT","quotationCtrl","isQuotationButton","idQuotation","modalItem","titleDeleteOk","titleResultOk","QuotationService","addTimeout","blurTimeout","unwatch","getItemQuantityInCart","itemQuantityInCart","setItemQuantity","cartQuantity","isInCart","showLoader","setInputQuantity","watchValue","isChanged","changedValue","prices","posLoader","addToQuotation","$onDestroy","deleteLine","removeQuotationLine","quotations","IDFolder","folder","messages","QuotationProductRemoved","minus","plus","blurred","quantities","titleRemove","tooltipAdd","tooltipYet","tooltipChoice","whishListService","isLogged","IsLogged","manageWishList","Account","IsManagementWishlistTracking","updateTooltip","wishListConnect","addToWishList","redirect","isInWishList","decodeURI","loading","post","Products","location","assign","redirectUrl","modalTitle","Product","IDProduct","promise","$$state","titleBtn","step","fieldTabindex","keyEnter","groupClass","newval","getProductsToAdd","WindowEventsService","lastPos","listen","sc","$apply","innerHeight","ngModel","initBxSlider","removeParentIfEmpty","onBodyClick","isOpen","clickMenu","scroll","showMenu","hideMenu","$cookies","DateService","setCookiesOK","expires","tomorrow","clickCookiesOK","nextYear","ctrlKey","altKey","isMenuCollapse","toggleMenuCollapse","flip","flipped","direct","inter","ntime","tplTranslate","getCart","hasCart","HasCart","Cart","Quantity","emptyCart","IDLine","Designation","IDPicture","submit","ClearCartOK","Query","query","Id","Index","youtubeUrl","getYouTubeIdFromUrl","$mainVideo","addActive","noZoomDirective","changeViewport","theme","ngRequired","$wrapper","optRequired","$label","onInputChange","required","placeholder","$parse","ngModelInit","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","dropzoneOps","methods","iElem","iAttr","initOps","getDropzone","getAllFiles","methodName","$$phase","$root","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","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","setMarker","newMarker","clearMarkers","setMap","removeMap","_formatEventName","uppercasePluralType","checkRequiredAttributes","updateElements","objectCache","optionsFn","orphaned","$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","types","_elements","scopeIds","_getElements","scopeId","streetView","getStreetView","getVisible","setVisible","addListenerOnce","_newElement","hasElement","removed","forEachElement","allElements","accumulator","mapDiv","writeable","getCenter","panTo","getZoom","setZoom","getBounds","fitBounds","getMapTypeId","setMapTypeId","smoothScroll","callbackBefore","callbackAfter","getElementById","containerId","containerPresent","getScrollLocation","percentage","scrollHeight","internalHeight","currentLocation","startLocation","endLocation","offsetParent","getEndLocation","timeLapsed","runAnimation","getEasingPattern","scrollTo","clientHeight","scrollheight","$elem","$attrs","scrollIf","exprHandler","targetElement","matchMedia","DefaultStickyStackName","documentEl","stacks","stackName","stickyZIndex","stack","$stack","sticky","removeTop","computedHeight","heightAt","stick","atAdjusted","sticksAtPosition","stickyAnchor","heightCurrent","hlStickyStack","mediaQuery","stickyLineTop","stickyLineBottom","_isSticking","bodyEl","nativeEl","stickyMediaQuery","stickyClass","usePlaceholder","offsetBottom","globalOffset","initialCSS","stickyLinePositionTop","_getTopOffset","_stackOffset","stickyLinePositionBottom","isEnabled","scrolledDistance","clientTop","shouldStick","alwaysSticky","elementHeight","rect","z-index","stickElement","unstickElement","containerBoundsBottom","containerBoundsTop","pixels","extraOffset","stickIndex","isSticky","hasScrollDistance","containerRect","containerBottom","$api","stackItem","drawOptions","force","$$count","$stickyElement","collections","checkDelay","elementsDefaults","hlStickyElement","throttledResize","windowEl","drawEvent","collection","warn","collectionName","stickyStackFactory","trackedElements","$sticky","stickyOptions","stickyElement","toDelete","deletedElement","_drawOptions","parentStack","hlStickyElementCollection","collectionParent","stickyElementCollection","hlSticky","toasts","previousToastMessage","openToasts","containerDefer","toastId","optionsOverride","_getOptions","_buildNotification","refreshTimer","newTime","isOpened","wasClicked","findToast","deleting","onHidden","maxOpened","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","_notify","toastCtrl","intervalId","currentTimeOut","hideTime","startProgressBar","stopProgressBar","$interval","createTimeout","tapToast","$event","$$CookieWriter","cookiePath","baseHref","rawDocument","cookie","encodeURIComponent","domain","toUTCString","secure","cookieLength","samesite","buildCookieString","calcOptions","$$cookieReader","$$cookieWriter","getObject","fromJson","putObject","toJson","$provide","PLURAL_CATEGORY","DATETIME_FORMATS","AMPMS","DAY","ERANAMES","ERAS","FIRSTDAYOFWEEK","MONTH","SHORTDAY","SHORTMONTH","STANDALONEMONTH","WEEKENDRANGE","fullDate","longDate","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","attrToMap","attributes","chars","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","responseType","propName","outerText","$sanitize","LINKY_URL_REGEXP","MAILTO_REGEXP","linkyMinErr","attributesFn","raw","addText","addLink","linkAttributes","validateFieldsOn","displayErrorsAs","messageFilters","shouldValidateOn","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","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","tooltipElement","$errorTooltip","placement","attributeName","parentForm","parents","appendToBody","$position","ttPosition","positionElements","positionArrow","$filter","_genericValidators","validateFn","equalto","getTrigger","triggerEvent","selectors","getMetaInformation","metaInformation","camelCaseToDash","validateableElements","$validators","modelValue","viewValue","$isEmpty","addGenericValidator","genericValidationObject","$parentForm","firstErrorKey","resolveMessage","formGroupElement","displayType","matchers","validValue","regx","THROTTLE_MILLISECONDS","windowElement","scrollDistance","scrollEnabled","checkWhenEnabled","immediateCheck","useDocumentBottom","unregisterEventListener","checkInterval","ownerDocument","defaultView","defaultHandler","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","isElementInView","stopListening","param","startListening","photo","addClassToParent","spinner","onError","srcset","onSuccess","onLoading","Photo","getOptions","getWinDimensions","setAddClassToParent","setSpinner","setSource","removeImage","addContainer","removeContainer","bottomline","threshhold","deferTimer","LazyImgMagic","usSpinnerConfig","lazyIf","lazyImage","parentLoadedClass","deregister","newSource","noSpinner","spinnerTheme","themes","_config","_themes","_delay","SpinJSSpinner","spinnerOn","ngclipboardSuccess","ngclipboardError","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","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","tick","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","dim","floorPos","floorDim","ceilPos","ceilDim","isSelectionBarFromRight","positionForRange","centerPosition","setDimension","lowTr","highTr","labelVal","customStep","steppedDifference","toPrecision","linearValueToPosition","logValueToPosition","minVal","maxVal","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","UP","DOWN","LEFT","RIGHT","PAGEUP","PAGEDOWN","HOME","END","38","40","37","39","33","34","36","35","newMinValue","newMaxValue","positionTrackingBar","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","expandDone","collapseDone","uibCollapse","shouldCollapse","collapse","$set","closeOthers","accordionConfig","groups","openGroup","addGroup","groupScope","removeGroup","heading","panelClass","setHeading","accordionCtrl","openClass","toggleOpen","headingId","panelId","accordionGroupCtrl","uibAccordionTransclude","closeable","dismissOnTimeout","activeClass","toggleEvent","buttonConfig","ctrls","buttonsCtrl","ngModelCtrl","uncheckableExpr","uibUncheckable","$render","$modelValue","uibBtnRadio","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","requestedTimezoneOffset","addDateMinutes","date","minutes","setMinutes","getMinutes","convertTimezoneToLocal","dateTimezoneOffset","getTimezoneOffset","parsers","formatters","regex","year","_date","setFullYear","getFullYear","month","getMonth","getDate","milliseconds","seconds","sign","getParser","overrideParser","createFormatter","baseDate","quoteIndex","inLiteral","matcher","createParser","tzOffset","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_","createChild","extractOptions","initDate","$viewValue","selectedDt","_refreshView","activeDt","$setValidity","createDateObject","today","past","future","customClass","dateDisabled","arrays","setMode","years","months","toggleMode","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","expToData","onExpMatches","uibIsClass","onExp","exps","clazz","compareWithExp","watchFn","compareWithVal","newActivated","thisVal","lastActivated","watcher","addForExp","removeScope","removedScope","targetScope","newWatchScope","SCROLLBAR_WIDTH","BODY_SCROLLBAR_WIDTH","OVERFLOW_REGEX","normal","PLACEMENT_REGEX","primary","BODY_REGEX","getRawNode","parseStyle","isFinite","scrollbarWidth","isBody","bodyElem","scrollElem","scrollbarPadding","elemStyle","scrollParent","widthOverflow","originalRight","heightOverflow","originalBottom","isScrollable","includeHidden","overflowRegex","overflowY","overflowX","includeSelf","excludeStatic","spStyle","includeMagins","elemOffset","parentOffset","clientLeft","elemBCR","pageXOffset","viewportOffset","useDocument","includePadding","offsetBCR","offsetParentBCR","offsetParentStyle","parsePlacement","autoPlace","hostElem","targetElem","hostElemPos","targetElemPos","targetElemStyle","adjustedSize","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","dismiss","$isRendered","modalRenderDeferObj","animationPromise","modalRendered","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","$$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","setNumPages","numPages","_watchers","itemsPerPage","totalPages","calculateTotalPages","updatePage","newTotal","oldTotal","totalItems","selectPage","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","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","observer","bodyHideTooltipBind","hideOnEscapeKey","origScope","contentExp","showTriggers","hideTriggers","unregisterTriggers","appendToBodyVal","appendKey","tooltipTemplateTranscludeScope","changeCounter","cleanupLastIncludeContent","parseAsResourceUrl","uibTooltipTemplateTransclude","thisChangeId","tooltipAnimationClass","$uibTooltip","originScope","uibTitle","destroyed","findTabIndex","tabs","previousIndex","previousSelected","tab","onDeselect","$selectedIndex","onSelect","addTab","t1","t2","newActiveIndex","removeTab","newActiveTabIndex","justified","centered","tabsetCtrl","$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","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","addRecipient","removeRecipient","Email","FirstName","LastName","resultMessage","suggestionsUrl","cropper","initCropper","Cropper","tmpId","movable","cropBoxResizable","rotatable","save","ctrlFrom","dzMethods","croppedFile","dataURI","byteString","atob","ab","ia","dataURItoBlob","getCroppedCanvas","fillColor","imageSmoothingEnabled","imageSmoothingQuality","tmpFileName","deleteTmpFile","extension","absolute","split1","UrlImages","split2","URLSite","CdnService","cdnId","cdnSize","cdnDesignation","cdnExtension","cdnQuality","cdnAbsolute","cdnResponsiveSize","cdnResponsiveSizes","cdnChangeable","observerCdnId","processImage","cdnSizes","res","lazyImg","dataSrc","inject","script","GtmService","$uibModal","ctrlAs","onClosed","onOpened","openModal","openCmsModal","autoScroll","modalAutoScroll","$modalDialog","$scrollContainer","overflow-x","CarouselService","thisScope","onInitialize","onInitialized","owlLoaded","$tab","onRefreshed","eval","onResized","lazy","onLoadLazy","lazyId","onLoadedLazy","resizeProductsCarousels","$targ","resizeProductGallery","productsGridService","getId","resizeGrid","elemId","$divs","col","nb","targ","RoutingService","isBot","isCache","yOffset","noreplace","routeToKeep","unsubscribe","router","cart","_routes","stepTo","stepFrom","ex","rejection","UseLogs","Key","href","routing","scrollCache","getPath","ngRouter","ngRoute","categoryId","q","backToStore","windowScroll","dataLayer","initRouter","routingService","$routeProvider","$locationProvider","$httpProvider","Routes","DefaultLocalization","useApplyAsync","common","interceptors","authorize","authService","LoadService","AccountService","getReturnFolders","getShippingAddresses","resolveObject","getLocation","resolveQuotation","html5Mode","requireBase","rewriteLinks","routesService","getRoute","pathname","getScrollPos","isCart","responseError","CartIdentification","CartShipping","CartPayment","CartValidation","CartOnePageCheckout","getLinks","links","initAccount","logout","setManagement","hasServices","IsManagementGiftCards","IsManagementCredits","IsManagementLoyaltyPoints","hasOrders","IsManagementOrderTracking","IsManagementInvoicesAndCreditsTracking","IsManagementWebCartTracking","IsManagementReturns","IsManagementComplaint","IsManagementNumericProducts","getOrders","getOrder","getEligibleReturnFolders","$http","appPromise","cartRequests","Content-type","VisitorContext","isPro","WebsiteVisitorContext","VisitorIsPro","noevent","productsToCart","Reference","Elements","Customization","fromCart","checkAvailability","priceObj","HasDiscount","Discount","DegressivePrice","updateStore","visitorContext","Store","updateKey","stringToDate","dateDay","$cacheFactory","addressCache","gpsCache","getDefer","getClustererDefer","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","loadNewModules","insertBeforeElem","nextSibling","useCssLoadPatch","ua","platform","appVersion","versionMatch","tries","cantouch","hasw3ctouch","maxTouchPoints","msMaxTouchPoints","safari","chrome","_el","isOpera","isIE9","isIE10","isIE11","isIEEdge","safeApply","assureList","getCurrentMatch","currentStyle","fontFamily","listenerFunc","currentMatch","previousMatch","wasPreviousMatch","doesCurrentMatch","lossy","throttleTime","isOn","debounceTime","listenerType","LogService","RememberMe","CustomerPro","returnUrl","Address","AddressApartment","AddressBuilding","AddressLocality","Phone","MobilePhone","ProfilePicture","Global","dzOptions","dzCallbacks","ServerName","ConfirmEmail","Errors","ErrorMessage","IDCompanyTitle","Company","Siret","IDActivity","IDActivityDomain","formCreate","toggleCustomerPro","activitiesJson","refreshSelects","initActivity","activities","Activities","domainSelected","newClient","templateCreate","createOpen","loadedAccountCreate","toggleAccountCreate","activeIn","login","AccountHome","openForgotPassword","email","Login","mailRecognized","linkCreate","authCtrl","showCreate","titleLogin","titleLogout","$body","visitor","FullName","AccountUpdate","idCategory","searchQuery","titleBrand","titleReview","titleType","CategoryFiltersCacheService","CategoryService","CategoryCacheService","BrandsSelected","FacetsSelected","ReviewsSelected","ProductTypesSelected","submitSearch","addWord","removeWord","word","updateUrl","openDropdown","setFacet","itemValue","initCheck","facet","isColor","Values","Value","selectedValue","selectId","setBrand","selectFilter","setReview","setType","removeFilter","PriceRange","removeFilters","byName","isReview","selectPrices","isPrices","selectedMinPrice","minPrice","selectedMaxPrice","maxPrice","Gte","Lte","fs","categoryName","gridCtrl","getGridCtrl","filtered","noScroll","setFilters","getFilters","facets","updateFilters","updateFilterData","filteredActive","busy","noresult","nbProducts","maxPage","nbPerPage","paginationEnabled","startMin","startMax","brands","reviews","pricesActive","sliderId","totalSelectedCount","selectedCount","checkValue","colorImg","No","Yes","Colon","locSearch","removeAllEnabled","totalProducts","getProducts","preProcess","iScrollMaxPages","postProcess","nextPage","nextSearchPage","routeUrl","sortTitle","InfiniteScrollApi","loadCache","setGridCtrl","iScrollPage","iScrollNbPerPage","setSort","gotoPage","gotoSearchPage","activateInfiniteScroll","showPagination","removeAll","QueryFullText","NbFrom","NbSize","FiltersSelected","FieldName","FieldValue","setProducts","sortParam","SortType","PriceRangeSelected","Sort","MainPicture","ReviewsInfo","Count","Average","Themes","KeyWebAspect","HTMLShortDescription","Availability","AvailabilityMessage","IsGroupingProduct","IsCustomizable","AllowAddToCart","KeyTheme","isComparable","isPhotos","htmlReduction","htmlPrice","Brand","NbColorNumber","Properties","NumericValue","NbColor","noColor","emailChanged","fieldName","FormService","Attachments","messageSent","messageSentOK","token","isTokenValid","Token","PasswordModified","backLink","customizationController","productService","currentModel","getProductCustomisation","idGroup","Items","Group","Field","CustomizationType","Code","reqPlaceholder","Required","AdditionalCostTTC","AdditionalCostHT","Fields","field","dateOptions","successfile","setCustomization","idKit","trustAsResourceUrl","resizeKits","updateComponent","setKitElement","getProduct","Components","customGroups","groupTitle","groupFirstElement","productDefault","IDProductDefault","selectCustomComponent","KitQuantity","SelectedProduct","Attributes","Selected","initComponent","changeAttribute","AdditionalCost","$main","openLightGallery","dynamicEl","$sub","thumb","lightGallery","nextHtml","prevHtml","fullscreenHtml","dynamic","galleryImgLoader","zoomId","zoomSize","jsonPrice","txtFirstRange","txtRange","txtLastRange","caption","setPricesData","EcoContribution","sliders","steps","lastValue","$video","socialshare","socialshareUrl","socialshareText","socialshareMedia","socialshareHashtags","socialshareEmail","appId","urlString","facebookShare","ViewEmail","Url","TReviewsService","currentSort","listReviews","pageChanged","Reviews","CurrentPageReviews","urlGroup","zoomLoaded","productsData","setProduct","getActive","updateFromCart","showEcoContribution","nbReviews","eco","setPrice","productData","setProductPrice","initZoom","galleryZoomInit","btnEnabled","IDCustomizationListItem","setProductCustomization","setQuantity","setProductQuantity","getProductsData","setActiveTab","giftlist","logged","openCmsLoyalty","openModalReviews","messageTitle","successMessage","IdPicture","urlImage","MessageSent","messageText","customization","ProductPrices","idKitComponent","IDKitComponent","reviewsCache","capacity","addReview","getReviews","note","setRelevance","positive","clearReviewsCache","ReviewsService","ReviewsConfig","setPage","CurrentSort","CurrentFilter","formAdd","score","getAveragePercent","clip","getGradePercent","cookies","Messages","review","Response","IDMessage","inactive","setFilter","openReview","messageOK","getQuotations","IdProduct","IdQuotation","IdLine","hideTimer","inputField","minlength","searchTimer","httpCanceller","httpCallInProgress","callOrAssign","selectedObject","handleOverrideSuggestions","overrideSuggestions","matchField","searchStr","cancelHttpRequest","originalObject","clearSelected","clearResults","updateInputField","httpSuccessCallbackGen","responseData","searching","remoteUrlResponseFormatter","showDropdown","httpErrorCallback","errorRes","getRemoteResults","remoteApiHandler","initResults","searchTimerComplete","elementId","onFocusHandler","focusIn","hideResults","focusOut","hoverRow","clickRow","selectResult","inputChangeHandler","inputChanged","goSearch","maxlength","$digest","txtAddToList","txtViewAndChoose","onlyAllowAddToCart","searchAPI","userInputString","timeoutPromise","CategoryId","withCatalogs","getResponse","designationHtml","tmp","findMatchString","searchCallback","IsElementary","textAllResults","textCategories","textAdvices","advices","categories","TotalProducts","Search","CompareService","updateProductsData","resized","tmpProducts","len2","len1","IsInTable","PropertyType","TextValue","resizeProducts","wItem","getNbProducts","unwatchEvent","getChecked","updateCookie","cancelPromises","canceller","NewsletterOK","newsletterConnect","SwitchController","switchWebSite","keySiteInstance","keyWebInstanceSite","searchMobile","isSearchMobileActive","setSearchMobileActive","psOpen","psClose","closeDone","openDone","mainNavCtrl","expandMenu","reduceMenu","initMenu","openMenu","backMenu","closeMenu","amount","idCard","widget","apiInfo","Alma","AlmaWidgets","Widgets","isInit","setupWidget","PaymentPlans","purchaseAmount","locale","hideIfNotEligible","plans","Plans","monochrome","IsProd","ApiMode","LIVE","TEST","MerchantID","$onChanges","changes","isFirstChange","latitude","longitude","daysModel","strOneTime","strTwoTimes","strClosed","GMaps","StoresService","stylers","saturation","lightness","showMap","OpeningHours","getOpeningHours","getMarkerOpts","labelOrigin","Point","fontWeight","activeTab","CustomEvent","setAddress","getAddress","point","day","amStart","amEnd","pmStart","pmEnd","IsOpen","Date1Start","Date1End","Date2Start","Date2End","Exception","mapListerner","markerClusterer","getSearchGps","postCode","city","searchLocation","addSearchLocation","showMapResults","Coordinate","autocomplete","places","Autocomplete","componentRestrictions","addressSearch","newSearch","hostname","protocol","geolocation","getGeolocation","getCurrentPosition","initMap","nearPoint","minDist","stores","Distance","spherical","computeDistanceBetween","km","DistanceKm","IDCard","gridSize","maxZoom","textColor","showStore","ShowPointsList","PostCode","City","setShowPointsList","closePointInfo","pointInfos","marker","storeSelected","$list","$point","dif","panBy","addAllEnabled","addProduct","addAllProducts"],"mappings":"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AC,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,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,IAAA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0B,IAAA,oDAGA,CACAktE,KAAA,OACAC,WAAA,OACAC,OAAA,QACAC,GAAA,CACArtE,IAAA,UAEA60B,GAAA,CACA70B,IAAA,SAGA,CACAktE,KAAA,eACAC,WAAA,OACAC,OAAA,QACAC,GAAA,CACArtE,IAAA,iBAEA60B,GAAA,CACA70B,IAAA,kBAGA,CACAktE,KAAA,qBACAC,WAAA,OACAC,OAAA,QACAC,GAAA,CACArtE,IAAA,yBAEA60B,GAAA,CACA70B,IAAA,0BAGA,CACAktE,KAAA,eACAC,WAAA,OACAC,OAAA,QACAC,GAAA,CACArtE,IAAA,oBAEA60B,GAAA,CACA70B,IAAA,kBAGA,CACAktE,KAAA,cACAC,WAAA,OACAC,OAAA,QACAC,GAAA,CACArtE,IAAA,mBAEA60B,GAAA,CACA70B,IAAA,iBAGA,CACAktE,KAAA,iBACAC,WAAA,OACAC,OAAA,QACAC,GAAA,CACArtE,IAAA,qBAEA60B,GAAA,CACA70B,IAAA,oBAGA,CACAktE,KAAA,sBACAC,WAAA,OACAC,OAAA,QACAC,GAAA,CACArtE,IAAA,aAEA60B,GAAA,CACA70B,IAAA,aAGA,CACAktE,KAAA,6BACAC,WAAA,OACAC,OAAA,QACAC,GAAA,CACArtE,IAAA,mBAEA60B,GAAA,CACA70B,IAAA,oBAGA,CACAktE,KAAA,oBACAC,WAAA,UACAC,OAAA,UACAC,GAAA,CACArtE,IAAA,YAEA60B,GAAA,CACA70B,IAAA,YAGA,CACAktE,KAAA,kBACAC,WAAA,OACAC,OAAA,cACAC,GAAA,CACArtE,IAAA,gDAEA60B,GAAA,CACA70B,IAAA,4CAGA,CACAktE,KAAA,sBACAC,WAAA,OACAC,OAAA,WACAC,GAAA,CACArtE,IAAA,+BAEA60B,GAAA,CACA70B,IAAA,0BAGA,CACAktE,KAAA,wBACAC,WAAA,YACAC,OAAA,eACAC,GAAA,CACArtE,IAAA,kCAEA60B,GAAA,CACA70B,IAAA,iCAGA,CACAktE,KAAA,mBACAC,WAAA,OACAC,OAAA,eACAC,GAAA,CACArtE,IAAA,mBAEA60B,GAAA,CACA70B,IAAA,kBAGA,CACAktE,KAAA,aACAC,WAAA,OACAC,OAAA,aACAC,GAAA,CACArtE,IAAA,0BAEA60B,GAAA,CACA70B,IAAA,uBAGA,CACAktE,KAAA,wBACAC,WAAA,iBACAC,OAAA,wBACAC,GAAA,CACArtE,IAAA,kDAEA60B,GAAA,CACA70B,IAAA,kDAGA,CACAktE,KAAA,+BACAC,WAAA,gBACAC,OAAA,+BACAC,GAAA,CACArtE,IAAA,8CAEA60B,GAAA,CACA70B,IAAA,gDAGA,CACAktE,KAAA,4BACAC,WAAA,iBACAC,OAAA,4BACAC,GAAA,CACArtE,IAAA,oCAEA60B,GAAA,CACA70B,IAAA,qCAGA,CACAktE,KAAA,QACAC,WAAA,iBACAC,OAAA,QACAC,GAAA,CACArtE,IAAA,kBAEA60B,GAAA,CACA70B,IAAA,mBAGA,CACAktE,KAAA,oBACAC,WAAA,iBACAC,OAAA,oBACAC,GAAA,CACArtE,IAAA,2BAEA60B,GAAA,CACA70B,IAAA,4BAGA,CACAktE,KAAA,cACAC,WAAA,cACAC,OAAA,cACAC,GAAA,CACArtE,IAAA,cAEA60B,GAAA,CACA70B,IAAA,eAGA,CACAktE,KAAA,gBACAC,WAAA,gBACAC,OAAA,gBACAC,GAAA,CACArtE,IAAA,UAEA60B,GAAA,CACA70B,IAAA,YAGA,CACAktE,KAAA,uBACAC,WAAA,uBACAC,OAAA,uBACAC,GAAA,CACArtE,IAAA,gBAEA60B,GAAA,CACA70B,IAAA,aAGA,CACAktE,KAAA,uBACAC,WAAA,uBACAC,OAAA,uBACAC,GAAA,CACArtE,IAAA,qBAEA60B,GAAA,CACA70B,IAAA,mBAGA,CACAktE,KAAA,kBACAC,WAAA,kBACAC,OAAA,kBACAC,GAAA,CACArtE,IAAA,YAEA60B,GAAA,CACA70B,IAAA,aAGA,CACAktE,KAAA,eACAC,WAAA,eACAC,OAAA,eACAC,GAAA,CACArtE,IAAA,eAEA60B,GAAA,CACA70B,IAAA,UAGA,CACAktE,KAAA,iBACAC,WAAA,iBACAC,OAAA,iBACAC,GAAA,CACArtE,IAAA,WAEA60B,GAAA,CACA70B,IAAA,YAGA,CACAktE,KAAA,oBACAC,WAAA,oBACAC,OAAA,oBACAC,GAAA,CACArtE,IAAA,uBAEA60B,GAAA,CACA70B,IAAA,eAGA,CACAktE,KAAA,yBACAC,WAAA,yBACAC,OAAA,QACAC,GAAA,CACArtE,IAAA,uBAEA60B,GAAA,CACA70B,IAAA,qBAGA,CACAktE,KAAA,kBACAC,WAAA,kBACAC,OAAA,QACAC,GAAA,CACArtE,IAAA,gBAEA60B,GAAA,CACA70B,IAAA,aAGA,CACAktE,KAAA,uBACAC,WAAA,uBACAC,OAAA,uBACAC,GAAA,CACArtE,IAAA,mBAEA60B,GAAA,CACA70B,IAAA,kBAGA,CACAktE,KAAA,kBACAC,WAAA,kBACAC,OAAA,WACAC,GAAA,CACArtE,IAAA,qBAEA60B,GAAA,CACA70B,IAAA,cAGA,CACAktE,KAAA,uBACAC,WAAA,kBACAC,OAAA,WACAC,GAAA,CACArtE,IAAA,0BAEA60B,GAAA,CACA70B,IAAA,iBAGA,CACAktE,KAAA,oBACAC,WAAA,mBACAC,OAAA,UACAC,GAAA,CACArtE,IAAA,SAEA60B,GAAA,CACA70B,IAAA,UAGA,CACAktE,KAAA,4BACAC,WAAA,mBACAC,OAAA,UACAC,GAAA,CACArtE,IAAA,aAEA60B,GAAA,CACA70B,IAAA,aAGA,CACAktE,KAAA,iBACAC,WAAA,iBACAC,OAAA,OACAC,GAAA,CACArtE,IAAA,UAEA60B,GAAA,CACA70B,IAAA,gBAGA,CACAktE,KAAA,mBACAC,WAAA,mBACAC,OAAA,mBACAC,GAAA,CACArtE,IAAA,mBAEA60B,GAAA,CACA70B,IAAA,iBAGA,CACAktE,KAAA,qBACAC,WAAA,qBACAC,OAAA,qBACAC,GAAA,CACArtE,IAAA,cAEA60B,GAAA,CACA70B,IAAA,gBAGA,CACAktE,KAAA,SACAC,WAAA,SACAC,OAAA,SACAC,GAAA,CACArtE,IAAA,aAEA60B,GAAA,CACA70B,IAAA,aAGA,CACAktE,KAAA,gBACAC,WAAA,SACAC,OAAA,SACAC,GAAA,CACArtE,IAAA,iBAEA60B,GAAA,CACA70B,IAAA,iBAGA,CACAktE,KAAA,oBACAC,WAAA,SACAC,OAAA,SACAC,GAAA,CACArtE,IAAA,yBAEA60B,GAAA,CACA70B,IAAA,yBAGA,CACAktE,KAAA,0BACAC,WAAA,SACAC,OAAA,SACAC,GAAA,CACArtE,IAAA,sCAEA60B,GAAA,CACA70B,IAAA,sCAGA,CACAktE,KAAA,sBACAC,WAAA,SACAC,OAAA,SACAC,GAAA,CACArtE,IAAA,8BAEA60B,GAAA,CACA70B,IAAA,8BAGA,CACAktE,KAAA,iBACAC,WAAA,SACAC,OAAA,iBACAC,GAAA,CACArtE,IAAA,YAEA60B,GAAA,CACA70B,IAAA,aAGA,CACAktE,KAAA,4BACAC,WAAA,SACAC,OAAA,iBACAC,GAAA,CACArtE,IAAA,oBAEA60B,GAAA,CACA70B,IAAA,qBAGA,CACAktE,KAAA,8BACAC,WAAA,SACAC,OAAA,iBACAC,GAAA,CACArtE,IAAA,yBAEA60B,GAAA,CACA70B,IAAA,0BAGA,CACAktE,KAAA,kCACAC,WAAA,SACAC,OAAA,iBACAC,GAAA,CACArtE,IAAA,iCAEA60B,GAAA,CACA70B,IAAA,kCAGA,CACAktE,KAAA,SACAC,WAAA,SACAC,OAAA,SACAC,GAAA,CACArtE,IAAA,YAEA60B,GAAA,CACA70B,IAAA,WAGA,CACAktE,KAAA,gBACAC,WAAA,SACAC,OAAA,gBACAC,GAAA,CACArtE,IAAA,kBAEA60B,GAAA,CACA70B,IAAA,gBAGA,CACAktE,KAAA,UACAC,WAAA,OACAC,OAAA,UACAC,GAAA,CACArtE,IAAA,WAEA60B,GAAA,CACA70B,IAAA,YAGA,CACAktE,KAAA,iBACAC,WAAA,OACAC,OAAA,iBACAC,GAAA,CACArtE,IAAA,aAEA60B,GAAA,CACA70B,IAAA,cAGA,CACAktE,KAAA,OACAC,WAAA,OACAC,OAAA,OACAC,GAAA,CACArtE,IAAA,QAEA60B,GAAA,CACA70B,IAAA,SAGA,CACAktE,KAAA,wBACAC,WAAA,UACAC,OAAA,iBACAC,GAAA,CACArtE,IAAA,qBAEA60B,GAAA,CACA70B,IAAA,oBAGA,CACAktE,KAAA,iBACAC,WAAA,UACAC,OAAA,UACAC,GAAA,CACArtE,IAAA,mBAEA60B,GAAA,CACA70B,IAAA,oBAGA,CACAktE,KAAA,sBACAC,WAAA,UACAC,OAAA,QACAC,GAAA,CACArtE,IAAA,iBAEA60B,GAAA,CACA70B,IAAA,kBAGA,CACAktE,KAAA,oBACAC,WAAA,UACAC,OAAA,aACAC,GAAA,CACArtE,IAAA,uBAEA60B,GAAA,CACA70B,IAAA,wBAGA,CACAktE,KAAA,2BACAC,WAAA,UACAC,OAAA,oBACAC,GAAA,CACArtE,IAAA,8BAEA60B,GAAA,CACA70B,IAAA,+BAGA,CACAktE,KAAA,yBACAC,WAAA,UACAC,OAAA,WACAC,GAAA,CACArtE,IAAA,2BAEA60B,GAAA,CACA70B,IAAA,sBAGA,CACAktE,KAAA,2BACAC,WAAA,UACAC,OAAA,uBACAC,GAAA,CACArtE,IAAA,uCAEA60B,GAAA,CACA70B,IAAA,wCAGA,CACAktE,KAAA,qBACAC,WAAA,UACAC,OAAA,qBACAC,GAAA,CACArtE,IAAA,yDAEA60B,GAAA,CACA70B,IAAA,0DAGA,CACAktE,KAAA,aACAC,WAAA,SACAC,OAAA,SACAC,GAAA,CACArtE,IAAA,mDAEA60B,GAAA,CACA70B,IAAA,oDAGA,CACAktE,KAAA,YACAC,WAAA,MACAC,OAAA,YACAC,GAAA,CACArtE,IAAA,aAEA60B,GAAA,CACA70B,IAAA,cAGA,CACAktE,KAAA,sBACAC,WAAA,yBACAC,OAAA,OACAC,GAAA,CACArtE,IAAA,yBAEA60B,GAAA,CACA70B,IAAA,4BAGA,CACAktE,KAAA,yBACAC,WAAA,yBACAC,OAAA,yBACAC,GAAA,CACArtE,IAAA,iBAEA60B,GAAA,CACA70B,IAAA,oBAGA,CACAktE,KAAA,2BACAC,WAAA,2BACAC,OAAA,OACAC,GAAA,CACArtE,IAAA,0BAEA60B,GAAA,CACA70B,IAAA,uBAGA,CACAktE,KAAA,yBACAC,WAAA,OACAC,OAAA,yBACAC,GAAA,CACArtE,IAAA,6DAEA60B,GAAA,CACA70B,IAAA,8DAGA,CACAktE,KAAA,aACAC,WAAA,MACAC,OAAA,aACAC,GAAA,CACArtE,IAAA,eAEA60B,GAAA,CACA70B,IAAA,gBAGA,CACAktE,KAAA,uBACAC,WAAA,OACAC,OAAA,uBACAC,GAAA,CACArtE,IAAA,wBAEA60B,GAAA,CACA70B,IAAA,yBAGA,CACAktE,KAAA,sBACAC,WAAA,OACAC,OAAA,sBACAC,GAAA,CACArtE,IAAA,uBAEA60B,GAAA,CACA70B,IAAA,wBAGA,CACAktE,KAAA,kBACAC,WAAA,OACAC,OAAA,kBACAC,GAAA,CACArtE,IAAA,mBAEA60B,GAAA,CACA70B,IAAA,oBAGA,CACAktE,KAAA,wBACAC,WAAA,OACAC,OAAA,wBACAC,GAAA,CACArtE,IAAA,yBAEA60B,GAAA,CACA70B,IAAA,0BAGA,CACAktE,KAAA,cACAC,WAAA,OACAC,OAAA,cACAC,GAAA,CACArtE,IAAA,eAEA60B,GAAA,CACA70B,IAAA,gBAGA,CACAktE,KAAA,oBACAC,WAAA,OACAC,OAAA,oBACAC,GAAA,CACArtE,IAAA,qBAEA60B,GAAA,CACA70B,IAAA,sBAGA,CACAktE,KAAA,qBACAC,WAAA,UACAC,OAAA,cACAC,GAAA,CACArtE,IAAA,eAEA60B,GAAA,CACA70B,IAAA,gBAGA,CACAktE,KAAA,4BACAC,WAAA,UACAC,OAAA,qBACAC,GAAA,CACArtE,IAAA,sCAEA60B,GAAA,CACA70B,IAAA,uCAGA,CACAktE,KAAA,iBACAC,WAAA,UACAC,OAAA,iBACAC,GAAA,CACArtE,IAAA,kBAEA60B,GAAA,CACA70B,IAAA,mBAGA,CACAktE,KAAA,UACAC,WAAA,qBACAC,OAAA,OACAC,GAAA,CACArtE,IAAA,mCAEA60B,GAAA,CACA70B,IAAA,oCAGA,CACAktE,KAAA,oBACAC,WAAA,qBACAC,OAAA,iBACAC,GAAA,CACArtE,IAAA,mDAEA60B,GAAA,CACA70B,IAAA,oDAGA,CACAktE,KAAA,qBACAC,WAAA,q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","file":"master.min.js","sourcesContent":["function googleTranslateChangeTitle() {\r\n\r\n console.log('translate');\r\n\r\n if ($(\"#google_translate_element span\").eq(1).text() != '') {\r\n $('.google_translate_element').hide();\r\n $(\".google_translate_element img\").eq(0).remove();\r\n $(\".google_translate_element span\").eq(1).html(\"Français\");\r\n $(\".google_translate_element span\").eq(3).html('');\r\n $('.google_translate_element').show();\r\n //resizeGoogleTranslate();\r\n } else {\r\n setTimeout(googleTranslateChangeTitle, 50);\r\n }\r\n}\r\n\r\n\r\n\r\n\r\n//function resizeGoogleTranslate() {\r\n// if ($('#body').hasClass('mobile') || $('#body').hasClass('touch')) {\r\n\r\n// $('.google_translate_element').show();\r\n// var offset = $('.navbar-header').offset(),\r\n// yy = Math.round(offset.top + ($('.navbar-header').height() / 2) - ($('.googleTranslate').height() / 2));\r\n\r\n// if ($('#body').hasClass('screensize-sm')) {\r\n// $('.googleTranslate').css({top:yy, right:'10px'}).fadeIn();\r\n// } else {\r\n// $('.googleTranslate').css({top:yy, right:0}).fadeIn();\r\n// }\r\n// } else {\r\n// $('.googleTranslate').removeAttr('style');\r\n// $('.google_translate_element').show();\r\n// }\r\n//}\r\n\r\n\r\n\r\n\r\n\r\n \r\n \r\n \r\n","//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}","/*!\r\n * Bootstrap-select v1.12.4 (http://silviomoreto.github.io/bootstrap-select)\r\n *\r\n * Copyright 2013-2017 bootstrap-select\r\n * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE)\r\n */\r\n\r\n(function (root, factory) {\r\n if (typeof define === 'function' && define.amd) {\r\n // AMD. Register as an anonymous module unless amdModuleId is set\r\n define([\"jquery\"], function (a0) {\r\n return (factory(a0));\r\n });\r\n } else if (typeof module === 'object' && module.exports) {\r\n // Node. Does not work with strict CommonJS, but\r\n // only CommonJS-like environments that support module.exports,\r\n // like Node.\r\n module.exports = factory(require(\"jquery\"));\r\n } else {\r\n factory(root[\"jQuery\"]);\r\n }\r\n}(this, function (jQuery) {\r\n\r\n(function ($) {\r\n 'use strict';\r\n\r\n //\r\n if (!String.prototype.includes) {\r\n (function () {\r\n 'use strict'; // needed to support `apply`/`call` with `undefined`/`null`\r\n var toString = {}.toString;\r\n var defineProperty = (function () {\r\n // IE 8 only supports `Object.defineProperty` on DOM elements\r\n try {\r\n var object = {};\r\n var $defineProperty = Object.defineProperty;\r\n var result = $defineProperty(object, object, object) && $defineProperty;\r\n } catch (error) {\r\n }\r\n return result;\r\n }());\r\n var indexOf = ''.indexOf;\r\n var includes = function (search) {\r\n if (this == null) {\r\n throw new TypeError();\r\n }\r\n var string = String(this);\r\n if (search && toString.call(search) == '[object RegExp]') {\r\n throw new TypeError();\r\n }\r\n var stringLength = string.length;\r\n var searchString = String(search);\r\n var searchLength = searchString.length;\r\n var position = arguments.length > 1 ? arguments[1] : undefined;\r\n // `ToInteger`\r\n var pos = position ? Number(position) : 0;\r\n if (pos != pos) { // better `isNaN`\r\n pos = 0;\r\n }\r\n var start = Math.min(Math.max(pos, 0), stringLength);\r\n // Avoid the `indexOf` call if no match is possible\r\n if (searchLength + start > stringLength) {\r\n return false;\r\n }\r\n return indexOf.call(string, searchString, pos) != -1;\r\n };\r\n if (defineProperty) {\r\n defineProperty(String.prototype, 'includes', {\r\n 'value': includes,\r\n 'configurable': true,\r\n 'writable': true\r\n });\r\n } else {\r\n String.prototype.includes = includes;\r\n }\r\n }());\r\n }\r\n\r\n if (!String.prototype.startsWith) {\r\n (function () {\r\n 'use strict'; // needed to support `apply`/`call` with `undefined`/`null`\r\n var defineProperty = (function () {\r\n // IE 8 only supports `Object.defineProperty` on DOM elements\r\n try {\r\n var object = {};\r\n var $defineProperty = Object.defineProperty;\r\n var result = $defineProperty(object, object, object) && $defineProperty;\r\n } catch (error) {\r\n }\r\n return result;\r\n }());\r\n var toString = {}.toString;\r\n var startsWith = function (search) {\r\n if (this == null) {\r\n throw new TypeError();\r\n }\r\n var string = String(this);\r\n if (search && toString.call(search) == '[object RegExp]') {\r\n throw new TypeError();\r\n }\r\n var stringLength = string.length;\r\n var searchString = String(search);\r\n var searchLength = searchString.length;\r\n var position = arguments.length > 1 ? arguments[1] : undefined;\r\n // `ToInteger`\r\n var pos = position ? Number(position) : 0;\r\n if (pos != pos) { // better `isNaN`\r\n pos = 0;\r\n }\r\n var start = Math.min(Math.max(pos, 0), stringLength);\r\n // Avoid the `indexOf` call if no match is possible\r\n if (searchLength + start > stringLength) {\r\n return false;\r\n }\r\n var index = -1;\r\n while (++index < searchLength) {\r\n if (string.charCodeAt(start + index) != searchString.charCodeAt(index)) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n };\r\n if (defineProperty) {\r\n defineProperty(String.prototype, 'startsWith', {\r\n 'value': startsWith,\r\n 'configurable': true,\r\n 'writable': true\r\n });\r\n } else {\r\n String.prototype.startsWith = startsWith;\r\n }\r\n }());\r\n }\r\n\r\n if (!Object.keys) {\r\n Object.keys = function (\r\n o, // object\r\n k, // key\r\n r // result array\r\n ){\r\n // initialize object and result\r\n r=[];\r\n // iterate over object keys\r\n for (k in o)\r\n // fill result array with non-prototypical keys\r\n r.hasOwnProperty.call(o, k) && r.push(k);\r\n // return result\r\n return r;\r\n };\r\n }\r\n\r\n // set data-selected on select element if the value has been programmatically selected\r\n // prior to initialization of bootstrap-select\r\n // * consider removing or replacing an alternative method *\r\n var valHooks = {\r\n useDefault: false,\r\n _set: $.valHooks.select.set\r\n };\r\n\r\n $.valHooks.select.set = function(elem, value) {\r\n if (value && !valHooks.useDefault) $(elem).data('selected', true);\r\n\r\n return valHooks._set.apply(this, arguments);\r\n };\r\n\r\n var changed_arguments = null;\r\n\r\n var EventIsSupported = (function() {\r\n try {\r\n new Event('change');\r\n return true;\r\n } catch (e) {\r\n return false;\r\n }\r\n })();\r\n\r\n $.fn.triggerNative = function (eventName) {\r\n var el = this[0],\r\n event;\r\n\r\n if (el.dispatchEvent) { // for modern browsers & IE9+\r\n if (EventIsSupported) {\r\n // For modern browsers\r\n event = new Event(eventName, {\r\n bubbles: true\r\n });\r\n } else {\r\n // For IE since it doesn't support Event constructor\r\n event = document.createEvent('Event');\r\n event.initEvent(eventName, true, false);\r\n }\r\n\r\n el.dispatchEvent(event);\r\n } else if (el.fireEvent) { // for IE8\r\n event = document.createEventObject();\r\n event.eventType = eventName;\r\n el.fireEvent('on' + eventName, event);\r\n } else {\r\n // fall back to jQuery.trigger\r\n this.trigger(eventName);\r\n }\r\n };\r\n //\r\n\r\n // Case insensitive contains search\r\n $.expr.pseudos.icontains = function (obj, index, meta) {\r\n var $obj = $(obj).find('a');\r\n var haystack = ($obj.data('tokens') || $obj.text()).toString().toUpperCase();\r\n return haystack.includes(meta[3].toUpperCase());\r\n };\r\n\r\n // Case insensitive begins search\r\n $.expr.pseudos.ibegins = function (obj, index, meta) {\r\n var $obj = $(obj).find('a');\r\n var haystack = ($obj.data('tokens') || $obj.text()).toString().toUpperCase();\r\n return haystack.startsWith(meta[3].toUpperCase());\r\n };\r\n\r\n // Case and accent insensitive contains search\r\n $.expr.pseudos.aicontains = function (obj, index, meta) {\r\n var $obj = $(obj).find('a');\r\n var haystack = ($obj.data('tokens') || $obj.data('normalizedText') || $obj.text()).toString().toUpperCase();\r\n return haystack.includes(meta[3].toUpperCase());\r\n };\r\n\r\n // Case and accent insensitive begins search\r\n $.expr.pseudos.aibegins = function (obj, index, meta) {\r\n var $obj = $(obj).find('a');\r\n var haystack = ($obj.data('tokens') || $obj.data('normalizedText') || $obj.text()).toString().toUpperCase();\r\n return haystack.startsWith(meta[3].toUpperCase());\r\n };\r\n\r\n /**\r\n * Remove all diatrics from the given text.\r\n * @access private\r\n * @param {String} text\r\n * @returns {String}\r\n */\r\n function normalizeToBase(text) {\r\n var rExps = [\r\n {re: /[\\xC0-\\xC6]/g, ch: \"A\"},\r\n {re: /[\\xE0-\\xE6]/g, ch: \"a\"},\r\n {re: /[\\xC8-\\xCB]/g, ch: \"E\"},\r\n {re: /[\\xE8-\\xEB]/g, ch: \"e\"},\r\n {re: /[\\xCC-\\xCF]/g, ch: \"I\"},\r\n {re: /[\\xEC-\\xEF]/g, ch: \"i\"},\r\n {re: /[\\xD2-\\xD6]/g, ch: \"O\"},\r\n {re: /[\\xF2-\\xF6]/g, ch: \"o\"},\r\n {re: /[\\xD9-\\xDC]/g, ch: \"U\"},\r\n {re: /[\\xF9-\\xFC]/g, ch: \"u\"},\r\n {re: /[\\xC7-\\xE7]/g, ch: \"c\"},\r\n {re: /[\\xD1]/g, ch: \"N\"},\r\n {re: /[\\xF1]/g, ch: \"n\"}\r\n ];\r\n $.each(rExps, function () {\r\n text = text ? text.replace(this.re, this.ch) : '';\r\n });\r\n return text;\r\n }\r\n\r\n\r\n // List of HTML entities for escaping.\r\n var escapeMap = {\r\n '&': '&',\r\n '<': '<',\r\n '>': '>',\r\n '\"': '"',\r\n \"'\": ''',\r\n '`': '`'\r\n };\r\n\r\n var unescapeMap = {\r\n '&': '&',\r\n '<': '<',\r\n '>': '>',\r\n '"': '\"',\r\n ''': \"'\",\r\n '`': '`'\r\n };\r\n\r\n // Functions for escaping and unescaping strings to/from HTML interpolation.\r\n var createEscaper = function(map) {\r\n var escaper = function(match) {\r\n return map[match];\r\n };\r\n // Regexes for identifying a key that needs to be escaped.\r\n var source = '(?:' + Object.keys(map).join('|') + ')';\r\n var testRegexp = RegExp(source);\r\n var replaceRegexp = RegExp(source, 'g');\r\n return function(string) {\r\n string = string == null ? '' : '' + string;\r\n return testRegexp.test(string) ? string.replace(replaceRegexp, escaper) : string;\r\n };\r\n };\r\n\r\n var htmlEscape = createEscaper(escapeMap);\r\n var htmlUnescape = createEscaper(unescapeMap);\r\n\r\n var Selectpicker = function (element, options) {\r\n // bootstrap-select has been initialized - revert valHooks.select.set back to its original function\r\n if (!valHooks.useDefault) {\r\n $.valHooks.select.set = valHooks._set;\r\n valHooks.useDefault = true;\r\n }\r\n\r\n this.$element = $(element);\r\n this.$newElement = null;\r\n this.$button = null;\r\n this.$menu = null;\r\n this.$lis = null;\r\n this.options = options;\r\n\r\n // If we have no title yet, try to pull it from the html title attribute (jQuery doesnt' pick it up as it's not a\r\n // data-attribute)\r\n if (this.options.title === null) {\r\n this.options.title = this.$element.attr('title');\r\n }\r\n\r\n // Format window padding\r\n var winPad = this.options.windowPadding;\r\n if (typeof winPad === 'number') {\r\n this.options.windowPadding = [winPad, winPad, winPad, winPad];\r\n }\r\n\r\n //Expose public methods\r\n this.val = Selectpicker.prototype.val;\r\n this.render = Selectpicker.prototype.render;\r\n this.refresh = Selectpicker.prototype.refresh;\r\n this.setStyle = Selectpicker.prototype.setStyle;\r\n this.selectAll = Selectpicker.prototype.selectAll;\r\n this.deselectAll = Selectpicker.prototype.deselectAll;\r\n this.destroy = Selectpicker.prototype.destroy;\r\n this.remove = Selectpicker.prototype.remove;\r\n this.show = Selectpicker.prototype.show;\r\n this.hide = Selectpicker.prototype.hide;\r\n\r\n this.init();\r\n };\r\n\r\n Selectpicker.VERSION = '1.12.4';\r\n\r\n // part of this is duplicated in i18n/defaults-en_US.js. Make sure to update both.\r\n Selectpicker.DEFAULTS = {\r\n noneSelectedText: 'Nothing selected',\r\n noneResultsText: 'No results matched {0}',\r\n countSelectedText: function (numSelected, numTotal) {\r\n return (numSelected == 1) ? \"{0} item selected\" : \"{0} items selected\";\r\n },\r\n maxOptionsText: function (numAll, numGroup) {\r\n return [\r\n (numAll == 1) ? 'Limit reached ({n} item max)' : 'Limit reached ({n} items max)',\r\n (numGroup == 1) ? 'Group limit reached ({n} item max)' : 'Group limit reached ({n} items max)'\r\n ];\r\n },\r\n selectAllText: 'Select All',\r\n deselectAllText: 'Deselect All',\r\n doneButton: false,\r\n doneButtonText: 'Close',\r\n multipleSeparator: ', ',\r\n styleBase: 'btn',\r\n style: 'btn-default',\r\n caret: 'caret',\r\n size: 'auto',\r\n title: null,\r\n selectedTextFormat: 'values',\r\n width: false,\r\n container: false,\r\n hideDisabled: false,\r\n showSubtext: false,\r\n showIcon: true,\r\n showContent: true,\r\n dropupAuto: true,\r\n header: false,\r\n liveSearch: false,\r\n liveSearchPlaceholder: null,\r\n liveSearchNormalize: false,\r\n liveSearchStyle: 'contains',\r\n actionsBox: false,\r\n iconBase: 'glyphicon',\r\n tickIcon: 'glyphicon-ok',\r\n showTick: false,\r\n template: {\r\n caret: ''\r\n },\r\n maxOptions: false,\r\n mobile: false,\r\n selectOnTab: false,\r\n dropdownAlignRight: false,\r\n windowPadding: 0\r\n };\r\n\r\n Selectpicker.prototype = {\r\n\r\n constructor: Selectpicker,\r\n\r\n init: function () {\r\n var that = this,\r\n id = this.$element.attr('id');\r\n\r\n this.$element.addClass('bs-select-hidden');\r\n\r\n // store originalIndex (key) and newIndex (value) in this.liObj for fast accessibility\r\n // allows us to do this.$lis.eq(that.liObj[index]) instead of this.$lis.filter('[data-original-index=\"' + index + '\"]')\r\n this.liObj = {};\r\n this.multiple = this.$element.prop('multiple');\r\n this.autofocus = this.$element.prop('autofocus');\r\n this.$newElement = this.createView();\r\n this.$element\r\n .after(this.$newElement)\r\n .appendTo(this.$newElement);\r\n this.$button = this.$newElement.children('button');\r\n this.$menu = this.$newElement.children('.dropdown-menu');\r\n this.$menuInner = this.$menu.children('.inner');\r\n this.$searchbox = this.$menu.find('input');\r\n\r\n this.$element.removeClass('bs-select-hidden');\r\n\r\n if (this.options.dropdownAlignRight === true) this.$menu.addClass('dropdown-menu-right');\r\n\r\n if (typeof id !== 'undefined') {\r\n this.$button.attr('data-id', id);\r\n $('label[for=\"' + id + '\"]').click(function (e) {\r\n e.preventDefault();\r\n that.$button.focus();\r\n });\r\n }\r\n\r\n this.checkDisabled();\r\n this.clickListener();\r\n if (this.options.liveSearch) this.liveSearchListener();\r\n this.render();\r\n this.setStyle();\r\n this.setWidth();\r\n if (this.options.container) this.selectPosition();\r\n this.$menu.data('this', this);\r\n this.$newElement.data('this', this);\r\n if (this.options.mobile) this.mobile();\r\n\r\n this.$newElement.on({\r\n 'hide.bs.dropdown': function (e) {\r\n that.$menuInner.attr('aria-expanded', false);\r\n that.$element.trigger('hide.bs.select', e);\r\n },\r\n 'hidden.bs.dropdown': function (e) {\r\n that.$element.trigger('hidden.bs.select', e);\r\n },\r\n 'show.bs.dropdown': function (e) {\r\n that.$menuInner.attr('aria-expanded', true);\r\n that.$element.trigger('show.bs.select', e);\r\n },\r\n 'shown.bs.dropdown': function (e) {\r\n that.$element.trigger('shown.bs.select', e);\r\n }\r\n });\r\n\r\n if (that.$element[0].hasAttribute('required')) {\r\n this.$element.on('invalid', function () {\r\n that.$button.addClass('bs-invalid');\r\n\r\n that.$element.on({\r\n 'focus.bs.select': function () {\r\n that.$button.focus();\r\n that.$element.off('focus.bs.select');\r\n },\r\n 'shown.bs.select': function () {\r\n that.$element\r\n .val(that.$element.val()) // set the value to hide the validation message in Chrome when menu is opened\r\n .off('shown.bs.select');\r\n },\r\n 'rendered.bs.select': function () {\r\n // if select is no longer invalid, remove the bs-invalid class\r\n if (this.validity.valid) that.$button.removeClass('bs-invalid');\r\n that.$element.off('rendered.bs.select');\r\n }\r\n });\r\n\r\n that.$button.on('blur.bs.select', function() {\r\n that.$element.focus().blur();\r\n that.$button.off('blur.bs.select');\r\n });\r\n });\r\n }\r\n\r\n setTimeout(function () {\r\n that.$element.trigger('loaded.bs.select');\r\n });\r\n },\r\n\r\n createDropdown: function () {\r\n // Options\r\n // If we are multiple or showTick option is set, then add the show-tick class\r\n var showTick = (this.multiple || this.options.showTick) ? ' show-tick' : '',\r\n inputGroup = this.$element.parent().hasClass('input-group') ? ' input-group-btn' : '',\r\n autofocus = this.autofocus ? ' autofocus' : '';\r\n // Elements\r\n var header = this.options.header ? '
' + this.options.header + '
' : '';\r\n var searchbox = this.options.liveSearch ?\r\n '
' +\r\n '' +\r\n '
'\r\n : '';\r\n var actionsbox = this.multiple && this.options.actionsBox ?\r\n '
' +\r\n '
' +\r\n '' +\r\n '' +\r\n '
' +\r\n '
'\r\n : '';\r\n var donebutton = this.multiple && this.options.doneButton ?\r\n '
' +\r\n '
' +\r\n '' +\r\n '
' +\r\n '
'\r\n : '';\r\n var drop =\r\n '
' +\r\n '' +\r\n '' +\r\n '' +\r\n '
' +\r\n header +\r\n searchbox +\r\n actionsbox +\r\n '' +\r\n donebutton +\r\n '
' +\r\n '
';\r\n\r\n return $(drop);\r\n },\r\n\r\n createView: function () {\r\n var $drop = this.createDropdown(),\r\n li = this.createLi();\r\n\r\n $drop.find('ul')[0].innerHTML = li;\r\n return $drop;\r\n },\r\n\r\n reloadLi: function () {\r\n // rebuild\r\n var li = this.createLi();\r\n this.$menuInner[0].innerHTML = li;\r\n },\r\n\r\n createLi: function () {\r\n var that = this,\r\n _li = [],\r\n optID = 0,\r\n titleOption = document.createElement('option'),\r\n liIndex = -1; // increment liIndex whenever a new
  • element is created to ensure liObj is correct\r\n\r\n // Helper functions\r\n /**\r\n * @param content\r\n * @param [index]\r\n * @param [classes]\r\n * @param [optgroup]\r\n * @returns {string}\r\n */\r\n var generateLI = function (content, index, classes, optgroup) {\r\n return '' + content + '
  • ';\r\n };\r\n\r\n /**\r\n * @param text\r\n * @param [classes]\r\n * @param [inline]\r\n * @param [tokens]\r\n * @returns {string}\r\n */\r\n var generateA = function (text, classes, inline, tokens) {\r\n return '' + text +\r\n '' +\r\n '';\r\n };\r\n\r\n if (this.options.title && !this.multiple) {\r\n // this option doesn't create a new
  • element, but does add a new option, so liIndex is decreased\r\n // since liObj is recalculated on every refresh, liIndex needs to be decreased even if the titleOption is already appended\r\n liIndex--;\r\n\r\n if (!this.$element.find('.bs-title-option').length) {\r\n // Use native JS to prepend option (faster)\r\n var element = this.$element[0];\r\n titleOption.className = 'bs-title-option';\r\n titleOption.innerHTML = this.options.title;\r\n titleOption.value = '';\r\n element.insertBefore(titleOption, element.firstChild);\r\n // Check if selected or data-selected attribute is already set on an option. If not, select the titleOption option.\r\n // the selected item may have been changed by user or programmatically before the bootstrap select plugin runs,\r\n // if so, the select will have the data-selected attribute\r\n var $opt = $(element.options[element.selectedIndex]);\r\n if ($opt.attr('selected') === undefined && this.$element.data('selected') === undefined) {\r\n titleOption.selected = true;\r\n }\r\n }\r\n }\r\n\r\n var $selectOptions = this.$element.find('option');\r\n\r\n $selectOptions.each(function (index) {\r\n var $this = $(this);\r\n\r\n liIndex++;\r\n\r\n if ($this.hasClass('bs-title-option')) return;\r\n\r\n // Get the class and text for the option\r\n var optionClass = this.className || '',\r\n inline = htmlEscape(this.style.cssText),\r\n text = $this.data('content') ? $this.data('content') : $this.html(),\r\n tokens = $this.data('tokens') ? $this.data('tokens') : null,\r\n subtext = typeof $this.data('subtext') !== 'undefined' ? '' + $this.data('subtext') + '' : '',\r\n icon = typeof $this.data('icon') !== 'undefined' ? ' ' : '',\r\n $parent = $this.parent(),\r\n isOptgroup = $parent[0].tagName === 'OPTGROUP',\r\n isOptgroupDisabled = isOptgroup && $parent[0].disabled,\r\n isDisabled = this.disabled || isOptgroupDisabled,\r\n prevHiddenIndex;\r\n\r\n if (icon !== '' && isDisabled) {\r\n icon = '' + icon + '';\r\n }\r\n\r\n if (that.options.hideDisabled && (isDisabled && !isOptgroup || isOptgroupDisabled)) {\r\n // set prevHiddenIndex - the index of the first hidden option in a group of hidden options\r\n // used to determine whether or not a divider should be placed after an optgroup if there are\r\n // hidden options between the optgroup and the first visible option\r\n prevHiddenIndex = $this.data('prevHiddenIndex');\r\n $this.next().data('prevHiddenIndex', (prevHiddenIndex !== undefined ? prevHiddenIndex : index));\r\n\r\n liIndex--;\r\n return;\r\n }\r\n\r\n if (!$this.data('content')) {\r\n // Prepend any icon and append any subtext to the main text.\r\n text = icon + '' + text + subtext + '';\r\n }\r\n\r\n if (isOptgroup && $this.data('divider') !== true) {\r\n if (that.options.hideDisabled && isDisabled) {\r\n if ($parent.data('allOptionsDisabled') === undefined) {\r\n var $options = $parent.children();\r\n $parent.data('allOptionsDisabled', $options.filter(':disabled').length === $options.length);\r\n }\r\n\r\n if ($parent.data('allOptionsDisabled')) {\r\n liIndex--;\r\n return;\r\n }\r\n }\r\n\r\n var optGroupClass = ' ' + $parent[0].className || '';\r\n\r\n if ($this.index() === 0) { // Is it the first option of the optgroup?\r\n optID += 1;\r\n\r\n // Get the opt group label\r\n var label = $parent[0].label,\r\n labelSubtext = typeof $parent.data('subtext') !== 'undefined' ? '' + $parent.data('subtext') + '' : '',\r\n labelIcon = $parent.data('icon') ? ' ' : '';\r\n\r\n label = labelIcon + '' + htmlEscape(label) + labelSubtext + '';\r\n\r\n if (index !== 0 && _li.length > 0) { // Is it NOT the first option of the select && are there elements in the dropdown?\r\n liIndex++;\r\n _li.push(generateLI('', null, 'divider', optID + 'div'));\r\n }\r\n liIndex++;\r\n _li.push(generateLI(label, null, 'dropdown-header' + optGroupClass, optID));\r\n }\r\n\r\n if (that.options.hideDisabled && isDisabled) {\r\n liIndex--;\r\n return;\r\n }\r\n\r\n _li.push(generateLI(generateA(text, 'opt ' + optionClass + optGroupClass, inline, tokens), index, '', optID));\r\n } else if ($this.data('divider') === true) {\r\n _li.push(generateLI('', index, 'divider'));\r\n } else if ($this.data('hidden') === true) {\r\n // set prevHiddenIndex - the index of the first hidden option in a group of hidden options\r\n // used to determine whether or not a divider should be placed after an optgroup if there are\r\n // hidden options between the optgroup and the first visible option\r\n prevHiddenIndex = $this.data('prevHiddenIndex');\r\n $this.next().data('prevHiddenIndex', (prevHiddenIndex !== undefined ? prevHiddenIndex : index));\r\n\r\n _li.push(generateLI(generateA(text, optionClass, inline, tokens), index, 'hidden is-hidden'));\r\n } else {\r\n var showDivider = this.previousElementSibling && this.previousElementSibling.tagName === 'OPTGROUP';\r\n\r\n // if previous element is not an optgroup and hideDisabled is true\r\n if (!showDivider && that.options.hideDisabled) {\r\n prevHiddenIndex = $this.data('prevHiddenIndex');\r\n\r\n if (prevHiddenIndex !== undefined) {\r\n // select the element **before** the first hidden element in the group\r\n var prevHidden = $selectOptions.eq(prevHiddenIndex)[0].previousElementSibling;\r\n\r\n if (prevHidden && prevHidden.tagName === 'OPTGROUP' && !prevHidden.disabled) {\r\n showDivider = true;\r\n }\r\n }\r\n }\r\n\r\n if (showDivider) {\r\n liIndex++;\r\n _li.push(generateLI('', null, 'divider', optID + 'div'));\r\n }\r\n _li.push(generateLI(generateA(text, optionClass, inline, tokens), index));\r\n }\r\n\r\n that.liObj[index] = liIndex;\r\n });\r\n\r\n //If we are not multiple, we don't have a selected item, and we don't have a title, select the first element so something is set in the button\r\n if (!this.multiple && this.$element.find('option:selected').length === 0 && !this.options.title) {\r\n this.$element.find('option').eq(0).prop('selected', true).attr('selected', 'selected');\r\n }\r\n\r\n return _li.join('');\r\n },\r\n\r\n findLis: function () {\r\n if (this.$lis == null) this.$lis = this.$menu.find('li');\r\n return this.$lis;\r\n },\r\n\r\n /**\r\n * @param [updateLi] defaults to true\r\n */\r\n render: function (updateLi) {\r\n var that = this,\r\n notDisabled,\r\n $selectOptions = this.$element.find('option');\r\n\r\n //Update the LI to match the SELECT\r\n if (updateLi !== false) {\r\n $selectOptions.each(function (index) {\r\n var $lis = that.findLis().eq(that.liObj[index]);\r\n\r\n that.setDisabled(index, this.disabled || this.parentNode.tagName === 'OPTGROUP' && this.parentNode.disabled, $lis);\r\n that.setSelected(index, this.selected, $lis);\r\n });\r\n }\r\n\r\n this.togglePlaceholder();\r\n\r\n this.tabIndex();\r\n\r\n var selectedItems = $selectOptions.map(function () {\r\n if (this.selected) {\r\n if (that.options.hideDisabled && (this.disabled || this.parentNode.tagName === 'OPTGROUP' && this.parentNode.disabled)) return;\r\n\r\n var $this = $(this),\r\n icon = $this.data('icon') && that.options.showIcon ? ' ' : '',\r\n subtext;\r\n\r\n if (that.options.showSubtext && $this.data('subtext') && !that.multiple) {\r\n subtext = ' ' + $this.data('subtext') + '';\r\n } else {\r\n subtext = '';\r\n }\r\n if (typeof $this.attr('title') !== 'undefined') {\r\n return $this.attr('title');\r\n } else if ($this.data('content') && that.options.showContent) {\r\n return $this.data('content').toString();\r\n } else {\r\n return icon + $this.html() + subtext;\r\n }\r\n }\r\n }).toArray();\r\n\r\n //Fixes issue in IE10 occurring when no default option is selected and at least one option is disabled\r\n //Convert all the values into a comma delimited string\r\n var title = !this.multiple ? selectedItems[0] : selectedItems.join(this.options.multipleSeparator);\r\n\r\n //If this is multi select, and the selectText type is count, the show 1 of 2 selected etc..\r\n if (this.multiple && this.options.selectedTextFormat.indexOf('count') > -1) {\r\n var max = this.options.selectedTextFormat.split('>');\r\n if ((max.length > 1 && selectedItems.length > max[1]) || (max.length == 1 && selectedItems.length >= 2)) {\r\n notDisabled = this.options.hideDisabled ? ', [disabled]' : '';\r\n var totalCount = $selectOptions.not('[data-divider=\"true\"], [data-hidden=\"true\"]' + notDisabled).length,\r\n tr8nText = (typeof this.options.countSelectedText === 'function') ? this.options.countSelectedText(selectedItems.length, totalCount) : this.options.countSelectedText;\r\n title = tr8nText.replace('{0}', selectedItems.length.toString()).replace('{1}', totalCount.toString());\r\n }\r\n }\r\n\r\n if (this.options.title == undefined) {\r\n this.options.title = this.$element.attr('title');\r\n }\r\n\r\n if (this.options.selectedTextFormat == 'static') {\r\n title = this.options.title;\r\n }\r\n\r\n //If we dont have a title, then use the default, or if nothing is set at all, use the not selected text\r\n if (!title) {\r\n title = typeof this.options.title !== 'undefined' ? this.options.title : this.options.noneSelectedText;\r\n }\r\n\r\n //strip all HTML tags and trim the result, then unescape any escaped tags\r\n this.$button.attr('title', htmlUnescape($.trim(title.replace(/<[^>]*>?/g, ''))));\r\n this.$button.children('.filter-option').html(title);\r\n\r\n this.$element.trigger('rendered.bs.select');\r\n },\r\n\r\n /**\r\n * @param [style]\r\n * @param [status]\r\n */\r\n setStyle: function (style, status) {\r\n if (this.$element.attr('class')) {\r\n this.$newElement.addClass(this.$element.attr('class').replace(/selectpicker|mobile-device|bs-select-hidden|validate\\[.*\\]/gi, ''));\r\n }\r\n\r\n var buttonClass = style ? style : this.options.style;\r\n\r\n if (status == 'add') {\r\n this.$button.addClass(buttonClass);\r\n } else if (status == 'remove') {\r\n this.$button.removeClass(buttonClass);\r\n } else {\r\n this.$button.removeClass(this.options.style);\r\n this.$button.addClass(buttonClass);\r\n }\r\n },\r\n\r\n liHeight: function (refresh) {\r\n if (!refresh && (this.options.size === false || this.sizeInfo)) return;\r\n\r\n var newElement = document.createElement('div'),\r\n menu = document.createElement('div'),\r\n menuInner = document.createElement('ul'),\r\n divider = document.createElement('li'),\r\n li = document.createElement('li'),\r\n a = document.createElement('a'),\r\n text = document.createElement('span'),\r\n header = this.options.header && this.$menu.find('.popover-title').length > 0 ? this.$menu.find('.popover-title')[0].cloneNode(true) : null,\r\n search = this.options.liveSearch ? document.createElement('div') : null,\r\n actions = this.options.actionsBox && this.multiple && this.$menu.find('.bs-actionsbox').length > 0 ? this.$menu.find('.bs-actionsbox')[0].cloneNode(true) : null,\r\n doneButton = this.options.doneButton && this.multiple && this.$menu.find('.bs-donebutton').length > 0 ? this.$menu.find('.bs-donebutton')[0].cloneNode(true) : null;\r\n\r\n text.className = 'text';\r\n newElement.className = this.$menu[0].parentNode.className + ' open';\r\n menu.className = 'dropdown-menu open';\r\n menuInner.className = 'dropdown-menu inner';\r\n divider.className = 'divider';\r\n\r\n text.appendChild(document.createTextNode('Inner text'));\r\n a.appendChild(text);\r\n li.appendChild(a);\r\n menuInner.appendChild(li);\r\n menuInner.appendChild(divider);\r\n if (header) menu.appendChild(header);\r\n if (search) {\r\n var input = document.createElement('input');\r\n search.className = 'bs-searchbox';\r\n input.className = 'form-control';\r\n search.appendChild(input);\r\n menu.appendChild(search);\r\n }\r\n if (actions) menu.appendChild(actions);\r\n menu.appendChild(menuInner);\r\n if (doneButton) menu.appendChild(doneButton);\r\n newElement.appendChild(menu);\r\n\r\n document.body.appendChild(newElement);\r\n\r\n var liHeight = a.offsetHeight,\r\n headerHeight = header ? header.offsetHeight : 0,\r\n searchHeight = search ? search.offsetHeight : 0,\r\n actionsHeight = actions ? actions.offsetHeight : 0,\r\n doneButtonHeight = doneButton ? doneButton.offsetHeight : 0,\r\n dividerHeight = $(divider).outerHeight(true),\r\n // fall back to jQuery if getComputedStyle is not supported\r\n menuStyle = typeof getComputedStyle === 'function' ? getComputedStyle(menu) : false,\r\n $menu = menuStyle ? null : $(menu),\r\n menuPadding = {\r\n vert: parseInt(menuStyle ? menuStyle.paddingTop : $menu.css('paddingTop')) +\r\n parseInt(menuStyle ? menuStyle.paddingBottom : $menu.css('paddingBottom')) +\r\n parseInt(menuStyle ? menuStyle.borderTopWidth : $menu.css('borderTopWidth')) +\r\n parseInt(menuStyle ? menuStyle.borderBottomWidth : $menu.css('borderBottomWidth')),\r\n horiz: parseInt(menuStyle ? menuStyle.paddingLeft : $menu.css('paddingLeft')) +\r\n parseInt(menuStyle ? menuStyle.paddingRight : $menu.css('paddingRight')) +\r\n parseInt(menuStyle ? menuStyle.borderLeftWidth : $menu.css('borderLeftWidth')) +\r\n parseInt(menuStyle ? menuStyle.borderRightWidth : $menu.css('borderRightWidth'))\r\n },\r\n menuExtras = {\r\n vert: menuPadding.vert +\r\n parseInt(menuStyle ? menuStyle.marginTop : $menu.css('marginTop')) +\r\n parseInt(menuStyle ? menuStyle.marginBottom : $menu.css('marginBottom')) + 2,\r\n horiz: menuPadding.horiz +\r\n parseInt(menuStyle ? menuStyle.marginLeft : $menu.css('marginLeft')) +\r\n parseInt(menuStyle ? menuStyle.marginRight : $menu.css('marginRight')) + 2\r\n }\r\n\r\n document.body.removeChild(newElement);\r\n\r\n this.sizeInfo = {\r\n liHeight: liHeight,\r\n headerHeight: headerHeight,\r\n searchHeight: searchHeight,\r\n actionsHeight: actionsHeight,\r\n doneButtonHeight: doneButtonHeight,\r\n dividerHeight: dividerHeight,\r\n menuPadding: menuPadding,\r\n menuExtras: menuExtras\r\n };\r\n },\r\n\r\n setSize: function () {\r\n this.findLis();\r\n this.liHeight();\r\n\r\n if (this.options.header) this.$menu.css('padding-top', 0);\r\n if (this.options.size === false) return;\r\n\r\n var that = this,\r\n $menu = this.$menu,\r\n $menuInner = this.$menuInner,\r\n $window = $(window),\r\n selectHeight = this.$newElement[0].offsetHeight,\r\n selectWidth = this.$newElement[0].offsetWidth,\r\n liHeight = this.sizeInfo['liHeight'],\r\n headerHeight = this.sizeInfo['headerHeight'],\r\n searchHeight = this.sizeInfo['searchHeight'],\r\n actionsHeight = this.sizeInfo['actionsHeight'],\r\n doneButtonHeight = this.sizeInfo['doneButtonHeight'],\r\n divHeight = this.sizeInfo['dividerHeight'],\r\n menuPadding = this.sizeInfo['menuPadding'],\r\n menuExtras = this.sizeInfo['menuExtras'],\r\n notDisabled = this.options.hideDisabled ? '.disabled' : '',\r\n menuHeight,\r\n menuWidth,\r\n getHeight,\r\n getWidth,\r\n selectOffsetTop,\r\n selectOffsetBot,\r\n selectOffsetLeft,\r\n selectOffsetRight,\r\n getPos = function() {\r\n var pos = that.$newElement.offset(),\r\n $container = $(that.options.container),\r\n containerPos;\r\n\r\n if (that.options.container && !$container.is('body')) {\r\n containerPos = $container.offset();\r\n containerPos.top += parseInt($container.css('borderTopWidth'));\r\n containerPos.left += parseInt($container.css('borderLeftWidth'));\r\n } else {\r\n containerPos = { top: 0, left: 0 };\r\n }\r\n\r\n var winPad = that.options.windowPadding;\r\n selectOffsetTop = pos.top - containerPos.top - $window.scrollTop();\r\n selectOffsetBot = $window.height() - selectOffsetTop - selectHeight - containerPos.top - winPad[2];\r\n selectOffsetLeft = pos.left - containerPos.left - $window.scrollLeft();\r\n selectOffsetRight = $window.width() - selectOffsetLeft - selectWidth - containerPos.left - winPad[1];\r\n selectOffsetTop -= winPad[0];\r\n selectOffsetLeft -= winPad[3];\r\n };\r\n\r\n getPos();\r\n\r\n if (this.options.size === 'auto') {\r\n var getSize = function () {\r\n var minHeight,\r\n hasClass = function (className, include) {\r\n return function (element) {\r\n if (include) {\r\n return (element.classList ? element.classList.contains(className) : $(element).hasClass(className));\r\n } else {\r\n return !(element.classList ? element.classList.contains(className) : $(element).hasClass(className));\r\n }\r\n };\r\n },\r\n lis = that.$menuInner[0].getElementsByTagName('li'),\r\n lisVisible = Array.prototype.filter ? Array.prototype.filter.call(lis, hasClass('hidden', false)) : that.$lis.not('.hidden'),\r\n optGroup = Array.prototype.filter ? Array.prototype.filter.call(lisVisible, hasClass('dropdown-header', true)) : lisVisible.filter('.dropdown-header');\r\n\r\n getPos();\r\n menuHeight = selectOffsetBot - menuExtras.vert;\r\n menuWidth = selectOffsetRight - menuExtras.horiz;\r\n\r\n if (that.options.container) {\r\n if (!$menu.data('height')) $menu.data('height', $menu.height());\r\n getHeight = $menu.data('height');\r\n\r\n if (!$menu.data('width')) $menu.data('width', $menu.width());\r\n getWidth = $menu.data('width');\r\n } else {\r\n getHeight = $menu.height();\r\n getWidth = $menu.width();\r\n }\r\n\r\n if (that.options.dropupAuto) {\r\n that.$newElement.toggleClass('dropup', selectOffsetTop > selectOffsetBot && (menuHeight - menuExtras.vert) < getHeight);\r\n }\r\n\r\n if (that.$newElement.hasClass('dropup')) {\r\n menuHeight = selectOffsetTop - menuExtras.vert - 40;\r\n }\r\n\r\n if (selectOffsetTop < 45) {\r\n $(document).trigger('click.bs.dropdown.data-api');\r\n }\r\n\r\n if (that.options.dropdownAlignRight === 'auto') {\r\n $menu.toggleClass('dropdown-menu-right', selectOffsetLeft > selectOffsetRight && (menuWidth - menuExtras.horiz) < (getWidth - selectWidth));\r\n }\r\n\r\n if ((lisVisible.length + optGroup.length) > 3) {\r\n minHeight = liHeight * 3 + menuExtras.vert - 2;\r\n } else {\r\n minHeight = 0;\r\n }\r\n\r\n $menu.css({\r\n 'max-height': menuHeight + 'px',\r\n 'overflow': 'hidden',\r\n 'min-height': minHeight + headerHeight + searchHeight + actionsHeight + doneButtonHeight + 'px'\r\n });\r\n var menuInnerHeight = menuHeight - headerHeight - searchHeight - actionsHeight - doneButtonHeight - menuPadding.vert;\r\n menuInnerHeight = menuInnerHeight > 500 ? 500 : menuInnerHeight;\r\n $menuInner.css({\r\n 'max-height': menuInnerHeight + 'px',\r\n 'overflow-y': 'auto',\r\n 'min-height': Math.max(minHeight - menuPadding.vert, 0) + 'px'\r\n });\r\n };\r\n getSize();\r\n this.$searchbox.off('input.getSize propertychange.getSize').on('input.getSize propertychange.getSize', getSize);\r\n $window.off('resize.getSize scroll.getSize').on('resize.getSize scroll.getSize', getSize);\r\n } else if (this.options.size && this.options.size != 'auto' && this.$lis.not(notDisabled).length > this.options.size) {\r\n var optIndex = this.$lis.not('.divider').not(notDisabled).children().slice(0, this.options.size).last().parent().index(),\r\n divLength = this.$lis.slice(0, optIndex + 1).filter('.divider').length;\r\n menuHeight = liHeight * this.options.size + divLength * divHeight + menuPadding.vert;\r\n\r\n if (that.options.container) {\r\n if (!$menu.data('height')) $menu.data('height', $menu.height());\r\n getHeight = $menu.data('height');\r\n } else {\r\n getHeight = $menu.height();\r\n }\r\n\r\n if (that.options.dropupAuto) {\r\n //noinspection JSUnusedAssignment\r\n this.$newElement.toggleClass('dropup', selectOffsetTop > selectOffsetBot && (menuHeight - menuExtras.vert) < getHeight);\r\n }\r\n $menu.css({\r\n 'max-height': menuHeight + headerHeight + searchHeight + actionsHeight + doneButtonHeight + 'px',\r\n 'overflow': 'hidden',\r\n 'min-height': ''\r\n });\r\n $menuInner.css({\r\n 'max-height': menuHeight - menuPadding.vert + 'px',\r\n 'overflow-y': 'auto',\r\n 'min-height': ''\r\n });\r\n }\r\n },\r\n\r\n setWidth: function () {\r\n if (this.options.width === 'auto') {\r\n this.$menu.css('min-width', '0');\r\n\r\n // Get correct width if element is hidden\r\n var $selectClone = this.$menu.parent().clone().appendTo('body'),\r\n $selectClone2 = this.options.container ? this.$newElement.clone().appendTo('body') : $selectClone,\r\n ulWidth = $selectClone.children('.dropdown-menu').outerWidth(),\r\n btnWidth = $selectClone2.css('width', 'auto').children('button').outerWidth();\r\n\r\n $selectClone.remove();\r\n $selectClone2.remove();\r\n\r\n // Set width to whatever's larger, button title or longest option\r\n this.$newElement.css('width', Math.max(ulWidth, btnWidth) + 'px');\r\n } else if (this.options.width === 'fit') {\r\n // Remove inline min-width so width can be changed from 'auto'\r\n this.$menu.css('min-width', '');\r\n this.$newElement.css('width', '').addClass('fit-width');\r\n } else if (this.options.width) {\r\n // Remove inline min-width so width can be changed from 'auto'\r\n this.$menu.css('min-width', '');\r\n this.$newElement.css('width', this.options.width);\r\n } else {\r\n // Remove inline min-width/width so width can be changed\r\n this.$menu.css('min-width', '');\r\n this.$newElement.css('width', '');\r\n }\r\n // Remove fit-width class if width is changed programmatically\r\n if (this.$newElement.hasClass('fit-width') && this.options.width !== 'fit') {\r\n this.$newElement.removeClass('fit-width');\r\n }\r\n },\r\n\r\n selectPosition: function () {\r\n this.$bsContainer = $('
    ');\r\n\r\n var that = this,\r\n $container = $(this.options.container),\r\n pos,\r\n containerPos,\r\n actualHeight,\r\n getPlacement = function ($element) {\r\n that.$bsContainer.addClass($element.attr('class').replace(/form-control|fit-width/gi, '')).toggleClass('dropup', $element.hasClass('dropup'));\r\n pos = $element.offset();\r\n\r\n if (!$container.is('body')) {\r\n containerPos = $container.offset();\r\n containerPos.top += parseInt($container.css('borderTopWidth')) - $container.scrollTop();\r\n containerPos.left += parseInt($container.css('borderLeftWidth')) - $container.scrollLeft();\r\n } else {\r\n containerPos = { top: 0, left: 0 };\r\n }\r\n\r\n actualHeight = $element.hasClass('dropup') ? 0 : $element[0].offsetHeight;\r\n\r\n that.$bsContainer.css({\r\n 'top': pos.top - containerPos.top + actualHeight,\r\n 'left': pos.left - containerPos.left,\r\n 'width': $element[0].offsetWidth\r\n });\r\n };\r\n\r\n this.$button.on('click', function () {\r\n var $this = $(this);\r\n\r\n if (that.isDisabled()) {\r\n return;\r\n }\r\n\r\n getPlacement(that.$newElement);\r\n\r\n that.$bsContainer\r\n .appendTo(that.options.container)\r\n .toggleClass('open', !$this.hasClass('open'))\r\n .append(that.$menu);\r\n });\r\n\r\n\r\n this.$element.on('show.bs.select', function () {\r\n $(window).on('resize.bs.select scroll.bs.select', function () {\r\n getPlacement(that.$newElement);\r\n });\r\n });\r\n\r\n this.$element.on('hide.bs.select', function () {\r\n $(window).off('resize.bs.select scroll.bs.select');\r\n that.$menu.data('height', that.$menu.height());\r\n that.$bsContainer.detach();\r\n });\r\n },\r\n\r\n /**\r\n * @param {number} index - the index of the option that is being changed\r\n * @param {boolean} selected - true if the option is being selected, false if being deselected\r\n * @param {JQuery} $lis - the 'li' element that is being modified\r\n */\r\n setSelected: function (index, selected, $lis) {\r\n if (!$lis) {\r\n this.togglePlaceholder(); // check if setSelected is being called by changing the value of the select\r\n $lis = this.findLis().eq(this.liObj[index]);\r\n }\r\n\r\n $lis.toggleClass('selected', selected).find('a').attr('aria-selected', selected);\r\n },\r\n\r\n /**\r\n * @param {number} index - the index of the option that is being disabled\r\n * @param {boolean} disabled - true if the option is being disabled, false if being enabled\r\n * @param {JQuery} $lis - the 'li' element that is being modified\r\n */\r\n setDisabled: function (index, disabled, $lis) {\r\n if (!$lis) {\r\n $lis = this.findLis().eq(this.liObj[index]);\r\n }\r\n\r\n if (disabled) {\r\n $lis.addClass('disabled').children('a').attr('href', '#').attr('tabindex', -1).attr('aria-disabled', true);\r\n } else {\r\n $lis.removeClass('disabled').children('a').removeAttr('href').attr('tabindex', 0).attr('aria-disabled', false);\r\n }\r\n },\r\n\r\n isDisabled: function () {\r\n return this.$element[0].disabled;\r\n },\r\n\r\n checkDisabled: function () {\r\n var that = this;\r\n\r\n if (this.isDisabled()) {\r\n this.$newElement.addClass('disabled');\r\n this.$button.addClass('disabled').attr('tabindex', -1).attr('aria-disabled', true);\r\n } else {\r\n if (this.$button.hasClass('disabled')) {\r\n this.$newElement.removeClass('disabled');\r\n this.$button.removeClass('disabled').attr('aria-disabled', false);\r\n }\r\n\r\n if (this.$button.attr('tabindex') == -1 && !this.$element.data('tabindex')) {\r\n this.$button.removeAttr('tabindex');\r\n }\r\n }\r\n\r\n this.$button.click(function () {\r\n return !that.isDisabled();\r\n });\r\n },\r\n\r\n togglePlaceholder: function () {\r\n var value = this.$element.val();\r\n this.$button.toggleClass('bs-placeholder', value === null || value === '' || (value.constructor === Array && value.length === 0));\r\n },\r\n\r\n tabIndex: function () {\r\n if (this.$element.data('tabindex') !== this.$element.attr('tabindex') &&\r\n (this.$element.attr('tabindex') !== -98 && this.$element.attr('tabindex') !== '-98')) {\r\n this.$element.data('tabindex', this.$element.attr('tabindex'));\r\n this.$button.attr('tabindex', this.$element.data('tabindex'));\r\n }\r\n\r\n this.$element.attr('tabindex', -98);\r\n },\r\n\r\n clickListener: function () {\r\n var that = this,\r\n $document = $(document);\r\n\r\n $document.data('spaceSelect', false);\r\n\r\n this.$button.on('keyup', function (e) {\r\n if (/(32)/.test(e.keyCode.toString(10)) && $document.data('spaceSelect')) {\r\n e.preventDefault();\r\n $document.data('spaceSelect', false);\r\n }\r\n });\r\n\r\n this.$button.on('click', function () {\r\n that.setSize();\r\n });\r\n\r\n this.$element.on('shown.bs.select', function () {\r\n if (!that.options.liveSearch && !that.multiple) {\r\n that.$menuInner.find('.selected a').focus();\r\n } else if (!that.multiple) {\r\n var selectedIndex = that.liObj[that.$element[0].selectedIndex];\r\n\r\n if (typeof selectedIndex !== 'number' || that.options.size === false) return;\r\n\r\n // scroll to selected option\r\n var offset = that.$lis.eq(selectedIndex)[0].offsetTop - that.$menuInner[0].offsetTop;\r\n offset = offset - that.$menuInner[0].offsetHeight/2 + that.sizeInfo.liHeight/2;\r\n that.$menuInner[0].scrollTop = offset;\r\n }\r\n });\r\n\r\n this.$menuInner.on('click', 'li a', function (e) {\r\n var $this = $(this),\r\n clickedIndex = $this.parent().data('originalIndex'),\r\n prevValue = that.$element.val(),\r\n prevIndex = that.$element.prop('selectedIndex'),\r\n triggerChange = true;\r\n\r\n // Don't close on multi choice menu\r\n if (that.multiple && that.options.maxOptions !== 1) {\r\n e.stopPropagation();\r\n }\r\n\r\n e.preventDefault();\r\n\r\n //Don't run if we have been disabled\r\n if (!that.isDisabled() && !$this.parent().hasClass('disabled')) {\r\n var $options = that.$element.find('option'),\r\n $option = $options.eq(clickedIndex),\r\n state = $option.prop('selected'),\r\n $optgroup = $option.parent('optgroup'),\r\n maxOptions = that.options.maxOptions,\r\n maxOptionsGrp = $optgroup.data('maxOptions') || false;\r\n\r\n if (!that.multiple) { // Deselect all others if not multi select box\r\n $options.prop('selected', false);\r\n $option.prop('selected', true);\r\n that.$menuInner.find('.selected').removeClass('selected').find('a').attr('aria-selected', false);\r\n that.setSelected(clickedIndex, true);\r\n } else { // Toggle the one we have chosen if we are multi select.\r\n $option.prop('selected', !state);\r\n that.setSelected(clickedIndex, !state);\r\n $this.blur();\r\n\r\n if (maxOptions !== false || maxOptionsGrp !== false) {\r\n var maxReached = maxOptions < $options.filter(':selected').length,\r\n maxReachedGrp = maxOptionsGrp < $optgroup.find('option:selected').length;\r\n\r\n if ((maxOptions && maxReached) || (maxOptionsGrp && maxReachedGrp)) {\r\n if (maxOptions && maxOptions == 1) {\r\n $options.prop('selected', false);\r\n $option.prop('selected', true);\r\n that.$menuInner.find('.selected').removeClass('selected');\r\n that.setSelected(clickedIndex, true);\r\n } else if (maxOptionsGrp && maxOptionsGrp == 1) {\r\n $optgroup.find('option:selected').prop('selected', false);\r\n $option.prop('selected', true);\r\n var optgroupID = $this.parent().data('optgroup');\r\n that.$menuInner.find('[data-optgroup=\"' + optgroupID + '\"]').removeClass('selected');\r\n that.setSelected(clickedIndex, true);\r\n } else {\r\n var maxOptionsText = typeof that.options.maxOptionsText === 'string' ? [that.options.maxOptionsText, that.options.maxOptionsText] : that.options.maxOptionsText,\r\n maxOptionsArr = typeof maxOptionsText === 'function' ? maxOptionsText(maxOptions, maxOptionsGrp) : maxOptionsText,\r\n maxTxt = maxOptionsArr[0].replace('{n}', maxOptions),\r\n maxTxtGrp = maxOptionsArr[1].replace('{n}', maxOptionsGrp),\r\n $notify = $('
    ');\r\n // If {var} is set in array, replace it\r\n /** @deprecated */\r\n if (maxOptionsArr[2]) {\r\n maxTxt = maxTxt.replace('{var}', maxOptionsArr[2][maxOptions > 1 ? 0 : 1]);\r\n maxTxtGrp = maxTxtGrp.replace('{var}', maxOptionsArr[2][maxOptionsGrp > 1 ? 0 : 1]);\r\n }\r\n\r\n $option.prop('selected', false);\r\n\r\n that.$menu.append($notify);\r\n\r\n if (maxOptions && maxReached) {\r\n $notify.append($('
    ' + maxTxt + '
    '));\r\n triggerChange = false;\r\n that.$element.trigger('maxReached.bs.select');\r\n }\r\n\r\n if (maxOptionsGrp && maxReachedGrp) {\r\n $notify.append($('
    ' + maxTxtGrp + '
    '));\r\n triggerChange = false;\r\n that.$element.trigger('maxReachedGrp.bs.select');\r\n }\r\n\r\n setTimeout(function () {\r\n that.setSelected(clickedIndex, false);\r\n }, 10);\r\n\r\n $notify.delay(750).fadeOut(300, function () {\r\n $(this).remove();\r\n });\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (!that.multiple || (that.multiple && that.options.maxOptions === 1)) {\r\n that.$button.focus();\r\n } else if (that.options.liveSearch) {\r\n that.$searchbox.focus();\r\n }\r\n\r\n // Trigger select 'change'\r\n if (triggerChange) {\r\n if ((prevValue != that.$element.val() && that.multiple) || (prevIndex != that.$element.prop('selectedIndex') && !that.multiple)) {\r\n // $option.prop('selected') is current option state (selected/unselected). state is previous option state.\r\n changed_arguments = [clickedIndex, $option.prop('selected'), state];\r\n that.$element\r\n .triggerNative('change');\r\n }\r\n }\r\n }\r\n });\r\n\r\n this.$menu.on('click', 'li.disabled a, .popover-title, .popover-title :not(.close)', function (e) {\r\n if (e.currentTarget == this) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n if (that.options.liveSearch && !$(e.target).hasClass('close')) {\r\n that.$searchbox.focus();\r\n } else {\r\n that.$button.focus();\r\n }\r\n }\r\n });\r\n\r\n this.$menuInner.on('click', '.divider, .dropdown-header', function (e) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n if (that.options.liveSearch) {\r\n that.$searchbox.focus();\r\n } else {\r\n that.$button.focus();\r\n }\r\n });\r\n\r\n this.$menu.on('click', '.popover-title .close', function () {\r\n that.$button.click();\r\n });\r\n\r\n this.$searchbox.on('click', function (e) {\r\n e.stopPropagation();\r\n });\r\n\r\n this.$menu.on('click', '.actions-btn', function (e) {\r\n if (that.options.liveSearch) {\r\n that.$searchbox.focus();\r\n } else {\r\n that.$button.focus();\r\n }\r\n\r\n e.preventDefault();\r\n e.stopPropagation();\r\n\r\n if ($(this).hasClass('bs-select-all')) {\r\n that.selectAll();\r\n } else {\r\n that.deselectAll();\r\n }\r\n });\r\n\r\n this.$element.change(function () {\r\n that.render(false);\r\n that.$element.trigger('changed.bs.select', changed_arguments);\r\n changed_arguments = null;\r\n });\r\n },\r\n\r\n liveSearchListener: function () {\r\n var that = this,\r\n $no_results = $('
  • ');\r\n\r\n this.$button.on('click.dropdown.data-api', function () {\r\n that.$menuInner.find('.active').removeClass('active');\r\n if (!!that.$searchbox.val()) {\r\n that.$searchbox.val('');\r\n that.$lis.not('.is-hidden').removeClass('hidden');\r\n if (!!$no_results.parent().length) $no_results.remove();\r\n }\r\n if (!that.multiple) that.$menuInner.find('.selected').addClass('active');\r\n setTimeout(function () {\r\n that.$searchbox.focus();\r\n }, 10);\r\n });\r\n\r\n this.$searchbox.on('click.dropdown.data-api focus.dropdown.data-api touchend.dropdown.data-api', function (e) {\r\n e.stopPropagation();\r\n });\r\n\r\n this.$searchbox.on('input propertychange', function () {\r\n that.$lis.not('.is-hidden').removeClass('hidden');\r\n that.$lis.filter('.active').removeClass('active');\r\n $no_results.remove();\r\n\r\n if (that.$searchbox.val()) {\r\n var $searchBase = that.$lis.not('.is-hidden, .divider, .dropdown-header'),\r\n $hideItems;\r\n if (that.options.liveSearchNormalize) {\r\n $hideItems = $searchBase.not(':a' + that._searchStyle() + '(\"' + normalizeToBase(that.$searchbox.val()) + '\")');\r\n } else {\r\n $hideItems = $searchBase.not(':' + that._searchStyle() + '(\"' + that.$searchbox.val() + '\")');\r\n }\r\n\r\n if ($hideItems.length === $searchBase.length) {\r\n $no_results.html(that.options.noneResultsText.replace('{0}', '\"' + htmlEscape(that.$searchbox.val()) + '\"'));\r\n that.$menuInner.append($no_results);\r\n that.$lis.addClass('hidden');\r\n } else {\r\n $hideItems.addClass('hidden');\r\n\r\n var $lisVisible = that.$lis.not('.hidden'),\r\n $foundDiv;\r\n\r\n // hide divider if first or last visible, or if followed by another divider\r\n $lisVisible.each(function (index) {\r\n var $this = $(this);\r\n\r\n if ($this.hasClass('divider')) {\r\n if ($foundDiv === undefined) {\r\n $this.addClass('hidden');\r\n } else {\r\n if ($foundDiv) $foundDiv.addClass('hidden');\r\n $foundDiv = $this;\r\n }\r\n } else if ($this.hasClass('dropdown-header') && $lisVisible.eq(index + 1).data('optgroup') !== $this.data('optgroup')) {\r\n $this.addClass('hidden');\r\n } else {\r\n $foundDiv = null;\r\n }\r\n });\r\n if ($foundDiv) $foundDiv.addClass('hidden');\r\n\r\n $searchBase.not('.hidden').first().addClass('active');\r\n that.$menuInner.scrollTop(0);\r\n }\r\n }\r\n });\r\n },\r\n\r\n _searchStyle: function () {\r\n var styles = {\r\n begins: 'ibegins',\r\n startsWith: 'ibegins'\r\n };\r\n\r\n return styles[this.options.liveSearchStyle] || 'icontains';\r\n },\r\n\r\n val: function (value) {\r\n if (typeof value !== 'undefined') {\r\n this.$element.val(value);\r\n this.render();\r\n\r\n return this.$element;\r\n } else {\r\n return this.$element.val();\r\n }\r\n },\r\n\r\n changeAll: function (status) {\r\n if (!this.multiple) return;\r\n if (typeof status === 'undefined') status = true;\r\n\r\n this.findLis();\r\n\r\n var $options = this.$element.find('option'),\r\n $lisVisible = this.$lis.not('.divider, .dropdown-header, .disabled, .hidden'),\r\n lisVisLen = $lisVisible.length,\r\n selectedOptions = [];\r\n\r\n if (status) {\r\n if ($lisVisible.filter('.selected').length === $lisVisible.length) return;\r\n } else {\r\n if ($lisVisible.filter('.selected').length === 0) return;\r\n }\r\n\r\n $lisVisible.toggleClass('selected', status);\r\n\r\n for (var i = 0; i < lisVisLen; i++) {\r\n var origIndex = $lisVisible[i].getAttribute('data-original-index');\r\n selectedOptions[selectedOptions.length] = $options.eq(origIndex)[0];\r\n }\r\n\r\n $(selectedOptions).prop('selected', status);\r\n\r\n this.render(false);\r\n\r\n this.togglePlaceholder();\r\n\r\n this.$element\r\n .triggerNative('change');\r\n },\r\n\r\n selectAll: function () {\r\n return this.changeAll(true);\r\n },\r\n\r\n deselectAll: function () {\r\n return this.changeAll(false);\r\n },\r\n\r\n toggle: function (e) {\r\n e = e || window.event;\r\n\r\n if (e) e.stopPropagation();\r\n\r\n this.$button.trigger('click');\r\n },\r\n\r\n keydown: function (e) {\r\n var $this = $(this),\r\n $parent = $this.is('input') ? $this.parent().parent() : $this.parent(),\r\n $items,\r\n that = $parent.data('this'),\r\n index,\r\n prevIndex,\r\n isActive,\r\n selector = ':not(.disabled, .hidden, .dropdown-header, .divider)',\r\n keyCodeMap = {\r\n 32: ' ',\r\n 48: '0',\r\n 49: '1',\r\n 50: '2',\r\n 51: '3',\r\n 52: '4',\r\n 53: '5',\r\n 54: '6',\r\n 55: '7',\r\n 56: '8',\r\n 57: '9',\r\n 59: ';',\r\n 65: 'a',\r\n 66: 'b',\r\n 67: 'c',\r\n 68: 'd',\r\n 69: 'e',\r\n 70: 'f',\r\n 71: 'g',\r\n 72: 'h',\r\n 73: 'i',\r\n 74: 'j',\r\n 75: 'k',\r\n 76: 'l',\r\n 77: 'm',\r\n 78: 'n',\r\n 79: 'o',\r\n 80: 'p',\r\n 81: 'q',\r\n 82: 'r',\r\n 83: 's',\r\n 84: 't',\r\n 85: 'u',\r\n 86: 'v',\r\n 87: 'w',\r\n 88: 'x',\r\n 89: 'y',\r\n 90: 'z',\r\n 96: '0',\r\n 97: '1',\r\n 98: '2',\r\n 99: '3',\r\n 100: '4',\r\n 101: '5',\r\n 102: '6',\r\n 103: '7',\r\n 104: '8',\r\n 105: '9'\r\n };\r\n\r\n\r\n isActive = that.$newElement.hasClass('open');\r\n\r\n if (!isActive && (e.keyCode >= 48 && e.keyCode <= 57 || e.keyCode >= 96 && e.keyCode <= 105 || e.keyCode >= 65 && e.keyCode <= 90)) {\r\n if (!that.options.container) {\r\n that.setSize();\r\n that.$menu.parent().addClass('open');\r\n isActive = true;\r\n } else {\r\n that.$button.trigger('click');\r\n }\r\n that.$searchbox.focus();\r\n return;\r\n }\r\n\r\n if (that.options.liveSearch) {\r\n if (/(^9$|27)/.test(e.keyCode.toString(10)) && isActive) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n that.$menuInner.click();\r\n that.$button.focus();\r\n }\r\n }\r\n\r\n if (/(38|40)/.test(e.keyCode.toString(10))) {\r\n $items = that.$lis.filter(selector);\r\n if (!$items.length) return;\r\n\r\n if (!that.options.liveSearch) {\r\n index = $items.index($items.find('a').filter(':focus').parent());\r\n\t } else {\r\n index = $items.index($items.filter('.active'));\r\n }\r\n\r\n prevIndex = that.$menuInner.data('prevIndex');\r\n\r\n if (e.keyCode == 38) {\r\n if ((that.options.liveSearch || index == prevIndex) && index != -1) index--;\r\n if (index < 0) index += $items.length;\r\n } else if (e.keyCode == 40) {\r\n if (that.options.liveSearch || index == prevIndex) index++;\r\n index = index % $items.length;\r\n }\r\n\r\n that.$menuInner.data('prevIndex', index);\r\n\r\n if (!that.options.liveSearch) {\r\n $items.eq(index).children('a').focus();\r\n } else {\r\n e.preventDefault();\r\n if (!$this.hasClass('dropdown-toggle')) {\r\n $items.removeClass('active').eq(index).addClass('active').children('a').focus();\r\n $this.focus();\r\n }\r\n }\r\n\r\n } else if (!$this.is('input')) {\r\n var keyIndex = [],\r\n count,\r\n prevKey;\r\n\r\n $items = that.$lis.filter(selector);\r\n $items.each(function (i) {\r\n if ($.trim($(this).children('a').text().toLowerCase()).substring(0, 1) == keyCodeMap[e.keyCode]) {\r\n keyIndex.push(i);\r\n }\r\n });\r\n\r\n count = $(document).data('keycount');\r\n count++;\r\n $(document).data('keycount', count);\r\n\r\n prevKey = $.trim($(':focus').text().toLowerCase()).substring(0, 1);\r\n\r\n if (prevKey != keyCodeMap[e.keyCode]) {\r\n count = 1;\r\n $(document).data('keycount', count);\r\n } else if (count >= keyIndex.length) {\r\n $(document).data('keycount', 0);\r\n if (count > keyIndex.length) count = 1;\r\n }\r\n\r\n $items.eq(keyIndex[count - 1]).children('a').focus();\r\n }\r\n\r\n // Select focused option if \"Enter\", \"Spacebar\" or \"Tab\" (when selectOnTab is true) are pressed inside the menu.\r\n if ((/(13|32)/.test(e.keyCode.toString(10)) || (/(^9$)/.test(e.keyCode.toString(10)) && that.options.selectOnTab)) && isActive) {\r\n if (!/(32)/.test(e.keyCode.toString(10))) e.preventDefault();\r\n if (!that.options.liveSearch) {\r\n var elem = $(':focus');\r\n elem.click();\r\n // Bring back focus for multiselects\r\n elem.focus();\r\n // Prevent screen from scrolling if the user hit the spacebar\r\n e.preventDefault();\r\n // Fixes spacebar selection of dropdown items in FF & IE\r\n $(document).data('spaceSelect', true);\r\n } else if (!/(32)/.test(e.keyCode.toString(10))) {\r\n that.$menuInner.find('.active a').click();\r\n $this.focus();\r\n }\r\n $(document).data('keycount', 0);\r\n }\r\n\r\n if ((/(^9$|27)/.test(e.keyCode.toString(10)) && isActive && (that.multiple || that.options.liveSearch)) || (/(27)/.test(e.keyCode.toString(10)) && !isActive)) {\r\n that.$menu.parent().removeClass('open');\r\n if (that.options.container) that.$newElement.removeClass('open');\r\n that.$button.focus();\r\n }\r\n },\r\n\r\n mobile: function () {\r\n this.$element.addClass('mobile-device');\r\n },\r\n\r\n refresh: function () {\r\n this.$lis = null;\r\n this.liObj = {};\r\n this.reloadLi();\r\n this.render();\r\n this.checkDisabled();\r\n this.liHeight(true);\r\n this.setStyle();\r\n this.setWidth();\r\n if (this.$lis) this.$searchbox.trigger('propertychange');\r\n\r\n this.$element.trigger('refreshed.bs.select');\r\n },\r\n\r\n hide: function () {\r\n this.$newElement.hide();\r\n },\r\n\r\n show: function () {\r\n this.$newElement.show();\r\n },\r\n\r\n remove: function () {\r\n this.$newElement.remove();\r\n this.$element.remove();\r\n },\r\n\r\n destroy: function () {\r\n this.$newElement.before(this.$element).remove();\r\n\r\n if (this.$bsContainer) {\r\n this.$bsContainer.remove();\r\n } else {\r\n this.$menu.remove();\r\n }\r\n\r\n this.$element\r\n .off('.bs.select')\r\n .removeData('selectpicker')\r\n .removeClass('bs-select-hidden selectpicker');\r\n }\r\n };\r\n\r\n // SELECTPICKER PLUGIN DEFINITION\r\n // ==============================\r\n function Plugin(option) {\r\n // get the args of the outer function..\r\n var args = arguments;\r\n // The arguments of the function are explicitly re-defined from the argument list, because the shift causes them\r\n // to get lost/corrupted in android 2.3 and IE9 #715 #775\r\n var _option = option;\r\n\r\n [].shift.apply(args);\r\n\r\n var value;\r\n var chain = this.each(function () {\r\n var $this = $(this);\r\n if ($this.is('select')) {\r\n var data = $this.data('selectpicker'),\r\n options = typeof _option == 'object' && _option;\r\n\r\n if (!data) {\r\n var config = $.extend({}, Selectpicker.DEFAULTS, $.fn.selectpicker.defaults || {}, $this.data(), options);\r\n config.template = $.extend({}, Selectpicker.DEFAULTS.template, ($.fn.selectpicker.defaults ? $.fn.selectpicker.defaults.template : {}), $this.data().template, options.template);\r\n $this.data('selectpicker', (data = new Selectpicker(this, config)));\r\n } else if (options) {\r\n for (var i in options) {\r\n if (options.hasOwnProperty(i)) {\r\n data.options[i] = options[i];\r\n }\r\n }\r\n }\r\n\r\n if (typeof _option == 'string') {\r\n if (data[_option] instanceof Function) {\r\n value = data[_option].apply(data, args);\r\n } else {\r\n value = data.options[_option];\r\n }\r\n }\r\n }\r\n });\r\n\r\n if (typeof value !== 'undefined') {\r\n //noinspection JSUnusedAssignment\r\n return value;\r\n } else {\r\n return chain;\r\n }\r\n }\r\n\r\n var old = $.fn.selectpicker;\r\n $.fn.selectpicker = Plugin;\r\n $.fn.selectpicker.Constructor = Selectpicker;\r\n\r\n // SELECTPICKER NO CONFLICT\r\n // ========================\r\n $.fn.selectpicker.noConflict = function () {\r\n $.fn.selectpicker = old;\r\n return this;\r\n };\r\n\r\n $(document)\r\n .data('keycount', 0)\r\n .on('keydown.bs.select', '.bootstrap-select [data-toggle=dropdown], .bootstrap-select [role=\"listbox\"], .bs-searchbox input', Selectpicker.prototype.keydown)\r\n .on('focusin.modal', '.bootstrap-select [data-toggle=dropdown], .bootstrap-select [role=\"listbox\"], .bs-searchbox input', function (e) {\r\n e.stopPropagation();\r\n });\r\n\r\n // SELECTPICKER DATA-API\r\n // =====================\r\n $(window).on('load.bs.select.data-api', function () {\r\n $('.selectpicker').each(function () {\r\n var $selectpicker = $(this);\r\n Plugin.call($selectpicker, $selectpicker.data());\r\n })\r\n });\r\n})(jQuery);\r\n\r\n\r\n}));\r\n\r\n/* ========================================================================\r\n * Bootstrap: dropdown.js v3.3.6\r\n * http://getbootstrap.com/javascript/#dropdowns\r\n * ========================================================================\r\n * Copyright 2011-2015 Twitter, Inc.\r\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\r\n * ======================================================================== */\r\n\r\n+function ($) {\r\n 'use strict';\r\n\r\n // DROPDOWN CLASS DEFINITION\r\n // =========================\r\n\r\n var backdrop = '.dropdown-backdrop'\r\n var toggle = '[data-toggle=\"dropdown\"]'\r\n var Dropdown = function (element) {\r\n $(element).on('click.bs.dropdown', this.toggle)\r\n }\r\n\r\n Dropdown.VERSION = '3.3.6'\r\n\r\n function getParent($this) {\r\n var selector = $this.attr('data-target')\r\n\r\n if (!selector) {\r\n selector = $this.attr('href')\r\n selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\\s]*$)/, '') // strip for ie7\r\n }\r\n\r\n var $parent = selector && $(selector)\r\n\r\n return $parent && $parent.length ? $parent : $this.parent()\r\n }\r\n\r\n function clearMenus(e) {\r\n if (e && e.which === 3) return\r\n $(backdrop).remove()\r\n $(toggle).each(function () {\r\n var $this = $(this)\r\n var $parent = getParent($this)\r\n var relatedTarget = { relatedTarget: this }\r\n\r\n if (!$parent.hasClass('open')) return\r\n\r\n if (e && e.type == 'click' && /input|textarea/i.test(e.target.tagName) && $.contains($parent[0], e.target)) return\r\n\r\n $parent.trigger(e = $.Event('hide.bs.dropdown', relatedTarget))\r\n\r\n if (e.isDefaultPrevented()) return\r\n\r\n $this.attr('aria-expanded', 'false')\r\n $parent.removeClass('open').trigger($.Event('hidden.bs.dropdown', relatedTarget))\r\n })\r\n }\r\n\r\n Dropdown.prototype.toggle = function (e) {\r\n var $this = $(this)\r\n\r\n if ($this.is('.disabled, :disabled')) return\r\n\r\n var $parent = getParent($this)\r\n var isActive = $parent.hasClass('open')\r\n\r\n clearMenus()\r\n\r\n if (!isActive) {\r\n if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) {\r\n // if mobile we use a backdrop because click events don't delegate\r\n $(document.createElement('div'))\r\n .addClass('dropdown-backdrop')\r\n .insertAfter($(this))\r\n .on('click', clearMenus)\r\n }\r\n\r\n var relatedTarget = { relatedTarget: this }\r\n $parent.trigger(e = $.Event('show.bs.dropdown', relatedTarget))\r\n\r\n if (e.isDefaultPrevented()) return\r\n\r\n $this\r\n .trigger('focus')\r\n .attr('aria-expanded', 'true')\r\n\r\n $parent\r\n .toggleClass('open')\r\n .trigger($.Event('shown.bs.dropdown', relatedTarget))\r\n }\r\n\r\n return false\r\n }\r\n\r\n Dropdown.prototype.keydown = function (e) {\r\n if (!/(38|40|27|32)/.test(e.which) || /input|textarea/i.test(e.target.tagName)) return\r\n\r\n var $this = $(this)\r\n\r\n e.preventDefault()\r\n e.stopPropagation()\r\n\r\n if ($this.is('.disabled, :disabled')) return\r\n\r\n var $parent = getParent($this)\r\n var isActive = $parent.hasClass('open')\r\n\r\n if (!isActive && e.which != 27 || isActive && e.which == 27) {\r\n if (e.which == 27) $parent.find(toggle).trigger('focus')\r\n return $this.trigger('click')\r\n }\r\n\r\n var desc = ' li:not(.disabled):visible a'\r\n var $items = $parent.find('.dropdown-menu' + desc)\r\n\r\n if (!$items.length) return\r\n\r\n var index = $items.index(e.target)\r\n\r\n if (e.which == 38 && index > 0) index-- // up\r\n if (e.which == 40 && index < $items.length - 1) index++ // down\r\n if (!~index) index = 0\r\n\r\n $items.eq(index).trigger('focus')\r\n }\r\n\r\n\r\n // DROPDOWN PLUGIN DEFINITION\r\n // ==========================\r\n\r\n function Plugin(option) {\r\n return this.each(function () {\r\n var $this = $(this)\r\n var data = $this.data('bs.dropdown')\r\n\r\n if (!data) $this.data('bs.dropdown', (data = new Dropdown(this)))\r\n if (typeof option == 'string') data[option].call($this)\r\n })\r\n }\r\n\r\n var old = $.fn.dropdown\r\n\r\n $.fn.dropdown = Plugin\r\n $.fn.dropdown.Constructor = Dropdown\r\n\r\n\r\n // DROPDOWN NO CONFLICT\r\n // ====================\r\n\r\n $.fn.dropdown.noConflict = function () {\r\n $.fn.dropdown = old\r\n return this\r\n }\r\n\r\n\r\n // APPLY TO STANDARD DROPDOWN ELEMENTS\r\n // ===================================\r\n\r\n $(document)\r\n .on('click.bs.dropdown.data-api', clearMenus)\r\n .on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })\r\n .on('click.bs.dropdown.data-api', toggle, Dropdown.prototype.toggle)\r\n .on('keydown.bs.dropdown.data-api', toggle, Dropdown.prototype.keydown)\r\n .on('keydown.bs.dropdown.data-api', '.dropdown-menu', Dropdown.prototype.keydown)\r\n\r\n}(jQuery);","/*!\r\n * clipboard.js v1.6.0\r\n * https://zenorocha.github.io/clipboard.js\r\n *\r\n * Licensed MIT © Zeno Rocha\r\n */\r\n(function(f){if(typeof exports===\"object\"&&typeof module!==\"undefined\"){module.exports=f()}else if(typeof define===\"function\"&&define.amd){define([],f)}else{var g;if(typeof window!==\"undefined\"){g=window}else if(typeof global!==\"undefined\"){g=global}else if(typeof self!==\"undefined\"){g=self}else{g=this}g.Clipboard = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o 0 && arguments[0] !== undefined ? arguments[0] : {};\r\n\r\n this.action = options.action;\r\n this.emitter = options.emitter;\r\n this.target = options.target;\r\n this.text = options.text;\r\n this.trigger = options.trigger;\r\n\r\n this.selectedText = '';\r\n }\r\n }, {\r\n key: 'initSelection',\r\n value: function initSelection() {\r\n if (this.text) {\r\n this.selectFake();\r\n } else if (this.target) {\r\n this.selectTarget();\r\n }\r\n }\r\n }, {\r\n key: 'selectFake',\r\n value: function selectFake() {\r\n var _this = this;\r\n\r\n var isRTL = document.documentElement.getAttribute('dir') == 'rtl';\r\n\r\n this.removeFake();\r\n\r\n this.fakeHandlerCallback = function () {\r\n return _this.removeFake();\r\n };\r\n this.fakeHandler = document.body.addEventListener('click', this.fakeHandlerCallback) || true;\r\n\r\n this.fakeElem = document.createElement('textarea');\r\n // Prevent zooming on iOS\r\n this.fakeElem.style.fontSize = '12pt';\r\n // Reset box model\r\n this.fakeElem.style.border = '0';\r\n this.fakeElem.style.padding = '0';\r\n this.fakeElem.style.margin = '0';\r\n // Move element out of screen horizontally\r\n this.fakeElem.style.position = 'absolute';\r\n this.fakeElem.style[isRTL ? 'right' : 'left'] = '-9999px';\r\n // Move element to the same position vertically\r\n var yPosition = window.pageYOffset || document.documentElement.scrollTop;\r\n this.fakeElem.style.top = yPosition + 'px';\r\n\r\n this.fakeElem.setAttribute('readonly', '');\r\n this.fakeElem.value = this.text;\r\n\r\n document.body.appendChild(this.fakeElem);\r\n\r\n this.selectedText = (0, _select2.default)(this.fakeElem);\r\n this.copyText();\r\n }\r\n }, {\r\n key: 'removeFake',\r\n value: function removeFake() {\r\n if (this.fakeHandler) {\r\n document.body.removeEventListener('click', this.fakeHandlerCallback);\r\n this.fakeHandler = null;\r\n this.fakeHandlerCallback = null;\r\n }\r\n\r\n if (this.fakeElem) {\r\n document.body.removeChild(this.fakeElem);\r\n this.fakeElem = null;\r\n }\r\n }\r\n }, {\r\n key: 'selectTarget',\r\n value: function selectTarget() {\r\n this.selectedText = (0, _select2.default)(this.target);\r\n this.copyText();\r\n }\r\n }, {\r\n key: 'copyText',\r\n value: function copyText() {\r\n var succeeded = void 0;\r\n\r\n try {\r\n succeeded = document.execCommand(this.action);\r\n } catch (err) {\r\n succeeded = false;\r\n }\r\n\r\n this.handleResult(succeeded);\r\n }\r\n }, {\r\n key: 'handleResult',\r\n value: function handleResult(succeeded) {\r\n this.emitter.emit(succeeded ? 'success' : 'error', {\r\n action: this.action,\r\n text: this.selectedText,\r\n trigger: this.trigger,\r\n clearSelection: this.clearSelection.bind(this)\r\n });\r\n }\r\n }, {\r\n key: 'clearSelection',\r\n value: function clearSelection() {\r\n if (this.target) {\r\n this.target.blur();\r\n }\r\n\r\n window.getSelection().removeAllRanges();\r\n }\r\n }, {\r\n key: 'destroy',\r\n value: function destroy() {\r\n this.removeFake();\r\n }\r\n }, {\r\n key: 'action',\r\n set: function set() {\r\n var action = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'copy';\r\n\r\n this._action = action;\r\n\r\n if (this._action !== 'copy' && this._action !== 'cut') {\r\n throw new Error('Invalid \"action\" value, use either \"copy\" or \"cut\"');\r\n }\r\n },\r\n get: function get() {\r\n return this._action;\r\n }\r\n }, {\r\n key: 'target',\r\n set: function set(target) {\r\n if (target !== undefined) {\r\n if (target && (typeof target === 'undefined' ? 'undefined' : _typeof(target)) === 'object' && target.nodeType === 1) {\r\n if (this.action === 'copy' && target.hasAttribute('disabled')) {\r\n throw new Error('Invalid \"target\" attribute. Please use \"readonly\" instead of \"disabled\" attribute');\r\n }\r\n\r\n if (this.action === 'cut' && (target.hasAttribute('readonly') || target.hasAttribute('disabled'))) {\r\n throw new Error('Invalid \"target\" attribute. You can\\'t cut text from elements with \"readonly\" or \"disabled\" attributes');\r\n }\r\n\r\n this._target = target;\r\n } else {\r\n throw new Error('Invalid \"target\" value, use a valid Element');\r\n }\r\n }\r\n },\r\n get: function get() {\r\n return this._target;\r\n }\r\n }]);\r\n\r\n return ClipboardAction;\r\n }();\r\n\r\n module.exports = ClipboardAction;\r\n});\r\n\r\n},{\"select\":5}],8:[function(require,module,exports){\r\n(function (global, factory) {\r\n if (typeof define === \"function\" && define.amd) {\r\n define(['module', './clipboard-action', 'tiny-emitter', 'good-listener'], factory);\r\n } else if (typeof exports !== \"undefined\") {\r\n factory(module, require('./clipboard-action'), require('tiny-emitter'), require('good-listener'));\r\n } else {\r\n var mod = {\r\n exports: {}\r\n };\r\n factory(mod, global.clipboardAction, global.tinyEmitter, global.goodListener);\r\n global.clipboard = mod.exports;\r\n }\r\n})(this, function (module, _clipboardAction, _tinyEmitter, _goodListener) {\r\n 'use strict';\r\n\r\n var _clipboardAction2 = _interopRequireDefault(_clipboardAction);\r\n\r\n var _tinyEmitter2 = _interopRequireDefault(_tinyEmitter);\r\n\r\n var _goodListener2 = _interopRequireDefault(_goodListener);\r\n\r\n function _interopRequireDefault(obj) {\r\n return obj && obj.__esModule ? obj : {\r\n default: obj\r\n };\r\n }\r\n\r\n function _classCallCheck(instance, Constructor) {\r\n if (!(instance instanceof Constructor)) {\r\n throw new TypeError(\"Cannot call a class as a function\");\r\n }\r\n }\r\n\r\n var _createClass = function () {\r\n function defineProperties(target, props) {\r\n for (var i = 0; i < props.length; i++) {\r\n var descriptor = props[i];\r\n descriptor.enumerable = descriptor.enumerable || false;\r\n descriptor.configurable = true;\r\n if (\"value\" in descriptor) descriptor.writable = true;\r\n Object.defineProperty(target, descriptor.key, descriptor);\r\n }\r\n }\r\n\r\n return function (Constructor, protoProps, staticProps) {\r\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\r\n if (staticProps) defineProperties(Constructor, staticProps);\r\n return Constructor;\r\n };\r\n }();\r\n\r\n function _possibleConstructorReturn(self, call) {\r\n if (!self) {\r\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\r\n }\r\n\r\n return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self;\r\n }\r\n\r\n function _inherits(subClass, superClass) {\r\n if (typeof superClass !== \"function\" && superClass !== null) {\r\n throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass);\r\n }\r\n\r\n subClass.prototype = Object.create(superClass && superClass.prototype, {\r\n constructor: {\r\n value: subClass,\r\n enumerable: false,\r\n writable: true,\r\n configurable: true\r\n }\r\n });\r\n if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\r\n }\r\n\r\n var Clipboard = function (_Emitter) {\r\n _inherits(Clipboard, _Emitter);\r\n\r\n /**\r\n * @param {String|HTMLElement|HTMLCollection|NodeList} trigger\r\n * @param {Object} options\r\n */\r\n function Clipboard(trigger, options) {\r\n _classCallCheck(this, Clipboard);\r\n\r\n var _this = _possibleConstructorReturn(this, (Clipboard.__proto__ || Object.getPrototypeOf(Clipboard)).call(this));\r\n\r\n _this.resolveOptions(options);\r\n _this.listenClick(trigger);\r\n return _this;\r\n }\r\n\r\n /**\r\n * Defines if attributes would be resolved using internal setter functions\r\n * or custom functions that were passed in the constructor.\r\n * @param {Object} options\r\n */\r\n\r\n\r\n _createClass(Clipboard, [{\r\n key: 'resolveOptions',\r\n value: function resolveOptions() {\r\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\r\n\r\n this.action = typeof options.action === 'function' ? options.action : this.defaultAction;\r\n this.target = typeof options.target === 'function' ? options.target : this.defaultTarget;\r\n this.text = typeof options.text === 'function' ? options.text : this.defaultText;\r\n }\r\n }, {\r\n key: 'listenClick',\r\n value: function listenClick(trigger) {\r\n var _this2 = this;\r\n\r\n this.listener = (0, _goodListener2.default)(trigger, 'click', function (e) {\r\n return _this2.onClick(e);\r\n });\r\n }\r\n }, {\r\n key: 'onClick',\r\n value: function onClick(e) {\r\n var trigger = e.delegateTarget || e.currentTarget;\r\n\r\n if (this.clipboardAction) {\r\n this.clipboardAction = null;\r\n }\r\n\r\n this.clipboardAction = new _clipboardAction2.default({\r\n action: this.action(trigger),\r\n target: this.target(trigger),\r\n text: this.text(trigger),\r\n trigger: trigger,\r\n emitter: this\r\n });\r\n }\r\n }, {\r\n key: 'defaultAction',\r\n value: function defaultAction(trigger) {\r\n return getAttributeValue('action', trigger);\r\n }\r\n }, {\r\n key: 'defaultTarget',\r\n value: function defaultTarget(trigger) {\r\n var selector = getAttributeValue('target', trigger);\r\n\r\n if (selector) {\r\n return document.querySelector(selector);\r\n }\r\n }\r\n }, {\r\n key: 'defaultText',\r\n value: function defaultText(trigger) {\r\n return getAttributeValue('text', trigger);\r\n }\r\n }, {\r\n key: 'destroy',\r\n value: function destroy() {\r\n this.listener.destroy();\r\n\r\n if (this.clipboardAction) {\r\n this.clipboardAction.destroy();\r\n this.clipboardAction = null;\r\n }\r\n }\r\n }], [{\r\n key: 'isSupported',\r\n value: function isSupported() {\r\n var action = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ['copy', 'cut'];\r\n\r\n var actions = typeof action === 'string' ? [action] : action;\r\n var support = !!document.queryCommandSupported;\r\n\r\n actions.forEach(function (action) {\r\n support = support && !!document.queryCommandSupported(action);\r\n });\r\n\r\n return support;\r\n }\r\n }]);\r\n\r\n return Clipboard;\r\n }(_tinyEmitter2.default);\r\n\r\n /**\r\n * Helper function to retrieve attribute value.\r\n * @param {String} suffix\r\n * @param {Element} element\r\n */\r\n function getAttributeValue(suffix, element) {\r\n var attribute = 'data-clipboard-' + suffix;\r\n\r\n if (!element.hasAttribute(attribute)) {\r\n return;\r\n }\r\n\r\n return element.getAttribute(attribute);\r\n }\r\n\r\n module.exports = Clipboard;\r\n});\r\n\r\n},{\"./clipboard-action\":7,\"good-listener\":4,\"tiny-emitter\":6}]},{},[8])(8)\r\n});","\r\n/*\r\n *\r\n * More info at [www.dropzonejs.com](http://www.dropzonejs.com)\r\n *\r\n * Copyright (c) 2012, Matias Meno\r\n *\r\n * Permission is hereby granted, free of charge, to any person obtaining a copy\r\n * of this software and associated documentation files (the \"Software\"), to deal\r\n * in the Software without restriction, including without limitation the rights\r\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\n * copies of the Software, and to permit persons to whom the Software is\r\n * furnished to do so, subject to the following conditions:\r\n *\r\n * The above copyright notice and this permission notice shall be included in\r\n * all copies or substantial portions of the Software.\r\n *\r\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r\n * THE SOFTWARE.\r\n *\r\n */\r\n\r\n(function() {\r\n var Dropzone, Emitter, camelize, contentLoaded, detectVerticalSquash, drawImageIOSFix, noop, without,\r\n __slice = [].slice,\r\n __hasProp = {}.hasOwnProperty,\r\n __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };\r\n\r\n noop = function() {};\r\n\r\n Emitter = (function() {\r\n function Emitter() {}\r\n\r\n Emitter.prototype.addEventListener = Emitter.prototype.on;\r\n\r\n Emitter.prototype.on = function(event, fn) {\r\n this._callbacks = this._callbacks || {};\r\n if (!this._callbacks[event]) {\r\n this._callbacks[event] = [];\r\n }\r\n this._callbacks[event].push(fn);\r\n return this;\r\n };\r\n\r\n Emitter.prototype.emit = function() {\r\n var args, callback, callbacks, event, _i, _len;\r\n event = arguments[0], args = 2 <= arguments.length ? __slice.call(arguments, 1) : [];\r\n this._callbacks = this._callbacks || {};\r\n callbacks = this._callbacks[event];\r\n if (callbacks) {\r\n for (_i = 0, _len = callbacks.length; _i < _len; _i++) {\r\n callback = callbacks[_i];\r\n callback.apply(this, args);\r\n }\r\n }\r\n return this;\r\n };\r\n\r\n Emitter.prototype.removeListener = Emitter.prototype.off;\r\n\r\n Emitter.prototype.removeAllListeners = Emitter.prototype.off;\r\n\r\n Emitter.prototype.removeEventListener = Emitter.prototype.off;\r\n\r\n Emitter.prototype.off = function(event, fn) {\r\n var callback, callbacks, i, _i, _len;\r\n if (!this._callbacks || arguments.length === 0) {\r\n this._callbacks = {};\r\n return this;\r\n }\r\n callbacks = this._callbacks[event];\r\n if (!callbacks) {\r\n return this;\r\n }\r\n if (arguments.length === 1) {\r\n delete this._callbacks[event];\r\n return this;\r\n }\r\n for (i = _i = 0, _len = callbacks.length; _i < _len; i = ++_i) {\r\n callback = callbacks[i];\r\n if (callback === fn) {\r\n callbacks.splice(i, 1);\r\n break;\r\n }\r\n }\r\n return this;\r\n };\r\n\r\n return Emitter;\r\n\r\n })();\r\n\r\n Dropzone = (function(_super) {\r\n var extend, resolveOption;\r\n\r\n __extends(Dropzone, _super);\r\n\r\n Dropzone.prototype.Emitter = Emitter;\r\n\r\n\r\n /*\r\n This is a list of all available events you can register on a dropzone object.\r\n\r\n You can register an event handler like this:\r\n\r\n dropzone.on(\"dragEnter\", function() { });\r\n */\r\n\r\n Dropzone.prototype.events = [\"drop\", \"dragstart\", \"dragend\", \"dragenter\", \"dragover\", \"dragleave\", \"addedfile\", \"addedfiles\", \"removedfile\", \"thumbnail\", \"error\", \"errormultiple\", \"processing\", \"processingmultiple\", \"uploadprogress\", \"totaluploadprogress\", \"sending\", \"sendingmultiple\", \"success\", \"successmultiple\", \"canceled\", \"canceledmultiple\", \"complete\", \"completemultiple\", \"reset\", \"maxfilesexceeded\", \"maxfilesreached\", \"queuecomplete\"];\r\n\r\n Dropzone.prototype.defaultOptions = {\r\n url: null,\r\n method: \"post\",\r\n withCredentials: false,\r\n parallelUploads: 2,\r\n uploadMultiple: false,\r\n maxFilesize: 256,\r\n paramName: \"file\",\r\n createImageThumbnails: true,\r\n maxThumbnailFilesize: 10,\r\n thumbnailWidth: 120,\r\n thumbnailHeight: 120,\r\n filesizeBase: 1000,\r\n maxFiles: null,\r\n params: {},\r\n clickable: true,\r\n ignoreHiddenFiles: true,\r\n acceptedFiles: null,\r\n acceptedMimeTypes: null,\r\n autoProcessQueue: true,\r\n autoQueue: true,\r\n addRemoveLinks: false,\r\n previewsContainer: null,\r\n hiddenInputContainer: \"body\",\r\n capture: null,\r\n renameFilename: null,\r\n dictDefaultMessage: \"Drop files here to upload\",\r\n dictFallbackMessage: \"Your browser does not support drag'n'drop file uploads.\",\r\n dictFallbackText: \"Please use the fallback form below to upload your files like in the olden days.\",\r\n dictFileTooBig: \"File is too big ({{filesize}}MiB). Max filesize: {{maxFilesize}}MiB.\",\r\n dictInvalidFileType: \"You can't upload files of this type.\",\r\n dictResponseError: \"Server responded with {{statusCode}} code.\",\r\n dictCancelUpload: \"Cancel upload\",\r\n dictCancelUploadConfirmation: \"Are you sure you want to cancel this upload?\",\r\n dictRemoveFile: \"Remove file\",\r\n dictRemoveFileConfirmation: null,\r\n dictMaxFilesExceeded: \"You can not upload any more files.\",\r\n accept: function(file, done) {\r\n return done();\r\n },\r\n init: function() {\r\n return noop;\r\n },\r\n forceFallback: false,\r\n fallback: function() {\r\n var child, messageElement, span, _i, _len, _ref;\r\n this.element.className = \"\" + this.element.className + \" dz-browser-not-supported\";\r\n _ref = this.element.getElementsByTagName(\"div\");\r\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\r\n child = _ref[_i];\r\n if (/(^| )dz-message($| )/.test(child.className)) {\r\n messageElement = child;\r\n child.className = \"dz-message\";\r\n continue;\r\n }\r\n }\r\n if (!messageElement) {\r\n messageElement = Dropzone.createElement(\"
    \");\r\n this.element.appendChild(messageElement);\r\n }\r\n span = messageElement.getElementsByTagName(\"span\")[0];\r\n if (span) {\r\n if (span.textContent != null) {\r\n span.textContent = this.options.dictFallbackMessage;\r\n } else if (span.innerText != null) {\r\n span.innerText = this.options.dictFallbackMessage;\r\n }\r\n }\r\n return this.element.appendChild(this.getFallbackForm());\r\n },\r\n resize: function(file) {\r\n var info, srcRatio, trgRatio;\r\n info = {\r\n srcX: 0,\r\n srcY: 0,\r\n srcWidth: file.width,\r\n srcHeight: file.height\r\n };\r\n srcRatio = file.width / file.height;\r\n info.optWidth = this.options.thumbnailWidth;\r\n info.optHeight = this.options.thumbnailHeight;\r\n if ((info.optWidth == null) && (info.optHeight == null)) {\r\n info.optWidth = info.srcWidth;\r\n info.optHeight = info.srcHeight;\r\n } else if (info.optWidth == null) {\r\n info.optWidth = srcRatio * info.optHeight;\r\n } else if (info.optHeight == null) {\r\n info.optHeight = (1 / srcRatio) * info.optWidth;\r\n }\r\n trgRatio = info.optWidth / info.optHeight;\r\n if (file.height < info.optHeight || file.width < info.optWidth) {\r\n info.trgHeight = info.srcHeight;\r\n info.trgWidth = info.srcWidth;\r\n } else {\r\n if (srcRatio > trgRatio) {\r\n info.srcHeight = file.height;\r\n info.srcWidth = info.srcHeight * trgRatio;\r\n } else {\r\n info.srcWidth = file.width;\r\n info.srcHeight = info.srcWidth / trgRatio;\r\n }\r\n }\r\n info.srcX = (file.width - info.srcWidth) / 2;\r\n info.srcY = (file.height - info.srcHeight) / 2;\r\n return info;\r\n },\r\n\r\n /*\r\n Those functions register themselves to the events on init and handle all\r\n the user interface specific stuff. Overwriting them won't break the upload\r\n but can break the way it's displayed.\r\n You can overwrite them if you don't like the default behavior. If you just\r\n want to add an additional event handler, register it on the dropzone object\r\n and don't overwrite those options.\r\n */\r\n drop: function(e) {\r\n return this.element.classList.remove(\"dz-drag-hover\");\r\n },\r\n dragstart: noop,\r\n dragend: function(e) {\r\n return this.element.classList.remove(\"dz-drag-hover\");\r\n },\r\n dragenter: function(e) {\r\n return this.element.classList.add(\"dz-drag-hover\");\r\n },\r\n dragover: function(e) {\r\n return this.element.classList.add(\"dz-drag-hover\");\r\n },\r\n dragleave: function(e) {\r\n return this.element.classList.remove(\"dz-drag-hover\");\r\n },\r\n paste: noop,\r\n reset: function() {\r\n return this.element.classList.remove(\"dz-started\");\r\n },\r\n addedfile: function(file) {\r\n var node, removeFileEvent, removeLink, _i, _j, _k, _len, _len1, _len2, _ref, _ref1, _ref2, _results;\r\n if (this.element === this.previewsContainer) {\r\n this.element.classList.add(\"dz-started\");\r\n }\r\n if (this.previewsContainer) {\r\n file.previewElement = Dropzone.createElement(this.options.previewTemplate.trim());\r\n file.previewTemplate = file.previewElement;\r\n this.previewsContainer.appendChild(file.previewElement);\r\n _ref = file.previewElement.querySelectorAll(\"[data-dz-name]\");\r\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\r\n node = _ref[_i];\r\n /*node.textContent = this._renameFilename(file.name); hack*/\r\n node.textContent = file.name;\r\n }\r\n _ref1 = file.previewElement.querySelectorAll(\"[data-dz-size]\");\r\n for (_j = 0, _len1 = _ref1.length; _j < _len1; _j++) {\r\n node = _ref1[_j];\r\n node.innerHTML = this.filesize(file.size);\r\n }\r\n if (this.options.addRemoveLinks) {\r\n file._removeLink = Dropzone.createElement(\"\" + this.options.dictRemoveFile + \"\");\r\n file.previewElement.appendChild(file._removeLink);\r\n }\r\n removeFileEvent = (function(_this) {\r\n return function(e) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n if (file.status === Dropzone.UPLOADING) {\r\n return Dropzone.confirm(_this.options.dictCancelUploadConfirmation, function() {\r\n return _this.removeFile(file);\r\n });\r\n } else {\r\n if (_this.options.dictRemoveFileConfirmation) {\r\n return Dropzone.confirm(_this.options.dictRemoveFileConfirmation, function() {\r\n return _this.removeFile(file);\r\n });\r\n } else {\r\n return _this.removeFile(file);\r\n }\r\n }\r\n };\r\n })(this);\r\n _ref2 = file.previewElement.querySelectorAll(\"[data-dz-remove]\");\r\n _results = [];\r\n for (_k = 0, _len2 = _ref2.length; _k < _len2; _k++) {\r\n removeLink = _ref2[_k];\r\n _results.push(removeLink.addEventListener(\"click\", removeFileEvent));\r\n }\r\n return _results;\r\n }\r\n },\r\n removedfile: function(file) {\r\n var _ref;\r\n if (file.previewElement) {\r\n if ((_ref = file.previewElement) != null) {\r\n _ref.parentNode.removeChild(file.previewElement);\r\n }\r\n }\r\n return this._updateMaxFilesReachedClass();\r\n },\r\n thumbnail: function(file, dataUrl) {\r\n var thumbnailElement, _i, _len, _ref;\r\n if (file.previewElement) {\r\n file.previewElement.classList.remove(\"dz-file-preview\");\r\n _ref = file.previewElement.querySelectorAll(\"[data-dz-thumbnail]\");\r\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\r\n thumbnailElement = _ref[_i];\r\n thumbnailElement.alt = file.name;\r\n thumbnailElement.src = dataUrl;\r\n }\r\n return setTimeout(((function(_this) {\r\n return function() {\r\n return file.previewElement.classList.add(\"dz-image-preview\");\r\n };\r\n })(this)), 1);\r\n }\r\n },\r\n error: function(file, message) {\r\n var node, _i, _len, _ref, _results;\r\n if (file.previewElement) {\r\n file.previewElement.classList.add(\"dz-error\");\r\n if (typeof message !== \"String\" && message.error) {\r\n message = message.error;\r\n }\r\n _ref = file.previewElement.querySelectorAll(\"[data-dz-errormessage]\");\r\n _results = [];\r\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\r\n node = _ref[_i];\r\n _results.push(node.textContent = message);\r\n }\r\n return _results;\r\n }\r\n },\r\n errormultiple: noop,\r\n processing: function(file) {\r\n if (file.previewElement) {\r\n file.previewElement.classList.add(\"dz-processing\");\r\n if (file._removeLink) {\r\n return file._removeLink.innerHTML = this.options.dictCancelUpload;\r\n }\r\n }\r\n },\r\n processingmultiple: noop,\r\n uploadprogress: function(file, progress, bytesSent) {\r\n var node, _i, _len, _ref, _results;\r\n if (file.previewElement) {\r\n _ref = file.previewElement.querySelectorAll(\"[data-dz-uploadprogress]\");\r\n _results = [];\r\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\r\n node = _ref[_i];\r\n if (node.nodeName === 'PROGRESS') {\r\n _results.push(node.value = progress);\r\n } else {\r\n _results.push(node.style.width = \"\" + progress + \"%\");\r\n }\r\n }\r\n return _results;\r\n }\r\n },\r\n totaluploadprogress: noop,\r\n sending: noop,\r\n sendingmultiple: noop,\r\n success: function(file) {\r\n if (file.previewElement) {\r\n return file.previewElement.classList.add(\"dz-success\");\r\n }\r\n },\r\n successmultiple: noop,\r\n canceled: function(file) {\r\n return this.emit(\"error\", file, \"Upload canceled.\");\r\n },\r\n canceledmultiple: noop,\r\n complete: function(file) {\r\n if (file._removeLink) {\r\n file._removeLink.innerHTML = this.options.dictRemoveFile;\r\n }\r\n if (file.previewElement) {\r\n return file.previewElement.classList.add(\"dz-complete\");\r\n }\r\n },\r\n completemultiple: noop,\r\n maxfilesexceeded: noop,\r\n maxfilesreached: noop,\r\n queuecomplete: noop,\r\n addedfiles: noop,\r\n previewTemplate: \"
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n Check\\n \\n \\n \\n \\n \\n
    \\n
    \\n \\n Error\\n \\n \\n \\n \\n \\n \\n \\n
    \\n
    \"\r\n };\r\n\r\n extend = function() {\r\n var key, object, objects, target, val, _i, _len;\r\n target = arguments[0], objects = 2 <= arguments.length ? __slice.call(arguments, 1) : [];\r\n for (_i = 0, _len = objects.length; _i < _len; _i++) {\r\n object = objects[_i];\r\n for (key in object) {\r\n val = object[key];\r\n target[key] = val;\r\n }\r\n }\r\n return target;\r\n };\r\n\r\n function Dropzone(element, options) {\r\n var elementOptions, fallback, _ref;\r\n this.element = element;\r\n this.version = Dropzone.version;\r\n this.defaultOptions.previewTemplate = this.defaultOptions.previewTemplate.replace(/\\n*/g, \"\");\r\n this.clickableElements = [];\r\n this.listeners = [];\r\n this.files = [];\r\n if (typeof this.element === \"string\") {\r\n this.element = document.querySelector(this.element);\r\n }\r\n if (!(this.element && (this.element.nodeType != null))) {\r\n throw new Error(\"Invalid dropzone element.\");\r\n }\r\n if (this.element.dropzone) {\r\n throw new Error(\"Dropzone already attached.\");\r\n }\r\n Dropzone.instances.push(this);\r\n this.element.dropzone = this;\r\n elementOptions = (_ref = Dropzone.optionsForElement(this.element)) != null ? _ref : {};\r\n this.options = extend({}, this.defaultOptions, elementOptions, options != null ? options : {});\r\n if (this.options.forceFallback || !Dropzone.isBrowserSupported()) {\r\n return this.options.fallback.call(this);\r\n }\r\n if (this.options.url == null) {\r\n this.options.url = this.element.getAttribute(\"action\");\r\n }\r\n if (!this.options.url) {\r\n throw new Error(\"No URL provided.\");\r\n }\r\n if (this.options.acceptedFiles && this.options.acceptedMimeTypes) {\r\n throw new Error(\"You can't provide both 'acceptedFiles' and 'acceptedMimeTypes'. 'acceptedMimeTypes' is deprecated.\");\r\n }\r\n if (this.options.acceptedMimeTypes) {\r\n this.options.acceptedFiles = this.options.acceptedMimeTypes;\r\n delete this.options.acceptedMimeTypes;\r\n }\r\n this.options.method = this.options.method.toUpperCase();\r\n if ((fallback = this.getExistingFallback()) && fallback.parentNode) {\r\n fallback.parentNode.removeChild(fallback);\r\n }\r\n if (this.options.previewsContainer !== false) {\r\n if (this.options.previewsContainer) {\r\n this.previewsContainer = Dropzone.getElement(this.options.previewsContainer, \"previewsContainer\");\r\n } else {\r\n this.previewsContainer = this.element;\r\n }\r\n }\r\n if (this.options.clickable) {\r\n if (this.options.clickable === true) {\r\n this.clickableElements = [this.element];\r\n } else {\r\n this.clickableElements = Dropzone.getElements(this.options.clickable, \"clickable\");\r\n }\r\n }\r\n this.init();\r\n }\r\n\r\n Dropzone.prototype.getAcceptedFiles = function() {\r\n var file, _i, _len, _ref, _results;\r\n _ref = this.files;\r\n _results = [];\r\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\r\n file = _ref[_i];\r\n if (file.accepted) {\r\n _results.push(file);\r\n }\r\n }\r\n return _results;\r\n };\r\n\r\n Dropzone.prototype.getRejectedFiles = function() {\r\n var file, _i, _len, _ref, _results;\r\n _ref = this.files;\r\n _results = [];\r\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\r\n file = _ref[_i];\r\n if (!file.accepted) {\r\n _results.push(file);\r\n }\r\n }\r\n return _results;\r\n };\r\n\r\n Dropzone.prototype.getFilesWithStatus = function(status) {\r\n var file, _i, _len, _ref, _results;\r\n _ref = this.files;\r\n _results = [];\r\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\r\n file = _ref[_i];\r\n if (file.status === status) {\r\n _results.push(file);\r\n }\r\n }\r\n return _results;\r\n };\r\n\r\n Dropzone.prototype.getQueuedFiles = function() {\r\n return this.getFilesWithStatus(Dropzone.QUEUED);\r\n };\r\n\r\n Dropzone.prototype.getUploadingFiles = function() {\r\n return this.getFilesWithStatus(Dropzone.UPLOADING);\r\n };\r\n\r\n Dropzone.prototype.getAddedFiles = function() {\r\n return this.getFilesWithStatus(Dropzone.ADDED);\r\n };\r\n\r\n Dropzone.prototype.getActiveFiles = function() {\r\n var file, _i, _len, _ref, _results;\r\n _ref = this.files;\r\n _results = [];\r\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\r\n file = _ref[_i];\r\n if (file.status === Dropzone.UPLOADING || file.status === Dropzone.QUEUED) {\r\n _results.push(file);\r\n }\r\n }\r\n return _results;\r\n };\r\n\r\n Dropzone.prototype.init = function() {\r\n var eventName, noPropagation, setupHiddenFileInput, _i, _len, _ref, _ref1;\r\n if (this.element.tagName === \"form\") {\r\n this.element.setAttribute(\"enctype\", \"multipart/form-data\");\r\n }\r\n if (this.element.classList.contains(\"dropzone\") && !this.element.querySelector(\".dz-message\")) {\r\n this.element.appendChild(Dropzone.createElement(\"
    \" + this.options.dictDefaultMessage + \"
    \"));\r\n }\r\n if (this.clickableElements.length) {\r\n setupHiddenFileInput = (function(_this) {\r\n return function() {\r\n if (_this.hiddenFileInput) {\r\n _this.hiddenFileInput.parentNode.removeChild(_this.hiddenFileInput);\r\n }\r\n _this.hiddenFileInput = document.createElement(\"input\");\r\n _this.hiddenFileInput.setAttribute(\"type\", \"file\");\r\n if ((_this.options.maxFiles == null) || _this.options.maxFiles > 1) {\r\n _this.hiddenFileInput.setAttribute(\"multiple\", \"multiple\");\r\n }\r\n _this.hiddenFileInput.className = \"dz-hidden-input\";\r\n if (_this.options.acceptedFiles != null) {\r\n _this.hiddenFileInput.setAttribute(\"accept\", _this.options.acceptedFiles);\r\n }\r\n if (_this.options.capture != null) {\r\n _this.hiddenFileInput.setAttribute(\"capture\", _this.options.capture);\r\n }\r\n _this.hiddenFileInput.style.visibility = \"hidden\";\r\n _this.hiddenFileInput.style.position = \"absolute\";\r\n _this.hiddenFileInput.style.top = \"0\";\r\n _this.hiddenFileInput.style.left = \"0\";\r\n _this.hiddenFileInput.style.height = \"0\";\r\n _this.hiddenFileInput.style.width = \"0\";\r\n document.querySelector(_this.options.hiddenInputContainer).appendChild(_this.hiddenFileInput);\r\n return _this.hiddenFileInput.addEventListener(\"change\", function() {\r\n var file, files, _i, _len;\r\n files = _this.hiddenFileInput.files;\r\n if (files.length) {\r\n for (_i = 0, _len = files.length; _i < _len; _i++) {\r\n file = files[_i];\r\n _this.addFile(file);\r\n }\r\n }\r\n _this.emit(\"addedfiles\", files);\r\n return setupHiddenFileInput();\r\n });\r\n };\r\n })(this);\r\n setupHiddenFileInput();\r\n }\r\n this.URL = (_ref = window.URL) != null ? _ref : window.webkitURL;\r\n _ref1 = this.events;\r\n for (_i = 0, _len = _ref1.length; _i < _len; _i++) {\r\n eventName = _ref1[_i];\r\n this.on(eventName, this.options[eventName]);\r\n }\r\n this.on(\"uploadprogress\", (function(_this) {\r\n return function() {\r\n return _this.updateTotalUploadProgress();\r\n };\r\n })(this));\r\n this.on(\"removedfile\", (function(_this) {\r\n return function() {\r\n return _this.updateTotalUploadProgress();\r\n };\r\n })(this));\r\n this.on(\"canceled\", (function(_this) {\r\n return function(file) {\r\n return _this.emit(\"complete\", file);\r\n };\r\n })(this));\r\n this.on(\"complete\", (function(_this) {\r\n return function(file) {\r\n if (_this.getAddedFiles().length === 0 && _this.getUploadingFiles().length === 0 && _this.getQueuedFiles().length === 0) {\r\n return setTimeout((function() {\r\n return _this.emit(\"queuecomplete\");\r\n }), 0);\r\n }\r\n };\r\n })(this));\r\n noPropagation = function(e) {\r\n e.stopPropagation();\r\n if (e.preventDefault) {\r\n return e.preventDefault();\r\n } else {\r\n return e.returnValue = false;\r\n }\r\n };\r\n this.listeners = [\r\n {\r\n element: this.element,\r\n events: {\r\n \"dragstart\": (function(_this) {\r\n return function(e) {\r\n return _this.emit(\"dragstart\", e);\r\n };\r\n })(this),\r\n \"dragenter\": (function(_this) {\r\n return function(e) {\r\n noPropagation(e);\r\n return _this.emit(\"dragenter\", e);\r\n };\r\n })(this),\r\n \"dragover\": (function(_this) {\r\n return function(e) {\r\n var efct;\r\n try {\r\n efct = e.dataTransfer.effectAllowed;\r\n } catch (_error) {}\r\n e.dataTransfer.dropEffect = 'move' === efct || 'linkMove' === efct ? 'move' : 'copy';\r\n noPropagation(e);\r\n return _this.emit(\"dragover\", e);\r\n };\r\n })(this),\r\n \"dragleave\": (function(_this) {\r\n return function(e) {\r\n return _this.emit(\"dragleave\", e);\r\n };\r\n })(this),\r\n \"drop\": (function(_this) {\r\n return function(e) {\r\n noPropagation(e);\r\n return _this.drop(e);\r\n };\r\n })(this),\r\n \"dragend\": (function(_this) {\r\n return function(e) {\r\n return _this.emit(\"dragend\", e);\r\n };\r\n })(this)\r\n }\r\n }\r\n ];\r\n this.clickableElements.forEach((function(_this) {\r\n return function(clickableElement) {\r\n return _this.listeners.push({\r\n element: clickableElement,\r\n events: {\r\n \"click\": function(evt) {\r\n if ((clickableElement !== _this.element) || (evt.target === _this.element || Dropzone.elementInside(evt.target, _this.element.querySelector(\".dz-message\")))) {\r\n _this.hiddenFileInput.click();\r\n }\r\n return true;\r\n }\r\n }\r\n });\r\n };\r\n })(this));\r\n this.enable();\r\n return this.options.init.call(this);\r\n };\r\n\r\n Dropzone.prototype.destroy = function() {\r\n var _ref;\r\n this.disable();\r\n this.removeAllFiles(true);\r\n if ((_ref = this.hiddenFileInput) != null ? _ref.parentNode : void 0) {\r\n this.hiddenFileInput.parentNode.removeChild(this.hiddenFileInput);\r\n this.hiddenFileInput = null;\r\n }\r\n delete this.element.dropzone;\r\n return Dropzone.instances.splice(Dropzone.instances.indexOf(this), 1);\r\n };\r\n\r\n Dropzone.prototype.updateTotalUploadProgress = function() {\r\n var activeFiles, file, totalBytes, totalBytesSent, totalUploadProgress, _i, _len, _ref;\r\n totalBytesSent = 0;\r\n totalBytes = 0;\r\n activeFiles = this.getActiveFiles();\r\n if (activeFiles.length) {\r\n _ref = this.getActiveFiles();\r\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\r\n file = _ref[_i];\r\n totalBytesSent += file.upload.bytesSent;\r\n totalBytes += file.upload.total;\r\n }\r\n totalUploadProgress = 100 * totalBytesSent / totalBytes;\r\n } else {\r\n totalUploadProgress = 100;\r\n }\r\n return this.emit(\"totaluploadprogress\", totalUploadProgress, totalBytes, totalBytesSent);\r\n };\r\n\r\n Dropzone.prototype._getParamName = function(n) {\r\n if (typeof this.options.paramName === \"function\") {\r\n return this.options.paramName(n);\r\n } else {\r\n return \"\" + this.options.paramName + (this.options.uploadMultiple ? \"[\" + n + \"]\" : \"\");\r\n }\r\n };\r\n\r\n Dropzone.prototype._renameFilename = function(name) {\r\n if (typeof this.options.renameFilename !== \"function\") {\r\n return name;\r\n }\r\n return this.options.renameFilename(name);\r\n };\r\n\r\n Dropzone.prototype.getFallbackForm = function() {\r\n var existingFallback, fields, fieldsString, form;\r\n if (existingFallback = this.getExistingFallback()) {\r\n return existingFallback;\r\n }\r\n fieldsString = \"
    \";\r\n if (this.options.dictFallbackText) {\r\n fieldsString += \"

    \" + this.options.dictFallbackText + \"

    \";\r\n }\r\n fieldsString += \"
    \";\r\n fields = Dropzone.createElement(fieldsString);\r\n if (this.element.tagName !== \"FORM\") {\r\n form = Dropzone.createElement(\"
    \");\r\n form.appendChild(fields);\r\n } else {\r\n this.element.setAttribute(\"enctype\", \"multipart/form-data\");\r\n this.element.setAttribute(\"method\", this.options.method);\r\n }\r\n return form != null ? form : fields;\r\n };\r\n\r\n Dropzone.prototype.getExistingFallback = function() {\r\n var fallback, getFallback, tagName, _i, _len, _ref;\r\n getFallback = function(elements) {\r\n var el, _i, _len;\r\n for (_i = 0, _len = elements.length; _i < _len; _i++) {\r\n el = elements[_i];\r\n if (/(^| )fallback($| )/.test(el.className)) {\r\n return el;\r\n }\r\n }\r\n };\r\n _ref = [\"div\", \"form\"];\r\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\r\n tagName = _ref[_i];\r\n if (fallback = getFallback(this.element.getElementsByTagName(tagName))) {\r\n return fallback;\r\n }\r\n }\r\n };\r\n\r\n Dropzone.prototype.setupEventListeners = function() {\r\n var elementListeners, event, listener, _i, _len, _ref, _results;\r\n _ref = this.listeners;\r\n _results = [];\r\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\r\n elementListeners = _ref[_i];\r\n _results.push((function() {\r\n var _ref1, _results1;\r\n _ref1 = elementListeners.events;\r\n _results1 = [];\r\n for (event in _ref1) {\r\n listener = _ref1[event];\r\n _results1.push(elementListeners.element.addEventListener(event, listener, false));\r\n }\r\n return _results1;\r\n })());\r\n }\r\n return _results;\r\n };\r\n\r\n Dropzone.prototype.removeEventListeners = function() {\r\n var elementListeners, event, listener, _i, _len, _ref, _results;\r\n _ref = this.listeners;\r\n _results = [];\r\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\r\n elementListeners = _ref[_i];\r\n _results.push((function() {\r\n var _ref1, _results1;\r\n _ref1 = elementListeners.events;\r\n _results1 = [];\r\n for (event in _ref1) {\r\n listener = _ref1[event];\r\n _results1.push(elementListeners.element.removeEventListener(event, listener, false));\r\n }\r\n return _results1;\r\n })());\r\n }\r\n return _results;\r\n };\r\n\r\n Dropzone.prototype.disable = function() {\r\n var file, _i, _len, _ref, _results;\r\n this.clickableElements.forEach(function(element) {\r\n return element.classList.remove(\"dz-clickable\");\r\n });\r\n this.removeEventListeners();\r\n _ref = this.files;\r\n _results = [];\r\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\r\n file = _ref[_i];\r\n _results.push(this.cancelUpload(file));\r\n }\r\n return _results;\r\n };\r\n\r\n Dropzone.prototype.enable = function() {\r\n this.clickableElements.forEach(function(element) {\r\n return element.classList.add(\"dz-clickable\");\r\n });\r\n return this.setupEventListeners();\r\n };\r\n\r\n Dropzone.prototype.filesize = function(size) {\r\n var cutoff, i, selectedSize, selectedUnit, unit, units, _i, _len;\r\n selectedSize = 0;\r\n selectedUnit = \"b\";\r\n if (size > 0) {\r\n units = ['TB', 'GB', 'MB', 'KB', 'b'];\r\n for (i = _i = 0, _len = units.length; _i < _len; i = ++_i) {\r\n unit = units[i];\r\n cutoff = Math.pow(this.options.filesizeBase, 4 - i) / 10;\r\n if (size >= cutoff) {\r\n selectedSize = size / Math.pow(this.options.filesizeBase, 4 - i);\r\n selectedUnit = unit;\r\n break;\r\n }\r\n }\r\n selectedSize = Math.round(10 * selectedSize) / 10;\r\n }\r\n return \"\" + selectedSize + \" \" + selectedUnit;\r\n };\r\n\r\n Dropzone.prototype._updateMaxFilesReachedClass = function() {\r\n if ((this.options.maxFiles != null) && this.getAcceptedFiles().length >= this.options.maxFiles) {\r\n if (this.getAcceptedFiles().length === this.options.maxFiles) {\r\n this.emit('maxfilesreached', this.files);\r\n }\r\n return this.element.classList.add(\"dz-max-files-reached\");\r\n } else {\r\n return this.element.classList.remove(\"dz-max-files-reached\");\r\n }\r\n };\r\n\r\n Dropzone.prototype.drop = function(e) {\r\n var files, items;\r\n if (!e.dataTransfer) {\r\n return;\r\n }\r\n this.emit(\"drop\", e);\r\n files = e.dataTransfer.files;\r\n this.emit(\"addedfiles\", files);\r\n if (files.length) {\r\n items = e.dataTransfer.items;\r\n if (items && items.length && (items[0].webkitGetAsEntry != null)) {\r\n this._addFilesFromItems(items);\r\n } else {\r\n this.handleFiles(files);\r\n }\r\n }\r\n };\r\n\r\n Dropzone.prototype.paste = function(e) {\r\n var items, _ref;\r\n if ((e != null ? (_ref = e.clipboardData) != null ? _ref.items : void 0 : void 0) == null) {\r\n return;\r\n }\r\n this.emit(\"paste\", e);\r\n items = e.clipboardData.items;\r\n if (items.length) {\r\n return this._addFilesFromItems(items);\r\n }\r\n };\r\n\r\n Dropzone.prototype.handleFiles = function(files) {\r\n var file, _i, _len, _results;\r\n _results = [];\r\n for (_i = 0, _len = files.length; _i < _len; _i++) {\r\n file = files[_i];\r\n _results.push(this.addFile(file));\r\n }\r\n return _results;\r\n };\r\n\r\n Dropzone.prototype._addFilesFromItems = function(items) {\r\n var entry, item, _i, _len, _results;\r\n _results = [];\r\n for (_i = 0, _len = items.length; _i < _len; _i++) {\r\n item = items[_i];\r\n if ((item.webkitGetAsEntry != null) && (entry = item.webkitGetAsEntry())) {\r\n if (entry.isFile) {\r\n _results.push(this.addFile(item.getAsFile()));\r\n } else if (entry.isDirectory) {\r\n _results.push(this._addFilesFromDirectory(entry, entry.name));\r\n } else {\r\n _results.push(void 0);\r\n }\r\n } else if (item.getAsFile != null) {\r\n if ((item.kind == null) || item.kind === \"file\") {\r\n _results.push(this.addFile(item.getAsFile()));\r\n } else {\r\n _results.push(void 0);\r\n }\r\n } else {\r\n _results.push(void 0);\r\n }\r\n }\r\n return _results;\r\n };\r\n\r\n Dropzone.prototype._addFilesFromDirectory = function(directory, path) {\r\n var dirReader, errorHandler, readEntries;\r\n dirReader = directory.createReader();\r\n errorHandler = function(error) {\r\n return typeof console !== \"undefined\" && console !== null ? typeof console.log === \"function\" ? console.log(error) : void 0 : void 0;\r\n };\r\n readEntries = (function(_this) {\r\n return function() {\r\n return dirReader.readEntries(function(entries) {\r\n var entry, _i, _len;\r\n if (entries.length > 0) {\r\n for (_i = 0, _len = entries.length; _i < _len; _i++) {\r\n entry = entries[_i];\r\n if (entry.isFile) {\r\n entry.file(function(file) {\r\n if (_this.options.ignoreHiddenFiles && file.name.substring(0, 1) === '.') {\r\n return;\r\n }\r\n file.fullPath = \"\" + path + \"/\" + file.name;\r\n return _this.addFile(file);\r\n });\r\n } else if (entry.isDirectory) {\r\n _this._addFilesFromDirectory(entry, \"\" + path + \"/\" + entry.name);\r\n }\r\n }\r\n readEntries();\r\n }\r\n return null;\r\n }, errorHandler);\r\n };\r\n })(this);\r\n return readEntries();\r\n };\r\n\r\n Dropzone.prototype.accept = function(file, done) {\r\n if (file.size > this.options.maxFilesize * 1024 * 1024) {\r\n return done(this.options.dictFileTooBig.replace(\"{{filesize}}\", Math.round(file.size / 1024 / 10.24) / 100).replace(\"{{maxFilesize}}\", this.options.maxFilesize));\r\n } else if (!Dropzone.isValidFile(file, this.options.acceptedFiles)) {\r\n return done(this.options.dictInvalidFileType);\r\n } else if ((this.options.maxFiles != null) && this.getAcceptedFiles().length >= this.options.maxFiles) {\r\n done(this.options.dictMaxFilesExceeded.replace(\"{{maxFiles}}\", this.options.maxFiles));\r\n return this.emit(\"maxfilesexceeded\", file);\r\n } else {\r\n return this.options.accept.call(this, file, done);\r\n }\r\n };\r\n\r\n Dropzone.prototype.addFile = function(file) {\r\n file.upload = {\r\n progress: 0,\r\n total: file.size,\r\n bytesSent: 0\r\n };\r\n file.serverName = this._renameFilename(file.name); /* Hack add serverName */\r\n this.files.push(file);\r\n file.status = Dropzone.ADDED;\r\n this.emit(\"addedfile\", file);\r\n this._enqueueThumbnail(file);\r\n return this.accept(file, (function(_this) {\r\n return function(error) {\r\n if (error) {\r\n file.accepted = false;\r\n _this._errorProcessing([file], error);\r\n } else {\r\n file.accepted = true;\r\n if (_this.options.autoQueue) {\r\n _this.enqueueFile(file);\r\n }\r\n }\r\n return _this._updateMaxFilesReachedClass();\r\n };\r\n })(this));\r\n };\r\n\r\n Dropzone.prototype.enqueueFiles = function(files) {\r\n var file, _i, _len;\r\n for (_i = 0, _len = files.length; _i < _len; _i++) {\r\n file = files[_i];\r\n this.enqueueFile(file);\r\n }\r\n return null;\r\n };\r\n\r\n Dropzone.prototype.enqueueFile = function(file) {\r\n if (file.status === Dropzone.ADDED && file.accepted === true) {\r\n file.status = Dropzone.QUEUED;\r\n if (this.options.autoProcessQueue) {\r\n return setTimeout(((function(_this) {\r\n return function() {\r\n return _this.processQueue();\r\n };\r\n })(this)), 0);\r\n }\r\n } else {\r\n throw new Error(\"This file can't be queued because it has already been processed or was rejected.\");\r\n }\r\n };\r\n\r\n Dropzone.prototype._thumbnailQueue = [];\r\n\r\n Dropzone.prototype._processingThumbnail = false;\r\n\r\n Dropzone.prototype._enqueueThumbnail = function(file) {\r\n if (this.options.createImageThumbnails && file.type.match(/image.*/) && file.size <= this.options.maxThumbnailFilesize * 1024 * 1024) {\r\n this._thumbnailQueue.push(file);\r\n return setTimeout(((function(_this) {\r\n return function() {\r\n return _this._processThumbnailQueue();\r\n };\r\n })(this)), 0);\r\n }\r\n };\r\n\r\n Dropzone.prototype._processThumbnailQueue = function() {\r\n if (this._processingThumbnail || this._thumbnailQueue.length === 0) {\r\n return;\r\n }\r\n this._processingThumbnail = true;\r\n return this.createThumbnail(this._thumbnailQueue.shift(), (function(_this) {\r\n return function() {\r\n _this._processingThumbnail = false;\r\n return _this._processThumbnailQueue();\r\n };\r\n })(this));\r\n };\r\n\r\n Dropzone.prototype.removeFile = function(file) {\r\n if (file.status === Dropzone.UPLOADING) {\r\n this.cancelUpload(file);\r\n }\r\n this.files = without(this.files, file);\r\n this.emit(\"removedfile\", file);\r\n if (this.files.length === 0) {\r\n return this.emit(\"reset\");\r\n }\r\n };\r\n\r\n Dropzone.prototype.removeAllFiles = function(cancelIfNecessary) {\r\n var file, _i, _len, _ref;\r\n if (cancelIfNecessary == null) {\r\n cancelIfNecessary = false;\r\n }\r\n _ref = this.files.slice();\r\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\r\n file = _ref[_i];\r\n if (file.status !== Dropzone.UPLOADING || cancelIfNecessary) {\r\n this.removeFile(file);\r\n }\r\n }\r\n return null;\r\n };\r\n\r\n Dropzone.prototype.createThumbnail = function(file, callback) {\r\n var fileReader;\r\n fileReader = new FileReader;\r\n fileReader.onload = (function(_this) {\r\n return function() {\r\n if (file.type === \"image/svg+xml\") {\r\n _this.emit(\"thumbnail\", file, fileReader.result);\r\n if (callback != null) {\r\n callback();\r\n }\r\n return;\r\n }\r\n return _this.createThumbnailFromUrl(file, fileReader.result, callback);\r\n };\r\n })(this);\r\n return fileReader.readAsDataURL(file);\r\n };\r\n\r\n Dropzone.prototype.createThumbnailFromUrl = function(file, imageUrl, callback, crossOrigin) {\r\n var img;\r\n img = document.createElement(\"img\");\r\n if (crossOrigin) {\r\n img.crossOrigin = crossOrigin;\r\n }\r\n img.onload = (function(_this) {\r\n return function() {\r\n var canvas, ctx, resizeInfo, thumbnail, _ref, _ref1, _ref2, _ref3;\r\n file.width = img.width;\r\n file.height = img.height;\r\n resizeInfo = _this.options.resize.call(_this, file);\r\n if (resizeInfo.trgWidth == null) {\r\n resizeInfo.trgWidth = resizeInfo.optWidth;\r\n }\r\n if (resizeInfo.trgHeight == null) {\r\n resizeInfo.trgHeight = resizeInfo.optHeight;\r\n }\r\n canvas = document.createElement(\"canvas\");\r\n ctx = canvas.getContext(\"2d\");\r\n canvas.width = resizeInfo.trgWidth;\r\n canvas.height = resizeInfo.trgHeight;\r\n drawImageIOSFix(ctx, img, (_ref = resizeInfo.srcX) != null ? _ref : 0, (_ref1 = resizeInfo.srcY) != null ? _ref1 : 0, resizeInfo.srcWidth, resizeInfo.srcHeight, (_ref2 = resizeInfo.trgX) != null ? _ref2 : 0, (_ref3 = resizeInfo.trgY) != null ? _ref3 : 0, resizeInfo.trgWidth, resizeInfo.trgHeight);\r\n thumbnail = canvas.toDataURL(\"image/png\");\r\n _this.emit(\"thumbnail\", file, thumbnail);\r\n if (callback != null) {\r\n return callback();\r\n }\r\n };\r\n })(this);\r\n if (callback != null) {\r\n img.onerror = callback;\r\n }\r\n return img.src = imageUrl;\r\n };\r\n\r\n Dropzone.prototype.processQueue = function() {\r\n var i, parallelUploads, processingLength, queuedFiles;\r\n parallelUploads = this.options.parallelUploads;\r\n processingLength = this.getUploadingFiles().length;\r\n i = processingLength;\r\n if (processingLength >= parallelUploads) {\r\n return;\r\n }\r\n queuedFiles = this.getQueuedFiles();\r\n if (!(queuedFiles.length > 0)) {\r\n return;\r\n }\r\n if (this.options.uploadMultiple) {\r\n return this.processFiles(queuedFiles.slice(0, parallelUploads - processingLength));\r\n } else {\r\n while (i < parallelUploads) {\r\n if (!queuedFiles.length) {\r\n return;\r\n }\r\n this.processFile(queuedFiles.shift());\r\n i++;\r\n }\r\n }\r\n };\r\n\r\n Dropzone.prototype.processFile = function(file) {\r\n return this.processFiles([file]);\r\n };\r\n\r\n Dropzone.prototype.processFiles = function(files) {\r\n var file, _i, _len;\r\n for (_i = 0, _len = files.length; _i < _len; _i++) {\r\n file = files[_i];\r\n file.processing = true;\r\n file.status = Dropzone.UPLOADING;\r\n this.emit(\"processing\", file);\r\n }\r\n if (this.options.uploadMultiple) {\r\n this.emit(\"processingmultiple\", files);\r\n }\r\n return this.uploadFiles(files);\r\n };\r\n\r\n Dropzone.prototype._getFilesWithXhr = function(xhr) {\r\n var file, files;\r\n return files = (function() {\r\n var _i, _len, _ref, _results;\r\n _ref = this.files;\r\n _results = [];\r\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\r\n file = _ref[_i];\r\n if (file.xhr === xhr) {\r\n _results.push(file);\r\n }\r\n }\r\n return _results;\r\n }).call(this);\r\n };\r\n\r\n Dropzone.prototype.cancelUpload = function(file) {\r\n var groupedFile, groupedFiles, _i, _j, _len, _len1, _ref;\r\n if (file.status === Dropzone.UPLOADING) {\r\n groupedFiles = this._getFilesWithXhr(file.xhr);\r\n for (_i = 0, _len = groupedFiles.length; _i < _len; _i++) {\r\n groupedFile = groupedFiles[_i];\r\n groupedFile.status = Dropzone.CANCELED;\r\n }\r\n file.xhr.abort();\r\n for (_j = 0, _len1 = groupedFiles.length; _j < _len1; _j++) {\r\n groupedFile = groupedFiles[_j];\r\n this.emit(\"canceled\", groupedFile);\r\n }\r\n if (this.options.uploadMultiple) {\r\n this.emit(\"canceledmultiple\", groupedFiles);\r\n }\r\n } else if ((_ref = file.status) === Dropzone.ADDED || _ref === Dropzone.QUEUED) {\r\n file.status = Dropzone.CANCELED;\r\n this.emit(\"canceled\", file);\r\n if (this.options.uploadMultiple) {\r\n this.emit(\"canceledmultiple\", [file]);\r\n }\r\n }\r\n if (this.options.autoProcessQueue) {\r\n return this.processQueue();\r\n }\r\n };\r\n\r\n resolveOption = function() {\r\n var args, option;\r\n option = arguments[0], args = 2 <= arguments.length ? __slice.call(arguments, 1) : [];\r\n if (typeof option === 'function') {\r\n return option.apply(this, args);\r\n }\r\n return option;\r\n };\r\n\r\n Dropzone.prototype.uploadFile = function(file) {\r\n return this.uploadFiles([file]);\r\n };\r\n\r\n Dropzone.prototype.uploadFiles = function(files) {\r\n var file, formData, handleError, headerName, headerValue, headers, i, input, inputName, inputType, key, method, option, progressObj, response, updateProgress, url, value, xhr, _i, _j, _k, _l, _len, _len1, _len2, _len3, _m, _ref, _ref1, _ref2, _ref3, _ref4, _ref5;\r\n xhr = new XMLHttpRequest();\r\n for (_i = 0, _len = files.length; _i < _len; _i++) {\r\n file = files[_i];\r\n file.xhr = xhr;\r\n }\r\n method = resolveOption(this.options.method, files);\r\n url = resolveOption(this.options.url, files);\r\n xhr.open(method, url, true);\r\n xhr.withCredentials = !!this.options.withCredentials;\r\n response = null;\r\n handleError = (function(_this) {\r\n return function() {\r\n var _j, _len1, _results;\r\n _results = [];\r\n for (_j = 0, _len1 = files.length; _j < _len1; _j++) {\r\n file = files[_j];\r\n _results.push(_this._errorProcessing(files, response || _this.options.dictResponseError.replace(\"{{statusCode}}\", xhr.status), xhr));\r\n }\r\n return _results;\r\n };\r\n })(this);\r\n updateProgress = (function(_this) {\r\n return function(e) {\r\n var allFilesFinished, progress, _j, _k, _l, _len1, _len2, _len3, _results;\r\n if (e != null) {\r\n progress = 100 * e.loaded / e.total;\r\n for (_j = 0, _len1 = files.length; _j < _len1; _j++) {\r\n file = files[_j];\r\n file.upload = {\r\n progress: progress,\r\n total: e.total,\r\n bytesSent: e.loaded\r\n };\r\n }\r\n } else {\r\n allFilesFinished = true;\r\n progress = 100;\r\n for (_k = 0, _len2 = files.length; _k < _len2; _k++) {\r\n file = files[_k];\r\n if (!(file.upload.progress === 100 && file.upload.bytesSent === file.upload.total)) {\r\n allFilesFinished = false;\r\n }\r\n file.upload.progress = progress;\r\n file.upload.bytesSent = file.upload.total;\r\n }\r\n if (allFilesFinished) {\r\n return;\r\n }\r\n }\r\n _results = [];\r\n for (_l = 0, _len3 = files.length; _l < _len3; _l++) {\r\n file = files[_l];\r\n _results.push(_this.emit(\"uploadprogress\", file, progress, file.upload.bytesSent));\r\n }\r\n return _results;\r\n };\r\n })(this);\r\n xhr.onload = (function(_this) {\r\n return function(e) {\r\n var _ref;\r\n if (files[0].status === Dropzone.CANCELED) {\r\n return;\r\n }\r\n if (xhr.readyState !== 4) {\r\n return;\r\n }\r\n response = xhr.responseText;\r\n if (xhr.getResponseHeader(\"content-type\") && ~xhr.getResponseHeader(\"content-type\").indexOf(\"application/json\")) {\r\n try {\r\n response = JSON.parse(response);\r\n } catch (_error) {\r\n e = _error;\r\n response = \"Invalid JSON response from server.\";\r\n }\r\n }\r\n updateProgress();\r\n if (!((200 <= (_ref = xhr.status) && _ref < 300))) {\r\n return handleError();\r\n } else {\r\n return _this._finished(files, response, e);\r\n }\r\n };\r\n })(this);\r\n xhr.onerror = (function(_this) {\r\n return function() {\r\n if (files[0].status === Dropzone.CANCELED) {\r\n return;\r\n }\r\n return handleError();\r\n };\r\n })(this);\r\n progressObj = (_ref = xhr.upload) != null ? _ref : xhr;\r\n progressObj.onprogress = updateProgress;\r\n headers = {\r\n \"Accept\": \"application/json\",\r\n \"Cache-Control\": \"no-cache\",\r\n \"X-Requested-With\": \"XMLHttpRequest\"\r\n };\r\n if (this.options.headers) {\r\n extend(headers, this.options.headers);\r\n }\r\n for (headerName in headers) {\r\n headerValue = headers[headerName];\r\n if (headerValue) {\r\n xhr.setRequestHeader(headerName, headerValue);\r\n }\r\n }\r\n formData = new FormData();\r\n if (this.options.params) {\r\n _ref1 = this.options.params;\r\n for (key in _ref1) {\r\n value = _ref1[key];\r\n formData.append(key, value);\r\n }\r\n }\r\n for (_j = 0, _len1 = files.length; _j < _len1; _j++) {\r\n file = files[_j];\r\n this.emit(\"sending\", file, xhr, formData);\r\n }\r\n if (this.options.uploadMultiple) {\r\n this.emit(\"sendingmultiple\", files, xhr, formData);\r\n }\r\n if (this.element.tagName === \"FORM\") {\r\n _ref2 = this.element.querySelectorAll(\"input, textarea, select, button\");\r\n for (_k = 0, _len2 = _ref2.length; _k < _len2; _k++) {\r\n input = _ref2[_k];\r\n inputName = input.getAttribute(\"name\");\r\n inputType = input.getAttribute(\"type\");\r\n if (input.tagName === \"SELECT\" && input.hasAttribute(\"multiple\")) {\r\n _ref3 = input.options;\r\n for (_l = 0, _len3 = _ref3.length; _l < _len3; _l++) {\r\n option = _ref3[_l];\r\n if (option.selected) {\r\n formData.append(inputName, option.value);\r\n }\r\n }\r\n } else if (!inputType || ((_ref4 = inputType.toLowerCase()) !== \"checkbox\" && _ref4 !== \"radio\") || input.checked) {\r\n formData.append(inputName, input.value);\r\n }\r\n }\r\n }\r\n for (i = _m = 0, _ref5 = files.length - 1; 0 <= _ref5 ? _m <= _ref5 : _m >= _ref5; i = 0 <= _ref5 ? ++_m : --_m) {\r\n /*formData.append(this._getParamName(i), files[i], this._renameFilename(files[i].name)); Hack*/\r\n formData.append(this._getParamName(i), files[i], files[i].serverName);\r\n }\r\n return this.submitRequest(xhr, formData, files);\r\n };\r\n\r\n Dropzone.prototype.submitRequest = function(xhr, formData, files) {\r\n return xhr.send(formData);\r\n };\r\n\r\n Dropzone.prototype._finished = function(files, responseText, e) {\r\n var file, _i, _len;\r\n for (_i = 0, _len = files.length; _i < _len; _i++) {\r\n file = files[_i];\r\n file.status = Dropzone.SUCCESS;\r\n this.emit(\"success\", file, responseText, e);\r\n this.emit(\"complete\", file);\r\n }\r\n if (this.options.uploadMultiple) {\r\n this.emit(\"successmultiple\", files, responseText, e);\r\n this.emit(\"completemultiple\", files);\r\n }\r\n if (this.options.autoProcessQueue) {\r\n return this.processQueue();\r\n }\r\n };\r\n\r\n Dropzone.prototype._errorProcessing = function(files, message, xhr) {\r\n var file, _i, _len;\r\n for (_i = 0, _len = files.length; _i < _len; _i++) {\r\n file = files[_i];\r\n file.status = Dropzone.ERROR;\r\n this.emit(\"error\", file, message, xhr);\r\n this.emit(\"complete\", file);\r\n }\r\n if (this.options.uploadMultiple) {\r\n this.emit(\"errormultiple\", files, message, xhr);\r\n this.emit(\"completemultiple\", files);\r\n }\r\n if (this.options.autoProcessQueue) {\r\n return this.processQueue();\r\n }\r\n };\r\n\r\n return Dropzone;\r\n\r\n })(Emitter);\r\n\r\n Dropzone.version = \"4.3.0\";\r\n\r\n Dropzone.options = {};\r\n\r\n Dropzone.optionsForElement = function(element) {\r\n if (element.getAttribute(\"id\")) {\r\n return Dropzone.options[camelize(element.getAttribute(\"id\"))];\r\n } else {\r\n return void 0;\r\n }\r\n };\r\n\r\n Dropzone.instances = [];\r\n\r\n Dropzone.forElement = function(element) {\r\n if (typeof element === \"string\") {\r\n element = document.querySelector(element);\r\n }\r\n if ((element != null ? element.dropzone : void 0) == null) {\r\n throw new Error(\"No Dropzone found for given element. This is probably because you're trying to access it before Dropzone had the time to initialize. Use the `init` option to setup any additional observers on your Dropzone.\");\r\n }\r\n return element.dropzone;\r\n };\r\n\r\n Dropzone.autoDiscover = false; /* Hack */\r\n\r\n Dropzone.discover = function() {\r\n var checkElements, dropzone, dropzones, _i, _len, _results;\r\n if (document.querySelectorAll) {\r\n dropzones = document.querySelectorAll(\".dropzone\");\r\n } else {\r\n dropzones = [];\r\n checkElements = function(elements) {\r\n var el, _i, _len, _results;\r\n _results = [];\r\n for (_i = 0, _len = elements.length; _i < _len; _i++) {\r\n el = elements[_i];\r\n if (/(^| )dropzone($| )/.test(el.className)) {\r\n _results.push(dropzones.push(el));\r\n } else {\r\n _results.push(void 0);\r\n }\r\n }\r\n return _results;\r\n };\r\n checkElements(document.getElementsByTagName(\"div\"));\r\n checkElements(document.getElementsByTagName(\"form\"));\r\n }\r\n _results = [];\r\n for (_i = 0, _len = dropzones.length; _i < _len; _i++) {\r\n dropzone = dropzones[_i];\r\n if (Dropzone.optionsForElement(dropzone) !== false) {\r\n _results.push(new Dropzone(dropzone));\r\n } else {\r\n _results.push(void 0);\r\n }\r\n }\r\n return _results;\r\n };\r\n\r\n Dropzone.blacklistedBrowsers = [/opera.*Macintosh.*version\\/12/i];\r\n\r\n Dropzone.isBrowserSupported = function() {\r\n var capableBrowser, regex, _i, _len, _ref;\r\n capableBrowser = true;\r\n if (window.File && window.FileReader && window.FileList && window.Blob && window.FormData && document.querySelector) {\r\n if (!(\"classList\" in document.createElement(\"a\"))) {\r\n capableBrowser = false;\r\n } else {\r\n _ref = Dropzone.blacklistedBrowsers;\r\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\r\n regex = _ref[_i];\r\n if (regex.test(navigator.userAgent)) {\r\n capableBrowser = false;\r\n continue;\r\n }\r\n }\r\n }\r\n } else {\r\n capableBrowser = false;\r\n }\r\n return capableBrowser;\r\n };\r\n\r\n without = function(list, rejectedItem) {\r\n var item, _i, _len, _results;\r\n _results = [];\r\n for (_i = 0, _len = list.length; _i < _len; _i++) {\r\n item = list[_i];\r\n if (item !== rejectedItem) {\r\n _results.push(item);\r\n }\r\n }\r\n return _results;\r\n };\r\n\r\n camelize = function(str) {\r\n return str.replace(/[\\-_](\\w)/g, function(match) {\r\n return match.charAt(1).toUpperCase();\r\n });\r\n };\r\n\r\n Dropzone.createElement = function(string) {\r\n var div;\r\n div = document.createElement(\"div\");\r\n div.innerHTML = string;\r\n return div.childNodes[0];\r\n };\r\n\r\n Dropzone.elementInside = function(element, container) {\r\n if (element === container) {\r\n return true;\r\n }\r\n while (element = element.parentNode) {\r\n if (element === container) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n };\r\n\r\n Dropzone.getElement = function(el, name) {\r\n var element;\r\n if (typeof el === \"string\") {\r\n element = document.querySelector(el);\r\n } else if (el.nodeType != null) {\r\n element = el;\r\n }\r\n if (element == null) {\r\n throw new Error(\"Invalid `\" + name + \"` option provided. Please provide a CSS selector or a plain HTML element.\");\r\n }\r\n return element;\r\n };\r\n\r\n Dropzone.getElements = function(els, name) {\r\n var e, el, elements, _i, _j, _len, _len1, _ref;\r\n if (els instanceof Array) {\r\n elements = [];\r\n try {\r\n for (_i = 0, _len = els.length; _i < _len; _i++) {\r\n el = els[_i];\r\n elements.push(this.getElement(el, name));\r\n }\r\n } catch (_error) {\r\n e = _error;\r\n elements = null;\r\n }\r\n } else if (typeof els === \"string\") {\r\n elements = [];\r\n _ref = document.querySelectorAll(els);\r\n for (_j = 0, _len1 = _ref.length; _j < _len1; _j++) {\r\n el = _ref[_j];\r\n elements.push(el);\r\n }\r\n } else if (els.nodeType != null) {\r\n elements = [els];\r\n }\r\n if (!((elements != null) && elements.length)) {\r\n throw new Error(\"Invalid `\" + name + \"` option provided. Please provide a CSS selector, a plain HTML element or a list of those.\");\r\n }\r\n return elements;\r\n };\r\n\r\n Dropzone.confirm = function(question, accepted, rejected) {\r\n if (window.confirm(question)) {\r\n return accepted();\r\n } else if (rejected != null) {\r\n return rejected();\r\n }\r\n };\r\n\r\n Dropzone.isValidFile = function(file, acceptedFiles) {\r\n var baseMimeType, mimeType, validType, _i, _len;\r\n if (!acceptedFiles) {\r\n return true;\r\n }\r\n acceptedFiles = acceptedFiles.split(\",\");\r\n mimeType = file.type;\r\n baseMimeType = mimeType.replace(/\\/.*$/, \"\");\r\n for (_i = 0, _len = acceptedFiles.length; _i < _len; _i++) {\r\n validType = acceptedFiles[_i];\r\n validType = validType.trim();\r\n if (validType.charAt(0) === \".\") {\r\n if (file.name.toLowerCase().indexOf(validType.toLowerCase(), file.name.length - validType.length) !== -1) {\r\n return true;\r\n }\r\n } else if (/\\/\\*$/.test(validType)) {\r\n if (baseMimeType === validType.replace(/\\/.*$/, \"\")) {\r\n return true;\r\n }\r\n } else {\r\n if (mimeType === validType) {\r\n return true;\r\n }\r\n }\r\n }\r\n return false;\r\n };\r\n\r\n if (typeof jQuery !== \"undefined\" && jQuery !== null) {\r\n jQuery.fn.dropzone = function(options) {\r\n return this.each(function() {\r\n return new Dropzone(this, options);\r\n });\r\n };\r\n }\r\n\r\n if (typeof module !== \"undefined\" && module !== null) {\r\n module.exports = Dropzone;\r\n } else {\r\n window.Dropzone = Dropzone;\r\n }\r\n\r\n Dropzone.ADDED = \"added\";\r\n\r\n Dropzone.QUEUED = \"queued\";\r\n\r\n Dropzone.ACCEPTED = Dropzone.QUEUED;\r\n\r\n Dropzone.UPLOADING = \"uploading\";\r\n\r\n Dropzone.PROCESSING = Dropzone.UPLOADING;\r\n\r\n Dropzone.CANCELED = \"canceled\";\r\n\r\n Dropzone.ERROR = \"error\";\r\n\r\n Dropzone.SUCCESS = \"success\";\r\n\r\n\r\n /*\r\n\r\n Bugfix for iOS 6 and 7\r\n Source: http://stackoverflow.com/questions/11929099/html5-canvas-drawimage-ratio-bug-ios\r\n based on the work of https://github.com/stomita/ios-imagefile-megapixel\r\n */\r\n\r\n detectVerticalSquash = function(img) {\r\n var alpha, canvas, ctx, data, ey, ih, iw, py, ratio, sy;\r\n iw = img.naturalWidth;\r\n ih = img.naturalHeight;\r\n canvas = document.createElement(\"canvas\");\r\n canvas.width = 1;\r\n canvas.height = ih;\r\n ctx = canvas.getContext(\"2d\");\r\n ctx.drawImage(img, 0, 0);\r\n data = ctx.getImageData(0, 0, 1, ih).data;\r\n sy = 0;\r\n ey = ih;\r\n py = ih;\r\n while (py > sy) {\r\n alpha = data[(py - 1) * 4 + 3];\r\n if (alpha === 0) {\r\n ey = py;\r\n } else {\r\n sy = py;\r\n }\r\n py = (ey + sy) >> 1;\r\n }\r\n ratio = py / ih;\r\n if (ratio === 0) {\r\n return 1;\r\n } else {\r\n return ratio;\r\n }\r\n };\r\n\r\n drawImageIOSFix = function(ctx, img, sx, sy, sw, sh, dx, dy, dw, dh) {\r\n var vertSquashRatio;\r\n vertSquashRatio = detectVerticalSquash(img);\r\n return ctx.drawImage(img, sx, sy, sw, sh, dx, dy, dw, dh / vertSquashRatio);\r\n };\r\n\r\n\r\n /*\r\n * contentloaded.js\r\n *\r\n * Author: Diego Perini (diego.perini at gmail.com)\r\n * Summary: cross-browser wrapper for DOMContentLoaded\r\n * Updated: 20101020\r\n * License: MIT\r\n * Version: 1.2\r\n *\r\n * URL:\r\n * http://javascript.nwbox.com/ContentLoaded/\r\n * http://javascript.nwbox.com/ContentLoaded/MIT-LICENSE\r\n */\r\n\r\n contentLoaded = function(win, fn) {\r\n var add, doc, done, init, poll, pre, rem, root, top;\r\n done = false;\r\n top = true;\r\n doc = win.document;\r\n root = doc.documentElement;\r\n add = (doc.addEventListener ? \"addEventListener\" : \"attachEvent\");\r\n rem = (doc.addEventListener ? \"removeEventListener\" : \"detachEvent\");\r\n pre = (doc.addEventListener ? \"\" : \"on\");\r\n init = function(e) {\r\n if (e.type === \"readystatechange\" && doc.readyState !== \"complete\") {\r\n return;\r\n }\r\n (e.type === \"load\" ? win : doc)[rem](pre + e.type, init, false);\r\n if (!done && (done = true)) {\r\n return fn.call(win, e.type || e);\r\n }\r\n };\r\n poll = function() {\r\n var e;\r\n try {\r\n root.doScroll(\"left\");\r\n } catch (_error) {\r\n e = _error;\r\n setTimeout(poll, 50);\r\n return;\r\n }\r\n return init(\"poll\");\r\n };\r\n if (doc.readyState !== \"complete\") {\r\n if (doc.createEventObject && root.doScroll) {\r\n try {\r\n top = !win.frameElement;\r\n } catch (_error) {}\r\n if (top) {\r\n poll();\r\n }\r\n }\r\n doc[add](pre + \"DOMContentLoaded\", init, false);\r\n doc[add](pre + \"readystatechange\", init, false);\r\n return win[add](pre + \"load\", init, false);\r\n }\r\n };\r\n\r\n Dropzone._autoDiscoverFunction = function() {\r\n if (Dropzone.autoDiscover) {\r\n return Dropzone.discover();\r\n }\r\n };\r\n\r\n contentLoaded(window, Dropzone._autoDiscoverFunction);\r\n\r\n}).call(this);\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) {\r\n this.each(function () {\r\n $(this).bxSlider(options);\r\n });\r\n return this;\r\n }\r\n\r\n // create a namespace to be used throughout the plugin\r\n var slider = {},\r\n // set a reference to our slider element\r\n el = this,\r\n // get the original window dimens (thanks a lot IE)\r\n windowWidth = $(window).width(),\r\n windowHeight = $(window).height();\r\n\r\n // Return if slider is already initialized\r\n if ($(el).data('bxSlider')) { return; }\r\n\r\n /**\r\n * ===================================================================================\r\n * = PRIVATE FUNCTIONS\r\n * ===================================================================================\r\n */\r\n\r\n /**\r\n * Initializes namespace settings to be used throughout plugin\r\n */\r\n var init = function () {\r\n // Return if slider is already initialized\r\n if ($(el).data('bxSlider')) { return; }\r\n // merge user-supplied options with the defaults\r\n slider.settings = $.extend({}, defaults, options);\r\n // parse slideWidth setting\r\n slider.settings.slideWidth = parseInt(slider.settings.slideWidth);\r\n // store the original children\r\n slider.children = el.children(slider.settings.slideSelector);\r\n // check if actual number of slides is less than minSlides / maxSlides\r\n if (slider.children.length < slider.settings.minSlides) { slider.settings.minSlides = slider.children.length; }\r\n if (slider.children.length < slider.settings.maxSlides) { slider.settings.maxSlides = slider.children.length; }\r\n // if random start, set the startSlide setting to random number\r\n if (slider.settings.randomStart) { slider.settings.startSlide = Math.floor(Math.random() * slider.children.length); }\r\n // store active slide information\r\n slider.active = { index: slider.settings.startSlide };\r\n // store if the slider is in carousel mode (displaying / moving multiple slides)\r\n slider.carousel = slider.settings.minSlides > 1 || slider.settings.maxSlides > 1;\r\n // if carousel, force preloadImages = 'all'\r\n if (slider.carousel) { slider.settings.preloadImages = 'all'; }\r\n // calculate the min / max width thresholds based on min / max number of slides\r\n // used to setup and update carousel slides dimensions\r\n slider.minThreshold = (slider.settings.minSlides * slider.settings.slideWidth) + ((slider.settings.minSlides - 1) * slider.settings.slideMargin);\r\n slider.maxThreshold = (slider.settings.maxSlides * slider.settings.slideWidth) + ((slider.settings.maxSlides - 1) * slider.settings.slideMargin);\r\n // store the current state of the slider (if currently animating, working is true)\r\n slider.working = false;\r\n // initialize the controls object\r\n slider.controls = {};\r\n // initialize an auto interval\r\n slider.interval = null;\r\n // determine which property to use for transitions\r\n slider.animProp = slider.settings.mode === 'vertical' ? 'top' : 'left';\r\n // determine if hardware acceleration can be used\r\n slider.usingCSS = slider.settings.useCSS && slider.settings.mode !== 'fade' && (function () {\r\n // create our test div element\r\n var div = document.createElement('div'),\r\n // css transition properties\r\n props = ['WebkitPerspective', 'MozPerspective', 'OPerspective', 'msPerspective'];\r\n // test for each property\r\n for (var i = 0; i < props.length; i++) {\r\n if (div.style[props[i]] !== undefined) {\r\n slider.cssPrefix = props[i].replace('Perspective', '').toLowerCase();\r\n slider.animProp = '-' + slider.cssPrefix + '-transform';\r\n return true;\r\n }\r\n }\r\n return false;\r\n }());\r\n // if vertical mode always make maxSlides and minSlides equal\r\n if (slider.settings.mode === 'vertical') { slider.settings.maxSlides = slider.settings.minSlides; }\r\n // save original style data\r\n el.data('origStyle', el.attr('style'));\r\n el.children(slider.settings.slideSelector).each(function () {\r\n $(this).data('origStyle', $(this).attr('style'));\r\n });\r\n\r\n // perform all DOM / CSS modifications\r\n setup();\r\n };\r\n\r\n /**\r\n * Performs all DOM and CSS modifications\r\n */\r\n var setup = function () {\r\n var preloadSelector = slider.children.eq(slider.settings.startSlide); // set the default preload selector (visible)\r\n\r\n // wrap el in a wrapper\r\n el.wrap('
    ');\r\n // store a namespace reference to .bx-viewport\r\n slider.viewport = el.parent();\r\n\r\n // add aria-live if the setting is enabled and ticker mode is disabled\r\n if (slider.settings.ariaLive && !slider.settings.ticker) {\r\n slider.viewport.attr('aria-live', 'polite');\r\n }\r\n // add a loading div to display while images are loading\r\n slider.loader = $('
    ');\r\n slider.viewport.prepend(slider.loader);\r\n // set el to a massive width, to hold any needed slides\r\n // also strip any margin and padding from el\r\n el.css({\r\n width: slider.settings.mode === 'horizontal' ? (slider.children.length * 1000 + 215) + '%' : 'auto',\r\n position: 'relative'\r\n });\r\n // if using CSS, add the easing property\r\n if (slider.usingCSS && slider.settings.easing) {\r\n el.css('-' + slider.cssPrefix + '-transition-timing-function', slider.settings.easing);\r\n // if not using CSS and no easing value was supplied, use the default JS animation easing (swing)\r\n } else if (!slider.settings.easing) {\r\n slider.settings.easing = 'swing';\r\n }\r\n // make modifications to the viewport (.bx-viewport)\r\n slider.viewport.css({\r\n width: '100%',\r\n overflow: 'hidden',\r\n position: 'relative'\r\n });\r\n slider.viewport.parent().css({\r\n maxWidth: getViewportMaxWidth()\r\n });\r\n // apply css to all slider children\r\n slider.children.css({\r\n // the float attribute is a reserved word in compressors like YUI compressor and need to be quoted #48\r\n 'float': slider.settings.mode === 'horizontal' ? 'left' : 'none',\r\n listStyle: 'none',\r\n position: 'relative'\r\n });\r\n // apply the calculated width after the float is applied to prevent scrollbar interference\r\n slider.children.css('width', getSlideWidth());\r\n // if slideMargin is supplied, add the css\r\n if (slider.settings.mode === 'horizontal' && slider.settings.slideMargin > 0) { slider.children.css('marginRight', slider.settings.slideMargin); }\r\n if (slider.settings.mode === 'vertical' && slider.settings.slideMargin > 0) { slider.children.css('marginBottom', slider.settings.slideMargin); }\r\n // if \"fade\" mode, add positioning and z-index CSS\r\n if (slider.settings.mode === 'fade') {\r\n slider.children.css({\r\n position: 'absolute',\r\n zIndex: 0,\r\n display: 'none'\r\n });\r\n // prepare the z-index on the showing element\r\n slider.children.eq(slider.settings.startSlide).css({ zIndex: slider.settings.slideZIndex, display: 'block' });\r\n }\r\n // create an element to contain all slider controls (pager, start / stop, etc)\r\n slider.controls.el = $('
    ');\r\n // if captions are requested, add them\r\n if (slider.settings.captions) { appendCaptions(); }\r\n // check if startSlide is last slide\r\n slider.active.last = slider.settings.startSlide === getPagerQty() - 1;\r\n // if video is true, set up the fitVids plugin\r\n if (slider.settings.video) { el.fitVids(); }\r\n //preloadImages\r\n if (slider.settings.preloadImages === 'none') {\r\n preloadSelector = null;\r\n }\r\n else if (slider.settings.preloadImages === 'all' || slider.settings.ticker) {\r\n preloadSelector = slider.children;\r\n }\r\n // only check for control addition if not in \"ticker\" mode\r\n if (!slider.settings.ticker) {\r\n // if controls are requested, add them\r\n if (slider.settings.controls) { appendControls(); }\r\n // if auto is true, and auto controls are requested, add them\r\n if (slider.settings.auto && slider.settings.autoControls) { appendControlsAuto(); }\r\n // if pager is requested, add it\r\n if (slider.settings.pager) { appendPager(); }\r\n // if any control option is requested, add the controls wrapper\r\n if (slider.settings.controls || slider.settings.autoControls || slider.settings.pager) { slider.viewport.after(slider.controls.el); }\r\n // if ticker mode, do not allow a pager\r\n } else {\r\n slider.settings.pager = false;\r\n }\r\n if (preloadSelector === null) {\r\n start();\r\n } else {\r\n loadElements(preloadSelector, start);\r\n }\r\n };\r\n\r\n var loadElements = function (selector, callback) {\r\n var total = selector.find('img:not([src=\"\"]), iframe').length,\r\n count = 0;\r\n if (total === 0) {\r\n callback();\r\n return;\r\n }\r\n selector.find('img:not([src=\"\"]), iframe').each(function () {\r\n $(this).one('load error', function () {\r\n if (++count === total) { callback(); }\r\n }).each(function () {\r\n if (this.complete || this.src == '') { $(this).trigger('load'); }\r\n });\r\n });\r\n };\r\n\r\n /**\r\n * Start the slider\r\n */\r\n var start = function () {\r\n // if infinite loop, prepare additional slides\r\n if (slider.settings.infiniteLoop && slider.settings.mode !== 'fade' && !slider.settings.ticker) {\r\n var slice = slider.settings.mode === 'vertical' ? slider.settings.minSlides : slider.settings.maxSlides,\r\n sliceAppend = slider.children.slice(0, slice).clone(true).addClass('bx-clone'),\r\n slicePrepend = slider.children.slice(-slice).clone(true).addClass('bx-clone');\r\n if (slider.settings.ariaHidden) {\r\n sliceAppend.attr('aria-hidden', true);\r\n slicePrepend.attr('aria-hidden', true);\r\n }\r\n el.append(sliceAppend).prepend(slicePrepend);\r\n }\r\n // remove the loading DOM element\r\n slider.loader.remove();\r\n // set the left / top position of \"el\"\r\n setSlidePosition();\r\n // if \"vertical\" mode, always use adaptiveHeight to prevent odd behavior\r\n if (slider.settings.mode === 'vertical') { slider.settings.adaptiveHeight = true; }\r\n // set the viewport height\r\n slider.viewport.height(getViewportHeight());\r\n // make sure everything is positioned just right (same as a window resize)\r\n el.redrawSlider();\r\n // onSliderLoad callback\r\n slider.settings.onSliderLoad.call(el, slider.active.index);\r\n // slider has been fully initialized\r\n slider.initialized = true;\r\n // add the resize call to the window\r\n if (slider.settings.responsive) { $(window).on('resize', resizeWindow); }\r\n // if auto is true and has more than 1 page, start the show\r\n if (slider.settings.auto && slider.settings.autoStart && (getPagerQty() > 1 || slider.settings.autoSlideForOnePage)) { initAuto(); }\r\n // if ticker is true, start the ticker\r\n if (slider.settings.ticker) { initTicker(); }\r\n // if pager is requested, make the appropriate pager link active\r\n if (slider.settings.pager) { updatePagerActive(slider.settings.startSlide); }\r\n // check for any updates to the controls (like hideControlOnEnd updates)\r\n if (slider.settings.controls) { updateDirectionControls(); }\r\n // if touchEnabled is true, setup the touch events\r\n if (slider.settings.touchEnabled && !slider.settings.ticker) { initTouch(); }\r\n // if keyboardEnabled is true, setup the keyboard events\r\n if (slider.settings.keyboardEnabled && !slider.settings.ticker) {\r\n $(document).keydown(keyPress);\r\n }\r\n };\r\n\r\n /**\r\n * Returns the calculated height of the viewport, used to determine either adaptiveHeight or the maxHeight value\r\n */\r\n var getViewportHeight = function () {\r\n\r\n console.log('getViewportHeight');\r\n\r\n var height = 0;\r\n\r\n // first determine which children (slides) should be used in our height calculation\r\n var children = $();\r\n // if mode is not \"vertical\" and adaptiveHeight is false, include all children\r\n if (slider.settings.mode !== 'vertical' && !slider.settings.adaptiveHeight) {\r\n children = slider.children;\r\n } else {\r\n // if not carousel, return the single active child\r\n if (!slider.carousel) {\r\n children = slider.children.eq(slider.active.index);\r\n // if carousel, return a slice of children\r\n } else {\r\n // get the individual slide index\r\n var currentIndex = slider.settings.moveSlides === 1 ? slider.active.index : slider.active.index * getMoveBy();\r\n // add the current slide to the children\r\n children = slider.children.eq(currentIndex);\r\n // cycle through the remaining \"showing\" slides\r\n for (i = 1; i <= slider.settings.maxSlides - 1; i++) {\r\n // if looped back to the start\r\n if (currentIndex + i >= slider.children.length) {\r\n children = children.add(slider.children.eq(i - 1));\r\n } else {\r\n children = children.add(slider.children.eq(currentIndex + i));\r\n }\r\n }\r\n }\r\n }\r\n // if \"vertical\" mode, calculate the sum of the heights of the children\r\n if (slider.settings.mode === 'vertical') {\r\n children.each(function (index) {\r\n height += $(this).outerHeight();\r\n });\r\n // add user-supplied margins\r\n if (slider.settings.slideMargin > 0) {\r\n height += slider.settings.slideMargin * (slider.settings.minSlides - 1);\r\n }\r\n // if not \"vertical\" mode, calculate the max height of the children\r\n } else {\r\n height = Math.max.apply(Math, children.map(function () {\r\n return $(this).outerHeight(false);\r\n }).get());\r\n }\r\n\r\n if (slider.viewport.css('box-sizing') === 'border-box') {\r\n height += parseFloat(slider.viewport.css('padding-top')) + parseFloat(slider.viewport.css('padding-bottom')) +\r\n parseFloat(slider.viewport.css('border-top-width')) + parseFloat(slider.viewport.css('border-bottom-width'));\r\n } else if (slider.viewport.css('box-sizing') === 'padding-box') {\r\n height += parseFloat(slider.viewport.css('padding-top')) + parseFloat(slider.viewport.css('padding-bottom'));\r\n }\r\n\r\n return height;\r\n };\r\n\r\n /**\r\n * Returns the calculated width to be used for the outer wrapper / viewport\r\n */\r\n var getViewportMaxWidth = function () {\r\n var width = '100%';\r\n if (slider.settings.slideWidth > 0) {\r\n if (slider.settings.mode === 'horizontal') {\r\n width = (slider.settings.maxSlides * slider.settings.slideWidth) + ((slider.settings.maxSlides - 1) * slider.settings.slideMargin);\r\n } else {\r\n width = slider.settings.slideWidth;\r\n }\r\n }\r\n return width;\r\n };\r\n\r\n /**\r\n * Returns the calculated width to be applied to each slide\r\n */\r\n var getSlideWidth = function () {\r\n var newElWidth = slider.settings.slideWidth, // start with any user-supplied slide width\r\n wrapWidth = slider.viewport.width(); // get the current viewport width\r\n // if slide width was not supplied, or is larger than the viewport use the viewport width\r\n if (slider.settings.slideWidth === 0 ||\r\n (slider.settings.slideWidth > wrapWidth && !slider.carousel) ||\r\n slider.settings.mode === 'vertical') {\r\n newElWidth = wrapWidth;\r\n // if carousel, use the thresholds to determine the width\r\n } else if (slider.settings.maxSlides > 1 && slider.settings.mode === 'horizontal') {\r\n if (wrapWidth > slider.maxThreshold) {\r\n return newElWidth;\r\n } else if (wrapWidth < slider.minThreshold) {\r\n newElWidth = (wrapWidth - (slider.settings.slideMargin * (slider.settings.minSlides - 1))) / slider.settings.minSlides;\r\n } else if (slider.settings.shrinkItems) {\r\n newElWidth = Math.floor((wrapWidth + slider.settings.slideMargin) / (Math.ceil((wrapWidth + slider.settings.slideMargin) / (newElWidth + slider.settings.slideMargin))) - slider.settings.slideMargin);\r\n }\r\n }\r\n return newElWidth;\r\n };\r\n\r\n /**\r\n * Returns the number of slides currently visible in the viewport (includes partially visible slides)\r\n */\r\n var getNumberSlidesShowing = function () {\r\n var slidesShowing = 1,\r\n childWidth = null;\r\n if (slider.settings.mode === 'horizontal' && slider.settings.slideWidth > 0) {\r\n // if viewport is smaller than minThreshold, return minSlides\r\n if (slider.viewport.width() < slider.minThreshold) {\r\n slidesShowing = slider.settings.minSlides;\r\n // if viewport is larger than maxThreshold, return maxSlides\r\n } else if (slider.viewport.width() > slider.maxThreshold) {\r\n slidesShowing = slider.settings.maxSlides;\r\n // if viewport is between min / max thresholds, divide viewport width by first child width\r\n } else {\r\n childWidth = slider.children.first().width() + slider.settings.slideMargin;\r\n slidesShowing = Math.floor((slider.viewport.width() +\r\n slider.settings.slideMargin) / childWidth) || 1;\r\n }\r\n // if \"vertical\" mode, slides showing will always be minSlides\r\n } else if (slider.settings.mode === 'vertical') {\r\n slidesShowing = slider.settings.minSlides;\r\n }\r\n return slidesShowing;\r\n };\r\n\r\n /**\r\n * Returns the number of pages (one full viewport of slides is one \"page\")\r\n */\r\n var getPagerQty = function () {\r\n var pagerQty = 0,\r\n breakPoint = 0,\r\n counter = 0;\r\n // if moveSlides is specified by the user\r\n if (slider.settings.moveSlides > 0) {\r\n if (slider.settings.infiniteLoop) {\r\n pagerQty = Math.ceil(slider.children.length / getMoveBy());\r\n } else {\r\n // when breakpoint goes above children length, counter is the number of pages\r\n while (breakPoint < slider.children.length) {\r\n ++pagerQty;\r\n breakPoint = counter + getNumberSlidesShowing();\r\n counter += slider.settings.moveSlides <= getNumberSlidesShowing() ? slider.settings.moveSlides : getNumberSlidesShowing();\r\n }\r\n return counter;\r\n }\r\n // if moveSlides is 0 (auto) divide children length by sides showing, then round up\r\n } else {\r\n pagerQty = Math.ceil(slider.children.length / getNumberSlidesShowing());\r\n }\r\n return pagerQty;\r\n };\r\n\r\n /**\r\n * Returns the number of individual slides by which to shift the slider\r\n */\r\n var getMoveBy = function () {\r\n // if moveSlides was set by the user and moveSlides is less than number of slides showing\r\n if (slider.settings.moveSlides > 0 && slider.settings.moveSlides <= getNumberSlidesShowing()) {\r\n return slider.settings.moveSlides;\r\n }\r\n // if moveSlides is 0 (auto)\r\n return getNumberSlidesShowing();\r\n };\r\n\r\n /**\r\n * Sets the slider's (el) left or top position\r\n */\r\n var setSlidePosition = function () {\r\n var position, lastChild, lastShowingIndex;\r\n // if last slide, not infinite loop, and number of children is larger than specified maxSlides\r\n if (slider.children.length > slider.settings.maxSlides && slider.active.last && !slider.settings.infiniteLoop) {\r\n if (slider.settings.mode === 'horizontal') {\r\n // get the last child's position\r\n lastChild = slider.children.last();\r\n position = lastChild.position();\r\n // set the left position\r\n setPositionProperty(-(position.left - (slider.viewport.width() - lastChild.outerWidth())), 'reset', 0);\r\n } else if (slider.settings.mode === 'vertical') {\r\n // get the last showing index's position\r\n lastShowingIndex = slider.children.length - slider.settings.minSlides;\r\n position = slider.children.eq(lastShowingIndex).position();\r\n // set the top position\r\n setPositionProperty(-position.top, 'reset', 0);\r\n }\r\n // if not last slide\r\n } else {\r\n // get the position of the first showing slide\r\n position = slider.children.eq(slider.active.index * getMoveBy()).position();\r\n // check for last slide\r\n if (slider.active.index === getPagerQty() - 1) { slider.active.last = true; }\r\n // set the respective position\r\n if (position !== undefined) {\r\n if (slider.settings.mode === 'horizontal') { setPositionProperty(-position.left, 'reset', 0); }\r\n else if (slider.settings.mode === 'vertical') { setPositionProperty(-position.top, 'reset', 0); }\r\n }\r\n }\r\n };\r\n\r\n /**\r\n * Sets the el's animating property position (which in turn will sometimes animate el).\r\n * If using CSS, sets the transform property. If not using CSS, sets the top / left property.\r\n *\r\n * @param value (int)\r\n * - the animating property's value\r\n *\r\n * @param type (string) 'slide', 'reset', 'ticker'\r\n * - the type of instance for which the function is being\r\n *\r\n * @param duration (int)\r\n * - the amount of time (in ms) the transition should occupy\r\n *\r\n * @param params (array) optional\r\n * - an optional parameter containing any variables that need to be passed in\r\n */\r\n var setPositionProperty = function (value, type, duration, params) {\r\n var animateObj, propValue;\r\n // use CSS transform\r\n if (slider.usingCSS) {\r\n // determine the translate3d value\r\n propValue = slider.settings.mode === 'vertical' ? 'translate3d(0, ' + value + 'px, 0)' : 'translate3d(' + value + 'px, 0, 0)';\r\n // add the CSS transition-duration\r\n el.css('-' + slider.cssPrefix + '-transition-duration', duration / 1000 + 's');\r\n if (type === 'slide') {\r\n // set the property value\r\n el.css(slider.animProp, propValue);\r\n if (duration !== 0) {\r\n // add a callback method - executes when CSS transition completes\r\n el.on('transitionend webkitTransitionEnd oTransitionEnd MSTransitionEnd', function (e) {\r\n //make sure it's the correct one\r\n if (!$(e.target).is(el)) { return; }\r\n // remove the callback\r\n el.off('transitionend webkitTransitionEnd oTransitionEnd MSTransitionEnd');\r\n updateAfterSlideTransition();\r\n });\r\n } else { //duration = 0\r\n updateAfterSlideTransition();\r\n }\r\n } else if (type === 'reset') {\r\n el.css(slider.animProp, propValue);\r\n } else if (type === 'ticker') {\r\n // make the transition use 'linear'\r\n el.css('-' + slider.cssPrefix + '-transition-timing-function', 'linear');\r\n el.css(slider.animProp, propValue);\r\n if (duration !== 0) {\r\n el.on('transitionend webkitTransitionEnd oTransitionEnd MSTransitionEnd', function (e) {\r\n //make sure it's the correct one\r\n if (!$(e.target).is(el)) { return; }\r\n // remove the callback\r\n el.off('transitionend webkitTransitionEnd oTransitionEnd MSTransitionEnd');\r\n // reset the position\r\n setPositionProperty(params.resetValue, 'reset', 0);\r\n // start the loop again\r\n tickerLoop();\r\n });\r\n } else { //duration = 0\r\n setPositionProperty(params.resetValue, 'reset', 0);\r\n tickerLoop();\r\n }\r\n }\r\n // use JS animate\r\n } else {\r\n animateObj = {};\r\n animateObj[slider.animProp] = value;\r\n if (type === 'slide') {\r\n el.animate(animateObj, duration, slider.settings.easing, function () {\r\n updateAfterSlideTransition();\r\n });\r\n } else if (type === 'reset') {\r\n el.css(slider.animProp, value);\r\n } else if (type === 'ticker') {\r\n el.animate(animateObj, duration, 'linear', function () {\r\n setPositionProperty(params.resetValue, 'reset', 0);\r\n // run the recursive loop after animation\r\n tickerLoop();\r\n });\r\n }\r\n }\r\n };\r\n\r\n /**\r\n * Populates the pager with proper amount of pages\r\n */\r\n var populatePager = function () {\r\n var pagerHtml = '',\r\n linkContent = '',\r\n pagerQty = getPagerQty();\r\n // loop through each pager item\r\n for (var i = 0; i < pagerQty; i++) {\r\n linkContent = '';\r\n // if a buildPager function is supplied, use it to get pager link value, else use index + 1\r\n if (slider.settings.buildPager && $.isFunction(slider.settings.buildPager) || slider.settings.pagerCustom) {\r\n linkContent = slider.settings.buildPager(i);\r\n slider.pagerEl.addClass('bx-custom-pager');\r\n } else {\r\n linkContent = i + 1;\r\n slider.pagerEl.addClass('bx-default-pager');\r\n }\r\n // var linkContent = slider.settings.buildPager && $.isFunction(slider.settings.buildPager) ? slider.settings.buildPager(i) : i + 1;\r\n // add the markup to the string\r\n pagerHtml += '';\r\n }\r\n // populate the pager element with pager links\r\n slider.pagerEl.html(pagerHtml);\r\n };\r\n\r\n /**\r\n * Appends the pager to the controls element\r\n */\r\n var appendPager = function () {\r\n if (!slider.settings.pagerCustom) {\r\n // create the pager DOM element\r\n slider.pagerEl = $('
    ');\r\n // if a pager selector was supplied, populate it with the pager\r\n if (slider.settings.pagerSelector) {\r\n $(slider.settings.pagerSelector).html(slider.pagerEl);\r\n // if no pager selector was supplied, add it after the wrapper\r\n } else {\r\n slider.controls.el.addClass('bx-has-pager').append(slider.pagerEl);\r\n }\r\n // populate the pager\r\n populatePager();\r\n } else {\r\n slider.pagerEl = $(slider.settings.pagerCustom);\r\n }\r\n // assign the pager click binding\r\n slider.pagerEl.on('click touchend', 'a', clickPagerBind);\r\n };\r\n\r\n /**\r\n * Appends prev / next controls to the controls element\r\n */\r\n var appendControls = function () {\r\n slider.controls.next = $('' + slider.settings.nextText + '');\r\n slider.controls.prev = $('' + slider.settings.prevText + '');\r\n // add click actions to the controls\r\n slider.controls.next.on('click touchend', clickNextBind);\r\n slider.controls.prev.on('click touchend', clickPrevBind);\r\n // if nextSelector was supplied, populate it\r\n if (slider.settings.nextSelector) {\r\n $(slider.settings.nextSelector).append(slider.controls.next);\r\n }\r\n // if prevSelector was supplied, populate it\r\n if (slider.settings.prevSelector) {\r\n $(slider.settings.prevSelector).append(slider.controls.prev);\r\n }\r\n // if no custom selectors were supplied\r\n if (!slider.settings.nextSelector && !slider.settings.prevSelector) {\r\n // add the controls to the DOM\r\n slider.controls.directionEl = $('
    ');\r\n // add the control elements to the directionEl\r\n slider.controls.directionEl.append(slider.controls.prev).append(slider.controls.next);\r\n // slider.viewport.append(slider.controls.directionEl);\r\n slider.controls.el.addClass('bx-has-controls-direction').append(slider.controls.directionEl);\r\n }\r\n };\r\n\r\n /**\r\n * Appends start / stop auto controls to the controls element\r\n */\r\n var appendControlsAuto = function () {\r\n slider.controls.start = $('');\r\n slider.controls.stop = $('');\r\n // add the controls to the DOM\r\n slider.controls.autoEl = $('
    ');\r\n // on click actions to the controls\r\n slider.controls.autoEl.on('click', '.bx-start', clickStartBind);\r\n slider.controls.autoEl.on('click', '.bx-stop', clickStopBind);\r\n // if autoControlsCombine, insert only the \"start\" control\r\n if (slider.settings.autoControlsCombine) {\r\n slider.controls.autoEl.append(slider.controls.start);\r\n // if autoControlsCombine is false, insert both controls\r\n } else {\r\n slider.controls.autoEl.append(slider.controls.start).append(slider.controls.stop);\r\n }\r\n // if auto controls selector was supplied, populate it with the controls\r\n if (slider.settings.autoControlsSelector) {\r\n $(slider.settings.autoControlsSelector).html(slider.controls.autoEl);\r\n // if auto controls selector was not supplied, add it after the wrapper\r\n } else {\r\n slider.controls.el.addClass('bx-has-controls-auto').append(slider.controls.autoEl);\r\n }\r\n // update the auto controls\r\n updateAutoControls(slider.settings.autoStart ? 'stop' : 'start');\r\n };\r\n\r\n /**\r\n * Appends image captions to the DOM\r\n */\r\n var appendCaptions = function () {\r\n // cycle through each child\r\n slider.children.each(function (index) {\r\n // get the image title attribute\r\n var title = $(this).find('img:first').attr('title');\r\n // append the caption\r\n if (title !== undefined && ('' + title).length) {\r\n $(this).append('
    ' + title + '
    ');\r\n }\r\n });\r\n };\r\n\r\n /**\r\n * Click next binding\r\n *\r\n * @param e (event)\r\n * - DOM event object\r\n */\r\n var clickNextBind = function (e) {\r\n e.preventDefault();\r\n if (slider.controls.el.hasClass('disabled')) { return; }\r\n // if auto show is running, stop it\r\n if (slider.settings.auto && slider.settings.stopAutoOnClick) { el.stopAuto(); }\r\n el.goToNextSlide();\r\n };\r\n\r\n /**\r\n * Click prev binding\r\n *\r\n * @param e (event)\r\n * - DOM event object\r\n */\r\n var clickPrevBind = function (e) {\r\n e.preventDefault();\r\n if (slider.controls.el.hasClass('disabled')) { return; }\r\n // if auto show is running, stop it\r\n if (slider.settings.auto && slider.settings.stopAutoOnClick) { el.stopAuto(); }\r\n el.goToPrevSlide();\r\n };\r\n\r\n /**\r\n * Click start binding\r\n *\r\n * @param e (event)\r\n * - DOM event object\r\n */\r\n var clickStartBind = function (e) {\r\n el.startAuto();\r\n e.preventDefault();\r\n };\r\n\r\n /**\r\n * Click stop binding\r\n *\r\n * @param e (event)\r\n * - DOM event object\r\n */\r\n var clickStopBind = function (e) {\r\n el.stopAuto();\r\n e.preventDefault();\r\n };\r\n\r\n /**\r\n * Click pager binding\r\n *\r\n * @param e (event)\r\n * - DOM event object\r\n */\r\n var clickPagerBind = function (e) {\r\n var pagerLink, pagerIndex;\r\n e.preventDefault();\r\n if (slider.controls.el.hasClass('disabled')) {\r\n return;\r\n }\r\n // if auto show is running, stop it\r\n if (slider.settings.auto && slider.settings.stopAutoOnClick) { el.stopAuto(); }\r\n pagerLink = $(e.currentTarget);\r\n if (pagerLink.attr('data-slide-index') !== undefined) {\r\n pagerIndex = parseInt(pagerLink.attr('data-slide-index'));\r\n // if clicked pager link is not active, continue with the goToSlide call\r\n if (pagerIndex !== slider.active.index) { el.goToSlide(pagerIndex); }\r\n }\r\n };\r\n\r\n /**\r\n * Updates the pager links with an active class\r\n *\r\n * @param slideIndex (int)\r\n * - index of slide to make active\r\n */\r\n var updatePagerActive = function (slideIndex) {\r\n // if \"short\" pager type\r\n var len = slider.children.length; // nb of children\r\n if (slider.settings.pagerType === 'short') {\r\n if (slider.settings.maxSlides > 1) {\r\n len = Math.ceil(slider.children.length / slider.settings.maxSlides);\r\n }\r\n slider.pagerEl.html((slideIndex + 1) + slider.settings.pagerShortSeparator + len);\r\n return;\r\n }\r\n // remove all pager active classes\r\n slider.pagerEl.find('a').removeClass('active');\r\n // apply the active class for all pagers\r\n slider.pagerEl.each(function (i, el) { $(el).find('a').eq(slideIndex).addClass('active'); });\r\n };\r\n\r\n /**\r\n * Performs needed actions after a slide transition\r\n */\r\n var updateAfterSlideTransition = function () {\r\n // if infinite loop is true\r\n if (slider.settings.infiniteLoop) {\r\n var position = '';\r\n // first slide\r\n if (slider.active.index === 0) {\r\n // set the new position\r\n position = slider.children.eq(0).position();\r\n // carousel, last slide\r\n } else if (slider.active.index === getPagerQty() - 1 && slider.carousel) {\r\n position = slider.children.eq((getPagerQty() - 1) * getMoveBy()).position();\r\n // last slide\r\n } else if (slider.active.index === slider.children.length - 1) {\r\n position = slider.children.eq(slider.children.length - 1).position();\r\n }\r\n if (position) {\r\n if (slider.settings.mode === 'horizontal') { setPositionProperty(-position.left, 'reset', 0); }\r\n else if (slider.settings.mode === 'vertical') { setPositionProperty(-position.top, 'reset', 0); }\r\n }\r\n }\r\n // declare that the transition is complete\r\n slider.working = false;\r\n // onSlideAfter callback\r\n slider.settings.onSlideAfter.call(el, slider.children.eq(slider.active.index), slider.oldIndex, slider.active.index);\r\n };\r\n\r\n /**\r\n * Updates the auto controls state (either active, or combined switch)\r\n *\r\n * @param state (string) \"start\", \"stop\"\r\n * - the new state of the auto show\r\n */\r\n var updateAutoControls = function (state) {\r\n // if autoControlsCombine is true, replace the current control with the new state\r\n if (slider.settings.autoControlsCombine) {\r\n slider.controls.autoEl.html(slider.controls[state]);\r\n // if autoControlsCombine is false, apply the \"active\" class to the appropriate control\r\n } else {\r\n slider.controls.autoEl.find('a').removeClass('active');\r\n slider.controls.autoEl.find('a:not(.bx-' + state + ')').addClass('active');\r\n }\r\n };\r\n\r\n /**\r\n * Updates the direction controls (checks if either should be hidden)\r\n */\r\n var updateDirectionControls = function () {\r\n if (getPagerQty() === 1) {\r\n slider.controls.prev.addClass('disabled');\r\n slider.controls.next.addClass('disabled');\r\n } else if (!slider.settings.infiniteLoop && slider.settings.hideControlOnEnd) {\r\n // if first slide\r\n if (slider.active.index === 0) {\r\n slider.controls.prev.addClass('disabled');\r\n slider.controls.next.removeClass('disabled');\r\n // if last slide\r\n } else if (slider.active.index === getPagerQty() - 1) {\r\n slider.controls.next.addClass('disabled');\r\n slider.controls.prev.removeClass('disabled');\r\n // if any slide in the middle\r\n } else {\r\n slider.controls.prev.removeClass('disabled');\r\n slider.controls.next.removeClass('disabled');\r\n }\r\n }\r\n };\r\n /* auto start and stop functions */\r\n var windowFocusHandler = function () { el.startAuto(); };\r\n var windowBlurHandler = function () { el.stopAuto(); };\r\n /**\r\n * Initializes the auto process\r\n */\r\n var initAuto = function () {\r\n // if autoDelay was supplied, launch the auto show using a setTimeout() call\r\n if (slider.settings.autoDelay > 0) {\r\n setTimeout(el.startAuto, slider.settings.autoDelay);\r\n // if autoDelay was not supplied, start the auto show normally\r\n } else {\r\n el.startAuto();\r\n\r\n //add focus and blur events to ensure its running if timeout gets paused\r\n $(window).focus(windowFocusHandler).blur(windowBlurHandler);\r\n }\r\n // if autoHover is requested\r\n if (slider.settings.autoHover) {\r\n // on el hover\r\n el.hover(function () {\r\n // if the auto show is currently playing (has an active interval)\r\n if (slider.interval) {\r\n // stop the auto show and pass true argument which will prevent control update\r\n el.stopAuto(true);\r\n // create a new autoPaused value which will be used by the relative \"mouseout\" event\r\n slider.autoPaused = true;\r\n }\r\n }, function () {\r\n // if the autoPaused value was created be the prior \"mouseover\" event\r\n if (slider.autoPaused) {\r\n // start the auto show and pass true argument which will prevent control update\r\n el.startAuto(true);\r\n // reset the autoPaused value\r\n slider.autoPaused = null;\r\n }\r\n });\r\n }\r\n };\r\n\r\n /**\r\n * Initializes the ticker process\r\n */\r\n var initTicker = function () {\r\n var startPosition = 0,\r\n position, transform, value, idx, ratio, property, newSpeed, totalDimens;\r\n // if autoDirection is \"next\", append a clone of the entire slider\r\n if (slider.settings.autoDirection === 'next') {\r\n el.append(slider.children.clone().addClass('bx-clone'));\r\n // if autoDirection is \"prev\", prepend a clone of the entire slider, and set the left position\r\n } else {\r\n el.prepend(slider.children.clone().addClass('bx-clone'));\r\n position = slider.children.first().position();\r\n startPosition = slider.settings.mode === 'horizontal' ? -position.left : -position.top;\r\n }\r\n setPositionProperty(startPosition, 'reset', 0);\r\n // do not allow controls in ticker mode\r\n slider.settings.pager = false;\r\n slider.settings.controls = false;\r\n slider.settings.autoControls = false;\r\n // if autoHover is requested\r\n if (slider.settings.tickerHover) {\r\n if (slider.usingCSS) {\r\n idx = slider.settings.mode === 'horizontal' ? 4 : 5;\r\n slider.viewport.hover(function () {\r\n transform = el.css('-' + slider.cssPrefix + '-transform');\r\n value = parseFloat(transform.split(',')[idx]);\r\n setPositionProperty(value, 'reset', 0);\r\n }, function () {\r\n totalDimens = 0;\r\n slider.children.each(function (index) {\r\n totalDimens += slider.settings.mode === 'horizontal' ? $(this).outerWidth(true) : $(this).outerHeight(true);\r\n });\r\n // calculate the speed ratio (used to determine the new speed to finish the paused animation)\r\n ratio = slider.settings.speed / totalDimens;\r\n // determine which property to use\r\n property = slider.settings.mode === 'horizontal' ? 'left' : 'top';\r\n // calculate the new speed\r\n newSpeed = ratio * (totalDimens - (Math.abs(parseInt(value))));\r\n tickerLoop(newSpeed);\r\n });\r\n } else {\r\n // on el hover\r\n slider.viewport.hover(function () {\r\n el.stop();\r\n }, function () {\r\n // calculate the total width of children (used to calculate the speed ratio)\r\n totalDimens = 0;\r\n slider.children.each(function (index) {\r\n totalDimens += slider.settings.mode === 'horizontal' ? $(this).outerWidth(true) : $(this).outerHeight(true);\r\n });\r\n // calculate the speed ratio (used to determine the new speed to finish the paused animation)\r\n ratio = slider.settings.speed / totalDimens;\r\n // determine which property to use\r\n property = slider.settings.mode === 'horizontal' ? 'left' : 'top';\r\n // calculate the new speed\r\n newSpeed = ratio * (totalDimens - (Math.abs(parseInt(el.css(property)))));\r\n tickerLoop(newSpeed);\r\n });\r\n }\r\n }\r\n // start the ticker loop\r\n tickerLoop();\r\n };\r\n\r\n /**\r\n * Runs a continuous loop, news ticker-style\r\n */\r\n var tickerLoop = function (resumeSpeed) {\r\n var speed = resumeSpeed ? resumeSpeed : slider.settings.speed,\r\n position = { left: 0, top: 0 },\r\n reset = { left: 0, top: 0 },\r\n animateProperty, resetValue, params;\r\n\r\n // if \"next\" animate left position to last child, then reset left to 0\r\n if (slider.settings.autoDirection === 'next') {\r\n position = el.find('.bx-clone').first().position();\r\n // if \"prev\" animate left position to 0, then reset left to first non-clone child\r\n } else {\r\n reset = slider.children.first().position();\r\n }\r\n animateProperty = slider.settings.mode === 'horizontal' ? -position.left : -position.top;\r\n resetValue = slider.settings.mode === 'horizontal' ? -reset.left : -reset.top;\r\n params = { resetValue: resetValue };\r\n setPositionProperty(animateProperty, 'ticker', speed, params);\r\n };\r\n\r\n /**\r\n * Check if el is on screen\r\n */\r\n var isOnScreen = function (el) {\r\n var win = $(window),\r\n viewport = {\r\n top: win.scrollTop(),\r\n left: win.scrollLeft()\r\n },\r\n bounds = el.offset();\r\n\r\n viewport.right = viewport.left + win.width();\r\n viewport.bottom = viewport.top + win.height();\r\n bounds.right = bounds.left + el.outerWidth();\r\n bounds.bottom = bounds.top + el.outerHeight();\r\n\r\n return (!(viewport.right < bounds.left || viewport.left > bounds.right || viewport.bottom < bounds.top || viewport.top > bounds.bottom));\r\n };\r\n\r\n /**\r\n * Initializes keyboard events\r\n */\r\n var keyPress = function (e) {\r\n var activeElementTag = document.activeElement.tagName.toLowerCase(),\r\n tagFilters = 'input|textarea',\r\n p = new RegExp(activeElementTag, ['i']),\r\n result = p.exec(tagFilters);\r\n\r\n if (result == null && isOnScreen(el)) {\r\n if (e.keyCode === 39) {\r\n clickNextBind(e);\r\n return false;\r\n } else if (e.keyCode === 37) {\r\n clickPrevBind(e);\r\n return false;\r\n }\r\n }\r\n };\r\n\r\n /**\r\n * Initializes touch events\r\n */\r\n var initTouch = function () {\r\n // initialize object to contain all touch values\r\n slider.touch = {\r\n start: { x: 0, y: 0 },\r\n end: { x: 0, y: 0 }\r\n };\r\n slider.viewport.on('touchstart MSPointerDown pointerdown', onTouchStart);\r\n\r\n //for browsers that have implemented pointer events and fire a click after\r\n //every pointerup regardless of whether pointerup is on same screen location as pointerdown or not\r\n slider.viewport.on('click', '.bxslider a', function (e) {\r\n if (slider.viewport.hasClass('click-disabled')) {\r\n e.preventDefault();\r\n slider.viewport.removeClass('click-disabled');\r\n }\r\n });\r\n };\r\n\r\n /**\r\n * Event handler for \"touchstart\"\r\n *\r\n * @param e (event)\r\n * - DOM event object\r\n */\r\n var onTouchStart = function (e) {\r\n // watch only for left mouse, touch contact and pen contact\r\n // touchstart event object doesn`t have button property\r\n if (e.type !== 'touchstart' && e.button !== 0) {\r\n return;\r\n }\r\n e.preventDefault();\r\n //disable slider controls while user is interacting with slides to avoid slider freeze that happens on touch devices when a slide swipe happens immediately after interacting with slider controls\r\n slider.controls.el.addClass('disabled');\r\n\r\n if (slider.working) {\r\n slider.controls.el.removeClass('disabled');\r\n } else {\r\n // record the original position when touch starts\r\n slider.touch.originalPos = el.position();\r\n var orig = e.originalEvent,\r\n touchPoints = (typeof orig.changedTouches !== 'undefined') ? orig.changedTouches : [orig];\r\n var chromePointerEvents = typeof PointerEvent === 'function';\r\n if (chromePointerEvents) {\r\n if (orig.pointerId === undefined) {\r\n return;\r\n }\r\n }\r\n // record the starting touch x, y coordinates\r\n slider.touch.start.x = touchPoints[0].pageX;\r\n slider.touch.start.y = touchPoints[0].pageY;\r\n\r\n if (slider.viewport.get(0).setPointerCapture) {\r\n slider.pointerId = orig.pointerId;\r\n slider.viewport.get(0).setPointerCapture(slider.pointerId);\r\n }\r\n // store original event data for click fixation\r\n slider.originalClickTarget = orig.originalTarget || orig.target;\r\n slider.originalClickButton = orig.button;\r\n slider.originalClickButtons = orig.buttons;\r\n slider.originalEventType = orig.type;\r\n // at this moment we don`t know what it is click or swipe\r\n slider.hasMove = false;\r\n // on a \"touchmove\" event to the viewport\r\n slider.viewport.on('touchmove MSPointerMove pointermove', onTouchMove);\r\n // on a \"touchend\" event to the viewport\r\n slider.viewport.on('touchend MSPointerUp pointerup', onTouchEnd);\r\n slider.viewport.on('MSPointerCancel pointercancel', onPointerCancel);\r\n }\r\n };\r\n\r\n /**\r\n * Cancel Pointer for Windows Phone\r\n *\r\n * @param e (event)\r\n * - DOM event object\r\n */\r\n var onPointerCancel = function (e) {\r\n e.preventDefault();\r\n /* onPointerCancel handler is needed to deal with situations when a touchend\r\n doesn't fire after a touchstart (this happens on windows phones only) */\r\n setPositionProperty(slider.touch.originalPos.left, 'reset', 0);\r\n\r\n //remove handlers\r\n slider.controls.el.removeClass('disabled');\r\n slider.viewport.off('MSPointerCancel pointercancel', onPointerCancel);\r\n slider.viewport.off('touchmove MSPointerMove pointermove', onTouchMove);\r\n slider.viewport.off('touchend MSPointerUp pointerup', onTouchEnd);\r\n if (slider.viewport.get(0).releasePointerCapture) {\r\n slider.viewport.get(0).releasePointerCapture(slider.pointerId);\r\n }\r\n };\r\n\r\n /**\r\n * Event handler for \"touchmove\"\r\n *\r\n * @param e (event)\r\n * - DOM event object\r\n */\r\n var onTouchMove = function (e) {\r\n var orig = e.originalEvent,\r\n touchPoints = (typeof orig.changedTouches !== 'undefined') ? orig.changedTouches : [orig],\r\n // if scrolling on y axis, do not prevent default\r\n xMovement = Math.abs(touchPoints[0].pageX - slider.touch.start.x),\r\n yMovement = Math.abs(touchPoints[0].pageY - slider.touch.start.y),\r\n value = 0,\r\n change = 0;\r\n // this is swipe\r\n slider.hasMove = true;\r\n\r\n // x axis swipe\r\n if ((xMovement * 3) > yMovement && slider.settings.preventDefaultSwipeX) {\r\n e.preventDefault();\r\n // y axis swipe\r\n } else if ((yMovement * 3) > xMovement && slider.settings.preventDefaultSwipeY) {\r\n e.preventDefault();\r\n }\r\n if (e.type !== 'touchmove') {\r\n e.preventDefault();\r\n }\r\n\r\n if (slider.settings.mode !== 'fade' && slider.settings.oneToOneTouch) {\r\n // if horizontal, drag along x axis\r\n if (slider.settings.mode === 'horizontal') {\r\n change = touchPoints[0].pageX - slider.touch.start.x;\r\n value = slider.touch.originalPos.left + change;\r\n // if vertical, drag along y axis\r\n } else {\r\n change = touchPoints[0].pageY - slider.touch.start.y;\r\n value = slider.touch.originalPos.top + change;\r\n }\r\n setPositionProperty(value, 'reset', 0);\r\n }\r\n };\r\n\r\n /**\r\n * Event handler for \"touchend\"\r\n *\r\n * @param e (event)\r\n * - DOM event object\r\n */\r\n var onTouchEnd = function (e) {\r\n e.preventDefault();\r\n slider.viewport.off('touchmove MSPointerMove pointermove', onTouchMove);\r\n //enable slider controls as soon as user stops interacing with slides\r\n slider.controls.el.removeClass('disabled');\r\n var orig = e.originalEvent,\r\n touchPoints = (typeof orig.changedTouches !== 'undefined') ? orig.changedTouches : [orig],\r\n value = 0,\r\n distance = 0;\r\n // record end x, y positions\r\n slider.touch.end.x = touchPoints[0].pageX;\r\n slider.touch.end.y = touchPoints[0].pageY;\r\n // if fade mode, check if absolute x distance clears the threshold\r\n if (slider.settings.mode === 'fade') {\r\n distance = Math.abs(slider.touch.start.x - slider.touch.end.x);\r\n if (distance >= slider.settings.swipeThreshold) {\r\n if (slider.touch.start.x > slider.touch.end.x) {\r\n el.goToNextSlide();\r\n } else {\r\n el.goToPrevSlide();\r\n }\r\n el.stopAuto();\r\n }\r\n // not fade mode\r\n } else {\r\n // calculate distance and el's animate property\r\n if (slider.settings.mode === 'horizontal') {\r\n distance = slider.touch.end.x - slider.touch.start.x;\r\n value = slider.touch.originalPos.left;\r\n } else {\r\n distance = slider.touch.end.y - slider.touch.start.y;\r\n value = slider.touch.originalPos.top;\r\n }\r\n // if not infinite loop and first / last slide, do not attempt a slide transition\r\n if (!slider.settings.infiniteLoop && ((slider.active.index === 0 && distance > 0) || (slider.active.last && distance < 0))) {\r\n setPositionProperty(value, 'reset', 200);\r\n } else {\r\n // check if distance clears threshold\r\n if (Math.abs(distance) >= slider.settings.swipeThreshold) {\r\n if (distance < 0) {\r\n el.goToNextSlide();\r\n } else {\r\n el.goToPrevSlide();\r\n }\r\n el.stopAuto();\r\n } else {\r\n // el.animate(property, 200);\r\n setPositionProperty(value, 'reset', 200);\r\n }\r\n }\r\n }\r\n slider.viewport.off('touchend MSPointerUp pointerup', onTouchEnd);\r\n\r\n if (slider.viewport.get(0).releasePointerCapture) {\r\n slider.viewport.get(0).releasePointerCapture(slider.pointerId);\r\n }\r\n // if slider had swipe with left mouse, touch contact and pen contact\r\n if (slider.hasMove === false && (slider.originalClickButton === 0 || slider.originalEventType === 'touchstart')) {\r\n // trigger click event (fix for Firefox59 and PointerEvent standard compatibility)\r\n $(slider.originalClickTarget).trigger({\r\n type: 'click',\r\n button: slider.originalClickButton,\r\n buttons: slider.originalClickButtons\r\n });\r\n }\r\n };\r\n\r\n /**\r\n * Window resize event callback\r\n */\r\n var resizeWindow = function (e) {\r\n // don't do anything if slider isn't initialized.\r\n if (!slider.initialized) { return; }\r\n // Delay if slider working.\r\n if (slider.working) {\r\n window.setTimeout(resizeWindow, 10);\r\n } else {\r\n // get the new window dimens (again, thank you IE)\r\n var windowWidthNew = $(window).width(),\r\n windowHeightNew = $(window).height();\r\n // make sure that it is a true window resize\r\n // *we must check this because our dinosaur friend IE fires a window resize event when certain DOM elements\r\n // are resized. Can you just die already?*\r\n if (windowWidth !== windowWidthNew || windowHeight !== windowHeightNew) {\r\n // set the new window dimens\r\n windowWidth = windowWidthNew;\r\n windowHeight = windowHeightNew;\r\n // update all dynamic elements\r\n el.redrawSlider();\r\n // Call user resize handler\r\n slider.settings.onSliderResize.call(el, slider.active.index);\r\n }\r\n }\r\n };\r\n\r\n /**\r\n * Adds an aria-hidden=true attribute to each element\r\n *\r\n * @param startVisibleIndex (int)\r\n * - the first visible element's index\r\n */\r\n var applyAriaHiddenAttributes = function (startVisibleIndex) {\r\n var numberOfSlidesShowing = getNumberSlidesShowing();\r\n // only apply attributes if the setting is enabled and not in ticker mode\r\n if (slider.settings.ariaHidden && !slider.settings.ticker) {\r\n // add aria-hidden=true to all elements\r\n slider.children.attr('aria-hidden', 'true');\r\n // get the visible elements and change to aria-hidden=false\r\n slider.children.slice(startVisibleIndex, startVisibleIndex + numberOfSlidesShowing).attr('aria-hidden', 'false');\r\n }\r\n };\r\n\r\n /**\r\n * Returns index according to present page range\r\n *\r\n * @param slideOndex (int)\r\n * - the desired slide index\r\n */\r\n var setSlideIndex = function (slideIndex) {\r\n if (slideIndex < 0) {\r\n if (slider.settings.infiniteLoop) {\r\n return getPagerQty() - 1;\r\n } else {\r\n //we don't go to undefined slides\r\n return slider.active.index;\r\n }\r\n // if slideIndex is greater than children length, set active index to 0 (this happens during infinite loop)\r\n } else if (slideIndex >= getPagerQty()) {\r\n if (slider.settings.infiniteLoop) {\r\n return 0;\r\n } else {\r\n //we don't move to undefined pages\r\n return slider.active.index;\r\n }\r\n // set active index to requested slide\r\n } else {\r\n return slideIndex;\r\n }\r\n };\r\n\r\n /**\r\n * ===================================================================================\r\n * = PUBLIC FUNCTIONS\r\n * ===================================================================================\r\n */\r\n\r\n /**\r\n * Performs slide transition to the specified slide\r\n *\r\n * @param slideIndex (int)\r\n * - the destination slide's index (zero-based)\r\n *\r\n * @param direction (string)\r\n * - INTERNAL USE ONLY - the direction of travel (\"prev\" / \"next\")\r\n */\r\n el.goToSlide = function (slideIndex, direction) {\r\n // onSlideBefore, onSlideNext, onSlidePrev callbacks\r\n // Allow transition canceling based on returned value\r\n var performTransition = true,\r\n moveBy = 0,\r\n position = { left: 0, top: 0 },\r\n lastChild = null,\r\n lastShowingIndex, eq, value, requestEl;\r\n // store the old index\r\n slider.oldIndex = slider.active.index;\r\n //set new index\r\n slider.active.index = setSlideIndex(slideIndex);\r\n\r\n // if plugin is currently in motion, ignore request\r\n if (slider.working || slider.active.index === slider.oldIndex) { return; }\r\n // declare that plugin is in motion\r\n slider.working = true;\r\n\r\n performTransition = slider.settings.onSlideBefore.call(el, slider.children.eq(slider.active.index), slider.oldIndex, slider.active.index);\r\n\r\n // If transitions canceled, reset and return\r\n if (typeof (performTransition) !== 'undefined' && !performTransition) {\r\n slider.active.index = slider.oldIndex; // restore old index\r\n slider.working = false; // is not in motion\r\n return;\r\n }\r\n\r\n if (direction === 'next') {\r\n // Prevent canceling in future functions or lack there-of from negating previous commands to cancel\r\n if (!slider.settings.onSlideNext.call(el, slider.children.eq(slider.active.index), slider.oldIndex, slider.active.index)) {\r\n performTransition = false;\r\n }\r\n } else if (direction === 'prev') {\r\n // Prevent canceling in future functions or lack there-of from negating previous commands to cancel\r\n if (!slider.settings.onSlidePrev.call(el, slider.children.eq(slider.active.index), slider.oldIndex, slider.active.index)) {\r\n performTransition = false;\r\n }\r\n }\r\n\r\n // check if last slide\r\n slider.active.last = slider.active.index >= getPagerQty() - 1;\r\n // update the pager with active class\r\n if (slider.settings.pager || slider.settings.pagerCustom) { updatePagerActive(slider.active.index); }\r\n // // check for direction control update\r\n if (slider.settings.controls) { updateDirectionControls(); }\r\n // if slider is set to mode: \"fade\"\r\n if (slider.settings.mode === 'fade') {\r\n // if adaptiveHeight is true and next height is different from current height, animate to the new height\r\n if (slider.settings.adaptiveHeight && slider.viewport.height() !== getViewportHeight()) {\r\n slider.viewport.animate({ height: getViewportHeight() }, slider.settings.adaptiveHeightSpeed);\r\n }\r\n // fade out the visible child and reset its z-index value\r\n slider.children.filter(':visible').fadeOut(slider.settings.speed).css({ zIndex: 0 });\r\n // fade in the newly requested slide\r\n slider.children.eq(slider.active.index).css('zIndex', slider.settings.slideZIndex + 1).fadeIn(slider.settings.speed, function () {\r\n $(this).css('zIndex', slider.settings.slideZIndex);\r\n updateAfterSlideTransition();\r\n });\r\n // slider mode is not \"fade\"\r\n } else {\r\n // if adaptiveHeight is true and next height is different from current height, animate to the new height\r\n if (slider.settings.adaptiveHeight && slider.viewport.height() !== getViewportHeight()) {\r\n slider.viewport.animate({ height: getViewportHeight() }, slider.settings.adaptiveHeightSpeed);\r\n }\r\n // if carousel and not infinite loop\r\n if (!slider.settings.infiniteLoop && slider.carousel && slider.active.last) {\r\n if (slider.settings.mode === 'horizontal') {\r\n // get the last child position\r\n lastChild = slider.children.eq(slider.children.length - 1);\r\n position = lastChild.position();\r\n // calculate the position of the last slide\r\n moveBy = slider.viewport.width() - lastChild.outerWidth();\r\n } else {\r\n // get last showing index position\r\n lastShowingIndex = slider.children.length - slider.settings.minSlides;\r\n position = slider.children.eq(lastShowingIndex).position();\r\n }\r\n // horizontal carousel, going previous while on first slide (infiniteLoop mode)\r\n } else if (slider.carousel && slider.active.last && direction === 'prev') {\r\n // get the last child position\r\n eq = slider.settings.moveSlides === 1 ? slider.settings.maxSlides - getMoveBy() : ((getPagerQty() - 1) * getMoveBy()) - (slider.children.length - slider.settings.maxSlides);\r\n lastChild = el.children('.bx-clone').eq(eq);\r\n position = lastChild.position();\r\n // if infinite loop and \"Next\" is clicked on the last slide\r\n } else if (direction === 'next' && slider.active.index === 0) {\r\n // get the last clone position\r\n position = el.find('> .bx-clone').eq(slider.settings.maxSlides).position();\r\n slider.active.last = false;\r\n // normal non-zero requests\r\n } else if (slideIndex >= 0) {\r\n //parseInt is applied to allow floats for slides/page\r\n requestEl = slideIndex * parseInt(getMoveBy());\r\n position = slider.children.eq(requestEl).position();\r\n }\r\n\r\n /* If the position doesn't exist\r\n * (e.g. if you destroy the slider on a next click),\r\n * it doesn't throw an error.\r\n */\r\n if (typeof (position) !== 'undefined') {\r\n value = slider.settings.mode === 'horizontal' ? -(position.left - moveBy) : -position.top;\r\n // plugin values to be animated\r\n setPositionProperty(value, 'slide', slider.settings.speed);\r\n }\r\n slider.working = false;\r\n }\r\n if (slider.settings.ariaHidden) { applyAriaHiddenAttributes(slider.active.index * getMoveBy()); }\r\n };\r\n\r\n /**\r\n * Transitions to the next slide in the show\r\n */\r\n el.goToNextSlide = function () {\r\n // if infiniteLoop is false and last page is showing, disregard call\r\n if (!slider.settings.infiniteLoop && slider.active.last) { return; }\r\n if (slider.working === true) { return; }\r\n var pagerIndex = parseInt(slider.active.index) + 1;\r\n el.goToSlide(pagerIndex, 'next');\r\n };\r\n\r\n /**\r\n * Transitions to the prev slide in the show\r\n */\r\n el.goToPrevSlide = function () {\r\n // if infiniteLoop is false and last page is showing, disregard call\r\n if (!slider.settings.infiniteLoop && slider.active.index === 0) { return; }\r\n if (slider.working === true) { return; }\r\n var pagerIndex = parseInt(slider.active.index) - 1;\r\n el.goToSlide(pagerIndex, 'prev');\r\n };\r\n\r\n /**\r\n * Starts the auto show\r\n *\r\n * @param preventControlUpdate (boolean)\r\n * - if true, auto controls state will not be updated\r\n */\r\n el.startAuto = function (preventControlUpdate) {\r\n // if an interval already exists, disregard call\r\n if (slider.interval) { return; }\r\n // create an interval\r\n slider.interval = setInterval(function () {\r\n if (slider.settings.autoDirection === 'next') {\r\n el.goToNextSlide();\r\n } else {\r\n el.goToPrevSlide();\r\n }\r\n }, slider.settings.pause);\r\n //allback for when the auto rotate status changes\r\n slider.settings.onAutoChange.call(el, true);\r\n // if auto controls are displayed and preventControlUpdate is not true\r\n if (slider.settings.autoControls && preventControlUpdate !== true) { updateAutoControls('stop'); }\r\n };\r\n\r\n /**\r\n * Stops the auto show\r\n *\r\n * @param preventControlUpdate (boolean)\r\n * - if true, auto controls state will not be updated\r\n */\r\n el.stopAuto = function (preventControlUpdate) {\r\n // if slider is auto paused, just clear that state\r\n if (slider.autoPaused) slider.autoPaused = false;\r\n // if no interval exists, disregard call\r\n if (!slider.interval) { return; }\r\n // clear the interval\r\n clearInterval(slider.interval);\r\n slider.interval = null;\r\n //allback for when the auto rotate status changes\r\n slider.settings.onAutoChange.call(el, false);\r\n // if auto controls are displayed and preventControlUpdate is not true\r\n if (slider.settings.autoControls && preventControlUpdate !== true) { updateAutoControls('start'); }\r\n };\r\n\r\n /**\r\n * Returns current slide index (zero-based)\r\n */\r\n el.getCurrentSlide = function () {\r\n return slider.active.index;\r\n };\r\n\r\n /**\r\n * Returns current slide element\r\n */\r\n el.getCurrentSlideElement = function () {\r\n return slider.children.eq(slider.active.index);\r\n };\r\n\r\n /**\r\n * Returns a slide element\r\n * @param index (int)\r\n * - The index (zero-based) of the element you want returned.\r\n */\r\n el.getSlideElement = function (index) {\r\n return slider.children.eq(index);\r\n };\r\n\r\n /**\r\n * Returns number of slides in show\r\n */\r\n el.getSlideCount = function () {\r\n return slider.children.length;\r\n };\r\n\r\n /**\r\n * Return slider.working variable\r\n */\r\n el.isWorking = function () {\r\n return slider.working;\r\n };\r\n\r\n /**\r\n * Update all dynamic slider elements\r\n */\r\n el.redrawSlider = function () {\r\n // resize all children in ratio to new screen size\r\n slider.children.add(el.find('.bx-clone')).outerWidth(getSlideWidth());\r\n // adjust the height\r\n slider.viewport.css('height', getViewportHeight());\r\n // update the slide position\r\n if (!slider.settings.ticker) { setSlidePosition(); }\r\n // if active.last was true before the screen resize, we want\r\n // to keep it last no matter what screen size we end on\r\n if (slider.active.last) { slider.active.index = getPagerQty() - 1; }\r\n // if the active index (page) no longer exists due to the resize, simply set the index as last\r\n if (slider.active.index >= getPagerQty()) { slider.active.last = true; }\r\n // if a pager is being displayed and a custom pager is not being used, update it\r\n if (slider.settings.pager && !slider.settings.pagerCustom) {\r\n populatePager();\r\n updatePagerActive(slider.active.index);\r\n }\r\n if (slider.settings.ariaHidden) { applyAriaHiddenAttributes(slider.active.index * getMoveBy()); }\r\n };\r\n\r\n /**\r\n * Destroy the current instance of the slider (revert everything back to original state)\r\n */\r\n el.destroySlider = function () {\r\n // don't do anything if slider has already been destroyed\r\n if (!slider.initialized) { return; }\r\n slider.initialized = false;\r\n $('.bx-clone', this).remove();\r\n slider.children.each(function () {\r\n if ($(this).data('origStyle') !== undefined) {\r\n $(this).attr('style', $(this).data('origStyle'));\r\n } else {\r\n $(this).removeAttr('style');\r\n }\r\n });\r\n if ($(this).data('origStyle') !== undefined) {\r\n this.attr('style', $(this).data('origStyle'));\r\n } else {\r\n $(this).removeAttr('style');\r\n }\r\n $(this).unwrap().unwrap();\r\n if (slider.controls.el) { slider.controls.el.remove(); }\r\n if (slider.controls.next) { slider.controls.next.remove(); }\r\n if (slider.controls.prev) { slider.controls.prev.remove(); }\r\n if (slider.pagerEl && slider.settings.controls && !slider.settings.pagerCustom) { slider.pagerEl.remove(); }\r\n $('.bx-caption', this).remove();\r\n if (slider.controls.autoEl) { slider.controls.autoEl.remove(); }\r\n clearInterval(slider.interval);\r\n if (slider.settings.responsive) { $(window).off('resize', resizeWindow); }\r\n if (slider.settings.keyboardEnabled) { $(document).off('keydown', keyPress); }\r\n //remove self reference in data\r\n $(this).removeData('bxSlider');\r\n // remove global window handlers\r\n $(window).off('blur', windowBlurHandler).off('focus', windowFocusHandler);\r\n };\r\n\r\n /**\r\n * Reload the slider (revert all DOM changes, and re-initialize)\r\n */\r\n el.reloadSlider = function (settings) {\r\n if (settings !== undefined) { options = settings; }\r\n el.destroySlider();\r\n init();\r\n //store reference to self in order to access public functions later\r\n $(el).data('bxSlider', this);\r\n };\r\n\r\n init();\r\n\r\n $(el).data('bxSlider', this);\r\n\r\n // returns the current jQuery object\r\n return this;\r\n };\r\n\r\n})(jQuery);","(function ($) {\r\n $.fn.equalHeights = function () {\r\n var h = 0;\r\n var $elems = this.css('height', '').each(function () {\r\n h = Math.max(h, $(this).outerHeight());\r\n });\r\n return !h ? $elems : $elems.outerHeight(h);\r\n };\r\n})(jQuery);\r\n","/*\r\n* PragmaticPlayer.Js\r\n*\r\n* @package PragmaticPlayer.Js\r\n* @author $Author: sheiko $\r\n* @version $Id: jquery.pplayer.js, v 0.1 $\r\n* @license MIT\r\n* @copyright (c) Dmitry Sheiko http://www.dsheiko.com\r\n*/\r\n(function( window, undefined ){\r\n \"use strict\";\r\n var $ = window.jQuery,\r\n document = window.document,\r\n _instanceCounter = 0,\r\n // @link https://developers.google.com/youtube/js_api_reference\r\n YoutubeApi = (function() {\r\n var _isLoadRequested = false;\r\n return {\r\n loadAsynchronously: function() {\r\n _isLoadRequested = true;\r\n var tag = document.createElement('script');\r\n tag.src = \"//www.youtube.com/iframe_api\";\r\n var firstScriptTag = document.getElementsByTagName('script')[0];\r\n firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);\r\n },\r\n isLoadRequested: function() {\r\n return _isLoadRequested;\r\n },\r\n isReady: function() {\r\n return window.YT !== undefined && window.YT.Player !== undefined;\r\n },\r\n ready: function( callback ) {\r\n var timerFn, timerRef, that = this;\r\n (function(delay){\r\n timerRef = setTimeout( timerFn = function(){\r\n if ( that.isReady() ) {\r\n callback( window.YT );\r\n } else {\r\n timerRef = setTimeout( timerFn, delay );\r\n }\r\n\r\n }, delay );\r\n })( 550 );\r\n }\r\n }\r\n }()),\r\n ApiAdapter = {\r\n Youtube : function( settings, handlers ){\r\n var _player,\r\n _renderUI = function( api ) {\r\n try {\r\n var videoElId = settings.boundingBox.find(\"div.pp-video\").attr(\"id\");\r\n _player = new api.Player(videoElId, {\r\n videoId: settings.youtubeVideoId,\r\n width: 854,\r\n height: 480,\r\n playerVars: {\r\n controls: 0,\r\n autoplay: settings.autoplay,\r\n showinfo: settings.showinfo,\r\n hd: settings.hd,\r\n html5: 1,\r\n wmode: \"transparent\",\r\n rel: 0,\r\n origin: settings.origin\r\n },\r\n events: {\r\n 'onReady': handlers.onReady,\r\n 'onStateChange': handlers.onStateChange\r\n }\r\n });\r\n } catch( e ) {\r\n window.console && console.log( e );\r\n settings.boundingBox.html( '' );\r\n }\r\n };\r\n\r\n YoutubeApi.isLoadRequested() || YoutubeApi.loadAsynchronously();\r\n YoutubeApi.ready(_renderUI);\r\n\r\n return {\r\n state: {\r\n UNSTARTED: -1,\r\n ENDED: 0,\r\n PLAYING: 1,\r\n PAUSED: 2,\r\n BUFFERING: 3,\r\n CUED: 5\r\n },\r\n getTarget: function() {\r\n return _player;\r\n },\r\n play: function() {\r\n _player.playVideo();\r\n },\r\n stop: function() {\r\n _player.stopVideo();\r\n },\r\n pause: function() {\r\n _player.pauseVideo();\r\n },\r\n mute: function( flag ) {\r\n _player[ flag ? \"mute\" : \"unMute\" ]();\r\n },\r\n currentTime: function( curTime ) {\r\n curTime !== undefined && _player.seekTo( curTime, true );\r\n return _player.getCurrentTime();\r\n },\r\n duration: function() {\r\n return _player.getDuration();\r\n }\r\n }\r\n },\r\n VideoElement : function( settings, handlers ){\r\n var _player = settings.boundingBox.find(\"video\").get(0);\r\n _player.onloadstart = function( e ) {\r\n handlers.onReady( e );\r\n e.data = -1;\r\n handlers.onStateChange( e );\r\n };\r\n _player.onplay = function( e ) {\r\n e.data = 1;\r\n handlers.onStateChange( e );\r\n };\r\n _player.onpause = function( e ) {\r\n e.data = 2;\r\n handlers.onStateChange( e );\r\n };\r\n return {\r\n state: {\r\n UNSTARTED: -1,\r\n ENDED: 0,\r\n PLAYING: 1,\r\n PAUSED: 2,\r\n BUFFERING: 3,\r\n CUED: 5\r\n },\r\n play: function() {\r\n _player.play();\r\n },\r\n stop: function() {\r\n _player.stop();\r\n },\r\n pause: function() {\r\n _player.pause();\r\n },\r\n mute: function( flag ) {\r\n _player.mue( flag );\r\n },\r\n currentTime: function( curTime ) {\r\n if (curTime !== undefined) {\r\n _player.currentTime = curTime;\r\n }\r\n return _player.currentTime;\r\n },\r\n duration: function() {\r\n return _player.duration;\r\n }\r\n }\r\n }\r\n },\r\n pPlayer = function( settings ) {\r\n\r\n var tpls = {\r\n playpause:\r\n '
    ' +\r\n ' ' +\r\n ' ' +\r\n '
    ',\r\n progress:\r\n '
    ',\r\n quality:\r\n '
    ',\r\n timer:\r\n '
    00:00 | 00:00
    ',\r\n mute:\r\n '
    ' +\r\n ' ' +\r\n ' ' +\r\n '
    ',\r\n fullscreen:\r\n '
    ' +\r\n ' ' +\r\n ' ' +\r\n '
    '\r\n },\r\n adapter,\r\n $boundingBox = settings.boundingBox,\r\n $pauseBtn,\r\n $playBtn,\r\n $overBtn,\r\n $muteBtn,\r\n $unmuteBtn,\r\n $enterFullscreenBtn,\r\n $leaveFullscreenBtn,\r\n $timer,\r\n $progressBar,\r\n $progressBarCursor,\r\n $quality,\r\n playingTrigger;\r\n\r\n settings = $.extend({\r\n boundingBox: null,\r\n youtubeVideoId: undefined,\r\n showinfo: 1,\r\n autoplay: 1,\r\n hd: 1,\r\n origin: undefined,\r\n adapter: undefined, // \"VideoElement\" or \"Youtube\"\r\n features: [\r\n \"playpause\",\r\n \"progress\",\r\n settings.adapter === \"Youtube\" ? \"quality\" : null,\r\n \"timer\",\r\n \"mute\",\r\n \"fullscreen\" ],\r\n resizeVideo: false,\r\n afterInit: null\r\n }, settings);\r\n\r\n return {\r\n getPlayerHtml: function() {\r\n var html = '';\r\n $.each(settings.features, function( inx, feature ) {\r\n feature && ( html += tpls[ feature ] );\r\n });\r\n return '
    ' +\r\n '
    ' + html +\r\n '
    ' +\r\n '
    ';\r\n },\r\n hasPlayerVideoElements: function() {\r\n return $boundingBox.find(\"div.pp-video > video\").length;\r\n },\r\n hasBrowserVideoElementSupport: (function() {\r\n var inputElem = document.createElement('video');\r\n return inputElem.play !== undefined;\r\n }()),\r\n hasDivXWebPlayerOn: function() {\r\n var divx = $( 'embed[type=\"video/divx\"]' );\r\n return divx && divx.length && divx.attr( 'mode' ) == 'null';\r\n },\r\n fallbackOnDivX: function() {\r\n var that = this;\r\n window.setTimeout(function(){\r\n if ( that.hasDivXWebPlayerOn() ) {\r\n $boundingBox.html( \"\" );\r\n $boundingBox.pPlayer(settings);\r\n }\r\n }, 500);\r\n },\r\n renderUI: function() {\r\n var that = this,\r\n apapterClass,\r\n videoElId = \"pp-player\" + _instanceCounter;\r\n\r\n playingTrigger = false;\r\n\r\n $boundingBox.html( function(inx, html){\r\n return '
    ' + html + '
    ' + that.getPlayerHtml()\r\n });\r\n $boundingBox\r\n .addClass(\"ppVideoWrapper\")\r\n .find(\"div.pp-video\").attr(\"id\", videoElId);\r\n\r\n $pauseBtn = $boundingBox.find('.controls button.pause');\r\n $playBtn = $boundingBox.find('.controls button.play');\r\n $overBtn = $boundingBox.find('.overlay');\r\n $muteBtn = $boundingBox.find('.controls button.mute');\r\n $unmuteBtn = $boundingBox.find('.controls button.unmute');\r\n $quality = $boundingBox.find('.controls .quality');\r\n $enterFullscreenBtn = $boundingBox.find('.controls button.enterFullscreen');\r\n $leaveFullscreenBtn = $boundingBox.find('.controls button.leaveFullscreen');\r\n $leaveFullscreenBtn.show =\r\n $overBtn.show =\r\n $pauseBtn.show =\r\n $playBtn.show =\r\n $muteBtn.show =\r\n $unmuteBtn.show = function() {\r\n $( this ).css({\"display\": \"block\"});\r\n }\r\n\r\n $timer = $boundingBox.find('.controls .timer');\r\n $progressBar = $boundingBox.find('.controls .progressBar');\r\n $progressBarCursor = $boundingBox.find('.controls .progressBar > div');\r\n\r\n if ( settings.adapter ) {\r\n apapterClass = settings.adapter;\r\n } else {\r\n apapterClass = this.hasPlayerVideoElements() ? \"VideoElement\" : \"Youtube\";\r\n }\r\n\r\n if ( !this.hasBrowserVideoElementSupport ) {\r\n apapterClass = \"Youtube\";\r\n } else {\r\n this.fallbackOnDivX();\r\n }\r\n\r\n if ( apapterClass === \"Youtube\" && settings.youtubeVideoId === undefined ) {\r\n throw new\r\n Error( \"Parameter youtubeVideoId is mondatory to play a youtube video\" );\r\n }\r\n\r\n adapter = new ApiAdapter[ apapterClass ](settings, {\r\n onReady: function( e ) {\r\n that.startTimer();\r\n that.onPlayerReady();\r\n },\r\n onStateChange: function( e ) {\r\n if ( e.data === adapter.state.PLAYING ) {\r\n $playBtn.hide();\r\n $pauseBtn.show();\r\n $overBtn.hide();\r\n playingTrigger || that.onPlaying();\r\n playingTrigger = true;\r\n } else {\r\n $overBtn.show();\r\n $playBtn.show();\r\n $pauseBtn.hide()\r\n }\r\n }\r\n });\r\n\r\n return this;\r\n },\r\n syncUI: function() {\r\n $pauseBtn.on(\"click\", $.proxy(this.pauseVideo, this));\r\n $playBtn.on(\"click\", $.proxy(this.playVideo, this));\r\n $overBtn.on(\"click\", $.proxy(this.playVideo, this));\r\n $muteBtn.on(\"click\", $.proxy(this.muteVideo, this));\r\n $unmuteBtn.on(\"click\", $.proxy(this.unmuteVideo, this));\r\n $progressBar.on(\"click\", $.proxy(this.handleProgressBar, this));\r\n $enterFullscreenBtn.on(\"click\", $.proxy(this.enterFullscreen, this));\r\n $leaveFullscreenBtn.on(\"click\", $.proxy(this.leaveFullscreen, this));\r\n\r\n $( document ).on( \"mozfullscreenchange\", $.proxy(this.handleFullscreenChange, this));\r\n $( document ).on( \"webkitfullscreenchange\", $.proxy(this.handleFullscreenChange, this));\r\n $( document ).on( \"fullscreenchange\", $.proxy(this.handleFullscreenChange, this));\r\n },\r\n onPlaying: function() {\r\n if ( adapter.getTarget === undefined ) {\r\n return;\r\n }\r\n this.renderQualityOptions();\r\n $boundingBox.find('.quality').on('click', 'li', function() {\r\n $(this).siblings().removeClass('selected').end().addClass('selected');\r\n adapter.getTarget().setPlaybackQuality($(this).data('value'));\r\n });\r\n },\r\n renderQualityOptions: function() {\r\n if ( adapter.getTarget === undefined ) {\r\n return;\r\n }\r\n var html = '
      ',\r\n qLevelMap = {\r\n small: \"240p\",\r\n medium: \"360p\",\r\n large: \"480p\",\r\n hd720: \"720p\",\r\n hd1080: \"1080p\",\r\n highres: \"highres\"\r\n },\r\n options = adapter.getTarget().getAvailableQualityLevels(),\r\n level = adapter.getTarget().getPlaybackQuality();\r\n\r\n $.each(options, function(inx, val) {\r\n html += '
    • '\r\n + ( qLevelMap[ val ] || val ) + '
    • ';\r\n });\r\n html += '
    ';\r\n\r\n return $( html ).appendTo( $quality );\r\n },\r\n getTimeByFloat: function( ctFloat ) {\r\n var t = {\r\n hours: 0,\r\n min: 0,\r\n sec: 0\r\n },\r\n minFloat = ctFloat / 60,\r\n hourFloat = minFloat / 60;\r\n\r\n if ( ctFloat ) {\r\n t.sec = Math.floor( ctFloat ); // if less than 60 sec\r\n t.min = Math.floor( minFloat ); // if less than 60 min\r\n t.hours = Math.floor( hourFloat );\r\n if ( t.hours ) {\r\n t.min = Math.floor( minFloat - ( t.hours * 60 ) );\r\n }\r\n if ( t.hours || t.min ) {\r\n t.sec = Math.floor( ctFloat - ( t.min * 60 ) - ( t.hours * 60 * 60 ) );\r\n }\r\n }\r\n return t;\r\n },\r\n playVideo: function() {\r\n $overBtn.hide();\r\n $playBtn.hide();\r\n $pauseBtn.show();\r\n adapter.play();\r\n },\r\n stopVideo: function() {\r\n adapter.stop();\r\n },\r\n pauseVideo: function() {\r\n $overBtn.show();\r\n $playBtn.show();\r\n $pauseBtn.hide();\r\n adapter.pause();\r\n },\r\n muteVideo : function() {\r\n $unmuteBtn.show();\r\n $muteBtn.hide();\r\n adapter.mute( true );\r\n },\r\n unmuteVideo : function() {\r\n $unmuteBtn.hide();\r\n $muteBtn.show();\r\n adapter.mute( false );\r\n },\r\n handleFullscreenChange: function() {\r\n if ((document.fullScreenElement && document.fullScreenElement !== null) ||\r\n (!document.mozFullScreen && !document.webkitIsFullScreen)) {\r\n this.leaveFullscreen();\r\n } else {\r\n this.enterFullscreen();\r\n }\r\n },\r\n enterFullscreen: function() {\r\n $(\"body\").addClass( \"fullscreen\" );\r\n $enterFullscreenBtn.hide();\r\n $leaveFullscreenBtn.show();\r\n var elem = $boundingBox.get(0);\r\n if (elem.requestFullScreen) {\r\n elem.requestFullScreen();\r\n } else if (elem.mozRequestFullScreen) {\r\n elem.mozRequestFullScreen();\r\n } else if (elem.webkitRequestFullScreen) {\r\n elem.webkitRequestFullScreen();\r\n }\r\n },\r\n leaveFullscreen: function() {\r\n $(\"body\").removeClass( \"fullscreen\" );\r\n $enterFullscreenBtn.show();\r\n $leaveFullscreenBtn.hide();\r\n if (document.cancelFullScreen) {\r\n document.cancelFullScreen();\r\n } else if (document.mozCancelFullScreen) {\r\n document.mozCancelFullScreen();\r\n } else if (document.webkitCancelFullScreen) {\r\n document.webkitCancelFullScreen();\r\n }\r\n },\r\n handleProgressBar: function( e ) {\r\n var offset, percent, newCurTime;\r\n e.preventDefault();\r\n offset = e.clientX - $progressBar.offset().left;\r\n percent = Math.floor(offset / ($progressBar.width() / 100));\r\n newCurTime = adapter.duration() / 100 * percent;\r\n this.updateProgressBarCursor( percent );\r\n adapter.currentTime( newCurTime );\r\n },\r\n updateTimer : function( line ) {\r\n $timer.html( line );\r\n },\r\n updateProgressBarCursor : function( progressPercents ) {\r\n $progressBarCursor.css({\"width\": progressPercents + \"%\"});\r\n },\r\n onPlayerReady : function() {\r\n /*if (settings.resizeVideo) {\r\n $.ajax({\r\n target: $boundingBox,\r\n type: 'GET',\r\n url: '//gdata.youtube.com/feeds/api/videos/' + settings.youtubeVideoId + '?v=2&alt=jsonc',\r\n success: function(data) {\r\n if (!data.data.aspectRatio) {\r\n this.target.addClass('no-wide');\r\n }\r\n if (typeof settings.afterInit === \"function\") {\r\n settings.afterInit.apply(this, [$boundingBox]);\r\n }\r\n }\r\n });\r\n } else {*/\r\n if (typeof settings.afterInit === \"function\") {\r\n settings.afterInit.apply(this, [$boundingBox]);\r\n }\r\n /*}*/\r\n },\r\n startTimer : function() {\r\n var timerFn, timerRef, timerOut = null, that = this,\r\n sprintf02d = function( val ) {\r\n val.toString().length < 2 && ( val = \"0\" + val ); // 5 => \"05\"\r\n return val;\r\n };\r\n (function(delay){\r\n timerRef = setTimeout( timerFn = function(){\r\n if ( adapter.currentTime ) {\r\n var curTime = that.getTimeByFloat( adapter.currentTime() ),\r\n duration = that.getTimeByFloat( adapter.duration() ),\r\n progressPercents = Math.floor( (\r\n adapter.currentTime() * 100) / adapter.duration() ),\r\n line;\r\n if ( duration.min ) {\r\n curTime.sec = sprintf02d( curTime.sec );\r\n duration.sec = sprintf02d( duration.sec );\r\n }\r\n if ( duration.hours ) {\r\n curTime.min = sprintf02d( curTime.min );\r\n duration.min = sprintf02d( duration.min );\r\n }\r\n line = ( duration.hours ? curTime.hours + \":\" : \"\" )\r\n + ( duration.min ? curTime.min + \":\" : \"00:\" )\r\n + curTime.sec\r\n + \" | \"\r\n + ( duration.hours ? duration.hours + \":\" : \"\" )\r\n + ( duration.min ? duration.min + \":\" : \"00:\" )\r\n + duration.sec;\r\n\r\n if ( timerOut !== line && !isNaN(duration.sec) ) {\r\n that.updateTimer( line );\r\n that.updateProgressBarCursor( progressPercents );\r\n }\r\n timerOut = line;\r\n }\r\n if ($boundingBox.hasClass( \"ppVideoWrapper\" )) {\r\n timerRef = setTimeout( timerFn, delay );\r\n }\r\n }, delay );\r\n })( 500 );\r\n }\r\n }\r\n };\r\n $.fn.pPlayer = function( settings ) {\r\n var player = new pPlayer($.extend({\r\n boundingBox: $( this )\r\n }, settings));\r\n _instanceCounter++;\r\n player.renderUI().syncUI();\r\n return player;\r\n }\r\n\r\n}( window ));","/*!\r\n\tZoom 1.7.20\r\n\tlicense: MIT\r\n\thttp://www.jacklmoore.com/zoom\r\n*/\r\n(function ($) {\r\n\tvar defaults = {\r\n\t\turl: false,\r\n\t\tcallback: false,\r\n\t\ttarget: false,\r\n\t\tduration: 120,\r\n\t\tscale: 1,\r\n\t\ton: 'mouseover', // other options: grab, click, toggle\r\n\t\ttouch: true, // enables a touch fallback\r\n\t\tonZoomIn: false,\r\n\t\tonZoomOut: false,\r\n\t\tmagnify: 1\r\n\t};\r\n\r\n\t// Core Zoom Logic, independent of event listeners.\r\n\t$.zoom = function(target, source, img, magnify, scale) {\r\n\t\tvar targetHeight,\r\n\t\t\ttargetWidth,\r\n\t\t\tsourceHeight,\r\n\t\t\tsourceWidth,\r\n\t\t\txRatio,\r\n\t\t\tyRatio,\r\n\t\t\toffset,\r\n\t\t\t$target = $(target),\r\n\t\t\tposition = $target.css('position'),\r\n\t\t\t$source = $(source);\r\n\r\n\t\t// The parent element needs positioning so that the zoomed element can be correctly positioned within.\r\n\t\ttarget.style.position = /(absolute|fixed)/.test(position) ? position : 'relative';\r\n\t\ttarget.style.overflow = 'hidden';\r\n\t\timg.style.width = img.style.height = '';\r\n\r\n\t\t$(img)\r\n\t\t\t.addClass('zoomImg')\r\n\t\t\t.css({\r\n\t\t\t\tposition: 'absolute',\r\n\t\t\t\ttop: 0,\r\n\t\t\t\tleft: 0,\r\n\t\t\t\topacity: 0,\r\n\t\t\t\twidth: img.width * magnify,\r\n\t\t\t\theight: img.height * magnify,\r\n\t\t\t\tborder: 'none',\r\n\t\t\t\tmaxWidth: 'none',\r\n\t\t\t\tmaxHeight: 'none'\r\n\t\t\t})\r\n\t\t\t.appendTo(target);\r\n\r\n\t\treturn {\r\n\t\t\tinit: function() {\r\n\t\t\t\ttargetWidth = $target.outerWidth();\r\n\t\t\t\ttargetHeight = $target.outerHeight();\r\n\r\n\t\t\t\tif (source === target) {\r\n\t\t\t\t\tsourceWidth = targetWidth * scale;\r\n\t\t\t\t\tsourceHeight = targetHeight * scale;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tsourceWidth = $source.outerWidth() * scale;\r\n\t\t\t\t\tsourceHeight = $source.outerHeight() * scale;\r\n\t\t\t\t}\r\n\r\n\t\t\t\txRatio = (img.width - targetWidth) / sourceWidth;\r\n\t\t\t\tyRatio = (img.height - targetHeight) / sourceHeight;\r\n\r\n\t\t\t\toffset = $source.offset();\r\n\t\t\t},\r\n\t\t\tmove: function (e) {\r\n\t\t\t\tvar left = (e.pageX - offset.left),\r\n\t\t\t\t\ttop = (e.pageY - offset.top);\r\n\t\t\t\ttop = Math.max(Math.min(top, sourceHeight), 0);\r\n\t\t\t\tleft = Math.max(Math.min(left, sourceWidth), 0);\r\n\r\n\t\t\t\timg.style.left = (left * -xRatio) + 'px';\r\n\t\t\t\timg.style.top = (top * -yRatio) + 'px';\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\r\n\t$.fn.zoom = function (options) {\r\n\t\treturn this.each(function () {\r\n\t\t\tvar\r\n\t\t\tsettings = $.extend({}, defaults, options || {}),\r\n\t\t\t//target will display the zoomed image\r\n\t\t\ttarget = settings.target && $(settings.target)[0] || this,\r\n\t\t\t//source will provide zoom location info (thumbnail)\r\n\t\t\tsource = this,\r\n\t\t\t$source = $(source),\r\n\t\t\timg = document.createElement('img'),\r\n\t\t\t$img = $(img),\r\n\t\t\tmousemove = 'mousemove.zoom',\r\n\t\t\tclicked = false,\r\n\t\t\ttouched = false;\r\n\r\n\t\t\t// If a url wasn't specified, look for an image element.\r\n\t\t\tif (!settings.url) {\r\n\t\t\t\tvar srcElement = source.querySelector('img');\r\n\t\t\t\tif (srcElement) {\r\n\t\t\t\t\tsettings.url = srcElement.getAttribute('data-src') || srcElement.currentSrc || srcElement.src;\r\n\t\t\t\t}\r\n\t\t\t\tif (!settings.url) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t$source.one('zoom.destroy', function(position, overflow){\r\n\t\t\t\t$source.off('.zoom');\r\n\t\t\t\ttarget.style.position = position;\r\n\t\t\t\ttarget.style.overflow = overflow;\r\n\t\t\t\timg.onload = null;\r\n\t\t\t\t$img.remove();\r\n\t\t\t}.bind(this, target.style.position, target.style.overflow));\r\n\r\n\t\t\timg.onload = function () {\r\n\t\t\t\tvar zoom = $.zoom(target, source, img, settings.magnify, settings.scale);\r\n\r\n\t\t\t\tfunction start(e) {\r\n\t\t\t\t\t$img.data('started', true);\r\n\t\t\t\t\tzoom.init();\r\n\t\t\t\t\tzoom.move(e);\r\n\r\n\t\t\t\t\t// Skip the fade-in for IE8 and lower since it chokes on fading-in\r\n\t\t\t\t\t// and changing position based on mousemovement at the same time.\r\n\t\t\t\t\t$img.stop()\r\n\t\t\t\t\t.fadeTo($.support.opacity ? settings.duration : 0, 1, $.isFunction(settings.onZoomIn) ? settings.onZoomIn.call(img) : false);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tfunction stop() {\r\n\t\t\t\t\t$img.stop()\r\n\t\t\t\t\t.fadeTo(settings.duration, 0, $.isFunction(settings.onZoomOut) ? settings.onZoomOut.call(img) : false);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tfunction move(e) {\r\n\t\t\t\t\tif (!$img.data('started')) {\r\n\t\t\t\t\t\tstart(e);\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tzoom.move(e);\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Mouse events\r\n\t\t\t\tzoom.init(); // Preemptively call init because IE7 will fire the mousemove handler before the hover handler.\r\n\r\n\t\t\t\t$source\r\n\t\t\t\t\t.on('mouseenter.zoom', start)\r\n\t\t\t\t\t.on('mouseleave.zoom', stop)\r\n\t\t\t\t\t.on(mousemove, move);\r\n\r\n\t\t\t\t// Touch fallback\r\n\t\t\t\tif (settings.touch) {\r\n\t\t\t\t\t$source\r\n\t\t\t\t\t\t.on('touchstart.zoom', function (e) {\r\n\t\t\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\t\t\tif (touched) {\r\n\t\t\t\t\t\t\t\ttouched = false;\r\n\t\t\t\t\t\t\t\tstop();\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\ttouched = true;\r\n\t\t\t\t\t\t\t\tstart( e.originalEvent.touches[0] || e.originalEvent.changedTouches[0] );\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t})\r\n\t\t\t\t\t\t.on('touchmove.zoom', function (e) {\r\n\t\t\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\t\t\tzoom.move( e.originalEvent.touches[0] || e.originalEvent.changedTouches[0] );\r\n\t\t\t\t\t\t})\r\n\t\t\t\t\t\t.on('touchend.zoom', function (e) {\r\n\t\t\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\t\t\tif (touched) {\r\n\t\t\t\t\t\t\t\ttouched = false;\r\n\t\t\t\t\t\t\t\tstop();\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t});\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif ($.isFunction(settings.callback)) {\r\n\t\t\t\t\tsettings.callback.call(img);\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\timg.setAttribute('role', 'presentation');\r\n\t\t\timg.src = settings.url;\r\n\t\t});\r\n\t};\r\n\r\n\t$.fn.zoom.defaults = defaults;\r\n}(window.jQuery));\r\n","!function (e) { \"use strict\"; function t(e, i, a) { var o, n = document.createElement(\"img\"); return n.onerror = function (o) { return t.onerror(n, o, e, i, a) }, n.onload = function (o) { return t.onload(n, o, e, i, a) }, \"string\" == typeof e ? (t.fetchBlob(e, function (i) { i ? (e = i, o = t.createObjectURL(e)) : (o = e, a && a.crossOrigin && (n.crossOrigin = a.crossOrigin)), n.src = o }, a), n) : t.isInstanceOf(\"Blob\", e) || t.isInstanceOf(\"File\", e) ? (o = n._objectURL = t.createObjectURL(e)) ? (n.src = o, n) : t.readFile(e, function (e) { var t = e.target; t && t.result ? n.src = t.result : i && i(e) }) : void 0 } function i(e, i) { !e._objectURL || i && i.noRevoke || (t.revokeObjectURL(e._objectURL), delete e._objectURL) } var a = e.createObjectURL && e || e.URL && URL.revokeObjectURL && URL || e.webkitURL && webkitURL; t.fetchBlob = function (e, t, i) { t() }, t.isInstanceOf = function (e, t) { return Object.prototype.toString.call(t) === \"[object \" + e + \"]\" }, t.transform = function (e, t, i, a, o) { i(e, o) }, t.onerror = function (e, t, a, o, n) { i(e, n), o && o.call(e, t) }, t.onload = function (e, a, o, n, r) { i(e, r), n && t.transform(e, r, n, o, {}) }, t.createObjectURL = function (e) { return !!a && a.createObjectURL(e) }, t.revokeObjectURL = function (e) { return !!a && a.revokeObjectURL(e) }, t.readFile = function (t, i, a) { if (e.FileReader) { var o = new FileReader; if (o.onload = o.onerror = i, a = a || \"readAsDataURL\", o[a]) return o[a](t), o } return !1 }, \"function\" == typeof define && define.amd ? define(function () { return t }) : \"object\" == typeof module && module.exports ? module.exports = t : e.loadImage = t }(\"undefined\" != typeof window && window || this), function (e) { \"use strict\"; \"function\" == typeof define && define.amd ? define([\"./load-image\"], e) : e(\"object\" == typeof module && module.exports ? require(\"./load-image\") : window.loadImage) }(function (e) { \"use strict\"; var t = e.transform; e.transform = function (i, a, o, n, r) { t.call(e, e.scale(i, a, r), a, o, n, r) }, e.transformCoordinates = function () { }, e.getTransformedOptions = function (e, t) { var i, a, o, n, r = t.aspectRatio; if (!r) return t; i = {}; for (a in t) t.hasOwnProperty(a) && (i[a] = t[a]); return i.crop = !0, o = e.naturalWidth || e.width, n = e.naturalHeight || e.height, o / n > r ? (i.maxWidth = n * r, i.maxHeight = n) : (i.maxWidth = o, i.maxHeight = o / r), i }, e.renderImageToCanvas = function (e, t, i, a, o, n, r, s, l, d) { return e.getContext(\"2d\").drawImage(t, i, a, o, n, r, s, l, d), e }, e.hasCanvasOption = function (e) { return e.canvas || e.crop || !!e.aspectRatio }, e.scale = function (t, i, a) { function o() { var e = Math.max((l || v) / v, (d || P) / P); e > 1 && (v *= e, P *= e) } function n() { var e = Math.min((r || v) / v, (s || P) / P); e < 1 && (v *= e, P *= e) } i = i || {}; var r, s, l, d, c, u, f, g, h, m, p, S = document.createElement(\"canvas\"), b = t.getContext || e.hasCanvasOption(i) && S.getContext, y = t.naturalWidth || t.width, x = t.naturalHeight || t.height, v = y, P = x; if (b && (f = (i = e.getTransformedOptions(t, i, a)).left || 0, g = i.top || 0, i.sourceWidth ? (c = i.sourceWidth, void 0 !== i.right && void 0 === i.left && (f = y - c - i.right)) : c = y - f - (i.right || 0), i.sourceHeight ? (u = i.sourceHeight, void 0 !== i.bottom && void 0 === i.top && (g = x - u - i.bottom)) : u = x - g - (i.bottom || 0), v = c, P = u), r = i.maxWidth, s = i.maxHeight, l = i.minWidth, d = i.minHeight, b && r && s && i.crop ? (v = r, P = s, (p = c / u - r / s) < 0 ? (u = s * c / r, void 0 === i.top && void 0 === i.bottom && (g = (x - u) / 2)) : p > 0 && (c = r * u / s, void 0 === i.left && void 0 === i.right && (f = (y - c) / 2))) : ((i.contain || i.cover) && (l = r = r || l, d = s = s || d), i.cover ? (n(), o()) : (o(), n())), b) { if ((h = i.pixelRatio) > 1 && (S.style.width = v + \"px\", S.style.height = P + \"px\", v *= h, P *= h, S.getContext(\"2d\").scale(h, h)), (m = i.downsamplingRatio) > 0 && m < 1 && v < c && P < u) for (; c * m > v;)S.width = c * m, S.height = u * m, e.renderImageToCanvas(S, t, f, g, c, u, 0, 0, S.width, S.height), f = 0, g = 0, c = S.width, u = S.height, (t = document.createElement(\"canvas\")).width = c, t.height = u, e.renderImageToCanvas(t, S, 0, 0, c, u, 0, 0, c, u); return S.width = v, S.height = P, e.transformCoordinates(S, i), e.renderImageToCanvas(S, t, f, g, c, u, 0, 0, v, P) } return t.width = v, t.height = P, t } }), function (e) { \"use strict\"; \"function\" == typeof define && define.amd ? define([\"./load-image\"], e) : e(\"object\" == typeof module && module.exports ? require(\"./load-image\") : window.loadImage) }(function (e) { \"use strict\"; var t = \"undefined\" != typeof Blob && (Blob.prototype.slice || Blob.prototype.webkitSlice || Blob.prototype.mozSlice); e.blobSlice = t && function () { return (this.slice || this.webkitSlice || this.mozSlice).apply(this, arguments) }, e.metaDataParsers = { jpeg: { 65505: [] } }, e.parseMetaData = function (t, i, a, o) { a = a || {}, o = o || {}; var n = this, r = a.maxMetaDataSize || 262144; !!(\"undefined\" != typeof DataView && t && t.size >= 12 && \"image/jpeg\" === t.type && e.blobSlice) && e.readFile(e.blobSlice.call(t, 0, r), function (t) { if (t.target.error) return console.log(t.target.error), void i(o); var r, s, l, d, c = t.target.result, u = new DataView(c), f = 2, g = u.byteLength - 4, h = f; if (65496 === u.getUint16(0)) { for (; f < g && ((r = u.getUint16(f)) >= 65504 && r <= 65519 || 65534 === r);) { if (s = u.getUint16(f + 2) + 2, f + s > u.byteLength) { console.log(\"Invalid meta data: Invalid segment size.\"); break } if (l = e.metaDataParsers.jpeg[r]) for (d = 0; d < l.length; d += 1)l[d].call(n, u, f, s, o, a); h = f += s } !a.disableImageHead && h > 6 && (c.slice ? o.imageHead = c.slice(0, h) : o.imageHead = new Uint8Array(c).subarray(0, h)) } else console.log(\"Invalid JPEG file: Missing JPEG marker.\"); i(o) }, \"readAsArrayBuffer\") || i(o) }, e.hasMetaOption = function (e) { return e && e.meta }; var i = e.transform; e.transform = function (t, a, o, n, r) { e.hasMetaOption(a) ? e.parseMetaData(n, function (r) { i.call(e, t, a, o, n, r) }, a, r) : i.apply(e, arguments) } }), function (e) { \"use strict\"; \"function\" == typeof define && define.amd ? define([\"./load-image\", \"./load-image-meta\"], e) : \"object\" == typeof module && module.exports ? e(require(\"./load-image\"), require(\"./load-image-meta\")) : e(window.loadImage) }(function (e) { \"use strict\"; \"undefined\" != typeof fetch && \"undefined\" != typeof Request && (e.fetchBlob = function (t, i, a) { if (e.hasMetaOption(a)) return fetch(new Request(t, a)).then(function (e) { return e.blob() }).then(i).catch(function (e) { console.log(e), i() }); i() }) }), function (e) { \"use strict\"; \"function\" == typeof define && define.amd ? define([\"./load-image\", \"./load-image-meta\"], e) : \"object\" == typeof module && module.exports ? e(require(\"./load-image\"), require(\"./load-image-meta\")) : e(window.loadImage) }(function (e) { \"use strict\"; e.ExifMap = function () { return this }, e.ExifMap.prototype.map = { Orientation: 274 }, e.ExifMap.prototype.get = function (e) { return this[e] || this[this.map[e]] }, e.getExifThumbnail = function (e, t, i) { var a, o, n; { if (i && !(t + i > e.byteLength)) { for (a = [], o = 0; o < i; o += 1)n = e.getUint8(t + o), a.push((n < 16 ? \"0\" : \"\") + n.toString(16)); return \"data:image/jpeg,%\" + a.join(\"%\") } console.log(\"Invalid Exif data: Invalid thumbnail data.\") } }, e.exifTagTypes = { 1: { getValue: function (e, t) { return e.getUint8(t) }, size: 1 }, 2: { getValue: function (e, t) { return String.fromCharCode(e.getUint8(t)) }, size: 1, ascii: !0 }, 3: { getValue: function (e, t, i) { return e.getUint16(t, i) }, size: 2 }, 4: { getValue: function (e, t, i) { return e.getUint32(t, i) }, size: 4 }, 5: { getValue: function (e, t, i) { return e.getUint32(t, i) / e.getUint32(t + 4, i) }, size: 8 }, 9: { getValue: function (e, t, i) { return e.getInt32(t, i) }, size: 4 }, 10: { getValue: function (e, t, i) { return e.getInt32(t, i) / e.getInt32(t + 4, i) }, size: 8 } }, e.exifTagTypes[7] = e.exifTagTypes[1], e.getExifValue = function (t, i, a, o, n, r) { var s, l, d, c, u, f, g = e.exifTagTypes[o]; if (g) { if (s = g.size * n, !((l = s > 4 ? i + t.getUint32(a + 8, r) : a + 8) + s > t.byteLength)) { if (1 === n) return g.getValue(t, l, r); for (d = [], c = 0; c < n; c += 1)d[c] = g.getValue(t, l + c * g.size, r); if (g.ascii) { for (u = \"\", c = 0; c < d.length && \"\\0\" !== (f = d[c]); c += 1)u += f; return u } return d } console.log(\"Invalid Exif data: Invalid data offset.\") } else console.log(\"Invalid Exif data: Invalid tag type.\") }, e.parseExifTag = function (t, i, a, o, n) { var r = t.getUint16(a, o); n.exif[r] = e.getExifValue(t, i, a, t.getUint16(a + 2, o), t.getUint32(a + 4, o), o) }, e.parseExifTags = function (e, t, i, a, o) { var n, r, s; if (i + 6 > e.byteLength) console.log(\"Invalid Exif data: Invalid directory offset.\"); else { if (n = e.getUint16(i, a), !((r = i + 2 + 12 * n) + 4 > e.byteLength)) { for (s = 0; s < n; s += 1)this.parseExifTag(e, t, i + 2 + 12 * s, a, o); return e.getUint32(r, a) } console.log(\"Invalid Exif data: Invalid directory size.\") } }, e.parseExifData = function (t, i, a, o, n) { if (!n.disableExif) { var r, s, l, d = i + 10; if (1165519206 === t.getUint32(i + 4)) if (d + 8 > t.byteLength) console.log(\"Invalid Exif data: Invalid segment size.\"); else if (0 === t.getUint16(i + 8)) { switch (t.getUint16(d)) { case 18761: r = !0; break; case 19789: r = !1; break; default: return void console.log(\"Invalid Exif data: Invalid byte alignment marker.\") }42 === t.getUint16(d + 2, r) ? (s = t.getUint32(d + 4, r), o.exif = new e.ExifMap, (s = e.parseExifTags(t, d, d + s, r, o)) && !n.disableExifThumbnail && (l = { exif: {} }, s = e.parseExifTags(t, d, d + s, r, l), l.exif[513] && (o.exif.Thumbnail = e.getExifThumbnail(t, d + l.exif[513], l.exif[514]))), o.exif[34665] && !n.disableExifSub && e.parseExifTags(t, d, d + o.exif[34665], r, o), o.exif[34853] && !n.disableExifGps && e.parseExifTags(t, d, d + o.exif[34853], r, o)) : console.log(\"Invalid Exif data: Missing TIFF marker.\") } else console.log(\"Invalid Exif data: Missing byte alignment offset.\") } }, e.metaDataParsers.jpeg[65505].push(e.parseExifData) }), function (e) { \"use strict\"; \"function\" == typeof define && define.amd ? define([\"./load-image\", \"./load-image-exif\"], e) : \"object\" == typeof module && module.exports ? e(require(\"./load-image\"), require(\"./load-image-exif\")) : e(window.loadImage) }(function (e) { \"use strict\"; e.ExifMap.prototype.tags = { 256: \"ImageWidth\", 257: \"ImageHeight\", 34665: \"ExifIFDPointer\", 34853: \"GPSInfoIFDPointer\", 40965: \"InteroperabilityIFDPointer\", 258: \"BitsPerSample\", 259: \"Compression\", 262: \"PhotometricInterpretation\", 274: \"Orientation\", 277: \"SamplesPerPixel\", 284: \"PlanarConfiguration\", 530: \"YCbCrSubSampling\", 531: \"YCbCrPositioning\", 282: \"XResolution\", 283: \"YResolution\", 296: \"ResolutionUnit\", 273: \"StripOffsets\", 278: \"RowsPerStrip\", 279: \"StripByteCounts\", 513: \"JPEGInterchangeFormat\", 514: \"JPEGInterchangeFormatLength\", 301: \"TransferFunction\", 318: \"WhitePoint\", 319: \"PrimaryChromaticities\", 529: \"YCbCrCoefficients\", 532: \"ReferenceBlackWhite\", 306: \"DateTime\", 270: \"ImageDescription\", 271: \"Make\", 272: \"Model\", 305: \"Software\", 315: \"Artist\", 33432: \"Copyright\", 36864: \"ExifVersion\", 40960: \"FlashpixVersion\", 40961: \"ColorSpace\", 40962: \"PixelXDimension\", 40963: \"PixelYDimension\", 42240: \"Gamma\", 37121: \"ComponentsConfiguration\", 37122: \"CompressedBitsPerPixel\", 37500: \"MakerNote\", 37510: \"UserComment\", 40964: \"RelatedSoundFile\", 36867: \"DateTimeOriginal\", 36868: \"DateTimeDigitized\", 37520: \"SubSecTime\", 37521: \"SubSecTimeOriginal\", 37522: \"SubSecTimeDigitized\", 33434: \"ExposureTime\", 33437: \"FNumber\", 34850: \"ExposureProgram\", 34852: \"SpectralSensitivity\", 34855: \"PhotographicSensitivity\", 34856: \"OECF\", 34864: \"SensitivityType\", 34865: \"StandardOutputSensitivity\", 34866: \"RecommendedExposureIndex\", 34867: \"ISOSpeed\", 34868: \"ISOSpeedLatitudeyyy\", 34869: \"ISOSpeedLatitudezzz\", 37377: \"ShutterSpeedValue\", 37378: \"ApertureValue\", 37379: \"BrightnessValue\", 37380: \"ExposureBias\", 37381: \"MaxApertureValue\", 37382: \"SubjectDistance\", 37383: \"MeteringMode\", 37384: \"LightSource\", 37385: \"Flash\", 37396: \"SubjectArea\", 37386: \"FocalLength\", 41483: \"FlashEnergy\", 41484: \"SpatialFrequencyResponse\", 41486: \"FocalPlaneXResolution\", 41487: \"FocalPlaneYResolution\", 41488: \"FocalPlaneResolutionUnit\", 41492: \"SubjectLocation\", 41493: \"ExposureIndex\", 41495: \"SensingMethod\", 41728: \"FileSource\", 41729: \"SceneType\", 41730: \"CFAPattern\", 41985: \"CustomRendered\", 41986: \"ExposureMode\", 41987: \"WhiteBalance\", 41988: \"DigitalZoomRatio\", 41989: \"FocalLengthIn35mmFilm\", 41990: \"SceneCaptureType\", 41991: \"GainControl\", 41992: \"Contrast\", 41993: \"Saturation\", 41994: \"Sharpness\", 41995: \"DeviceSettingDescription\", 41996: \"SubjectDistanceRange\", 42016: \"ImageUniqueID\", 42032: \"CameraOwnerName\", 42033: \"BodySerialNumber\", 42034: \"LensSpecification\", 42035: \"LensMake\", 42036: \"LensModel\", 42037: \"LensSerialNumber\", 0: \"GPSVersionID\", 1: \"GPSLatitudeRef\", 2: \"GPSLatitude\", 3: \"GPSLongitudeRef\", 4: \"GPSLongitude\", 5: \"GPSAltitudeRef\", 6: \"GPSAltitude\", 7: \"GPSTimeStamp\", 8: \"GPSSatellites\", 9: \"GPSStatus\", 10: \"GPSMeasureMode\", 11: \"GPSDOP\", 12: \"GPSSpeedRef\", 13: \"GPSSpeed\", 14: \"GPSTrackRef\", 15: \"GPSTrack\", 16: \"GPSImgDirectionRef\", 17: \"GPSImgDirection\", 18: \"GPSMapDatum\", 19: \"GPSDestLatitudeRef\", 20: \"GPSDestLatitude\", 21: \"GPSDestLongitudeRef\", 22: \"GPSDestLongitude\", 23: \"GPSDestBearingRef\", 24: \"GPSDestBearing\", 25: \"GPSDestDistanceRef\", 26: \"GPSDestDistance\", 27: \"GPSProcessingMethod\", 28: \"GPSAreaInformation\", 29: \"GPSDateStamp\", 30: \"GPSDifferential\", 31: \"GPSHPositioningError\" }, e.ExifMap.prototype.stringValues = { ExposureProgram: { 0: \"Undefined\", 1: \"Manual\", 2: \"Normal program\", 3: \"Aperture priority\", 4: \"Shutter priority\", 5: \"Creative program\", 6: \"Action program\", 7: \"Portrait mode\", 8: \"Landscape mode\" }, MeteringMode: { 0: \"Unknown\", 1: \"Average\", 2: \"CenterWeightedAverage\", 3: \"Spot\", 4: \"MultiSpot\", 5: \"Pattern\", 6: \"Partial\", 255: \"Other\" }, LightSource: { 0: \"Unknown\", 1: \"Daylight\", 2: \"Fluorescent\", 3: \"Tungsten (incandescent light)\", 4: \"Flash\", 9: \"Fine weather\", 10: \"Cloudy weather\", 11: \"Shade\", 12: \"Daylight fluorescent (D 5700 - 7100K)\", 13: \"Day white fluorescent (N 4600 - 5400K)\", 14: \"Cool white fluorescent (W 3900 - 4500K)\", 15: \"White fluorescent (WW 3200 - 3700K)\", 17: \"Standard light A\", 18: \"Standard light B\", 19: \"Standard light C\", 20: \"D55\", 21: \"D65\", 22: \"D75\", 23: \"D50\", 24: \"ISO studio tungsten\", 255: \"Other\" }, Flash: { 0: \"Flash did not fire\", 1: \"Flash fired\", 5: \"Strobe return light not detected\", 7: \"Strobe return light detected\", 9: \"Flash fired, compulsory flash mode\", 13: \"Flash fired, compulsory flash mode, return light not detected\", 15: \"Flash fired, compulsory flash mode, return light detected\", 16: \"Flash did not fire, compulsory flash mode\", 24: \"Flash did not fire, auto mode\", 25: \"Flash fired, auto mode\", 29: \"Flash fired, auto mode, return light not detected\", 31: \"Flash fired, auto mode, return light detected\", 32: \"No flash function\", 65: \"Flash fired, red-eye reduction mode\", 69: \"Flash fired, red-eye reduction mode, return light not detected\", 71: \"Flash fired, red-eye reduction mode, return light detected\", 73: \"Flash fired, compulsory flash mode, red-eye reduction mode\", 77: \"Flash fired, compulsory flash mode, red-eye reduction mode, return light not detected\", 79: \"Flash fired, compulsory flash mode, red-eye reduction mode, return light detected\", 89: \"Flash fired, auto mode, red-eye reduction mode\", 93: \"Flash fired, auto mode, return light not detected, red-eye reduction mode\", 95: \"Flash fired, auto mode, return light detected, red-eye reduction mode\" }, SensingMethod: { 1: \"Undefined\", 2: \"One-chip color area sensor\", 3: \"Two-chip color area sensor\", 4: \"Three-chip color area sensor\", 5: \"Color sequential area sensor\", 7: \"Trilinear sensor\", 8: \"Color sequential linear sensor\" }, SceneCaptureType: { 0: \"Standard\", 1: \"Landscape\", 2: \"Portrait\", 3: \"Night scene\" }, SceneType: { 1: \"Directly photographed\" }, CustomRendered: { 0: \"Normal process\", 1: \"Custom process\" }, WhiteBalance: { 0: \"Auto white balance\", 1: \"Manual white balance\" }, GainControl: { 0: \"None\", 1: \"Low gain up\", 2: \"High gain up\", 3: \"Low gain down\", 4: \"High gain down\" }, Contrast: { 0: \"Normal\", 1: \"Soft\", 2: \"Hard\" }, Saturation: { 0: \"Normal\", 1: \"Low saturation\", 2: \"High saturation\" }, Sharpness: { 0: \"Normal\", 1: \"Soft\", 2: \"Hard\" }, SubjectDistanceRange: { 0: \"Unknown\", 1: \"Macro\", 2: \"Close view\", 3: \"Distant view\" }, FileSource: { 3: \"DSC\" }, ComponentsConfiguration: { 0: \"\", 1: \"Y\", 2: \"Cb\", 3: \"Cr\", 4: \"R\", 5: \"G\", 6: \"B\" }, Orientation: { 1: \"top-left\", 2: \"top-right\", 3: \"bottom-right\", 4: \"bottom-left\", 5: \"left-top\", 6: \"right-top\", 7: \"right-bottom\", 8: \"left-bottom\" } }, e.ExifMap.prototype.getText = function (e) { var t = this.get(e); switch (e) { case \"LightSource\": case \"Flash\": case \"MeteringMode\": case \"ExposureProgram\": case \"SensingMethod\": case \"SceneCaptureType\": case \"SceneType\": case \"CustomRendered\": case \"WhiteBalance\": case \"GainControl\": case \"Contrast\": case \"Saturation\": case \"Sharpness\": case \"SubjectDistanceRange\": case \"FileSource\": case \"Orientation\": return this.stringValues[e][t]; case \"ExifVersion\": case \"FlashpixVersion\": if (!t) return; return String.fromCharCode(t[0], t[1], t[2], t[3]); case \"ComponentsConfiguration\": if (!t) return; return this.stringValues[e][t[0]] + this.stringValues[e][t[1]] + this.stringValues[e][t[2]] + this.stringValues[e][t[3]]; case \"GPSVersionID\": if (!t) return; return t[0] + \".\" + t[1] + \".\" + t[2] + \".\" + t[3] }return String(t) }, function (e) { var t, i = e.tags, a = e.map; for (t in i) i.hasOwnProperty(t) && (a[i[t]] = t) }(e.ExifMap.prototype), e.ExifMap.prototype.getAll = function () { var e, t, i = {}; for (e in this) this.hasOwnProperty(e) && (t = this.tags[e]) && (i[t] = this.getText(t)); return i } }), function (e) { \"use strict\"; \"function\" == typeof define && define.amd ? define([\"./load-image\", \"./load-image-scale\", \"./load-image-meta\"], e) : \"object\" == typeof module && module.exports ? e(require(\"./load-image\"), require(\"./load-image-scale\"), require(\"./load-image-meta\")) : e(window.loadImage) }(function (e) { \"use strict\"; var t = e.hasCanvasOption, i = e.hasMetaOption, a = e.transformCoordinates, o = e.getTransformedOptions; e.hasCanvasOption = function (i) { return !!i.orientation || t.call(e, i) }, e.hasMetaOption = function (t) { return t && !0 === t.orientation || i.call(e, t) }, e.transformCoordinates = function (t, i) { a.call(e, t, i); var o = t.getContext(\"2d\"), n = t.width, r = t.height, s = t.style.width, l = t.style.height, d = i.orientation; if (d && !(d > 8)) switch (d > 4 && (t.width = r, t.height = n, t.style.width = l, t.style.height = s), d) { case 2: o.translate(n, 0), o.scale(-1, 1); break; case 3: o.translate(n, r), o.rotate(Math.PI); break; case 4: o.translate(0, r), o.scale(1, -1); break; case 5: o.rotate(.5 * Math.PI), o.scale(1, -1); break; case 6: o.rotate(.5 * Math.PI), o.translate(0, -r); break; case 7: o.rotate(.5 * Math.PI), o.translate(n, -r), o.scale(-1, 1); break; case 8: o.rotate(-.5 * Math.PI), o.translate(-n, 0) } }, e.getTransformedOptions = function (t, i, a) { var n, r, s = o.call(e, t, i), l = s.orientation; if (!0 === l && a && a.exif && (l = a.exif.get(\"Orientation\")), !l || l > 8 || 1 === l) return s; n = {}; for (r in s) s.hasOwnProperty(r) && (n[r] = s[r]); switch (n.orientation = l, l) { case 2: n.left = s.right, n.right = s.left; break; case 3: n.left = s.right, n.top = s.bottom, n.right = s.left, n.bottom = s.top; break; case 4: n.top = s.bottom, n.bottom = s.top; break; case 5: n.left = s.top, n.top = s.left, n.right = s.bottom, n.bottom = s.right; break; case 6: n.left = s.top, n.top = s.right, n.right = s.bottom, n.bottom = s.left; break; case 7: n.left = s.bottom, n.top = s.right, n.right = s.top, n.bottom = s.left; break; case 8: n.left = s.bottom, n.top = s.left, n.right = s.top, n.bottom = s.right }return n.orientation > 4 && (n.maxWidth = s.maxHeight, n.maxHeight = s.maxWidth, n.minWidth = s.minHeight, n.minHeight = s.minWidth, n.sourceWidth = s.sourceHeight, n.sourceHeight = s.sourceWidth), n } });\r\n","/**\r\n * @license\r\n * Lodash (Custom Build) lodash.com/license | Underscore.js 1.8.3 underscorejs.org/LICENSE\r\n * Build: `lodash include=\"each,cloneDeep,merge,filter,map,reduce,find,get,reject,remove,some,pull,pullAllBy,keyBy,sortBy,includes,isEmpty,isEqual,inRange,isInteger,size,trim,deburr,replace,camelCase,kebabCase,unescape,debounce,throttle\"`\r\n */\r\n;(function(){function n(n,t){return n.set(t[0],t[1]),n}function t(n,t){return n.add(t),n}function r(n,t,r){switch(r.length){case 0:return n.call(t);case 1:return n.call(t,r[0]);case 2:return n.call(t,r[0],r[1]);case 3:return n.call(t,r[0],r[1],r[2])}return n.apply(t,r)}function e(n,t,r,e){for(var u=-1,i=null==n?0:n.length;++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\": \"SortedCategory\",\n \"Controller\": \"Category\",\n \"Action\": \"ShowSorted\",\n \"fr\": {\n \"URL\": \"{categoryName}-c-{categoryId:int}/{sortType:alpha}\"\n },\n \"en\": {\n \"URL\": \"{categoryName}-c-{categoryId:int}/{sortType:alpha}\"\n }\n },\n {\n \"Name\": \"CategoryPage\",\n \"Controller\": \"Category\",\n \"Action\": \"ShowPage\",\n \"fr\": {\n \"URL\": \"{categoryName}-c-{categoryId:int}-{page:int}\"\n },\n \"en\": {\n \"URL\": \"{categoryName}-c-{categoryId:int}-{page:int}\"\n }\n },\n {\n \"Name\": \"CategoryWithElasticSearch\",\n \"Controller\": \"Category\",\n \"Action\": \"ShowWithElasticSearch\",\n \"fr\": {\n \"URL\": \"{categoryName}-c-{categoryId:int}/es/{query}\"\n },\n \"en\": {\n \"URL\": \"{categoryName}-c-{categoryId:int}/es/{query}\"\n }\n },\n {\n \"Name\": \"SortedCategoryPageWithElasticSearch\",\n \"Controller\": \"Category\",\n \"Action\": \"ShowSortedPageWithElasticSearch\",\n \"fr\": {\n \"URL\": \"{categoryName}-c-{categoryId:int}/es/{query}-{page:int}/{sortType:alpha}\"\n },\n \"en\": {\n \"URL\": \"{categoryName}-c-{categoryId:int}/es/{query}-{page:int}/{sortType:alpha}\"\n }\n },\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\": \"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\": \"CartPaymentRedirect\",\n \"Controller\": \"Cart\",\n \"Action\": \"Redirect\",\n \"fr\": {\n \"URL\": \"redirection-panier-paiement\"\n },\n \"en\": {\n \"URL\": \"cart-payment-redirect\"\n }\n },\n {\n \"Name\": \"QuotationPaymentError\",\n \"Controller\": \"Quotation\",\n \"Action\": \"PaymentError\",\n \"fr\": {\n \"URL\": \"paiement/erreur/{idFolder:int}\"\n },\n \"en\": {\n \"URL\": \"payment/error/{idFolder:int}\"\n }\n },\n {\n \"Name\": \"CartPaymentError\",\n \"Controller\": \"Cart\",\n \"Action\": \"PaymentError\",\n \"fr\": {\n \"URL\": \"paiement/erreur\"\n },\n \"en\": {\n \"URL\": \"payment/error\"\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\": \"AccountValidationPage\",\n \"Controller\": \"Authentication\",\n \"Action\": \"AccountValidationPage\",\n \"fr\": {\n \"URL\": \"validation-compte/validation/{EncryptedIdCard}\"\n },\n \"en\": {\n \"URL\": \"account-validation/validate/{EncryptedIdCard}\"\n }\n },\n {\n \"Name\": \"ResendAccountValidationEmail\",\n \"Controller\": \"AccountCreate\",\n \"Action\": \"ResendAccountValidationEmail\",\n \"fr\": {\n \"URL\": \"validation-compte/renvoi/{EncryptedIdCard}\"\n },\n \"en\": {\n \"URL\": \"account-validation/resend/{EncryptedIdCard}\"\n }\n },\n {\n \"Name\": \"AccountValidateEmailToken\",\n \"Controller\": \"Authentication\",\n \"Action\": \"AccountValidateEmailToken\",\n \"fr\": {\n \"URL\": \"identification/{validEmailToken}\"\n },\n \"en\": {\n \"URL\": \"authentication/{validEmailToken}\"\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\": \"AccountUpdate\",\n \"Controller\": \"AccountUpdate\",\n \"Action\": \"AccountUpdate\",\n \"fr\": {\n \"URL\": \"profil\"\n },\n \"en\": {\n \"URL\": \"profile\"\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\": \"AccountGiftCards\",\n \"Controller\": \"AccountGiftCards\",\n \"Action\": \"AccountGiftCards\",\n \"fr\": {\n \"URL\": \"cheques-cadeaux\"\n },\n \"en\": {\n \"URL\": \"gift-voucher\"\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\": \"Stores\",\n \"Controller\": \"Stores\",\n \"Action\": \"Stores\",\n \"fr\": {\n \"URL\": \"magasins\"\n },\n \"en\": {\n \"URL\": \"stores\"\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\": \"CatalogRequest\",\n \"Controller\": \"Form\",\n \"Action\": \"CatalogRequest\",\n \"fr\": {\n \"URL\": \"catalogue\"\n },\n \"en\": {\n \"URL\": \"catalogue\"\n }\n },\n {\n \"Name\": \"Jobs\",\n \"Controller\": \"Form\",\n \"Action\": \"Jobs\",\n \"fr\": {\n \"URL\": \"jobs\"\n },\n \"en\": {\n \"URL\": \"jobs\"\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\": \"AppParams\",\n \"Controller\": \"App\",\n \"Action\": \"AppParams\",\n \"fr\": {\n \"URL\": \"appParams\"\n },\n \"en\": {\n \"URL\": \"appParams\"\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\": \"Click2Call\",\n \"Controller\": \"OVH\",\n \"Action\": \"Click2Call\",\n \"fr\": {\n \"URL\": \"clickToCall\"\n },\n \"en\": {\n \"URL\": \"clickToCall\"\n }\n },\n {\n \"Name\": \"AlmaCheckEligibility\",\n \"Controller\": \"Alma\",\n \"Action\": \"AlmaCheckEligibility\",\n \"fr\": {\n \"URL\": \"AlmaCheckEligibility\"\n },\n \"en\": {\n \"URL\": \"AlmaCheckEligibility\"\n }\n },\n {\n \"Name\": \"AlmaGetPaymentInfos\",\n \"Controller\": \"Alma\",\n \"Action\": \"AlmaGetPaymentInfos\",\n \"fr\": {\n \"URL\": \"AlmaGetPaymentInfos\"\n },\n \"en\": {\n \"URL\": \"AlmaGetPaymentInfos\"\n }\n },\n {\n \"Name\": \"AlmaGetApiInfos\",\n \"Controller\": \"Alma\",\n \"Action\": \"AlmaGetApiInfos\",\n \"fr\": {\n \"URL\": \"AlmaGetApiInfos\"\n },\n \"en\": {\n \"URL\": \"AlmaGetApiInfos\"\n }\n },\n {\n \"Name\": \"AlmaPrePaymentRequest\",\n \"Controller\": \"Alma\",\n \"Action\": \"AlmaPrePaymentRequest\",\n \"fr\": {\n \"URL\": \"AlmaPrePaymentRequest\"\n },\n \"en\": {\n \"URL\": \"AlmaPrePaymentRequest\"\n }\n },\n {\n \"Name\": \"AlmaConfirm\",\n \"Controller\": \"Alma\",\n \"Action\": \"AlmaConfirm\",\n \"fr\": {\n \"URL\": \"AlmaConfirm\"\n },\n \"en\": {\n \"URL\": \"AlmaConfirm\"\n }\n },\n {\n \"Name\": \"AlmaAsyncResponse\",\n \"Controller\": \"Alma\",\n \"Action\": \"AlmaAsyncResponse\",\n \"fr\": {\n \"URL\": \"AlmaAsyncResponse\"\n },\n \"en\": {\n \"URL\": \"AlmaAsyncResponse\"\n }\n },\n {\n \"Name\": \"NetWaveGetProducts\",\n \"Controller\": \"Netwave\",\n \"Action\": \"GetProducts\",\n \"fr\": {\n \"URL\": \"GetProducts\"\n },\n \"en\": {\n \"URL\": \"GetProducts\"\n }\n },\n {\n \"Name\": \"NetWaveGetCategoryProduct\",\n \"Controller\": \"Netwave\",\n \"Action\": \"GetCategoryProduct\",\n \"fr\": {\n \"URL\": \"GetCategoryProduct/{productId:int}\"\n },\n \"en\": {\n \"URL\": \"GetCategoryProduct/{productId:int}\"\n }\n },\n {\n \"Name\": \"GetNetWaveInfo\",\n \"Controller\": \"Netwave\",\n \"Action\": \"GetNetWaveInfo\",\n \"fr\": {\n \"URL\": \"GetNetWaveInfo\"\n },\n \"en\": {\n \"URL\": \"GetNetWaveInfo\"\n }\n },\n {\n \"Name\": \"Product\",\n \"Controller\": \"ArdentPecheProduct\",\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\": \"ArdentPecheProduct\",\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\": \"ArdentPecheProduct\",\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\": \"ArdentPecheProduct\",\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\": \"ArdentPecheProduct\",\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\": \"ArdentPecheProduct\",\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\": \"ArdentPecheProduct\",\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\": \"ArdentPecheProduct\",\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\": \"SortedCategoryPage\",\n \"Controller\": \"CategoryOverride\",\n \"Action\": \"ShowSortedPage\",\n \"fr\": {\n \"URL\": \"{categoryName}-c-{categoryId:int}-{page:int}/{sortType:alpha}\"\n },\n \"en\": {\n \"URL\": \"{categoryName}-c-{categoryId:int}-{page:int}/{sortType:alpha}\"\n }\n },\n {\n \"Name\": \"Category\",\n \"Controller\": \"CategoryOverride\",\n \"Action\": \"Show\",\n \"fr\": {\n \"URL\": \"{categoryName}-c-{categoryId:int}\"\n },\n \"en\": {\n \"URL\": \"{categoryName}-c-{categoryId:int}\"\n }\n }\n]);\n})();\n","(function (ng) {\n'use strict';\nng.module('gulp-dependencies', ['alma.widget','angucomplete-alt','app.account-create','app.account-password-revovery','app.authentication','app.autocomplete','app.autocomplete-select','app.category','app.category.filters','app.category.service','app.comparator','app.form','app.payment-error','app.product','app.product-attributes','app.product-gallery','app.product-kit','app.product-share','app.product.customization','app.product.price','app.product.reviews','app.product.service','app.search','app.service.compare','app.service.quotation','app.store-detail','app.stores','app.stores-service','app.switch','app.treviews','app.wishlist','compare.checkbox','main.nav','minilogin','newsletter','service.authentication']);\n})(angular);","angular.module(\"gulp-templates\", []).run([\"$templateCache\", function($templateCache) {$templateCache.put(\"component.addtocart-classic.tpl\",\"
    \");\n$templateCache.put(\"component.addtocart-quantity.tpl\",\"\");\n$templateCache.put(\"component.addtocart.tpl\",\"
    \");\n$templateCache.put(\"component.addtowishlist.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(\"facet-accordion-group.tpl\",\"
    \");\n$templateCache.put(\"facet-accordion.tpl\",\"
    \");\n$templateCache.put(\"autocomplete-select.tpl\",\"\");\n$templateCache.put(\"autocomplete.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 /* /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 'hl.sticky',\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.addtowishlist',\r\n 'component.addtocart-classic',\r\n 'component.delete-cart-item',\r\n 'component.modify-cart-item',\r\n\r\n /* /modules */\r\n 'module.owl-carousel',\r\n 'module.products-grid',\r\n 'module.modal',\r\n 'module.modal-controllers',\r\n 'module.cdn',\r\n 'thatisuday.dropzone',\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.ngclipboard',\r\n 'directive.video-player',\r\n 'directive.flip',\r\n 'directive.back-to-top',\r\n 'directive.cookies-info',\r\n 'infinite-scroll',\r\n 'directive.searchlink',\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.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 googleTranslateChangeTitle();\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.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.isFirefox = DeviceService.wichUserAgent();\r\n\r\n $scope.device.isSafari = DeviceService.wichUserAgentSafari();\r\n\r\n DeviceService.isWebp().then(function (result) {\r\n $scope.device.webp = result;\r\n });\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 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 });\r\n }])\r\n\r\n /* @ngInject */\r\n .config([\"usSpinnerConfigProvider\", function (usSpinnerConfigProvider) {\r\n usSpinnerConfigProvider.setDefaults({\r\n color: '#344d65',\r\n lines: 15,\r\n length: 12,\r\n width: 2,\r\n radius: 10,\r\n opacity: 0\r\n });\r\n usSpinnerConfigProvider.setTheme('small', {\r\n length: 8,\r\n radius: 5\r\n });\r\n usSpinnerConfigProvider.setDelay(400);\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\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","(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('component.addtocart-classic', [])\r\n\r\n .component('buttonAddToCartClassic', {\r\n require: {\r\n productCtrl: '?^^productDetail',\r\n comparatorCtrl: '?^^comparator'\r\n },\r\n bindings: {\r\n isProductButton: ' 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 // Functions\r\n\r\n function getProductsToAdd(qty) {\r\n return [{\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: qty,\r\n designation: ctrl.designation,\r\n img: ctrl.img,\r\n URL: ctrl.url,\r\n fromClassicBtn: true\r\n }];\r\n }\r\n\r\n function addToCart(products) {\r\n ModalService.close();\r\n if (!ctrl.isCartButton) {\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 null,\r\n function () {\r\n ctrl.quantity = ctrl.quantity;\r\n }\r\n );\r\n } else {\r\n if (!ctrl.isModalButton) {\r\n ModalService.close();\r\n }\r\n var mess = 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 AppService.addToCart(products)\r\n .then(function (response) {\r\n if (response.status === 'OK') {\r\n AppService.updateParams(response.results);\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})();\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 quotationCtrl: '?^^accountAdvancedQuotations'\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 if (val === '') {\r\n return val;\r\n }\r\n val = parseInt(val);\r\n if (!isNaN(val)) {\r\n if (min !== undefined && min > val) {\r\n val = min;\r\n return val;\r\n }\r\n return val;\r\n }\r\n val = min || 0;\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 (ctrl.isQuotationButton) {\r\n addToQuotationAction(products);\r\n } else {\r\n addToCartAction(products);\r\n }\r\n }\r\n\r\n function addToCartAction(products) {\r\n AppService.addToCart(products)\r\n .then(function (response) {\r\n ctrl.showLoader = false;\r\n if (response.status === 'OK') {\r\n AppService.updateParams(response.results);\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 function addToQuotationAction(products) {\r\n QuotationService\r\n .addToQuotation(ctrl.id, ctrl.idQuotation, '', products[0].quantity)\r\n .then(function (response) {\r\n ctrl.showLoader = false;\r\n if (response.status === 'OK') {\r\n setItemQuantity(ctrl.quantity);\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 function removeCartLine(products, quantity) {\r\n AppService.itemQuantityInCart(ctrl.id)\r\n .then(function (value) {\r\n if (value === (products[0].quantity * -1)) {\r\n unwatch();\r\n ModalService.show(\r\n '/Template/Cart/ModalDeleteConfirm',\r\n {\r\n action: function () {\r\n AppService.deleteLine(ctrl.idLine, ctrl.designation, ctrl.img, ctrl.titleDeleteOk);\r\n },\r\n cancel: function () {\r\n setItemQuantity(value);\r\n ctrl.isChanged = false;\r\n watchValue();\r\n }\r\n },\r\n null,\r\n 'deleteConfirmModalCtrl'\r\n );\r\n } else {\r\n addToCart(products, quantity);\r\n }\r\n })\r\n .catch(function (error) {\r\n console.error(error);\r\n });\r\n }\r\n\r\n function removeQuotationLine() {\r\n unwatch();\r\n ModalService.show(\r\n '/Template/Account/ModalRemoveQuotationLine',\r\n {\r\n action: function () {\r\n removeQuotationLineAction(ctrl.idLine, ctrl.idQuotation);\r\n },\r\n cancel: function () {\r\n setItemQuantity(ctrl.productQuantity);\r\n ctrl.isChanged = false;\r\n watchValue();\r\n }\r\n },\r\n null,\r\n 'modalRemoveQuotationLineCtrl'\r\n );\r\n }\r\n\r\n function removeQuotationLineAction(idLine, idQuotation) {\r\n QuotationService\r\n .removeQuotationLine(idLine, idQuotation)\r\n .then(function (response) {\r\n if (response.status === 'OK') {\r\n var index = _.findIndex(ctrl.quotationCtrl.quotations, { IDFolder: idQuotation });\r\n ctrl.quotationCtrl.quotations.splice(index, 1, response.folder);\r\n\r\n AppService.getTranslate()\r\n .then(function (translate) {\r\n toastr.success('', translate.messages.QuotationProductRemoved, {\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 .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('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\", \"WindowEventsService\", function ($scope, $window, WindowEventsService) {\r\n var ctrl = this,\r\n lastPos;\r\n ctrl.active = false;\r\n\r\n WindowEventsService.listen(true, 'scroll', handler, 500);\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 && sc < lastPos ? true : false;\r\n });\r\n lastPos = sc;\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 .directive('selectpicker', [\"$timeout\", function ($timeout) {\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 $timeout(function () {\r\n element.selectpicker({\r\n mobile: scope.device ? scope.device.mobile : false\r\n });\r\n });\r\n\r\n scope.$on('$destroy', function () {\r\n element.selectpicker('destroy');\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 .directive('bxslider', [\"WindowEventsService\", function (WindowEventsService) {\r\n\r\n return {\r\n restrict: 'A',\r\n scope: {\r\n device: '<'\r\n },\r\n link: function (scope, element) {\r\n var slider;\r\n if (scope.device.mobile) return;\r\n\r\n\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 (slider) {\r\n slider.destroySlider();\r\n }\r\n });\r\n\r\n initBxSlider();\r\n\r\n //if (slider) {\r\n // slider.redrawSlider();\r\n //}\r\n\r\n\r\n function initBxSlider() {\r\n\r\n if (slider) {\r\n 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\r\n\r\n if (scope.device.mobile) return;\r\n\r\n setTimeout(function () {\r\n\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 = 10,\r\n sc = element.closest('.d-table-cell'),\r\n main = element.closest('.height-style');\r\n\r\n\r\n var width = Math.floor(sc.innerWidth()) - margin,\r\n height = Math.floor(sc.parent().height() - 20),\r\n nb = Math.floor(height / width);\r\n\r\n\r\n element.show().parent().css({\r\n 'height': height,\r\n 'width': width\r\n });\r\n\r\n\r\n\r\n slider = element.bxSlider({\r\n mode: 'vertical',\r\n minSlides: 4,\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 shrinkItems: true,\r\n onSliderLoad: function () {\r\n\r\n element.show().parent().closest('.bxslider-container').addClass('in');\r\n\r\n //element.show().parent().css({ \r\n // 'height': height\r\n //}).closest('.bxslider-container').addClass('in'); \r\n\r\n }\r\n });\r\n }, 500);\r\n\r\n //slider.redrawSlider();\r\n\r\n }\r\n\r\n }\r\n };\r\n }]);\r\n\r\n})();\r\n","/*\r\n * Remove empty Tabset\r\n * Version 1.0\r\n * Octave\r\n **/\r\n\r\n(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('directive.clear-uib-tab', [])\r\n\r\n .directive('uibTabset', function () {\r\n return {\r\n priority: 0,\r\n // eslint-disable-next-line\r\n link: function (scope, element, attrs) {\r\n if (!element.find('uib-tab').length) {\r\n var $parent = element.parent();\r\n element.remove();\r\n if (angular.isDefined(attrs.removeParentIfEmpty)) {\r\n $parent.remove();\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 /*\r\n * Collapse Menu directive\r\n * Version 1.0.0\r\n * Octave\r\n **/\r\n\r\n angular\r\n .module('directive.collapse-menu', [])\r\n\r\n /* @ngInject */\r\n .directive('collapseMenu', [\"$document\", function ($document) {\r\n var directive = {\r\n restrict: 'A',\r\n link: link,\r\n scope: true\r\n };\r\n return directive;\r\n\r\n function link(scope, element) {\r\n\r\n scope.isOpen = false;\r\n\r\n function onBodyClick(event) {\r\n if (scope.isOpen && !element[0].contains(event.target)) {\r\n scope.$apply(function () {\r\n scope.isOpen = false;\r\n });\r\n $document.off('click', onBodyClick);\r\n }\r\n }\r\n\r\n scope.clickMenu = function (event) {\r\n if (scope.device.isTouch) {\r\n if (!scope.isOpen) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n element.find('*[lazy-img-container]').scroll();\r\n $document.on('click', onBodyClick);\r\n }\r\n scope.isOpen = !scope.isOpen;\r\n }\r\n };\r\n\r\n scope.showMenu = function () {\r\n if (scope.device.isTouch) return;\r\n scope.isOpen = true;\r\n element.find('*[lazy-img-container]').scroll();\r\n };\r\n\r\n scope.hideMenu = function () {\r\n scope.isOpen = false;\r\n };\r\n\r\n scope.$on('$destroy', function () {\r\n $document.off('click', onBodyClick);\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.cookies-info', [])\r\n\r\n .directive('cookiesInfo', function () {\r\n return {\r\n restrict: 'A',\r\n controllerAs: 'cookiesCtrl',\r\n /* @ngInject */\r\n controller: [\"$scope\", \"$cookies\", \"$timeout\", \"DateService\", function ($scope, $cookies, $timeout, DateService) {\r\n if ($cookies.get('cookiesOK')) return;\r\n\r\n var ctrl = this;\r\n\r\n $timeout(function () {\r\n if (!$cookies.get('firstPage')) {\r\n setFirstPage();\r\n ctrl.active = true;\r\n } else {\r\n setCookiesOK();\r\n }\r\n });\r\n\r\n ctrl.clickCookiesOK = function () {\r\n ctrl.active = false;\r\n setCookiesOK();\r\n };\r\n\r\n // Events\r\n\r\n var unwatch = $scope.$on('$locationChangeStart', function () {\r\n ctrl.active = false;\r\n });\r\n $scope.$on('$destroy', unwatch);\r\n\r\n // Functions\r\n\r\n function setFirstPage() {\r\n $cookies.put('firstPage', 'true', {\r\n path: '/',\r\n expires: DateService.tomorrow()\r\n });\r\n }\r\n function setCookiesOK() {\r\n $cookies.put('cookiesOK', 'true', {\r\n path: '/',\r\n expires: DateService.nextYear()\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.debug', [])\r\n\r\n /* @ngInject */\r\n .directive('debug', function () {\r\n return {\r\n restrict: 'E',\r\n template: '
    ',\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.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\", function ($scope, $element, AppService, RoutesService, ModalService) {\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 },\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\r\n function getCart() {\r\n AppService.getParams()\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\", \"toastr\", function (data, $rootScope, HttpService, AppService, ModalService, toastr) {\r\n var ctrl = this;\r\n\r\n ctrl.submit = function () {\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.searchlink', [])\r\n\r\n /* @ngInject */\r\n .directive('searchLink', [\"HttpService\", function (HttpService) {\r\n return {\r\n restrict: 'A',\r\n link: function (scope, element, attrs) {\r\n element.click(function (event) {\r\n HttpService.post({\r\n url: 'Search/SearchLog',\r\n data: {\r\n Query: attrs.query,\r\n Id: attrs.id,\r\n Index: attrs.index,\r\n Type: attrs.type\r\n }\r\n });\r\n });\r\n scope.$on('$destroy', function () {\r\n element.off('click');\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 .directive('videoPlayer', [\"$timeout\", function ($timeout) {\r\n\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\r\n var id = getYouTubeIdFromUrl(scope.url);\r\n\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\r\n // Functions\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\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) {\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) {\r\n element.attr('placeholder', attrs.placeholder + ' *');\r\n }\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 scope.label = !value ? attrs.label : attrs.label + ' *';\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\tangular.module('thatisuday.dropzone', []).provider('dropzoneOps', function(){\r\n\r\n\t\tvar defOps = {};\r\n\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\t\t}\r\n\t}).directive('ngDropzone', ['$timeout', 'dropzoneOps', function($timeout, dropzoneOps){\r\n\t\treturn {\r\n\t\t\trestrict : 'AE',\r\n\t\t\ttemplate : '
    ',\r\n\t\t\treplace : true,\r\n\t\t\tscope : {\r\n\t\t\t\toptions : '=?', //http://www.dropzonejs.com/#configuration-options\r\n\t\t\t\tcallbacks : '=?', //http://www.dropzonejs.com/#events\r\n\t\t\t\tmethods : '=?', //http://www.dropzonejs.com/#dropzone-methods\r\n\t\t\t\tacceptedFiles: '@?',\r\n\t\t\t\tsuccess: '&?',\r\n\t\t\t\tremovedfile: '&?'\r\n\t\t\t},\r\n\t\t\tlink : function(scope, iElem, iAttr){\r\n\t\t\t\t//Set options for dropzone {override from dropzone options provider}\r\n\t\t\t\tscope.options = scope.options || {};\r\n\r\n\t\t\t\tif (scope.options.dictFileTooBig) {\r\n\t\t\t\t\tscope.options.dictFileTooBig = scope.options.dictFileTooBig.replace('{maxFilesize}', '{{maxFilesize}}');\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (scope.options.maxFiles == 1) {\r\n\t\t\t\t\tscope.options.init = function() {\r\n\t\t\t\t\t\tthis.on(\"maxfilesexceeded\", function(file) {\r\n\t\t\t\t\t\t\tthis.removeAllFiles();\r\n\t\t\t\t\t\t\tthis.addFile(file);\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.acceptedFiles) {\r\n\t\t\t\t\tscope.options.acceptedFiles = scope.acceptedFiles;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvar initOps = angular.extend({}, dropzoneOps, scope.options);\r\n\r\n\t\t\t\t//Instantiate dropzone with initOps\r\n\t\t\t\tvar dropzone = new Dropzone(iElem[0], initOps);\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\t\t\t\t\t}\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\t\t\t\t\tvar callbackMethods = ['addedfile', 'complete', '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\t\t\t\t\t\t\tcallback.apply(null, arguments);\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 dropzone.on('addedfile', function (file) {\r\n var self = this;\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 self.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 self.createThumbnail(file);\r\n });\r\n });\r\n\r\n scope.$emit('dropzone', dropzone);\r\n\t\t\t}\r\n\t\t}\r\n\t}]);\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\n * angular-sticky-plugin\r\n * https://github.com/harm-less/angular-sticky\r\n\r\n * Version: 0.4.1 - 2017-06-12\r\n * License: MIT\r\n */\r\n'use strict';\r\n\r\nangular.module('hl.sticky', [])\r\n\r\n\t.factory('mediaQuery', function () {\r\n\t\treturn {\r\n\t\t\tmatches: function (query) {\r\n\t\t\t\treturn (query && (matchMedia('(' + query + ')').matches || matchMedia(query).matches));\r\n\t\t\t}\r\n\t\t};\r\n\t})\r\n\r\n\t.factory('hlStickyStack', [\"$document\", \"DefaultStickyStackName\", function ($document, DefaultStickyStackName) {\r\n\r\n\t\tvar documentEl = $document[0].documentElement;\r\n\r\n\t\tvar stacks = {};\r\n\r\n\t\tfunction stickyStack(options) {\r\n\r\n\t\t\toptions = options || {};\r\n\r\n\t\t\tvar stackName = options.name || DefaultStickyStackName;\r\n\r\n\t\t\t// use existing sticky stack\r\n\t\t\tif (stacks[stackName]) {\r\n\t\t\t\treturn stacks[stackName];\r\n\t\t\t}\r\n\r\n\t\t\t// should be above all Bootstrap's z-indexes (but just before the modals)\r\n\t\t\tvar stickyZIndex = 1039;\r\n\t\t\tvar stack = [];\r\n\r\n\t\t\tvar $stack = {};\r\n\r\n\t\t\t$stack.options = options;\r\n\t\t\t$stack.stackName = stackName;\r\n\r\n\t\t\t$stack.add = function (id, sticky) {\r\n\t\t\t\tif (!angular.isString(id) || id === '') {\r\n\t\t\t\t\tid = $stack.length();\r\n\t\t\t\t}\r\n\t\t\t\tsticky.id = id;\r\n\t\t\t\tsticky.zIndex = stickyZIndex;\r\n\t\t\t\tstack.push(sticky);\r\n\r\n\t\t\t\tstickyZIndex -= 1;\r\n\t\t\t\treturn sticky;\r\n\t\t\t};\r\n\t\t\t$stack.get = function (id) {\r\n\t\t\t\tfor (var i = 0; i < stack.length; i++) {\r\n\t\t\t\t\tif (id == stack[i].id) { // jshint ignore:line\r\n\t\t\t\t\t\treturn stack[i];\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn false;\r\n\t\t\t};\r\n\t\t\t$stack.index = function (id) {\r\n\t\t\t\tfor (var i = 0; i < stack.length; i++) {\r\n\t\t\t\t\tif (id == stack[i].id) { // jshint ignore:line\r\n\t\t\t\t\t\treturn i;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn -1;\r\n\t\t\t};\r\n\t\t\t$stack.range = function (start, end) {\r\n\t\t\t\treturn stack.slice(start, end);\r\n\t\t\t};\r\n\t\t\t$stack.all = function () {\r\n\t\t\t\treturn stack;\r\n\t\t\t};\r\n\t\t\t$stack.keys = function () {\r\n\t\t\t\tvar ids = [];\r\n\t\t\t\tfor (var i = 0; i < stack.length; i++) {\r\n\t\t\t\t\tids.push(stack[i].id);\r\n\t\t\t\t}\r\n\t\t\t\treturn ids;\r\n\t\t\t};\r\n\t\t\t$stack.top = function () {\r\n\t\t\t\treturn stack[stack.length - 1];\r\n\t\t\t};\r\n\t\t\t$stack.remove = function (id) {\r\n\t\t\t\tfor (var i = 0; i < stack.length; i++) {\r\n\t\t\t\t\tif (id == stack[i].id) { // jshint ignore:line\r\n\t\t\t\t\t\tstickyZIndex += 1;\r\n\t\t\t\t\t\treturn stack.splice(i, 1)[0];\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn false;\r\n\t\t\t};\r\n\t\t\t$stack.removeTop = function () {\r\n\t\t\t\tstickyZIndex += 1;\r\n\t\t\t\treturn stack.splice(stack.length - 1, 1)[0];\r\n\t\t\t};\r\n\t\t\t$stack.length = function () {\r\n\t\t\t\treturn stack.length;\r\n\t\t\t};\r\n\r\n\t\t\t$stack.height = function (anchor) {\r\n\t\t\t\tvar height = {\r\n\t\t\t\t\ttop: 0,\r\n\t\t\t\t\tbottom: 0\r\n\t\t\t\t};\r\n\t\t\t\tangular.forEach(stack, function(item) {\r\n\t\t\t\t\theight[item.anchor()] += item.computedHeight(anchor);\r\n\t\t\t\t});\r\n\t\t\t\treturn height[anchor];\r\n\t\t\t};\r\n\t\t\t$stack.heightAt = function (anchor, at) {\r\n\t\t\t\tvar atAdjusted = at - 1;\r\n\t\t\t\tvar stick;\r\n\t\t\t\tvar computedHeight;\r\n\t\t\t\tvar height = {\r\n\t\t\t\t\ttop: 0,\r\n\t\t\t\t\tbottom: 0\r\n\t\t\t\t};\r\n\t\t\t\tfor (var i = 0; i < stack.length; i++) {\r\n\t\t\t\t\tstick = stack[i];\r\n\t\t\t\t\t// check if the sticky element sticks at the queried position minus 1 pixel if the position is at the same place\r\n\t\t\t\t\tif (stick.sticksAtPosition(anchor, atAdjusted)) {\r\n\t\t\t\t\t\tvar stickyAnchor = stick.anchor();\r\n\t\t\t\t\t\tcomputedHeight = stick.computedHeight(anchor, atAdjusted - height[stickyAnchor]);\r\n\r\n\t\t\t\t\t\t// add the height of the sticky element to the total\r\n\t\t\t\t\t\theight[stickyAnchor] += computedHeight;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn height[anchor];\r\n\t\t\t};\r\n\t\t\t$stack.heightCurrent = function (anchor) {\r\n\t\t\t\treturn $stack.heightAt(anchor, window.pageYOffset || documentEl.scrollTop);\r\n\t\t\t};\r\n\r\n\t\t\tstacks[stackName] = $stack;\r\n\r\n\t\t\treturn $stack;\r\n\t\t}\r\n\r\n\t\treturn stickyStack;\r\n\t}])\r\n\r\n\t.factory('hlStickyElement', [\"$document\", \"$log\", \"hlStickyStack\", \"throttle\", \"mediaQuery\", function($document, $log, hlStickyStack, throttle, mediaQuery) {\r\n\t\treturn function(element, options) {\r\n\t\t\toptions = options || {};\r\n\r\n\t\t\tvar stickyLineTop;\r\n\t\t\tvar stickyLineBottom;\r\n\t\t\tvar placeholder;\r\n\r\n\t\t\tvar _isSticking = false;\r\n\r\n\t\t\t// elements\r\n\t\t\tvar bodyEl = angular.element($document[0].body);\r\n\t\t\tvar nativeEl = element[0];\r\n\t\t\tvar documentEl = $document[0].documentElement;\r\n\r\n\t\t\t// attributes\r\n\t\t\tvar id = options.id || null;\r\n\t\t\tvar stickyMediaQuery = angular.isDefined(options.mediaQuery) ? options.mediaQuery : false;\r\n\t\t\tvar stickyClass = angular.isString(options.stickyClass) && options.stickyClass !== '' ? options.stickyClass : 'is-sticky';\r\n\t\t\tvar usePlaceholder = angular.isDefined(options.usePlaceholder) ? options.usePlaceholder : true;\r\n\t\t\tvar offsetTop = options.offsetTop ? parseInt(options.offsetTop) : 0;\r\n\t\t\tvar offsetBottom = options.offsetBottom ? parseInt(options.offsetBottom) : 0;\r\n\t\t\tvar anchor = typeof options.anchor === 'string' ? options.anchor.toLowerCase().trim() : 'top';\r\n\t\t\tvar container = null;\r\n\t\t\tvar stack = options.stack === false ? null : options.stack || hlStickyStack();\r\n\r\n\t\t\tvar event = angular.isFunction(options.event) ? options.event : angular.noop;\r\n\t\t\tvar globalOffset = {\r\n\t\t\t\ttop: 0,\r\n\t\t\t\tbottom: 0\r\n\t\t\t};\r\n\r\n\t\t\t// initial style\r\n\t\t\tvar initialCSS = {\r\n\t\t\t\tstyle: element.attr('style') || ''\r\n\t\t\t};\r\n\r\n\t\t\t// Methods\r\n\t\t\t//\r\n\t\t\tfunction stickyLinePositionTop() {\r\n\t\t\t\tif (_isSticking) {\r\n\t\t\t\t\treturn stickyLineTop;\r\n\t\t\t\t}\r\n\t\t\t\tstickyLineTop = _getTopOffset(nativeEl) - offsetTop - _stackOffsetTop();\r\n\t\t\t\treturn stickyLineTop;\r\n\t\t\t}\r\n\t\t\tfunction stickyLinePositionBottom() {\r\n\t\t\t\tif (_isSticking) {\r\n\t\t\t\t\treturn stickyLineBottom;\r\n\t\t\t\t}\r\n\t\t\t\tstickyLineBottom = _getBottomOffset(nativeEl) + offsetBottom + _stackOffsetBottom();\r\n\t\t\t\treturn stickyLineBottom;\r\n\t\t\t}\r\n\t\t\tfunction isEnabled() {\r\n\t\t\t\treturn (!angular.isDefined(options.enable) || options.enable);\r\n\t\t\t}\r\n\t\t\tfunction isSticky() {\r\n\t\t\t\treturn (isEnabled() && _isSticking) || options.alwaysSticky;\r\n\t\t\t}\r\n\t\t\tfunction sticksAtPosition(anchor, scrolledDistance) {\r\n\t\t\t\tif (!matchesMediaQuery()) {\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t\tswitch (anchor) {\r\n\t\t\t\t\tcase 'top':\t{\r\n\t\t\t\t\t\treturn sticksAtPositionTop(scrolledDistance);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tcase 'bottom': {\r\n\t\t\t\t\t\treturn sticksAtPositionBottom(scrolledDistance);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tdefault: {\r\n\t\t\t\t\t\t$log.error('Unknown anchor \"' + anchor + '\"');\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\treturn false;\r\n\t\t\t}\r\n\t\t\tfunction sticksAtPositionTop(scrolledDistance) {\r\n\t\t\t\tscrolledDistance = scrolledDistance !== undefined ? scrolledDistance : window.pageYOffset || bodyEl.scrollTop;\r\n\t\t\t\tvar scrollTop = scrolledDistance - (documentEl.clientTop || 0);\r\n\t\t\t\treturn scrollTop >= stickyLinePositionTop();\r\n\t\t\t}\r\n\t\t\tfunction sticksAtPositionBottom(scrolledDistance) {\r\n\t\t\t\tscrolledDistance = scrolledDistance !== undefined ? scrolledDistance : (window.pageYOffset || bodyEl.scrollTop);\r\n\t\t\t\tvar scrollBottom = scrolledDistance + window.innerHeight;\r\n\t\t\t\treturn scrollBottom <= stickyLinePositionBottom();\r\n\t\t\t}\r\n\t\t\tfunction matchesMediaQuery() {\r\n\t\t\t\treturn stickyMediaQuery === false || mediaQuery.matches(stickyMediaQuery);\r\n\t\t\t}\r\n\r\n\t\t\tfunction render() {\r\n\t\t\t\tvar shouldStick = sticksAtPosition(anchor);\r\n\r\n\t\t\t\tif (angular.isDefined(options.enable) && !options.enable) {\r\n\t\t\t\t\tshouldStick = false;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (angular.isDefined(options.alwaysSticky) && options.alwaysSticky) {\r\n\t\t\t\t\tshouldStick = true;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Switch the sticky mode if the element crosses the sticky line\r\n\t\t\t\t// don't make the element sticky when it's already sticky\r\n\t\t\t\tif (shouldStick && !_isSticking) {\r\n\t\t\t\t\tstickElement();\r\n\t\t\t\t\tevent({event: 'stick'});\r\n\t\t\t\t}\r\n\t\t\t\t// don't unstick the element sticky when it isn't sticky already\r\n\t\t\t\telse if (!shouldStick && _isSticking) {\r\n\t\t\t\t\tunstickElement();\r\n\t\t\t\t\tevent({event: 'unstick'});\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// stick after care\r\n\t\t\t\tif (_isSticking) {\r\n\t\t\t\t\t// update the top offset at an already sticking element\r\n\t\t\t\t\tif (anchor === 'top') {\r\n\t\t\t\t\t\telement.css('top', (offsetTop + _stackOffset(anchor) - containerBoundsBottom()) + 'px');\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse if (anchor === 'bottom') {\r\n\t\t\t\t\t\telement.css('bottom', (offsetBottom + _stackOffset(anchor) - containerBoundsTop()) + 'px');\r\n\t\t\t\t\t}\r\n\t\t\t\t\telement.css('width', elementWidth() + 'px');\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tfunction stickElement() {\r\n\t\t\t\t_isSticking = true;\r\n\r\n\t\t\t\telement.addClass(stickyClass);\r\n\r\n\t\t\t\t// create placeholder to avoid jump\r\n\t\t\t\tif (usePlaceholder) {\r\n\t\t\t\t\tplaceholder = placeholder || angular.element('
    ');\r\n\t\t\t\t\tplaceholder.css('height', elementHeight() + 'px');\r\n\t\t\t\t\telement.after(placeholder);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvar rect = nativeEl.getBoundingClientRect();\r\n\t\t\t\tvar css = {\r\n\t\t\t\t\t'width': elementWidth() + 'px',\r\n\t\t\t\t\t'position': 'fixed',\r\n\t\t\t\t\t'left': rect.left + 'px',\r\n\t\t\t\t\t'z-index': stack ? stack.get(id).zIndex - (globalOffset.zIndex || 0) : null\r\n\t\t\t\t};\r\n\r\n\t\t\t\tcss['margin-' + anchor] = 0;\r\n\t\t\t\telement.css(css);\r\n\t\t\t}\r\n\t\t\tfunction unstickElement() {\r\n\t\t\t\t_isSticking = false;\r\n\r\n\t\t\t\telement.removeClass(stickyClass);\r\n\r\n\t\t\t\t// reset the original css we might have changed when the object was sticky\r\n\t\t\t\telement.attr('style', initialCSS.style);\r\n\r\n\t\t\t\t// if a placeholder was used, remove it from the DOM\r\n\t\t\t\tif (placeholder) {\r\n\t\t\t\t\tplaceholder.remove();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tfunction elementWidth() {\r\n\t\t\t\treturn nativeEl.offsetWidth;\r\n\t\t\t}\r\n\t\t\tfunction elementHeight() {\r\n\t\t\t\treturn nativeEl.offsetHeight;\r\n\t\t\t}\r\n\r\n\t\t\tfunction _getTopOffset(element) {\r\n\t\t\t\tvar pixels = 0;\r\n\t\t\t\tif (element && element.offsetParent) {\r\n\t\t\t\t\tdo {\r\n\t\t\t\t\t\tpixels += element.offsetTop;\r\n\t\t\t\t\t\telement = element.offsetParent;\r\n\t\t\t\t\t} while (element);\r\n\t\t\t\t}\r\n\t\t\t\treturn pixels;\r\n\t\t\t}\r\n\r\n\t\t\tfunction _getBottomOffset (element) {\r\n\t\t\t\treturn _getTopOffset(element) + element.clientHeight;\r\n\t\t\t}\r\n\r\n\t\t\tfunction _stackOffset(anchor) {\r\n\t\t\t\tvar extraOffset = 0;\r\n\r\n\t\t\t\tif (anchor === 'top' && globalOffset.top > 0) {\r\n\t\t\t\t\textraOffset += globalOffset.top;\r\n\t\t\t\t}\r\n\t\t\t\tif (anchor === 'bottom' && globalOffset.bottom > 0) {\r\n\t\t\t\t\textraOffset += globalOffset.bottom;\r\n\t\t\t\t}\r\n\t\t\t\tif (stack) {\r\n\t\t\t\t\tvar stickIndex = stack.index(id);\r\n\t\t\t\t\tif (anchor === 'top') {\r\n\t\t\t\t\t\tif (stickIndex > 0) {\r\n\t\t\t\t\t\t\t// @todo the stack range calculation should be diverted to the stack\r\n\t\t\t\t\t\t\tstack.range(0, stickIndex).forEach(function (stick) {\r\n\t\t\t\t\t\t\t\tif (stick.isSticky()) {\r\n\t\t\t\t\t\t\t\t\textraOffset += stick.computedHeight(anchor);\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\t\t\t\t\t}\r\n\t\t\t\t\tif (anchor === 'bottom') {\r\n\t\t\t\t\t\tif (stickIndex !== stack.length() - 1) {\r\n\t\t\t\t\t\t\t// @todo the stack range calculation should be diverted to the stack\r\n\t\t\t\t\t\t\tstack.range(stickIndex + 1, stack.length()).forEach(function (stick) {\r\n\t\t\t\t\t\t\t\tif (stick.isSticky()) {\r\n\t\t\t\t\t\t\t\t\textraOffset += stick.computedHeight(anchor);\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\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn extraOffset;\r\n\t\t\t}\r\n\t\t\tfunction _stackOffsetTop() { return _stackOffset('top'); }\r\n\t\t\tfunction _stackOffsetBottom() { return _stackOffset('bottom'); }\r\n\r\n\t\t\tfunction computedHeight(anchor, scrolledDistance) {\r\n\t\t\t\tif (anchor === 'top') {\r\n\t\t\t\t\treturn Math.max(0, elementHeight() - containerBoundsBottom(scrolledDistance) + offsetTop);\r\n\t\t\t\t}\r\n\t\t\t\telse if (anchor === 'bottom') {\r\n\t\t\t\t\treturn Math.max(0, elementHeight() - containerBoundsTop(scrolledDistance) + offsetBottom);\r\n\t\t\t\t}\r\n\t\t\t\treturn 0;\r\n\t\t\t}\r\n\r\n\t\t\t// @todo dffgdg\r\n\t\t\tfunction containerBoundsTop(scrolledDistance) {\r\n\t\t\t\tif (container === null) {\r\n\t\t\t\t\tcontainer = options.container !== undefined ? angular.isString(options.container) ? angular.element(documentEl.querySelector('#' + options.container))[0] : options.container : false;\r\n\t\t\t\t}\r\n\t\t\t\tif (container) {\r\n\t\t\t\t\tvar hasScrollDistance = !(scrolledDistance === null || scrolledDistance === undefined);\r\n\t\t\t\t\tvar containerRect = container.getBoundingClientRect();\r\n\t\t\t\t\tvar containerBottom = !hasScrollDistance ? containerRect.top - window.innerHeight + elementHeight() : (_getTopOffset(container) + containerRect.height) - scrolledDistance;\r\n\t\t\t\t\treturn Math.max(0, containerBottom - (offsetTop + _stackOffset(anchor)));\r\n\t\t\t\t}\r\n\t\t\t\treturn 0;\r\n\t\t\t}\r\n\t\t\tfunction containerBoundsBottom(scrolledDistance) {\r\n\t\t\t\tif (container === null) {\r\n\t\t\t\t\tcontainer = options.container !== undefined ? angular.isString(options.container) ? angular.element(documentEl.querySelector('#' + options.container))[0] : options.container : false;\r\n\t\t\t\t}\r\n\t\t\t\tif (container) {\r\n\t\t\t\t\tvar hasScrollDistance = !(scrolledDistance === null || scrolledDistance === undefined);\r\n\t\t\t\t\tvar containerRect = container.getBoundingClientRect();\r\n\t\t\t\t\tvar containerBottom = !hasScrollDistance ? containerRect.bottom : (_getTopOffset(container) + containerRect.height) - scrolledDistance;\r\n\t\t\t\t\treturn Math.max(0, (offsetTop + _stackOffset(anchor) + elementHeight()) - containerBottom);\r\n\t\t\t\t}\r\n\t\t\t\treturn 0;\r\n\t\t\t}\r\n\r\n\t\t\tvar $api = {};\r\n\r\n\t\t\tif (stack) {\r\n\t\t\t\t// add element to the sticky stack and save the id\r\n\t\t\t\tvar stackItem = stack.add(id, $api);\r\n\t\t\t\tid = stackItem.id;\r\n\t\t\t}\r\n\r\n\t\t\t$api.draw = function(drawOptions) {\r\n\t\t\t\tdrawOptions = drawOptions || {};\r\n\t\t\t\tvar offset = drawOptions.offset;\r\n\t\t\t\tif (offset) {\r\n\t\t\t\t\t// setting global offsets added to the local offsets of the sticky element\r\n\t\t\t\t\tglobalOffset.top = offset.top || 0;\r\n\t\t\t\t\tglobalOffset.bottom = offset.bottom || 0;\r\n\t\t\t\t\tglobalOffset.zIndex = offset.zIndex;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// for resizing or other purposes that require a forced re-draw, we simply un-stick the element and re-stick it using the render method\r\n\t\t\t\tif (drawOptions.force === true) {\r\n\t\t\t\t\tunstickElement();\r\n\t\t\t\t}\r\n\t\t\t\trender();\r\n\t\t\t};\r\n\r\n\t\t\t$api.anchor = function() {\r\n\t\t\t\treturn anchor;\r\n\t\t\t};\r\n\r\n\t\t\t$api.isSticky = isSticky;\r\n\t\t\t$api.isEnabled = isEnabled;\r\n\t\t\t$api.computedHeight = computedHeight;\r\n\t\t\t$api.sticksAtPosition = sticksAtPosition;\r\n\r\n\t\t\t$api.destroy = function() {\r\n\t\t\t\tunstickElement();\r\n\t\t\t\tif (stack) {\r\n\t\t\t\t\tstack.remove(id);\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\treturn $api;\r\n\t\t};\r\n\t}])\r\n\r\n\t.constant('DefaultStickyStackName', 'default-stack')\r\n\r\n\t.provider('hlStickyElementCollection', function() {\r\n\r\n\t\tvar $$count = 0;\r\n\r\n\t\tvar $stickyElement = {\r\n\t\t\tcollections: {},\r\n\t\t\tdefaults: {\r\n\t\t\t\tcheckDelay: 250\r\n\t\t\t},\r\n\t\t\telementsDefaults: {\r\n\r\n\t\t\t},\r\n\t\t\t$get: [\"$rootScope\", \"$window\", \"$document\", \"$log\", \"DefaultStickyStackName\", \"hlStickyElement\", \"hlStickyStack\", \"throttle\", function($rootScope, $window, $document, $log, DefaultStickyStackName, hlStickyElement, hlStickyStack, throttle) {\r\n\r\n\t\t\t\tvar windowEl = angular.element($window);\r\n\r\n\t\t\t\t// var unbindViewContentLoaded;\r\n\t\t\t\t// var unbindIncludeContentLoaded;\r\n\t\t\t\tvar throttledResize;\r\n\r\n\t\t\t\tfunction init() {\r\n\t\t\t\t\t$$count++;\r\n\r\n\t\t\t\t\t// make sure we can initialize it only once\r\n\t\t\t\t\tif ($$count > 1) {\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// bind events\r\n\t\t\t\t\tthrottledResize = throttle(resize, $stickyElement.defaults.checkDelay, {leading: false});\r\n\t\t\t\t\twindowEl.on('resize', throttledResize);\r\n\t\t\t\t\twindowEl.on('scroll', drawEvent);\r\n\r\n\t\t\t\t\t// unbindViewContentLoaded = $rootScope.$on('$viewContentLoaded', throttledResize);\r\n\t\t\t\t\t// unbindIncludeContentLoaded = $rootScope.$on('$includeContentLoaded', throttledResize);\r\n\t\t\t\t\tthrottledResize();\r\n\t\t\t\t}\r\n\r\n\t\t\t\tfunction destroy() {\r\n\t\t\t\t\t// check internal references counter\r\n\t\t\t\t\t$$count--;\r\n\t\t\t\t\tif ($$count > 0) {\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// unbind events\r\n\t\t\t\t\twindowEl.off('resize', throttledResize);\r\n\t\t\t\t\twindowEl.off('scroll', drawEvent);\r\n\t\t\t\t\t// unbindViewContentLoaded();\r\n\t\t\t\t\t// unbindIncludeContentLoaded();\r\n\t\t\t\t}\r\n\r\n\t\t\t\tfunction drawEvent() {\r\n\t\t\t\t\tdraw();\r\n\t\t\t\t}\r\n\t\t\t\tfunction resize() {\r\n\t\t\t\t\tdraw({force: true});\r\n\t\t\t\t}\r\n\t\t\t\tfunction draw(drawOptions) {\r\n\t\t\t\t\tangular.forEach($stickyElement.collections, function(collection) {\r\n\t\t\t\t\t\tcollection.draw(drawOptions);\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\r\n\t\t\t\tfunction stickyElementFactory(options) {\r\n\r\n\t\t\t\t\tif (!options || !angular.isObject(options)) {\r\n\t\t\t\t\t\t$log.warn('Must supply an options object');\r\n\t\t\t\t\t\toptions = {};\r\n\t\t\t\t\t}\r\n\t\t\t\t\toptions = angular.extend({}, $stickyElement.elementsDefaults, options);\r\n\r\n\t\t\t\t\tvar collectionName = options.name || DefaultStickyStackName;\r\n\r\n\t\t\t\t\t// use existing element collection\r\n\t\t\t\t\tif ($stickyElement.collections[collectionName]) {\r\n\t\t\t\t\t\treturn $stickyElement.collections[collectionName];\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tvar stickyStackFactory = hlStickyStack({\r\n\t\t\t\t\t\tname: collectionName\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\tvar trackedElements = [];\r\n\r\n\t\t\t\t\tvar $sticky = {};\r\n\r\n\t\t\t\t\t$sticky.addElement = function (element, stickyOptions) {\r\n\t\t\t\t\t\tstickyOptions = stickyOptions || {};\r\n\t\t\t\t\t\tstickyOptions.stack = stickyStackFactory;\r\n\t\t\t\t\t\tvar sticky = hlStickyElement(element, stickyOptions);\r\n\t\t\t\t\t\ttrackedElements.push({\r\n\t\t\t\t\t\t\tstickyElement: sticky,\r\n\t\t\t\t\t\t\telement: element\r\n\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\treturn sticky;\r\n\t\t\t\t\t};\r\n\r\n\t\t\t\t\t$sticky.removeElement = function(element) {\r\n\r\n\t\t\t\t\t\tvar toDelete;\r\n\t\t\t\t\t\tfor (var i = trackedElements.length; i--;) {\r\n\t\t\t\t\t\t\tif ((angular.isString(element) && '#' + trackedElements[i].element.id === element) || trackedElements[i].element === element) {\r\n\t\t\t\t\t\t\t\ttoDelete = i;\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tvar deletedElement = trackedElements.splice(toDelete, 1)[0];\r\n\t\t\t\t\t\tif (deletedElement) {\r\n\t\t\t\t\t\t\tdeletedElement.stickyElement.destroy();\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\treturn deletedElement;\r\n\t\t\t\t\t};\r\n\r\n\t\t\t\t\t$sticky.draw = function(drawOptions) {\r\n\t\t\t\t\t\tvar _drawOptions = {};\r\n\t\t\t\t\t\tif (options.parent) {\r\n\t\t\t\t\t\t\tvar parentStack = hlStickyStack({\r\n\t\t\t\t\t\t\t\tname: options.parent\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t_drawOptions.offset = {\r\n\t\t\t\t\t\t\t\ttop: parentStack.heightCurrent('top'),\r\n\t\t\t\t\t\t\t\tzIndex: parentStack.length()\r\n\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tangular.extend(_drawOptions, drawOptions || {});\r\n\t\t\t\t\t\tangular.forEach(trackedElements, function(element) {\r\n\t\t\t\t\t\t\telement.stickyElement.draw(_drawOptions);\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t};\r\n\r\n\t\t\t\t\t$sticky.destroy = function() {\r\n\t\t\t\t\t\tangular.forEach(angular.copy(trackedElements), function(element) {\r\n\t\t\t\t\t\t\t$sticky.removeElement(element);\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t\tdelete $stickyElement.collections[collectionName];\r\n\t\t\t\t\t\tdestroy();\r\n\t\t\t\t\t};\r\n\r\n\t\t\t\t\t$sticky.trackedElements = function() {\r\n\t\t\t\t\t\treturn trackedElements;\r\n\t\t\t\t\t};\r\n\r\n\t\t\t\t\t// use new element collection\r\n\t\t\t\t\t$stickyElement.collections[collectionName] = $sticky;\r\n\t\t\t\t\tinit();\r\n\r\n\t\t\t\t\treturn $sticky;\r\n\t\t\t\t}\r\n\t\t\t\treturn stickyElementFactory;\r\n\t\t\t}]\r\n\t\t};\r\n\t\treturn $stickyElement;\r\n\t})\r\n\r\n\t.directive('hlSticky', [\"$log\", \"$window\", \"$document\", \"hlStickyElementCollection\", function($log, $window, $document, hlStickyElementCollection) {\r\n\t\treturn {\r\n\t\t\trestrict: 'A',\r\n\t\t\tscope: {\r\n\t\t\t\tcontainer: '@',\r\n\t\t\t\tanchor: '@',\r\n\t\t\t\tstickyClass: '@',\r\n\t\t\t\tmediaQuery: '@',\r\n\t\t\t\tcollection: '@',\r\n\t\t\t\tcollectionParent: '@',\r\n\t\t\t\tevent: '&',\r\n\t\t\t\tenable: '=',\r\n\t\t\t\talwaysSticky: '='\r\n\t\t\t},\r\n\t\t\tlink: function($scope, $element, $attrs) {\r\n\t\t\t\t$element.addClass('hl-sticky');\r\n\r\n\t\t\t\tvar stickyElementCollection = hlStickyElementCollection({\r\n\t\t\t\t\tname: $scope.collection,\r\n\t\t\t\t\tparent: $scope.collectionParent\r\n\t\t\t\t});\r\n\t\t\t\tvar options = {\r\n\t\t\t\t\tid: $attrs.hlSticky,\r\n\t\t\t\t\tevent: function(event) {\r\n\t\t\t\t\t\t$scope.event({\r\n\t\t\t\t\t\t\tevent: event\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\tangular.forEach(['anchor', 'container', 'stickyClass', 'mediaQuery', 'enable', 'alwaysSticky'], function(option) {\r\n\t\t\t\t\tif (angular.isDefined($scope[option])) {\r\n\t\t\t\t\t\toptions[option] = $scope[option];\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t\tangular.forEach(['usePlaceholder', 'offsetTop', 'offsetBottom'], function(option) {\r\n\t\t\t\t\tif (angular.isDefined($attrs[option])) {\r\n\t\t\t\t\t\toptions[option] = $scope.$parent.$eval($attrs[option]);\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t\tstickyElementCollection.addElement($element, options);\r\n\r\n\t\t\t\t// listeners\r\n\t\t\t\t$scope.$watch('enable', function (newValue, oldValue) {\r\n\t\t\t\t\tif (newValue !== oldValue) {\r\n\t\t\t\t\t\toptions.enable = $scope.enable;\r\n\t\t\t\t\t\tstickyElementCollection.draw({force: true});\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t\t$scope.$watch('alwaysSticky', function (newValue, oldValue) {\r\n\t\t\t\t\tif (newValue !== oldValue) {\r\n\t\t\t\t\t\toptions.alwaysSticky = $scope.alwaysSticky;\r\n\t\t\t\t\t\tstickyElementCollection.draw({force: true});\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t\t$scope.$on('$destroy', function onDestroy() {\r\n\t\t\t\t\tstickyElementCollection.removeElement($element);\r\n\t\t\t\t\tif (!stickyElementCollection.trackedElements().length) {\r\n\t\t\t\t\t\tstickyElementCollection.destroy();\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t};\r\n\t}])\r\n\r\n\t.factory('throttle', [\"$timeout\", function($timeout) {\r\n\t\treturn function(func, wait, options) {\r\n\t\t\tvar timeout = null;\r\n\t\t\toptions = options || {};\r\n\t\t\treturn function() {\r\n\t\t\t\tvar that = this;\r\n\t\t\t\tvar args = arguments;\r\n\r\n\t\t\t\tif (!timeout) {\r\n\t\t\t\t\tif (options.leading !== false) {\r\n\t\t\t\t\t\tfunc.apply(that, args);\r\n\t\t\t\t\t}\r\n\t\t\t\t\ttimeout = $timeout(function later() {\r\n\t\t\t\t\t\ttimeout = null;\r\n\t\t\t\t\t\tif (options.trailing !== false) {\r\n\t\t\t\t\t\t\tfunc.apply(that, args);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}, wait, false);\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t};\r\n\t}]);","/*\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 images.splice(i, 1);\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 if (photo.addClassToParent) {\r\n photo.$elem.parent().removeClass(options.successClass);\r\n }\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, photo.srcset);\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 if (typeof photo.spinner !== 'undefined') {\r\n stopSpinner(photo);\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 if (typeof photo.spinner !== 'undefined') {\r\n startSpinner(photo);\r\n }\r\n\r\n img.src = photo.src;\r\n }\r\n\r\n function startSpinner(photo) {\r\n var spinner = photo.spinner;\r\n $(spinner.el).removeClass('out');\r\n spinner.spin(photo.$elem.parent()[0]);\r\n setTimeout(function () {\r\n $(spinner.el).addClass('in');\r\n });\r\n }\r\n function stopSpinner(photo) {\r\n var spinner = photo.spinner;\r\n $(spinner.el).removeClass('in').addClass('out');\r\n setTimeout(function () {\r\n spinner.stop();\r\n photo.spinner = null;\r\n }, spinner.delay);\r\n }\r\n\r\n function setPhotoSrc($elem, src, srcset) {\r\n if ($elem[0].nodeName.toLowerCase() === 'img') {\r\n $elem[0].src = src;\r\n if (srcset) {\r\n $elem[0].srcset = srcset;\r\n }\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.setSpinner = function (spinner) {\r\n this.spinner = spinner;\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 };\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\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 // Spinner\r\n if (!angular.isDefined(attrs.noSpinner)) {\r\n var theme = angular.isDefined(attrs.spinnerTheme) ? attrs.spinnerTheme : 'small';\r\n var options = angular.extend({},\r\n usSpinnerConfig.config,\r\n usSpinnerConfig.themes[theme]);\r\n var spinner = new Spinner(options);\r\n spinner.delay = usSpinnerConfig.delay;\r\n lazyImage.setSpinner(spinner);\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(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});\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","/*! ngclipboard - v1.1.1 - 2016-02-26\r\n* https://github.com/sachinchoolur/ngclipboard\r\n* Copyright (c) 2016 Sachin; Licensed MIT */\r\n\r\n(function () {\r\n\t'use strict';\r\n\r\n\tangular\r\n\t.module('directive.ngclipboard', [])\r\n\r\n\t/* @ngInject */\r\n\t.directive('ngclipboard', function() {\r\n\t\treturn {\r\n\t\t\trestrict: 'A',\r\n\t\t\tscope: {\r\n\t\t\t\tngclipboardSuccess: '&',\r\n\t\t\t\tngclipboardError: '&'\r\n\t\t\t},\r\n\t\t\tlink: function(scope, element) {\r\n\t\t\t\tvar clipboard = new window.Clipboard(element[0]);\r\n\r\n\t\t\t\tclipboard.on('success', function(e) {\r\n\t\t\t\t\tscope.$apply(function () {\r\n\t\t\t\t\t\tscope.ngclipboardSuccess({\r\n\t\t\t\t\t\t\te: e\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\tclipboard.on('error', function(e) {\r\n\t\t\t\t\tscope.$apply(function () {\r\n\t\t\t\t\t\tscope.ngclipboardError({\r\n\t\t\t\t\t\t\te: e\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}\r\n\t\t};\r\n\t});\r\n\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\\': 1042 + (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\\': 1070 + $$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 /* @ngInject */\r\n .controller('uploadCropModalCtrl', [\"data\", \"device\", \"options\", \"$scope\", \"ModalService\", \"$uibModalInstance\", function (data, device, options, $scope, ModalService, $uibModalInstance) {\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 var cropper;\r\n\r\n $uibModalInstance.rendered.then(function () {\r\n init();\r\n });\r\n\r\n ctrl.plus = function () {\r\n cropper.zoom(0.1);\r\n };\r\n ctrl.minus = function () {\r\n cropper.zoom(-0.1);\r\n };\r\n ctrl.rotate = function () {\r\n cropper.rotate(90);\r\n };\r\n\r\n ctrl.save = function () {\r\n var dropzone = ctrl.data.ctrlFrom.dzMethods.getDropzone();\r\n dropzone.options.url = '/Upload';\r\n var blob = cropper.getCroppedCanvas(\r\n {\r\n width: 240,\r\n height: 240,\r\n fillColor: '#fff',\r\n imageSmoothingEnabled: true,\r\n imageSmoothingQuality: 'high'\r\n })\r\n .toDataURL('image/jpeg');\r\n var croppedFile = dataURItoBlob(blob);\r\n croppedFile.name = ctrl.data.name;\r\n\r\n ctrl.data.ctrlFrom.tmpFileName = ctrl.data.name;\r\n dropzone.removeAllFiles();\r\n dropzone.addFile(croppedFile);\r\n\r\n ctrl.data.ctrlFrom.deleteTmpFile(ctrl.data.serverName);\r\n ModalService.close();\r\n };\r\n\r\n function init() {\r\n if (typeof Cropper === 'undefined') {\r\n $.ajax({\r\n url: '/js/cropper.min.js',\r\n dataType: 'script',\r\n cache: true,\r\n success: function () {\r\n ctrl.showLoader = false;\r\n initCropper();\r\n }\r\n });\r\n } else {\r\n initCropper();\r\n }\r\n }\r\n\r\n function initCropper() {\r\n cropper = new Cropper(document.getElementById('img_' + ctrl.data.tmpId), {\r\n aspectRatio: 1,\r\n movable: true,\r\n cropBoxResizable: true,\r\n rotatable: true,\r\n ready: function () {\r\n $(this.cropper.cropper).addClass('cropper-circle');\r\n }\r\n });\r\n }\r\n\r\n function dataURItoBlob(dataURI) {\r\n var byteString = atob(dataURI.split(',')[1]);\r\n var ab = new ArrayBuffer(byteString.length);\r\n var ia = new Uint8Array(ab);\r\n for (var i = 0; i < byteString.length; i++) {\r\n ia[i] = byteString.charCodeAt(i);\r\n }\r\n return new Blob([ab], { type: 'image/jpeg' });\r\n }\r\n\r\n }]);\r\n})();\r\n","(function () {\r\n 'use strict';\r\n angular\r\n .module('module.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 if (quality <= 0) {\r\n quality = 1;\r\n }\r\n if (quality > 100) {\r\n quality = 100;\r\n }\r\n\r\n url = url + '/' + id + '/' + size + '/' + _.kebabCase(_.deburr(designation)) + '.' + extension;\r\n if (quality !== 80) {\r\n url += '?quality=' + quality;\r\n }\r\n\r\n return url;\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 /* @ngInject */\r\n .directive('cdn', [\"CdnService\", function (CdnService) {\r\n return {\r\n restrict: 'A',\r\n priority: 100,\r\n scope: {\r\n cdnId: '@?',\r\n cdnSize: '@?',\r\n cdnDesignation: '@?',\r\n cdnExtension: '@?',\r\n cdnQuality: '@?',\r\n cdnAbsolute: '@?',\r\n cdnResponsiveSize: '@?',\r\n cdnResponsiveSizes: '.\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 $(document.body).prepend('
        ');\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 !== 'close' && 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(modal.result.$$state.value);\r\n }\r\n })\r\n .catch(function (error) {\r\n console.error(error);\r\n });\r\n modal.opened.then(function () {\r\n $('#tmpBackdrop').remove();\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 } else if (route.Controller.indexOf('Cart') !== -1) { // Panier\r\n var resolveObject = {\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\r\n if (route.Name === 'CartToken' || route.Name === 'CartPaymentError' || route.Name === 'CartPaymentRedirect') {\r\n // On ne change rien pour cette route\r\n when(route, {\r\n templateUrl: function () { return routingService.getLocation(); },\r\n name: route.Name\r\n });\r\n } else 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: resolveObject,\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: resolveObject,\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: resolveObject,\r\n authorize: true,\r\n ngRoute: true\r\n });\r\n }\r\n } else if (route.Name === 'CartQuotationPaymentList') {\r\n var resolveQuotation = {\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\r\n when(route, {\r\n templateUrl: function () {\r\n return routingService.getLocation();\r\n },\r\n name: route.Name,\r\n cart: true,\r\n resolve: resolveQuotation,\r\n ngRoute: true\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\", function ($q, $location, RoutingService) {\r\n return {\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 }\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 $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 || params.Account.IsManagementWishlistTracking;\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 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 };\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 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.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 = 'https://maps.googleapis.com/maps/api/js?key=' + params.Localization.GMAPKey + '&libraries=geometry,places&callback=';\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 var cantouch = ('ontouchstart' in document.documentElement) || ('ontouchstart' in window), // with detection for Chrome Touch Emulation\r\n hasw3ctouch = (window.PointerEvent || false) && ((navigator.maxTouchPoints > 0) || (navigator.msMaxTouchPoints > 0)), // IE11 pointer events\r\n istouch = cantouch || hasw3ctouch;\r\n return istouch;\r\n };\r\n \r\n\r\n\r\n this.wichUserAgent = function () {\r\n\r\n var userBro = navigator.userAgent;\r\n var f = navigator.userAgent.toLowerCase().indexOf('firefox') > -1;\r\n var moz = navigator.userAgent.indexOf('Mozilla') != -1;\r\n \r\n\r\n return f;\r\n \r\n }\r\n\r\n this.wichUserAgentSafari = function () {\r\n\r\n var userBro = navigator.userAgent;\r\n var safari = navigator.userAgent.toLowerCase().indexOf('safari') > -1;\r\n var chrome = navigator.userAgent.toLowerCase().indexOf('chrome') > -1;\r\n\r\n console.log(userBro + ' browser ' + safari + 'chrome' + chrome);\r\n \r\n if (chrome != true) {\r\n return safari;\r\n }\r\n \r\n\r\n }\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 on window resize with the match truthiness as the first argument.\r\n // Returns the current match truthiness.\r\n // The 'scope' parameter is optional. If it's not passed in, '$rootScope' is used.\r\n this.on = function (list, callback, scope) {\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.is(list);\r\n\r\n function listenerFunc() {\r\n safeApply(callback(that.is(list)), 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 // Executes the callback only when inside of the particular screensize.\r\n // The 'scope' parameter is optional. If it's not passed in, '$rootScope' is used.\r\n this.when = function (list, callback, scope) {\r\n WindowEventsService.listen(true, 'resize', function () {\r\n if (that.is(list) === true) {\r\n safeApply(callback(that.is(list)), scope);\r\n }\r\n }, 500);\r\n\r\n return that.is(list);\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\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\", \"ModalService\", \"LogService\", \"Routes\", \"DefaultLocalization\", function ($scope, $rootScope, $timeout, $location, HttpService, AppService, ModalService, LogService, Routes, DefaultLocalization) {\r\n var ctrl = this,\r\n unwatch,\r\n dropzone;\r\n\r\n ctrl.formData = {\r\n RememberMe: false,\r\n CustomerPro: 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 ProfilePicture: null\r\n };\r\n\r\n $timeout(function () {\r\n ctrl.formData.Address = '';\r\n ctrl.formData.AddressApartment = '';\r\n ctrl.formData.AddressBuilding = '';\r\n ctrl.formData.AddressLocality = '';\r\n ctrl.formData.Phone = '';\r\n ctrl.formData.MobilePhone = '';\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 maxFiles: 1,\r\n paramName: 'files',\r\n acceptedFiles: 'image/jpeg, images/jpg, image/png, image/gif',\r\n renameFilename: function (name) {\r\n return new Date().getTime() + '_!_' + name;\r\n }\r\n };\r\n\r\n ctrl.dzCallbacks = {\r\n addedfile: function () {\r\n ModalService.close();\r\n },\r\n complete: function (file) {\r\n if (file.name !== ctrl.tmpFileName) {\r\n ModalService.show(\r\n '/Template/Modal/ModalUploadCrop',\r\n {\r\n ctrlFrom: ctrl,\r\n name: file.name,\r\n serverName: file.serverName,\r\n tmpId: new Date().getTime()\r\n },\r\n null,\r\n 'uploadCropModalCtrl'\r\n );\r\n }\r\n ctrl.tmpFileName = '';\r\n dropzone.options.url = '/Upload/upload';\r\n },\r\n success: function (file) {\r\n ctrl.formData.ProfilePicture = {\r\n Name: file.name,\r\n ServerName: file.serverName\r\n };\r\n },\r\n removedfile: function () {\r\n if (ctrl.tmpFileName === '') {\r\n ctrl.formData.ProfilePicture = null;\r\n dropzone.options.url = '/Upload/upload';\r\n }\r\n }\r\n };\r\n\r\n ctrl.deleteTmpFile = function (serverName) {\r\n HttpService.get({\r\n url: '/Delete/upload/' + serverName,\r\n cache: false\r\n })\r\n .then(function () {\r\n })\r\n .catch(function (error) {\r\n console.error(error);\r\n });\r\n };\r\n\r\n $scope.$on('dropzone', function (event, object) {\r\n dropzone = object;\r\n dropzone.options.url = '/Upload/upload';\r\n });\r\n\r\n ctrl.submit = function () {\r\n\r\n ctrl.formData.ConfirmEmail = ctrl.formData.Email;\r\n\r\n $rootScope.$broadcast('showPageLoader', true);\r\n\r\n ctrl.formData.errors = {};\r\n\r\n HttpService.post({\r\n url: '/AccountCreate',\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 AppService.getParams(true)\r\n .then(function () {\r\n $rootScope.$broadcast('login');\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 .catch(function (error) {\r\n console.error(error);\r\n });\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 $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 ctrl.$onInit = function () {\r\n ctrl.dzMethods = {};\r\n };\r\n\r\n ctrl.$onDestroy = function () {\r\n if (typeof unwatch !== 'undefined') {\r\n unwatch();\r\n }\r\n };\r\n\r\n unwatch = $scope.$watch('accountCtrl.formData.CustomerPro', function (value) {\r\n if (!value) {\r\n ctrl.formData.IDCompanyTitle = '';\r\n ctrl.formData.Company = '';\r\n ctrl.formData.Siret = '';\r\n ctrl.formData.IDActivity = '';\r\n ctrl.formData.IDActivityDomain = '';\r\n $timeout(function () {\r\n $('#IDCompanyTitle').selectpicker('val', '');\r\n });\r\n }\r\n $timeout(function () {\r\n ctrl.formCreate.$resetValidation();\r\n });\r\n });\r\n\r\n ctrl.toggleCustomerPro = function (event) {\r\n if (event.which === 13) {\r\n event.preventDefault();\r\n ctrl.formData.CustomerPro = !ctrl.formData.CustomerPro;\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})();\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\", \"AppService\", function ($scope, $timeout, 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 ctrl.toggleAccountCreate = function () {\r\n ctrl.createOpen = !ctrl.createOpen;\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\", function ($scope, $rootScope, $timeout, $location, AccountService, AppService, LogService, ModalService) {\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($scope.formData)\r\n .then(function (response) {\r\n if (response.status === 'OK') {\r\n AppService.getParams(true)\r\n .then(function (data) {\r\n $rootScope.$broadcast('login');\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 $scope.showLoader = false;\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, key) {\r\n if (key === 'Global') {\r\n $scope.formData.errors[key] = translate.errors[error.Errors[0].ErrorMessage];\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 .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 };\r\n\r\n }])\r\n\r\n /* @ngInject */\r\n .controller('loginModalCtrl', [\"data\", \"device\", \"options\", \"$scope\", \"$rootScope\", \"$location\", \"$uibModalInstance\", \"$route\", \"$window\", \"AppService\", \"LogService\", \"RoutesService\", \"ModalService\", function (data, device, options, $scope, $rootScope, $location, $uibModalInstance, $route, $window, AppService, LogService, RoutesService, ModalService) {\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($scope.formData)\r\n .then(function (response) {\r\n if (response.status === 'OK') {\r\n AppService.getParams(true)\r\n .then(function () {\r\n $rootScope.$broadcast('login');\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);\r\n }\r\n LogService.redirect = null;\r\n } else {\r\n //$route.reload();\r\n $window.location.href = window.location.href;\r\n }\r\n $scope.showLoader = false;\r\n $uibModalInstance.close();\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, key) {\r\n if (key === 'Global') {\r\n $scope.formData.errors[key] = translate.errors[error.Errors[0].ErrorMessage];\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 .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 };\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\t\t\t$('html, body').animate({ scrollTop: 0 }, 350);\r\n } else {\r\n $scope.$emit('showPageLoader', false);\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 })\r\n .catch(function (error) {\r\n console.error(error);\r\n });\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\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\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 update(true);\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 else {\r\n $route.reload();\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\r\n // Functions\r\n\r\n $scope.$on('userUpdate', function () {\r\n update(true);\r\n });\r\n\r\n $scope.$on('login', function () {\r\n update();\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\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 refresh = refresh || false;\r\n AppService.getParams(refresh)\r\n .then(function (params) {\r\n ctrl.isLogged = params.IsLogged;\r\n if (ctrl.isLogged) {\r\n ctrl.visitor = params.Visitor.FullName;\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('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.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 titleBrand: '@',\r\n titleReview: '@',\r\n titleType: '@',\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\", \"smoothScroll\", function ($scope, $rootScope, $timeout, $location, $document, AppService, RoutingService, RoutesService, CategoryFiltersCacheService, CategoryService, CategoryCacheService, 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 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 ctrl.setFacet = function (item, itemValue, initCheck) {\r\n var facet = _.find(ctrl.FacetsSelected, { 'Id': item.Id });\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 group: item.Name,\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 } 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 ctrl.setBrand = function (item) {\r\n selectFilter(item, 'b', ctrl.BrandsSelected);\r\n };\r\n ctrl.setReview = function (item) {\r\n selectFilter(item, 'r', ctrl.ReviewsSelected, 'reviews');\r\n };\r\n ctrl.setType = function (item) {\r\n selectFilter(item, 't', ctrl.ProductTypesSelected);\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 var group;\r\n switch (type) {\r\n case 'b':\r\n group = ctrl.titleBrand;\r\n break;\r\n case 'r':\r\n group = ctrl.titleReview;\r\n break;\r\n case 't':\r\n group = ctrl.titleType;\r\n break;\r\n }\r\n if (byName) {\r\n if (item.selected) {\r\n target.push(String(item.Name));\r\n ctrl.selected.push({\r\n group: group,\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 } 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 });\r\n ctrl.selected.push({\r\n group: group,\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 } 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 _.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 ctrl.selected.push({\r\n id: min + ',' + max,\r\n name: 'de ' + min + ' € à ' + max + ' €',\r\n type: 'p',\r\n selectId: min + ',' + max,\r\n isPrices: true\r\n });\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.sort ? '/' + routing.to.params.sort : '');\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\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 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 _.each(ctrl.filters.facets, function (item) {\r\n item.selectedCount = 0;\r\n _.each(item.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 (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.ref = _.camelCase(itemValue.checkValue);\r\n }\r\n if (item.Type === 'Numérique') {\r\n itemValue.checkValue = parseInt(itemValue.checkValue);\r\n itemValue.selectedValue = parseInt(itemValue.checkValue);\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' && 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\r\n if ($location.search().fs !== undefined) {\r\n ctrl.words = _.replace($location.search().fs, /\\|/g, ' ').split(',');\r\n filtered = true;\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 };\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) 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) || (this.ctrl.api.page === 1 && !this.ctrl.infiniteScroll)) 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 })\r\n .catch(function (error) {\r\n console.error(error);\r\n });\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 },\r\n controllerAs: 'categoryCtrl',\r\n /* @ngInject */\r\n controller: [\"$scope\", \"$element\", \"$rootScope\", \"$document\", \"$timeout\", \"$location\", \"$filter\", \"InfiniteScrollApi\", \"productsGridService\", \"CategoryCacheService\", \"CategoryService\", \"RoutingService\", \"RoutesService\", function ($scope, $element, $rootScope, $document, $timeout, $location, $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 && key.indexOf('fbclid') === -1) {\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 ctrl.iScrollPage = Math.floor(ctrl.currentPage / ctrl.iScrollMaxPages) + 1;\r\n ctrl.iScrollNbPerPage = ctrl.api.nbPerPage * ctrl.iScrollMaxPages;\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('productsGrid', 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.activateInfiniteScroll = function () {\r\n ctrl.infiniteScroll = true;\r\n ctrl.api.nextSearchPage();\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\", \"RoutesService\", \"RoutingService\", \"HttpService\", function ($filter, 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 };\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 var i,\r\n j,\r\n len = data.length,\r\n arr = [];\r\n for (i = 0; i < len; i++) {\r\n var obj = {},\r\n current = data[i];\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.KeyWebAspect = current.KeyWebAspect;\r\n obj.HTMLShortDescription = current.HTMLShortDescription;\r\n obj.Price = current.Price;\r\n obj.Availability = current.Availability.AvailabilityMessage;\r\n obj.IsGroupingProduct = current.IsGroupingProduct;\r\n obj.IsCustomizable = current.IsCustomizable;\r\n obj.AllowAddToCart = current.AllowAddToCart;\r\n\r\n for (j = 0; j < obj.Themes.length; j++) {\r\n var th = obj.Themes[j];\r\n if (th.KeyTheme === 'Comparateur') {\r\n obj.isComparable = true;\r\n }\r\n }\r\n\r\n if (obj.KeyWebAspect === 'Photos') {\r\n obj.isPhotos = true;\r\n }\r\n\r\n\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\r\n /* Optionnal\r\n\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 obj.Brand = current.Brand.Designation;\r\n obj.NbColorNumber = current.Properties[0].NumericValue;\r\n obj.NbColor = current.Properties[0].NumericValue + ' coloris disponibles';\r\n\r\n\r\n if (obj.NbColorNumber > '1') {\r\n obj.noColor = '';\r\n } else {\r\n obj.noColor = 'noColor';\r\n }\r\n\r\n arr.push(obj);\r\n }\r\n return arr;\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 var routing = RoutingService.get(),\r\n url,\r\n routeUrl;\r\n\r\n if (idCategory) {\r\n routeUrl = '/' + RoutesService.getUrlByName('SortedCategoryPage');\r\n url = routeUrl\r\n .replace('{categoryName}', routing.to.params.categoryName)\r\n .replace('{categoryId:int}', idCategory)\r\n .replace('{page:int}', page)\r\n .replace('{sortType:alpha}', sort);\r\n } else {\r\n routeUrl = '/' + RoutesService.getUrlByName(routing.to.name.indexOf('SearchProducts') !== -1 ? 'SearchProducts' : 'Search');\r\n url = routeUrl + '?q=' + search + '&p=' + page + '&sort=' + sort;\r\n }\r\n\r\n return HttpService.get({\r\n url: url,\r\n cache: true\r\n })\r\n .then(function (data) {\r\n data.products = setProducts(data.products);\r\n return data;\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 case 'DATE':\r\n sortParam = { FieldName: 'Date', SortType: 'desc' };\r\n break;\r\n default:\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 data.products = setProducts(data.products);\r\n return 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})();\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 unwatch;\r\n\r\n ctrl.formData = {\r\n Attachments: [],\r\n errors: {}\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 ctrl.focus = function () {\r\n ctrl.formData.errors.Global = null;\r\n };\r\n\r\n ctrl.init = function (object) {\r\n ctrl.formData.CustomerPro = object.CustomerPro === 'True' ? true : false;\r\n\r\n unwatch = $scope.$watch('formCtrl.formData.CustomerPro', function (value) {\r\n if (!value) {\r\n ctrl.formData.IDCompanyTitle = '';\r\n ctrl.formData.Company = '';\r\n $timeout(function () {\r\n $('#IDCompanyTitle').selectpicker('val', '');\r\n });\r\n }\r\n });\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 $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('MessageContactAdd'),\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 ctrl.toggleCustomerPro = function (event) {\r\n if (event.which === 13) {\r\n event.preventDefault();\r\n ctrl.formData.CustomerPro = !ctrl.formData.CustomerPro;\r\n }\r\n };\r\n }])\r\n\r\n /* @ngInject */\r\n .controller('CatalogRequestController', [\"$scope\", \"$timeout\", \"HttpService\", \"AppService\", \"FormService\", \"smoothScroll\", \"RoutesService\", function ($scope, $timeout, HttpService, AppService, FormService, smoothScroll, RoutesService) {\r\n var ctrl = this,\r\n unwatch;\r\n\r\n ctrl.formData = {\r\n errors: {}\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 ctrl.focus = function () {\r\n ctrl.formData.errors.Global = null;\r\n };\r\n\r\n ctrl.init = function (object) {\r\n ctrl.formData.CustomerPro = object.CustomerPro === 'True' ? true : false;\r\n\r\n unwatch = $scope.$watch('formCtrl.formData.CustomerPro', function (value) {\r\n if (!value) {\r\n ctrl.formData.IDCompanyTitle = '';\r\n ctrl.formData.Company = '';\r\n $timeout(function () {\r\n $('#IDCompanyTitle').selectpicker('val', '');\r\n });\r\n }\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 (event) {\r\n event.preventDefault();\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 ctrl.formData.errors = {};\r\n\r\n HttpService.post({\r\n url: '/' + RoutesService.getUrlByName('MessageCatalogRequestAdd'),\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 ctrl.toggleCustomerPro = function (event) {\r\n if (event.which === 13) {\r\n event.preventDefault();\r\n ctrl.formData.CustomerPro = !ctrl.formData.CustomerPro;\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-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 templateUrl: '/Template/Product/ProductCustomization',\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-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\", \"$scope\", \"$element\", \"$timeout\", \"productService\", \"HttpService\", \"WindowEventsService\", function ($rootScope, $scope, $element, $timeout, productService, HttpService, WindowEventsService) {\r\n\r\n var ctrl = this;\r\n\r\n ctrl.attributes = {};\r\n\r\n ctrl.$onInit = function () {\r\n\r\n getComponents(ctrl.idKit);\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 // Functions\r\n\r\n function resize() {\r\n $timeout(function () {\r\n resizeKits();\r\n });\r\n }\r\n\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.AdditionalCost = !element ? null : element.AdditionalCost;\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 $timeout(resizeKits);\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 resizeKits() {\r\n\r\n var $elem = $('.product-kit'),\r\n $divs = $elem.find('.row').find('.grid'); \r\n\r\n var col = $divs.eq(0).attr('class').split('col-' + ctrl.device.size + '-')[1];\r\n\r\n console.log('device' + ctrl.device.size);\r\n console.log('col' + col);\r\n\r\n if (!col) {\r\n return;\r\n }\r\n\r\n var nb = 12 / col.split(' ')[0];\r\n if (nb === 1) return;\r\n\r\n \r\n\r\n var i, j, targ, len = $divs.find('.product-item').length;\r\n for (i = 0; i < len; i += nb) {\r\n targ = $divs.slice(i, i + nb).find('.content');\r\n var n = targ.eq(0).children().length;\r\n for (j = 0; j < n; j++) {\r\n targ.find('.' + $(targ.eq(0).children().eq(j)).attr('class').split(' ')[0]).equalHeights();\r\n }\r\n }\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-gallery', [])\r\n\r\n /* @ngInject */\r\n .directive('listGallery', [\"$rootScope\", \"$compile\", \"CdnService\", function ($rootScope, $compile, 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('.inner'),\r\n $img = $main.find('.lazy');\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 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('initZoomList', function (event) { \r\n\r\n scope.productCtrl.galleryImgLoader = true;\r\n CdnService.get(attrs.zoomId, attrs.zoomSize)\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 });\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 /* 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\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 /* 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 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.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\", \"CdnService\", function ($rootScope, $compile, 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 $mainLeurre = element.find('.loaded');\r\n\r\n\r\n var $main = element.find('.main-picture'),\r\n $img = $main.find('.main-img'),\r\n $sub = element.find('#subPictures'),\r\n $video = element.find('.main-video');\r\n\r\n var openLightGallery = function () {\r\n\r\n\r\n var dynamicEl = [];\r\n $sub.find('.visual').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 thumbnail: navigator.userAgent.toLowerCase().match(/(iphone|ipod)/) ? false : true\r\n });\r\n };\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\r\n scope.productCtrl.galleryImgLoader = true;\r\n CdnService.get(attrs.zoomId, attrs.zoomSize)\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 });\r\n })\r\n .catch(function (err) {\r\n console.error(err);\r\n });\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('click', '.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 /* 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 openLightGallery();\r\n }\r\n });\r\n } else {\r\n openLightGallery();\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-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","\r\n(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('app.treviews', [])\r\n\r\n /* @ngInject */\r\n .service('TReviewsService', [\"$http\", function ($http) {\r\n this.get = function (id, page, nbPerPage, sort, filter) {\r\n\r\n return $http({\r\n method: 'GET',\r\n url: 'Reviews/' + id + '/' + page + '/' + nbPerPage + '/' + sort + '/' + filter,\r\n }).then(function (response) {\r\n console.log(response);\r\n return response.data;\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 .directive('tReviews', function () {\r\n\r\n return {\r\n\r\n restrict: 'A',\r\n bindToController: {\r\n idProduct:'='\r\n },\r\n controllerAs: 'trevCtrl',\r\n /* @ngInject */\r\n controller: [\"TReviewsService\", function (TReviewsService) {\r\n var ctrl = this;\r\n\r\n ctrl.currentPage = 1;\r\n ctrl.nbPerPage = 5;\r\n var currentSort = 'rateDESC';\r\n\r\n ctrl.$onInit = function () {\r\n\r\n console.log({ test: ctrl });\r\n update();\r\n\r\n };\r\n \r\n \r\n\r\n ctrl.pageChanged = function () {\r\n update();\r\n }\r\n\r\n\r\n ctrl.setSort = function (sort) {\r\n currentSort = sort;\r\n ctrl.currentPage = 1;\r\n update();\r\n };\r\n\r\n function update() {\r\n TReviewsService.get(ctrl.idProduct, ctrl.currentPage, ctrl.nbPerPage, currentSort, 0)\r\n .then(function (data) {\r\n ctrl.listReviews = data;\r\n ctrl.active = true;\r\n });\r\n }\r\n\r\n }]\r\n \r\n };\r\n\r\n })\r\n\r\n /* @ngInject */\r\n .directive('lastReview', function () {\r\n\r\n return {\r\n restrict: 'A',\r\n bindToController: {\r\n idProduct: '='\r\n },\r\n controllerAs: 'lastCtrl',\r\n\r\n /* @ngInject */\r\n controller: [\"TReviewsService\", function (TReviewsService) {\r\n var ctrl = this;\r\n\r\n\r\n ctrl.$onInit = function () {\r\n\r\n TReviewsService.get(ctrl.idProduct, 1, 1, 'dateDESC', 0)\r\n .then(function (data) {\r\n ctrl.Comment = data.Reviews.CurrentPageReviews[0].Comment;\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})();","(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 id: ' 0) {\r\n $element.removeClass('hidden');\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 * angucomplete-alt v3.0.0\r\n * Autocomplete directive for AngularJS\r\n * This is a fork of Daryl Rowland's angucomplete with some extra features.\r\n * By Hidenari Nozaki\r\n * https://github.com/ghiden/angucomplete-alt\r\n */\r\n\r\n(function () {\r\n 'use strict';\r\n\r\n angular\r\n\r\n .module('angucomplete-alt', [])\r\n\r\n .directive('angucompleteAlt', [\"$q\", \"$timeout\", function ($q, $timeout) {\r\n // keyboard events\r\n var KEY_DW = 40;\r\n var KEY_RT = 39;\r\n var KEY_UP = 38;\r\n var KEY_LF = 37;\r\n var KEY_ES = 27;\r\n var KEY_EN = 13;\r\n var KEY_TAB = 9;\r\n\r\n var MIN_LENGTH = 3;\r\n var MAX_LENGTH = 524288; // the default max length per the html maxlength attribute\r\n var PAUSE = 500;\r\n var BLUR_TIMEOUT = 2000000;\r\n\r\n // string constants\r\n var TEMPLATE_URL = 'autocomplete-template.html';\r\n\r\n function link(scope, elem, attrs) {\r\n var inputField = elem.find('input');\r\n var minlength = MIN_LENGTH;\r\n var searchTimer = null;\r\n var hideTimer;\r\n var validState = null;\r\n var httpCanceller = null;\r\n var httpCallInProgress = false;\r\n\r\n scope.currentIndex = null;\r\n scope.searching = false;\r\n\r\n scope.$on('angucomplete-alt:clearInput', function (event, elementId) {\r\n if (!elementId || elementId === scope.id) {\r\n scope.searchStr = null;\r\n callOrAssign();\r\n clearResults();\r\n }\r\n });\r\n\r\n scope.$on('angucomplete-alt:changeInput', function (event, elementId, newval) {\r\n if (!!elementId && elementId === scope.id) {\r\n handleInputChange(newval);\r\n }\r\n });\r\n\r\n scope.$on('angucomplete-alt:setFocus', function (event) {\r\n inputField.focus();\r\n });\r\n\r\n function handleInputChange(newval) {\r\n if (newval) {\r\n scope.searchStr = newval;\r\n }\r\n }\r\n\r\n function callOrAssign(value, str) {\r\n if (angular.isFunction(scope.selectedObject)) {\r\n scope.selectedObject(value, str);\r\n } else {\r\n scope.selectedObject = value;\r\n }\r\n }\r\n\r\n function setInputString(str) {\r\n callOrAssign({originalObject: str});\r\n\r\n if (scope.clearSelected) {\r\n scope.searchStr = null;\r\n }\r\n clearResults();\r\n }\r\n\r\n function keyupHandler(event) {\r\n var which = event.which;\r\n if (which === KEY_LF || which === KEY_RT) {\r\n // do nothing\r\n return;\r\n }\r\n\r\n if (which === KEY_UP || which === KEY_EN) {\r\n event.preventDefault();\r\n } else if (which === KEY_DW) {\r\n event.preventDefault();\r\n if (!scope.showDropdown && scope.searchStr && scope.searchStr.length >= minlength) {\r\n initResults();\r\n scope.searching = true;\r\n searchTimerComplete(scope.searchStr);\r\n }\r\n } else if (which === KEY_ES) {\r\n clearResults();\r\n scope.$apply(function () {\r\n inputField.val(scope.searchStr);\r\n });\r\n } else {\r\n if (minlength === 0 && !scope.searchStr) {\r\n return;\r\n }\r\n\r\n if (!scope.searchStr || scope.searchStr === '') {\r\n scope.showDropdown = false;\r\n } else if (scope.searchStr.length >= minlength) {\r\n initResults();\r\n\r\n if (searchTimer) {\r\n $timeout.cancel(searchTimer);\r\n }\r\n\r\n scope.searching = true;\r\n\r\n searchTimer = $timeout(function () {\r\n searchTimerComplete(scope.searchStr);\r\n }, scope.pause);\r\n }\r\n\r\n if (validState && validState !== scope.searchStr && !scope.clearSelected) {\r\n scope.$apply(function () {\r\n callOrAssign();\r\n });\r\n }\r\n }\r\n }\r\n\r\n function handleOverrideSuggestions(event) {\r\n if (scope.overrideSuggestions &&\r\n !(scope.selectedObject && scope.selectedObject[scope.matchField] === scope.searchStr)) {\r\n if (event) {\r\n event.preventDefault();\r\n }\r\n\r\n // cancel search timer\r\n $timeout.cancel(searchTimer);\r\n // cancel http request\r\n cancelHttpRequest();\r\n\r\n setInputString(scope.searchStr);\r\n }\r\n }\r\n\r\n function updateInputField() {\r\n var current = scope.results[scope.currentIndex];\r\n inputField.val(current[scope.matchField]);\r\n }\r\n\r\n function keydownHandler(event) {\r\n var which = event.which;\r\n\r\n if (which === KEY_EN && scope.results) {\r\n if (scope.currentIndex >= 0 && scope.currentIndex < scope.results.length) {\r\n event.preventDefault();\r\n scope.selectResult(scope.results[scope.currentIndex]);\r\n } else {\r\n scope.goSearch(scope.searchStr);\r\n if (searchTimer) {\r\n $timeout.cancel(searchTimer);\r\n }\r\n scope.searching = false;\r\n inputField.blur();\r\n handleOverrideSuggestions(event);\r\n clearResults();\r\n cancelHttpRequest();\r\n }\r\n scope.$apply();\r\n } else if (which === KEY_DW && scope.results) {\r\n event.preventDefault();\r\n if ((scope.currentIndex + 1) < scope.results.length && scope.showDropdown) {\r\n scope.$apply(function () {\r\n scope.currentIndex ++;\r\n updateInputField();\r\n });\r\n }\r\n } else if (which === KEY_UP && scope.results) {\r\n event.preventDefault();\r\n if (scope.currentIndex >= 1) {\r\n scope.$apply(function () {\r\n scope.currentIndex --;\r\n updateInputField();\r\n });\r\n } else if (scope.currentIndex === 0) {\r\n scope.$apply(function () {\r\n scope.currentIndex = -1;\r\n inputField.val(scope.searchStr);\r\n });\r\n }\r\n } else if (which === KEY_TAB) {\r\n if (scope.results && scope.results.length > 0 && scope.showDropdown) {\r\n if (scope.currentIndex === -1 && scope.overrideSuggestions) {\r\n // intentionally not sending event so that it does not\r\n // prevent default tab behavior\r\n handleOverrideSuggestions();\r\n } else {\r\n if (scope.currentIndex === -1) {\r\n scope.currentIndex = 0;\r\n }\r\n scope.selectResult(scope.results[scope.currentIndex]);\r\n scope.$digest();\r\n }\r\n } else if (scope.searchStr && scope.searchStr.length > 0) {\r\n handleOverrideSuggestions();\r\n }\r\n } else if (which === KEY_ES) {\r\n // This is very specific to IE10/11 #272\r\n // without this, IE clears the input text\r\n event.preventDefault();\r\n }\r\n }\r\n\r\n function httpSuccessCallbackGen(str) {\r\n return function (responseData, status, headers, config) {\r\n // normalize return object from promise\r\n if (!status && !headers && !config && responseData.data) {\r\n responseData = responseData.data;\r\n }\r\n scope.searching = false;\r\n processResults(scope.remoteUrlResponseFormatter(responseData, str), str);\r\n };\r\n }\r\n\r\n function httpErrorCallback(errorRes, status, headers, config) {\r\n scope.searching = httpCallInProgress;\r\n\r\n // normalize return obejct from promise\r\n if (!status && !headers && !config) {\r\n status = errorRes.status;\r\n }\r\n\r\n // cancelled/aborted\r\n if (status === 0 || status === -1) { return; }\r\n if (console && console.error) {\r\n console.error('http error');\r\n }\r\n }\r\n\r\n function cancelHttpRequest() {\r\n if (httpCanceller) {\r\n httpCanceller.resolve();\r\n }\r\n }\r\n\r\n function getRemoteResults(str) {\r\n cancelHttpRequest();\r\n\r\n httpCanceller = $q.defer();\r\n\r\n scope.remoteApiHandler(str, httpCanceller.promise)\r\n .then(httpSuccessCallbackGen(str))\r\n .catch(httpErrorCallback);\r\n }\r\n\r\n function clearResults() {\r\n scope.showDropdown = false;\r\n scope.results = [];\r\n if (scope.clearResults) {\r\n scope.clearResults();\r\n }\r\n }\r\n\r\n function initResults() {\r\n scope.showDropdown = true;\r\n scope.currentIndex = -1;\r\n scope.results = [];\r\n }\r\n\r\n function searchTimerComplete(str) {\r\n // Begin the search\r\n if (!str || str.length < minlength) {\r\n return;\r\n }\r\n getRemoteResults(str);\r\n }\r\n\r\n function processResults(responseData) {\r\n\r\n scope.results = responseData.results;\r\n\r\n if (responseData.results.length === 0) {\r\n scope.showDropdown = false;\r\n } else {\r\n scope.showDropdown = true;\r\n }\r\n }\r\n\r\n function showAll() {\r\n scope.searching = true;\r\n getRemoteResults('');\r\n }\r\n\r\n scope.onFocusHandler = function () {\r\n if (hideTimer) {\r\n $timeout.cancel(hideTimer);\r\n }\r\n if (scope.focusIn) {\r\n scope.focusIn();\r\n }\r\n };\r\n\r\n scope.hideResults = function () {\r\n hideTimer = $timeout(function () {\r\n clearResults();\r\n scope.showDropdown = false;\r\n scope.$apply(function () {\r\n if (scope.searchStr && scope.searchStr.length > 0) {\r\n inputField.val(scope.searchStr);\r\n }\r\n });\r\n }, BLUR_TIMEOUT);\r\n cancelHttpRequest();\r\n\r\n if (scope.focusOut) {\r\n scope.focusOut();\r\n }\r\n\r\n if (scope.overrideSuggestions) {\r\n if (scope.searchStr && scope.searchStr.length > 0 && scope.currentIndex === -1) {\r\n handleOverrideSuggestions();\r\n }\r\n }\r\n };\r\n\r\n scope.hoverRow = function (index) {\r\n scope.currentIndex = index;\r\n };\r\n\r\n\r\n scope.clickRow = function () {\r\n scope.showDropdown = false;\r\n scope.searchStr = '';\r\n };\r\n\r\n\r\n scope.selectResult = function (result) {\r\n var str = scope.searchStr;\r\n if (scope.clearSelected) {\r\n scope.searchStr = null;\r\n } else {\r\n scope.searchStr = result[scope.matchField];\r\n }\r\n callOrAssign(result, str);\r\n clearResults();\r\n };\r\n\r\n scope.inputChangeHandler = function (str) {\r\n if (str.length < minlength) {\r\n cancelHttpRequest();\r\n clearResults();\r\n } else if (str.length === 0 && minlength === 0) {\r\n showAll();\r\n }\r\n\r\n if (scope.inputChanged) {\r\n str = scope.inputChanged(str);\r\n }\r\n return str;\r\n };\r\n\r\n scope.goSearch = function () {\r\n clearResults();\r\n scope.ctrl.goSearch(scope.searchStr);\r\n };\r\n\r\n // check min length\r\n if (scope.minlength && scope.minlength !== '') {\r\n minlength = parseInt(scope.minlength, 10);\r\n }\r\n\r\n // check pause time\r\n if (!scope.pause) {\r\n scope.pause = PAUSE;\r\n }\r\n\r\n // check clearSelected\r\n if (!scope.clearSelected) {\r\n scope.clearSelected = false;\r\n }\r\n\r\n // check override suggestions\r\n if (!scope.overrideSuggestions) {\r\n scope.overrideSuggestions = false;\r\n }\r\n\r\n scope.inputType = attrs.type ? attrs.type : 'text';\r\n\r\n // set max length (default to maxlength deault from html\r\n scope.maxlength = attrs.maxlength ? attrs.maxlength : MAX_LENGTH;\r\n\r\n // register events\r\n inputField.on('keydown', keydownHandler);\r\n inputField.on('keyup compositionend', keyupHandler);\r\n\r\n }\r\n\r\n return {\r\n restrict: 'EA',\r\n scope: {\r\n selectedObject: '=',\r\n remoteUrlResponseFormatter: '=',\r\n remoteApiHandler: '=',\r\n id: '@',\r\n type: '@',\r\n placeholder: '@',\r\n inputClass: '@',\r\n pause: '@',\r\n minlength: '@',\r\n clearSelected: '@',\r\n overrideSuggestions: '@',\r\n inputChanged: '=',\r\n focusOut: '&',\r\n focusIn: '&',\r\n fieldTabindex: '@',\r\n inputName: '@',\r\n clearResults: '=',\r\n matchField: '@',\r\n ctrl: '<'\r\n },\r\n templateUrl: function (element, attrs) {\r\n return attrs.templateUrl || TEMPLATE_URL;\r\n },\r\n compile: function () {\r\n return link;\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.autocomplete-select', ['angucomplete-alt'])\r\n\r\n .directive('autoCompleteSelect', function () {\r\n return {\r\n restrict: 'E',\r\n scope: true,\r\n bindToController: {\r\n device: '<',\r\n action: '&',\r\n txtAddToList: '@',\r\n txtViewAndChoose: '@',\r\n onlyAllowAddToCart: ' 2) {\r\n reg = new RegExp(tmp, 'ig');\r\n matches = value.match(reg);\r\n if (matches) {\r\n value = value.replace(reg, '##' + matches[0] + '#/#');\r\n }\r\n }\r\n });\r\n\r\n var open = new RegExp('##', 'g'),\r\n close = new RegExp('#/#', 'g');\r\n value = value.replace(open, '').replace(close, '');\r\n return $sce.trustAsHtml(value).valueOf();\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.autocomplete', ['angucomplete-alt'])\r\n\r\n .directive('autoCompleteSearch', function () {\r\n return {\r\n restrict: 'E',\r\n scope: true,\r\n bindToController: {\r\n device: '<',\r\n textAllResults: '@',\r\n textCategories: '@',\r\n textAdvices: '@'\r\n },\r\n controllerAs: 'searchCtrl',\r\n /* @ngInject */\r\n controller: [\"$element\", \"$http\", \"$location\", \"$timeout\", \"$sce\", \"RoutesService\", function ($element, $http, $location, $timeout, $sce, RoutesService) {\r\n var ctrl = this;\r\n\r\n ctrl.$onInit = function () {\r\n resize();\r\n };\r\n\r\n ctrl.searchAPI = function (userInputString, timeoutPromise) {\r\n return $http.post('/Search/AutoCompleteQuery', {\r\n QueryFullText: userInputString,\r\n CategoryId: '',\r\n NbFrom: '0',\r\n NbSize: '30',\r\n withCatalogs: ctrl.device.xxs ? false : true\r\n }, {timeout: timeoutPromise});\r\n };\r\n\r\n ctrl.getResponse = function (data, str) {\r\n ctrl.products = [];\r\n ctrl.advices = [];\r\n ctrl.categories = [];\r\n\r\n\r\n $timeout(function () {\r\n //ctrl.products = data.results;\r\n ctrl.products = _.filter(data.results, function (o) {\r\n return o.KeyWebAspect === 'Default' || o.KeyWebAspect === 'Photos';\r\n });\r\n\r\n ctrl.advices = ctrl.device.xxs ? [] : _.filter(data.results, { KeyWebAspect: 'Advice' });\r\n ctrl.categories = data.categories;\r\n\r\n _.each(ctrl.products, function (value, key) {\r\n ctrl.products[key].designationHtml = findMatchString(ctrl.products[key].Designation, str);\r\n });\r\n _.each(ctrl.advices, function (value, key) {\r\n ctrl.advices[key].designationHtml = findMatchString(ctrl.advices[key].Designation, str);\r\n });\r\n _.each(ctrl.categories, function (value, key) {\r\n ctrl.categories[key].designationHtml = findMatchString(ctrl.categories[key].Designation, str) + ' (' + ctrl.categories[key].TotalProducts + ')';\r\n });\r\n\r\n setTimeout(function () {\r\n $element.find('.dropdown-menu, .scroll-container').scrollTop(0);\r\n $element.find('.dropdown-menu.with-img').trigger('scroll');\r\n }, 100);\r\n\r\n }, 100);\r\n\r\n return data;\r\n };\r\n\r\n ctrl.clearResults = function () {\r\n ctrl.products = ctrl.advices = ctrl.categories = null;\r\n };\r\n\r\n ctrl.searchCallback = function (selected) {\r\n $location.path(selected.URL);\r\n };\r\n\r\n ctrl.goSearch = function (str) {\r\n if (str && str !== '') {\r\n var url = RoutesService.get().Search.route + '/' + encodeURI(str.split(' ').join('+'));\r\n $location.path(url);\r\n }\r\n };\r\n\r\n // Functions\r\n\r\n function resize() {\r\n $timeout(function () {\r\n var pos = $element.offset().top + $element.height();\r\n $element.find('.products-menu').attr('style', 'max-height: calc(100vh - ' + Math.floor(pos + 55) + 'px)');\r\n $element.find('.scroll-container').attr('style', 'max-height: calc(100vh - ' + Math.floor(pos + 10) + 'px)');\r\n });\r\n }\r\n\r\n function findMatchString(value, str) {\r\n if (!value) { 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.replace(reg, '##' + matches[0] + '#/#');\r\n }\r\n }\r\n });\r\n\r\n var open = new RegExp('##', 'g'),\r\n close = new RegExp('#/#', 'g');\r\n value = value.replace(open, '').replace(close, '');\r\n return $sce.trustAsHtml(value).valueOf();\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.comparator', [])\r\n\r\n /* @ngInject */\r\n .component('comparator', {\r\n /* @ngInject */\r\n templateUrl: [\"$sce\", function ($sce) {\r\n return $sce.trustAsResourceUrl('/Template/Comparator/Comparator');\r\n }],\r\n /* @ngInject */\r\n controller: [\"$rootScope\", \"$timeout\", \"$location\", \"$element\", \"CompareService\", \"AppService\", \"$uibPosition\", function ($rootScope, $timeout, $location, $element, CompareService, AppService, $uibPosition) {\r\n var ctrl = this,\r\n unwatch;\r\n\r\n $timeout(function () {\r\n ctrl.count = CompareService.getNbProducts();\r\n if (typeof $location.search().open !== 'undefined') {\r\n toggle();\r\n }\r\n }, 3000);\r\n\r\n ctrl.$onDestroy = function () {\r\n if (unwatch !== null) {\r\n unwatch();\r\n }\r\n };\r\n\r\n unwatch = $rootScope.$on('comparatorCheckboxUpdate', function () {\r\n ctrl.count = CompareService.getNbProducts();\r\n });\r\n\r\n ctrl.empty = function (event) {\r\n event.stopPropagation();\r\n if (ctrl.opened) {\r\n toggle();\r\n }\r\n CompareService.empty();\r\n updateProductsData();\r\n $rootScope.$broadcast('comparatorUpdate');\r\n };\r\n\r\n ctrl.remove = function (id) {\r\n CompareService.remove(id);\r\n updateProductsData();\r\n };\r\n\r\n ctrl.toggle = function () {\r\n if (ctrl.count < 2) return;\r\n toggle();\r\n };\r\n\r\n // Functions\r\n\r\n function updateProductsData() {\r\n ctrl.properties = {};\r\n ctrl.products = [];\r\n ctrl.resized = false;\r\n\r\n var products = CompareService.get(),\r\n len = products.length,\r\n i;\r\n\r\n ctrl.showLoader = true;\r\n ctrl.count = len;\r\n ctrl.tmpProducts = [];\r\n for (i = 0; i < len; i++) {\r\n CompareService.getProduct(products[i])\r\n .then(function (data) {\r\n ctrl.tmpProducts.push(data);\r\n if (ctrl.tmpProducts.length === ctrl.count) {\r\n setProperties();\r\n }\r\n })\r\n .catch(function (error) {\r\n console.error(error);\r\n });\r\n }\r\n }\r\n\r\n function setProperties() {\r\n AppService.getTranslate()\r\n .then(function (translate) {\r\n var len1 = ctrl.tmpProducts.length,\r\n len2,\r\n i, j, k;\r\n\r\n var tmp = {};\r\n for (i = 0; i < len1; i++) {\r\n var props = ctrl.tmpProducts[i].Properties;\r\n len2 = props.length;\r\n for (j = 0; j < len2; j++) {\r\n var prop = props[j];\r\n if (prop.IsInTable) {\r\n if (!tmp[prop.Designation]) {\r\n tmp[prop.Designation] = [];\r\n for (k = 0; k < len1; k++) {\r\n tmp[prop.Designation][k] = prop.PropertyType === 0 ? translate.messages.No : '';\r\n }\r\n }\r\n tmp[prop.Designation][i] = prop.PropertyType === 0 ? translate.messages.Yes : prop.TextValue;\r\n }\r\n }\r\n }\r\n ctrl.properties = tmp;\r\n ctrl.products = ctrl.tmpProducts;\r\n if (ctrl.opened) {\r\n if (ctrl.count < 2) {\r\n toggle();\r\n } else {\r\n $timeout(resizeProducts);\r\n }\r\n }\r\n\r\n $rootScope.$broadcast('comparatorUpdate');\r\n });\r\n }\r\n\r\n function resizeProducts() {\r\n var wLegend = 300;\r\n var wItem = 0;\r\n\r\n $element.find('table').css('width', '').find('.value').css('width', '');\r\n\r\n if ((ctrl.count * 400 + wLegend) < $(window).width()) {\r\n wItem = Math.floor(($(window).width() - wLegend) / ctrl.count);\r\n $element.find('table').find('.value').width(wItem);\r\n } else {\r\n $element.find('table').width(ctrl.count * 400 + wLegend);\r\n }\r\n\r\n $element.find('.product').each(function () {\r\n $(this).find('.name').equalHeights();\r\n });\r\n\r\n ctrl.resized = true;\r\n ctrl.showLoader = false;\r\n $rootScope.$broadcast('lazyImg:refresh');\r\n }\r\n\r\n function toggle() {\r\n ctrl.opened = !ctrl.opened;\r\n\r\n CompareService.toggle(ctrl.opened);\r\n\r\n var $body = $(document.body);\r\n if (ctrl.opened) {\r\n var scrollbarPadding = $uibPosition.scrollbarPadding($body.addClass('comparator-open'));\r\n if (scrollbarPadding.heightOverflow && scrollbarPadding.scrollbarWidth) {\r\n $body.addClass('comparator-open').css({ paddingRight: scrollbarPadding.right + 'px' });\r\n }\r\n updateProductsData();\r\n } else {\r\n $body.removeClass('comparator-open').css({ paddingRight: '0' });\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('compare.checkbox', [])\r\n\r\n /* @ngInject */\r\n .directive('compareCheckbox', function () {\r\n return {\r\n restrict: 'E',\r\n scope: true,\r\n bindToController: {\r\n id: '.\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('headerSearch', function () {\r\n var directive = {\r\n restrict: 'A',\r\n\r\n /* @ngInject */\r\n controller: [\"$rootScope\", \"$scope\", \"WindowEventsService\", function ($rootScope, $scope, WindowEventsService) {\r\n\r\n var ctrl = this;\r\n\r\n ctrl.$onInit = function () {\r\n searchMobile(); \r\n };\r\n\r\n //setTimeout(function () {\r\n // WindowEventsService.listen(true, 'resize', searchMobile, 500);\r\n //});\r\n\r\n $scope.$on('$destroy', function () {\r\n WindowEventsService.listen(false, 'resize', searchMobile);\r\n });\r\n\r\n\r\n\r\n\r\n\r\n // Functions\r\n\r\n function searchMobile(element) {\r\n\r\n //setTimeout(function () {\r\n\r\n // if ($scope.device.size == 'xl' || $scope.device.size == 'lg' || $scope.device.size == 'md') {\r\n // ctrl.isSearchMobileActive = true;\r\n // } else {\r\n // alert('SET TIME OUT ELSE');\r\n // ctrl.isSearchMobileActive = false;\r\n // }\r\n\r\n // ctrl.setSearchMobileActive = function () {\r\n // $rootScope.$broadcast('isSearchMobileActive');\r\n // ctrl.isSearchMobileActive = !ctrl.isSearchMobileActive;\r\n\r\n // setTimeout(function () {\r\n // $('.headerSearch').find('[ng-model=\"searchStr\"]').focus();\r\n // });\r\n\r\n // };\r\n\r\n //});\r\n \r\n\r\n if ($scope.device.size == 'xl' || $scope.device.size == 'lg' || $scope.device.size == 'md') {\r\n ctrl.isSearchMobileActive = true; \r\n } else {\r\n ctrl.isSearchMobileActive = false;\r\n }\r\n\r\n ctrl.setSearchMobileActive = function () {\r\n $rootScope.$broadcast('isSearchMobileActive');\r\n ctrl.isSearchMobileActive = !ctrl.isSearchMobileActive;\r\n\r\n setTimeout(function () {\r\n $('.headerSearch').find('[ng-model=\"searchStr\"]').focus();\r\n });\r\n\r\n };\r\n \r\n \r\n }\r\n\r\n\r\n $scope.$on('setSearchMobileActive', function () {\r\n ctrl.isSearchMobileActive = !ctrl.isSearchMobileActive;\r\n });\r\n\r\n\r\n //this.on(window, 'resize', this._handlers.onThrottledResize);\r\n\r\n //ctrl.$on(window, 'resize', function () {\r\n // console.log('redimensionner + redimensionner + redimensionner');\r\n //});\r\n\r\n \r\n }],\r\n controllerAs: 'headerSearchCtrl'\r\n };\r\n\r\n return directive;\r\n })\r\n \r\n /* @ngInject */\r\n .directive('rbMainNav', function () {\r\n var directive = {\r\n restrict: 'A',\r\n bindToController: true,\r\n controller: function () {\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 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 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\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.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 && !scope.device.desktop ) {\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\r\n scope.reduceMenu = function () {\r\n\r\n \r\n\r\n var $menu = element.children('.menu');\r\n if (!$menu.length) return;\r\n\r\n \r\n\r\n element.children('a').removeClass('in');\r\n element.children('.backdrop').remove();\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 event.preventDefault();\r\n\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\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 return;\r\n }\r\n scope.reduceMenu();\r\n }\r\n $location.path(element.children('a').attr('href'));\r\n\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\r\n\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.on('click', 'a', function (event) {\r\n if (scope.device.desktop && !scope.device.isTouch) {\r\n scope.reduceMenu();\r\n }\r\n\r\n if (scope.device.desktop && scope.device.isTouch && !element.hasClass('level1')) { \r\n $('#navMenu').find('.level1').children('a').removeClass('in');\r\n $('#navMenu').find('.level1').children('.menu').removeClass('in'); \r\n }\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('alma.widget', [])\r\n\r\n /* @ngInject */\r\n .directive('almaWidget', function () {\r\n return {\r\n restrict: 'E',\r\n controllerAs: 'almaCtrl',\r\n bindToController: {\r\n amount: '<',\r\n idCard: '<'\r\n },\r\n controller: [\"$window\", \"$timeout\", \"RoutesService\", \"HttpService\", function ($window, $timeout, RoutesService, HttpService) {\r\n var ctrl = this;\r\n var Alma = $window.AlmaWidgets;\r\n var Widgets = Alma.Widgets;\r\n var widget;\r\n var apiInfo;\r\n var isInit = false;\r\n\r\n ctrl.$onInit = function () {\r\n if (!apiInfo) {\r\n getApiInfo()\r\n .then(function (response) {\r\n apiInfo = response.results.apiInfo;\r\n\r\n var mode = apiInfo.IsProd ? Alma.ApiMode.LIVE : Alma.ApiMode.TEST;\r\n\r\n widget = Widgets.initialize(\r\n apiInfo.MerchantID, // ID marchand\r\n mode // mode de l'API (LIVE ou TEST)\r\n );\r\n\r\n setupWidget();\r\n isInit = true;\r\n });\r\n }\r\n };\r\n\r\n // Se lance à chaque changement d'un binding (ici amount)\r\n ctrl.$onChanges = function (changes) {\r\n if ((changes.amount && changes.amount.isFirstChange()) || !isInit) return;\r\n // ne pas lancer au oninit, mais juste quand la valeur du total change\r\n setupWidget();\r\n };\r\n\r\n // Met en place l'objet widget avec les éligibilités\r\n function setupWidget() {\r\n\r\n $timeout(function () {\r\n\r\n widget.add(Widgets.PaymentPlans, {\r\n container: '#alma-widget',\r\n purchaseAmount: ctrl.amount * 100,\r\n locale: 'fr',\r\n hideIfNotEligible: true,\r\n transitionDelay: 5500,\r\n plans: apiInfo.Plans,\r\n monochrome: false,\r\n });\r\n }, 1000);\r\n }\r\n\r\n // Récupère les infos api\r\n function getApiInfo() {\r\n var url = RoutesService.getUrlByName('AlmaGetApiInfos');\r\n return HttpService.get({\r\n url: url,\r\n cache: true\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\r\n }]\r\n };\r\n });\r\n})();\r\n","(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('app.store-detail', [])\r\n\r\n .directive('store', function () {\r\n return {\r\n restrict: 'E',\r\n bindToController: {\r\n device: '<',\r\n name: '@',\r\n latitude: '<',\r\n longitude: '<',\r\n model: '<',\r\n daysModel: '@days',\r\n strOneTime: '@oneTime',\r\n strTwoTimes: '@twoTimes',\r\n strClosed: '@closed'\r\n },\r\n controllerAs: 'storeCtrl',\r\n /* @ngInject */\r\n controller: [\"$window\", \"GMaps\", \"StoresService\", function ($window, GMaps, StoresService) {\r\n var ctrl = this;\r\n\r\n ctrl.$onInit = function () {\r\n ctrl.OpeningHours = _.cloneDeep(ctrl.model);\r\n ctrl.days = ctrl.daysModel.split(',');\r\n ctrl.model = null;\r\n ctrl.daysModel = null;\r\n\r\n StoresService.getOpeningHours(ctrl, ctrl.days, ctrl.strOneTime, ctrl.strTwoTimes, ctrl.strClosed);\r\n\r\n ctrl.loading = true;\r\n GMaps.get()\r\n .then(setMap)\r\n .catch(function (error) {\r\n console.error(error);\r\n });\r\n\r\n };\r\n\r\n ctrl.getMarkerOpts = function () {\r\n return {\r\n title: null,\r\n icon: { url: '/img/gmap/store-gmap-active.png', labelOrigin: new google.maps.Point(20, 70) },\r\n label: { text: ctrl.name, fontWeight: 'bold' },\r\n zIndex: 3\r\n };\r\n };\r\n\r\n ctrl.activeTab = function () {\r\n $window.dispatchEvent(new CustomEvent('resize'));\r\n };\r\n\r\n // Functions\r\n\r\n function setMap() {\r\n ctrl.markers = [];\r\n ctrl.markers.push({\r\n id: 0,\r\n lat: ctrl.latitude,\r\n lng: ctrl.longitude\r\n });\r\n\r\n ctrl.options = {\r\n map: {\r\n center: new google.maps.LatLng(ctrl.latitude, ctrl.longitude),\r\n zoom: 8,\r\n styles: [{'stylers': [{'saturation': -100}, {'lightness': 50}]}]\r\n }\r\n };\r\n\r\n ctrl.showMap = true;\r\n ctrl.loading = 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('app.stores-service', [])\r\n\r\n /* @ngInject */\r\n .factory('StoresService', [\"$filter\", \"DateService\", function ($filter, DateService) {\r\n var address;\r\n\r\n return {\r\n setAddress: function (value) {\r\n address = value;\r\n },\r\n getAddress: function () {\r\n return address;\r\n },\r\n getOpeningHours: function (point, days, strOneTime, strTwoTimes, strClosed) {\r\n if (point.OpeningHours[0].Date) {\r\n var tmp = [];\r\n _.each(point.OpeningHours, function (day, i) {\r\n var obj = {\r\n day: days[i]\r\n };\r\n\r\n if (day.IsOpen) {\r\n var date, format, amStart, amEnd, pmStart, pmEnd;\r\n date = DateService.stringToDate(day.Date1Start);\r\n format = !date.getMinutes() ? \"H'h'\" : \"H'h'mm\";\r\n amStart = $filter('date')(date, format);\r\n\r\n date = DateService.stringToDate(day.Date1End);\r\n format = !date.getMinutes() ? \"H'h'\" : \"H'h'mm\";\r\n amEnd = $filter('date')(date, format);\r\n\r\n date = DateService.stringToDate(day.Date2Start);\r\n if (date.getFullYear() !== 2001 && date.getFullYear() !== 1901) {\r\n format = !date.getMinutes() ? \"H'h'\" : \"H'h'mm\";\r\n pmStart = $filter('date')(date, format);\r\n\r\n date = DateService.stringToDate(day.Date2End);\r\n format = !date.getMinutes() ? \"H'h'\" : \"H'h'mm\";\r\n pmEnd = $filter('date')(date, format);\r\n }\r\n\r\n obj.value = !pmStart ? $filter('format')(strOneTime, amStart, amEnd) : $filter('format')(strTwoTimes, amStart, amEnd, pmStart, pmEnd);\r\n obj.value = day.Exception ? obj.value + ' ' + 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 //\r\n ctrl.options = {\r\n map: {\r\n center: bounds.getCenter(),\r\n styles: [{ 'stylers': [{ 'saturation': -100 }, { 'lightness': 50 }] }]\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: '#ffffff'\r\n },\r\n {\r\n width: 56,\r\n height: 56,\r\n url: '/img/gmap/m2.png',\r\n textColor: '#ffffff'\r\n },\r\n {\r\n width: 66,\r\n height: 66,\r\n url: '/img/gmap/m3.png',\r\n textColor: '#ffffff'\r\n },\r\n {\r\n width: 78,\r\n height: 78,\r\n url: '/img/gmap/m4.png',\r\n textColor: '#ffffff'\r\n },\r\n {\r\n width: 90,\r\n height: 90,\r\n url: '/img/gmap/m5.png',\r\n textColor: '#ffffff'\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 //\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})();\r\n","(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('app.wishlist', [])\r\n\r\n /* @ngInject */\r\n .controller('wishlistController', [\"$rootScope\", \"AppService\", \"toastr\", function ($rootScope, AppService, toastr) {\r\n var ctrl = this;\r\n ctrl.productsToCart = [];\r\n\r\n ctrl.init = function (lines) {\r\n ctrl.addAllEnabled = true;\r\n _.each(lines, function (line) {\r\n if (!line.Product.AllowAddToCart) {\r\n ctrl.addAllEnabled = false;\r\n }\r\n });\r\n };\r\n\r\n ctrl.addProduct = function (idProduct) {\r\n ctrl.productsToCart.push({\r\n idProduct: idProduct,\r\n quantity: 1\r\n });\r\n };\r\n\r\n ctrl.addAllProducts = function (event) {\r\n $rootScope.$broadcast('showPageLoader', true);\r\n\r\n var message = $(event.currentTarget).attr('message');\r\n\r\n AppService.addToCart(ctrl.productsToCart)\r\n .then(function (response) {\r\n if (response.status === 'OK') {\r\n AppService.updateParams(response.results);\r\n toastr.success('', message, {\r\n allowHtml: true,\r\n extraData: {\r\n template: 'toast_message.tpl'\r\n }\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 $rootScope.$broadcast('showPageLoader', false);\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"]}