{"version":3,"sources":["umbracoforms-dependencies.js","umbracoforms-conditions.js","umbracoforms.js","app.js","general.js","utility.js","categories.controller.js","feedGrid.controller.js","feedResource.factory.js","relatedContent.controller.js","relatedContentResource.factory.js","dateFilter.controller.js","videoEnableJs.filter.js","videoProviders.factory.js","videoManager.directive.js","gridCarousel.controller.js","softwareResource.factory.js","softwareEditionRecommendation.controller.js","printerResource.factory.js","printerSearch.controller.js","searchResource.factory.js","geoCountryResource.factory.js","geoCountry.controller.js","opt-in-confirmation.controller.js","opt-out-confirmation.controller.js","factory.helpers.js","accordionColumns/component.accordionColumn.js","accordionColumns/component.accordionColumns.js","accordionColumns/components.accordionColumnsContent.js","anchor/component.anchor.js","anchor/component.anchorContainer.js","animatedMultiImageText/animatedMultiImageText.controller.js","calendar/component.calendar.js","carousel/component.carousel.js","carousel/component.carouselNav.js","carousel/component.carouselSet.js","carousel/component.carouselSync.js","carousel/component.carouselV2.js","equalizer/directive.equalizer.js","equalizer/directive.equalizerManager.js","compile/compile.component.js","expander/expander.component.js","features/features.controller.js","images/directive.imageSource.js","fitText/fitText.directive.js","labeledList/labeledList.component.js","labeledList/labeledListItem.component.js","lazyPartial/lazy-partial.component.js","lazyPartial/lazy-partial.service.js","loader/loader.component.js","pageModals/data-open.directive.js","pageModals/modal-loader.directive.js","pageModals/pageModals.js","pagination/component.pagination.js","pagination/component.paginationFilter.js","pagination/component.paginationLoadMore.js","pagination/component.paginationPageLinks.js","pagination/pagination.js","query/component.query.js","relatedContent/relatedContent.js","scrollMagic/scrollMagicAnimations.factory.js","scrollMagic/scrollMagicContainer.directive.js","scrollMagic/scrollMagicScene.component.js","sideImageCarousel/sideImageCarousel.controller.js","sticky/component.sticky.js","sticky/stickyContainer.directive.js","sticky/stickyManager.directive.js","home.js","master.js","scrolledContent.js","tabbedContent.js","page-transition.js","main.js"],"names":["umbracoForms","dependencyCheck","formId","Umbraco","Sys","formEl","document","getElementById","errorElement","createElement","className","style","color","backgroundColor","padding","margin","errorMessage","getElementsByClassName","length","jQuery","$","validator","unobtrusive","innerHTML","insertBefore","childNodes","submitForm","evt","preventDefault","self","this","frm","closest","grecaptcha","ready","execute","action","then","token","message","last","html","removeClass","addClass","css","val","validate","valid","attr","is","submit","data","values","serializeArray","find","each","_this","el","element","name","value","checked","forEach","item","index","undefined","push","window","geoFields","post","method","url","location","href","done","recaptchaNotValid","match","matches","cookie","replace","parent","foundation","reset","removeAttr","fail","errorMsg","responseJSON","responseText","errorModal","setDefaults","ignore","adapters","addBool","addMethod","i","regex","on","bindUmbracoFormHandling","submitButton","form","removeData","parse","conditions","fieldsetConditions","fieldConditions","PopulateFieldValues","page","formValues","text","toString","operators","Is","expected","split","grep","o","IsNot","unexpected","matchingUnexpected","GreaterThen","limit","parseInt","LessThen","StartsWith","criteria","indexOf","EndsWith","Contains","watch","change","run","fsId","fieldId","cachedResults","evaluateRule","rule","dependencyIsVisible","field","isVisible","func","operator","evaluateRuleInstance","evaluateConditionVisibility","id","condition","show","actionType","cachedResult","any","logicType","all","fieldsetVisibilities","hasHiddenFieldset","success","rules","fieldsetId","Error","evaluateCondition","handleCondition","type","hide","angular","module","popUpWithRedirect","fadeInDuration","redirectDuration","redirectHref","popUpId","fadeIn","setTimeout","utility","getResponsiveValue","_typeof","Foundation","MediaQuery","atLeast","large","medium","small","trustAsResourceUrl","$sce","trustAsMarkup","trustAs","dateSuffix","$filter","suffixes","dayFinder","input","format","result","day","relevantDigits","bmgSrc","$parse","restrict","link","scope","attrs","$observe","$set","$evalAsync","$emit","src","onLoad","$on","off","onError","compile","fn","controller","event","$event","$$phase","$apply","factory","info","msg","console","filter","backgroundImage","items","count","v","active","label","cropName","keys","Object","key","crops","crop","number","toPrecision","array","term","searcher","RegExp","group","groupName","directive","bind","which","$eval","onEnter","capHeight","toMonth","separator","_","pluck","join","mapPage","$inject","$window","$timeout","$scope","$element","capId","setHeight","childHeights","children","child","position","outerHeight","Math","round","height","win","month","isNaN","date","Date","$location","host","CategoriesController","$attrs","previousValue","query","search","categories","$root","params","clearCheck","FeedGridController","ctrl","$watch","newVal","copy","source","featured","includeBodyText","hasModal","sortType","onlypasseddates","sortAscending","ascending","openModal","carousel","goToSlide","modalOpen","lockScroll","closeModal","blockClose","stopPropagation","registerCarousel","updateSlides","slides","modalSlides","syncAnimations","updateHash","slide","hash","urlName","getClientPos","start","floor","slideData","currentIndex","abs","width","slideAnimation","offset","totalWidth","rounds","x","y","slideSnap","slideWidth","wow","sync","checkCaps","$broadcast","feedResource","$resource","list","RelatedContentController","cta","relatedContentResource","DateFilterController","queryFound","m","year","filterByDefault","now","getMonth","getFullYear","onlyPassedDates","setDate","dateVal","videoEnableJs","markup","provider","origin","videoProviders","$q","providerPromises","providers","YouTube","callback","scripts","init","loop","deferred","defer","player","YT","Player","events","onReady","resolve","onStateChange","PlayerState","ENDED","play","promise","playVideo","pause","pauseVideo","stop","stopVideo","Wistia, Inc.","classes","videoId","exec","_wq","onEmbedded","video","time","get","prov","firstScriptTag","getElementsByTagName","tag","parentNode","videoManager","fitToScreen","autoplay","require","stickyManager","instanceId","styleName","configure","headerSize","getStickPoint","current","boundingRect","getBoundingClientRect","bottom","top","innerHeight","target","$parent","$index","GridCarouselController","offsets","images","elements","outerWidth","image","spacing","slideAnimationPrep","breakpoints","maxHeight","slideElements","imagesLoaded","hasClass","widthResult","imageWidth","heightResult","heightFound","imageHeight","scale","max","pos","shift","ceil","softwareResource","softwareFeatures","softwareEditions","SoftwareEditionRecommendationController","loadEditions","homepageId","e","includes","featureFilters","loadData","features","editions","loadDataReview","filterClick","feature","selectedFeatures","selected","edition","intersection","recommendedFeatures","filterClickSingle","highestSelected","foundFeatures","printerResource","brands","models","PrinterSearchController","selectedBrand","printerModels","selectedModel","buttonDisabledState","downloadPath","getModels","downloadUrl","manufacturer","enableDownload","toLowerCase","log","validateClick","searchResource","geoCountryResource","states","countryId","lang","GeoCountryController","$rootScope","selectedState","country","countries","fromJson","countryMap","ID","Name","_updateStates","updateStates","updateState","state","OptInConfirmationController","$http","$onInit","loading","headers","Content-Type","TimelineLite","set","display","opacity","to","autoAlpha","delay","catch","error","OptOutConfirmationController","helper","getMediaQueries","getMediaQuery","getLoadingIndicator","getCurrentMediaQuery","queries","mediaQueries","pieces","size","parseFloat","matchMedia","nextPieces","accordionColumnController","verticalTitle","title","accordionColumns","registerColumn","clear","currentLink","activate","activateColumn","component","bindings","links","template","accordionColumnsController","allOpen","columns","column","registerContent","content","updateContent","currentColumn","animation","accordionColumnsContentController","$transclude","$postLink","clone","backToDefault","transclude","default","anchorController","$target","container","register","$$scrollToTarget","isPassed","topOffset","scrollTarget","$scrollTarget","skipAnimation","animate","scrollTop","setActive","isActive","activeClass","$onDestroy","anchorContainerController","anchors","$$updateAnchors","anchor","onRegister","status","onChange","AnimatedMultiImageTextController","tl","TimelineMax","repeat","firstImages","secondImages","thirdImages","fourthImages","box","textItems","next","fromTo","rotationY","repeatDelay","onInit","onMonthChange","onEventClick","templateUrl","today","setHours","calendar","week","outerStart","outerEnd","days","$$generateCalendar","$onChanges","changes","goToMonth","currentValue","$$daysInMonth","getDate","inCurrentMonth","getDay","outerDays","currentDays","splice","min","daysAfter","prevMonth","nextMonth","handleEventClick","carouselNavController","carouselIndex","carouselSync","carouselSetController","$compile","contents","$currentIndex","interval","animationDuration","duration","staggerFromTo","transform","$setSize","$$buildSets","$mediaQueries","$$setSizing","cancel","$timer","$$switchSets","heightSetting","$template","append","prevSize","currentSet","end","endShort","slice","concat","nextSet","$carousels","updateCarousels","parentCarousel","paginator","slideCount","auto","autoInterval","disableDrag","startSlide","route","routeTarget","animationPrep","preAnimation","animationSnap","onSlideChange","onEdge","CarouselController","ids","$templateRequest","slideContent","$slideCount","renderIndex","$$dragDisabled","$$updateSlideReferences","$$nextAutoStep","updateWidth","getWidth","$$autoRunner","$$updateSlidePositions","positionDraggable","$$dragger","$$slider","TweenLite","$$draggable","Draggable","create","trigger","lockAxis","edgeResistance","dragResistance","dragClickables","throwResistance","maxDuration","throwProps","zIndexBoost","snap","endValue","snapData","animationData","$$updateIndex","onDragStart","disable","onDragEnd","enable","onThrowComplete","onThrowUpdate","onDrag","$$slideElements","slidesChanged","slideContainerWidth","direction","scrollWidthRight","handleChildEdgeHit","nextSlide","prevSlide","$$findIndexByKey","paginationPromise","$resolved","nextPage","$promise","reject","xShift","_gsTransform","$previousOffset","dir","synced","forward","backward","newIndex","nextDisabled","rows","scrollWidthLeft","$$scrollWidth","velocity","onUpdate","onComplete","update","animationComplete","prevDisabled","targetShift","offsetShift","equalizerManager","registerEqualizer","equalizer","equalizerManagerController","bmgLogger","counts","class","mediaQuery","$items","$updateHeights","$updateSize","$gridSize","k","itemSet","$calcHeights","j","flex","priority","CompileController","space","onStart","onFinish","ExpanderController","$interval","_id","open","_overlay","_trigger","_content","_container","expander","fontLoadCheck","_setAnimation","_window","$destroy","doubleWidth","right","_animation","paused","onReverseComplete","zIndex","toggle","reverse","FeaturesController","featureText","calcHeight","textHeight","getAnimationDuration","imageSource","directiveId","settings","cancelListener","checkPosition","placeholder","placeholderImage","positioned","remove","after","setSource","Image","onload","onerror","scroller","rect","left","previousSize","getUrl","retina","fitText","minWidth","maxWidth","minSize","maxSize","sizeText","$maxSize","widthDiff","sizeDiff","labeledListController","currentPadding","$addedIds","updatePadding","addedIds","addedIndex","entry","labelClass","labeledList","labeledListItemController","$labelElement","previousWidth","$updatePadding","newWidth","LazyPartialController","lazyPartialService","_placeholder","getPartial","pageId","partial","response","clearProps","$cacheFactory","dataCache","cache","loaderController","isSlotFilled","initialized","onContentReady","prop","indicator","dataOpen","modalLoader","bindToController","load","loadedModals","_modalQueue","rootId","modalName","_requestTimer","modals","body","modal","_buildModal","Reveal","button","innerModals","innerModal","modalString","bodyText","closeButtonText","pageModalsController","modalLoading","linkModals","linkModal","$ctrl","homeId","pageModalsRepeat","paginationController","$injector","$scroller","scrollContainer","$container","take","$service","pageLimit","$$initialized","service","servicePieces","serviceContainer","$$paramsValid","$$toPage","$isInfinite","disableScroll","boundingBox","updateParam","required","requirements","getParam","param","prevPage","refresh","finished","clearParam","skip","empty","stickPoint","pageSize","$lastCheck","newItems","findItem","evaluator","findMatch","matchIndex","onFound","paginationFilterController","$$initalizeContent","pagination","$$initialLoad","inputs","$updateTimer","updateFilterParam","repeaters","Array","isArray","clearFilter","paginationLoadMoreController","loadMore","paginationPageLinksController","$$calculateSpacing","total","blocks","toPage","bmgPaginationController","$stateParams","foundationApi","previousData","infinite","currentPage","startPage","filters","initLoad","processData","totalCount","newPage","preventExecution","additionalParams","equals","hasMore","updateFilter","filterName","registerTrigger","hasControls","switchService","serv","pushToFront","unshift","getItemTypeString","activity","Item","Type","getActionTypeString","ActionType","getHeader","bmgPagination","$transitions","nextId","$transition$","itemContainer","checkPoint","updateCheckPoint","loadCheck","itemsBinding","bmgPaginationPageLinks","bmgPaginationModal","initialLimit","emptyMessage","finishedMessage","banner","$$destroyed","modalId","bmgPaginationTrigger","$animate","bmgPaginationEmpty","bmgPaginationFinished","property","disableDataChanges","actives","preVal","controllers","ngModel","$viewChangeListeners","$modelValue","queryController","results","relatedContentController","global","relatedContent","maxCharacters","emptySectionText","news","projects","resources","services","technologies","isEmployeeView","hideSection","scrollMagicAnimations","animations","moveUp","parameters","distance","moveDown","moveLeft","moveRight","upAndDown","$size","selector","dist","visibility","fillTarget","startElement","endElement","startOffset","endOffset","pin","pinAdjustment","translate","softwareFree","MorphSVGPlugin","convertToPath","add","morphSVG","from","xPercent","scaleX","drawSVG","yPercent","staggerFrom","cycle","softwareProfessional","softwareAutomation","transformOrigin","rotation","ease","Linear","easeNone","softwareEnterprise","callers","apply","_loadPosition","_sceneQueue","magic","ScrollMagic","Controller","addScene","scene","addTo","queue","finishInit","queueScene","loadOrder","animationSettings","triggerElement","triggerHook","hookPromise","scrollMagicContainer","scrollMagicSceneController","_win","_enabled","_tween","progress","animationFunction","setTween","newSize","curEnabled","enabled","removePin","_pinned","setPin","Scene","SideImageCarouselController","imageAnimation","prioritize","onStick","onRelease","stickyContainer","stickyController","$id","sticking","registerSticky","_stylesReady","Promise","_stylesReadyCheck","$sticker","$content","$spacer","$$asyncUpdateSticky","$$updateSticky","forceUpdate","released","$$isReleased","newSticky","$$isSticky","$$updateStyling","getBottom","elementOffset","controllerAs","scrollToTop","stickies","registration","homeController","videoBackground","YTPlayer","fitToBackground","$win","sizeBanner","panels","tabControls","alert","$anchorScroll","header","mobileNavigation","mainLinks","secondaryLinks","bar","buttonsL1","back","cont","layer2","innerLayers","childReveal","navReadyPromise","navReady","yOffset","toggleSearch","searchOpen","toggleDropdown","addLabel","showChildren","targetUrl","aboveLinks","belowLinks","targetOffset","contOffset","curLayer","reverseComplete","staggerTo","rotationX","ctaLinks","barredLinks","animateLeft","bars","justifyContent","subLinks","innerBar","additionalLinks","even","searchExpander","expanderFix","gridContainer","currentTarget","cleanup","switchLanguage","datepickers","datepicker","dateFormat","onClose","instance","searchData","registerSearchExpander","focus","expandTimeout","expanded","reinitializeTabs","tabs","Tabs","openChat","click","trackData","encodeURIComponent","requestFreeTrial","email","addEmail","prepReveal","loadHeaderElements","mobileNav","getTime","startTime","gridStickyReady","config","$locationProvider","html5Mode","requireBase","rewriteLinks","scrolledContentController","checkHash","history","replaceState","pathname","path","tabbedContentController","tabContent","backToTop","Modernizr","flexbox","lockAnimation","revealPromise","downloads","download","trim","assign","rotatingText","fontReady","rotator","containerTagName","containerTest","masks","scanner","mask","t","tWidth","tNext","onbeforeunload","wrapperAnimation","bootstrap"],"mappings":"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","file":"core.min.js","sourcesContent":["var umbracoForms = umbracoForms || {};\r\n\r\n/*\r\n Umbraco Forms - Dependencies Checker\r\n*/\r\numbracoForms.dependencyCheck = function (formId) {\r\n\r\n //Only perform check if the global 'Umbraco.Sys' is null/undefined\r\n //If present means we are in backoffice & that this is being rendered as a macro preview\r\n //We do not need to perform this check here\r\n if (typeof Umbraco !== 'undefined' && typeof Umbraco.Sys !== 'undefined') {\r\n return;\r\n }\r\n else {\r\n\r\n //Select the wrapping div around the form \r\n //umbraco_form_GUID\r\n var formEl = document.getElementById('umbraco_form_' + formId);\r\n\r\n var errorElement = document.createElement('div');\r\n errorElement.className = 'umbraco-forms missing-library';\r\n errorElement.style.color = '#fff';\r\n errorElement.style.backgroundColor = '#9d261d';\r\n errorElement.style.padding = '15px';\r\n errorElement.style.margin = '10px 0';\r\n var errorMessage = \"\";\r\n\r\n //Ensure umbracoForm is not null\r\n if (formEl) {\r\n\r\n //Check to see if the message for the form has been inserted already\r\n var checkForExistinhgErr = formEl.getElementsByClassName('umbraco-forms missing-library');\r\n if(checkForExistinhgErr.length > 0){\r\n return;\r\n }\r\n\r\n //Check for jQuery\r\n if (typeof jQuery == 'undefined') {\r\n errorMessage = errorMessage + 'jQuery has not been loaded & is required for Umbraco Forms.';\r\n } else {\r\n //These only work if jQuery is present, so it's in the else block\r\n\r\n //Check for jQuery Validation\r\n if (!$.validator) {\r\n errorMessage = errorMessage + '
jQuery Validate has not been loaded & is required for Umbraco Forms.'\r\n }\r\n\r\n //Check for jQuery Validation Unobtrusive\r\n //Only works if jQuery validator has been loaded\r\n if ($.validator && !$.validator.unobtrusive) {\r\n errorMessage = errorMessage + '
jQuery Validate Unobtrusive has not been loaded & is required for Umbraco Forms.';\r\n }\r\n }\r\n if (errorMessage !== \"\") {\r\n errorElement.innerHTML = errorMessage + '
See Umbraco Forms Documentation';\r\n\r\n formEl.insertBefore(errorElement, formEl.childNodes[0]);\r\n }\r\n }\r\n }\r\n\r\n};","var umbracoForms = umbracoForms || {};\r\numbracoForms.conditions = function(form, fieldsetConditions, fieldConditions, values) {\r\n\r\n //our conditions \"class\" - must always be newed to work as it uses a form instance to operate on\r\n //load all the information from the dom and serverside info and then the class will take care of the rest\r\n\r\n var _this = {};\r\n _this.form = form;\r\n _this.fieldsetConditions = fieldsetConditions;\r\n _this.fieldConditions = fieldConditions;\r\n _this.values = values;\r\n\r\n //Iterates through all the form elements found on the page to update the registered value\r\n function PopulateFieldValues(page, formValues) {\r\n\r\n $(\"select\", page).each(function() {\r\n formValues[$(this).attr(\"id\")] = $(\"option[value='\" + $(this).val() + \"']\", $(this)).text();\r\n });\r\n\r\n $(\"textarea\", page).each(function() {\r\n formValues[$(this).attr(\"id\")] = $(this).val();\r\n });\r\n\r\n // clear out all saved checkbox values to we can safely append\r\n $('input[type=checkbox]', page).each(function() {\r\n formValues[$(this).attr(\"name\")] = null;\r\n });\r\n\r\n $(\"input\", page).each(function() {\r\n\r\n if ($(this).attr('type') == \"text\" || $(this).attr(\"type\") == \"hidden\") {\r\n formValues[$(this).attr(\"id\")] = $(this).val();\r\n }\r\n\r\n if ($(this).attr('type') == \"radio\") {\r\n if ($(this).is(':checked')) {\r\n formValues[$(this).attr(\"name\")] = $(this).val();\r\n }\r\n }\r\n\r\n if ($(this).attr('type') == \"checkbox\") {\r\n if ($(this).attr('id') != $(this).attr('name')) {\r\n if ($(this).is(':checked')) {\r\n if (formValues[$(this).attr(\"name\")] == null) {\r\n formValues[$(this).attr(\"name\")] = $(this).val();\r\n } else {\r\n formValues[$(this).attr(\"name\")] += \",\" + $(this).val();\r\n }\r\n }\r\n } else {\r\n formValues[$(this).attr(\"name\")] = $(this).is(':checked').toString();\r\n }\r\n }\r\n });\r\n }\r\n\r\n /* Public api */\r\n\r\n _this.operators = {\r\n Is: function(value, expected) {\r\n if ((value || \"\") === expected) {\r\n return true;\r\n }\r\n var values = value.split(',');\r\n var matchingExpected = $.grep(values,\r\n function(o) {\r\n return o === expected;\r\n });\r\n return matchingExpected.length > 0;\r\n },\r\n IsNot: function(value, unexpected) {\r\n var values = value.split(',');\r\n var matchingUnexpected = $.grep(values,\r\n function(o) {\r\n return o === unexpected;\r\n });\r\n return (value || \"\") !== unexpected && matchingUnexpected.length === 0;\r\n },\r\n GreaterThen: function(value, limit) {\r\n return parseInt(value) > parseInt(limit);\r\n },\r\n LessThen: function(value, limit) {\r\n return parseInt(value) < parseInt(limit);\r\n },\r\n StartsWith: function(value, criteria) {\r\n return value && value.indexOf(criteria) === 0;\r\n },\r\n EndsWith: function(value, criteria) {\r\n return value && value.indexOf(criteria) === value.length - criteria.length;\r\n },\r\n Contains: function(value, criteria) {\r\n return value && value.indexOf(criteria) > -1;\r\n }\r\n };\r\n\r\n _this.watch = function() {\r\n\r\n //subscribe to change events\r\n $(\"input, textarea, select\", _this.form).change(function() {\r\n PopulateFieldValues(_this.form, _this.values);\r\n\r\n //process the conditions\r\n _this.run();\r\n });\r\n\r\n //register all values from the current fields on the page\r\n PopulateFieldValues(_this.form, this.values);\r\n\r\n //the initial run-through of all the conditions\r\n _this.run();\r\n };\r\n\r\n _this.run = function() {\r\n var fsId,\r\n fieldId,\r\n\r\n /*\r\n fsConditions = params.fsConditions || {},\r\n fieldConditions = params.fieldConditions || {},\r\n values = params.values || {},*/\r\n\r\n cachedResults = {};\r\n\r\n function evaluateRuleInstance(rule) {\r\n var value = _this.values[rule.field],\r\n func = _this.operators[rule.operator],\r\n result = value !== null && func(value, rule.value);\r\n return result;\r\n }\r\n\r\n function evaluateRule(rule) {\r\n var dependencyIsVisible = true;\r\n\r\n if (_this.fieldConditions[rule.field]) {\r\n dependencyIsVisible = isVisible(rule.field, _this.fieldConditions[rule.field]);\r\n }\r\n\r\n if (dependencyIsVisible) {\r\n return evaluateRuleInstance(rule);\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n function evaluateCondition(id, condition) {\r\n // This was once pretty. Now it needs refactoring again. :)\r\n\r\n var any = condition.logicType === \"Any\",\r\n all = condition.logicType === \"All\",\r\n fieldsetVisibilities = {},\r\n hasHiddenFieldset = false,\r\n success = true,\r\n rule,\r\n i;\r\n\r\n for (i = 0; i < condition.rules.length; i++) {\r\n rule = condition.rules[i];\r\n\r\n if (id === rule.field || id === rule.fieldsetId) {\r\n throw new Error(\"Field or fieldset \" + id + \" has a condition on itself.\");\r\n }\r\n\r\n if (fieldsetVisibilities[rule.fieldsetId] !== undefined) {\r\n continue;\r\n }\r\n\r\n if (_this.fieldsetConditions[rule.fieldsetId]) {\r\n\r\n fieldsetVisibilities[rule.fieldsetId] =\r\n isVisible(rule.fieldsetId, _this.fieldsetConditions[rule.fieldsetId]);\r\n\r\n if (!fieldsetVisibilities[rule.fieldsetId]) {\r\n hasHiddenFieldset = true;\r\n }\r\n } else {\r\n fieldsetVisibilities[rule.fieldsetId] = true;\r\n }\r\n }\r\n\r\n if (all && hasHiddenFieldset) {\r\n return false;\r\n }\r\n\r\n for (i = 0; i < condition.rules.length; i++) {\r\n rule = condition.rules[i];\r\n\r\n if (fieldsetVisibilities[rule.fieldsetId]) {\r\n success = evaluateRule(condition.rules[i]);\r\n } else {\r\n success = false;\r\n }\r\n\r\n if (any && success) {\r\n break;\r\n }\r\n if (all && !success) {\r\n break;\r\n }\r\n }\r\n return success;\r\n }\r\n\r\n function evaluateConditionVisibility(id, condition) {\r\n var show = condition.actionType === \"Show\",\r\n cachedResult = cachedResults[id],\r\n success = cachedResult === undefined\r\n ? (cachedResults[id] = evaluateCondition(id, condition))\r\n : cachedResult,\r\n visible = !(success ^ show);\r\n return visible;\r\n }\r\n\r\n function isVisible(id, condition) {\r\n if (condition) {\r\n return evaluateConditionVisibility(id, condition);\r\n }\r\n return true;\r\n }\r\n\r\n function handleCondition(element, id, condition, type) {\r\n var shouldShow = isVisible(id, condition);\r\n if (shouldShow) {\r\n element.show();\r\n } else {\r\n element.hide();\r\n }\r\n }\r\n\r\n for (fsId in _this.fieldsetConditions) {\r\n handleCondition($(\"#\" + fsId), fsId, _this.fieldsetConditions[fsId], \"Fieldset\");\r\n }\r\n\r\n for (fieldId in _this.fieldConditions) {\r\n handleCondition($(\"#\" + fieldId).closest(\".umbraco-forms-field\"),\r\n fieldId,\r\n _this.fieldConditions[fieldId],\r\n \"Field\");\r\n }\r\n }\r\n\r\n return _this;\r\n}","(function ($) {\r\n\r\n function submitForm(evt) {\r\n\r\n evt.preventDefault();\r\n var self = $(this);\r\n var frm = self.closest('form');\r\n\r\n //var message = $(\".recaptcha2 > div > span\").last(); // (\".field-validation-valid\").last();\r\n //if (!(grecaptcha && grecaptcha.getResponse().length !== 0)) {\r\n // message.html(\"Please check the reCaptcha checkbox\");\r\n // message.removeClass(\"field-validation-valid\");\r\n // message.addClass(\"field-validation-error\");\r\n // message.css(\"margin-top\", \"5px\");\r\n // message.css(\"display\", \"block\");\r\n // return false;\r\n //}\r\n //else {\r\n // message.css(\"display\", \"none\");\r\n //}\r\n\r\n grecaptcha.ready(function () {\r\n grecaptcha.execute('6LfjoPAUAAAAAF4bEw2M_rMhAL31C_U2AJo0zTt-', { action: 'submit' }).then(function (token) {\r\n // Add your logic to submit to your backend server here.\r\n\r\n var message = $(\".invisiblerecaptcha > div > span\").last(); // (\".field-validation-valid\").last();\r\n if (token.length == 0) {\r\n message.html(\"We were not able to verify your session\");\r\n message.removeClass(\"field-validation-valid\");\r\n message.addClass(\"field-validation-error\");\r\n message.css(\"margin-top\", \"5px\");\r\n message.css(\"display\", \"block\");\r\n return false;\r\n }\r\n else {\r\n message.css(\"display\", \"none\");\r\n\r\n if ($(\"#recaptchaV3\")) {\r\n $(\"#recaptchaV3\").val(token);\r\n }\r\n //update value in recaptchaV3 before we validate\r\n frm.validate();\r\n if (frm.valid() && self.attr('disabled') !== 'disabled') {\r\n if (frm.is('[nonajax]')) {\r\n frm.submit();\r\n }\r\n else {\r\n var data = {};\r\n var values = frm.serializeArray();\r\n\r\n frm.find(\".checkbox input:checkbox\").each(function(){\r\n const el = values.find((element) => element.name == this.name);\r\n if (el) el.value = this.checked;\r\n });\r\n\r\n values.forEach(function (item, index) {\r\n if (data[item.name] === undefined) { // New\r\n data[item.name] = item.value || '';\r\n } else { // Existing\r\n if (!data[item.name].push) {\r\n data[item.name] = [data[item.name]];\r\n }\r\n data[item.name].push(item.value || '');\r\n }\r\n if (window.geoFields && window.geoFields[item.name]) {\r\n data[item.name] = window.geoFields[item.name];\r\n }\r\n });\r\n frm.addClass('posting');\r\n $.post({\r\n method: 'POST',\r\n url: location.href,\r\n data: data\r\n })\r\n .done(function (data) {\r\n\r\n var recaptchaNotValid = data.match(/recaptchaV3[^>]+>[^<]+]+>([^<]+) 1)\r\n {\r\n message.html(recaptchaNotValid[1]);\r\n message.removeClass(\"field-validation-valid\");\r\n message.addClass(\"field-validation-error\");\r\n message.css(\"margin-top\", \"5px\");\r\n message.css(\"display\", \"block\");\r\n return false;\r\n }\r\n\r\n var matches = data.match(/submittedFromRecordId=\"([^\"]+)\"/);\r\n if (matches && matches.length > 1)\r\n {\r\n document.cookie = \"lastFormRecordId=\" + matches[1] + \"; path=/\";\r\n }\r\n\r\n if (frm.attr('redirect') !== '') {\r\n\r\n window.location.replace(frm.attr('redirect'));\r\n }\r\n else {\r\n var popup = $('#' + frm.parent().attr('id').replace('umbraco_form', 'form_popup'));\r\n popup.foundation('open');\r\n frm[0].reset();\r\n self.removeAttr('disabled');\r\n frm.removeClass('posting');\r\n }\r\n })\r\n .fail(function (data) {\r\n var errorMsg = data.responseJSON !== undefined && data.responseJSON.message !== undefined\r\n ? data.responseJSON.message\r\n : data.responseText;\r\n var errorModal = $('#error');\r\n errorModal.find('.message').html(errorMsg);\r\n errorModal.foundation('open');\r\n frm.removeClass('posting');\r\n })\r\n }\r\n self.attr('disabled', 'disabled');\r\n\r\n }\r\n }\r\n });\r\n });\r\n }\r\n\r\n if ($.validator !== undefined) {\r\n $.validator.setDefaults({\r\n ignore: \":hidden\"\r\n });\r\n\r\n $.validator.unobtrusive.adapters.addBool(\"requiredcb\", \"required\");\r\n\r\n $.validator.addMethod('umbracoforms_selectonefromlist', function(value, element) {\r\n var valid = false;\r\n $(\"input\", $(element).closest(\".checkboxlist, .radiobuttonlist\")).each(function(i) {\r\n if ($(this).is(':checked')) {\r\n valid = true;\r\n }\r\n });\r\n return valid;\r\n });\r\n\r\n $.validator.unobtrusive.adapters.addBool(\"requiredlist\", \"umbracoforms_selectonefromlist\");\r\n\r\n $.validator.addMethod('umbracoforms_regex', function(value, element) {\r\n\r\n var regex = $(element).attr(\"data-regex\");\r\n var val = $(element).val();\r\n if (val.length === 0) {\r\n return true;\r\n }\r\n return val.match(regex);\r\n });\r\n\r\n $.validator.unobtrusive.adapters.addBool(\"regex\", \"umbracoforms_regex\");\r\n\r\n $('.umbraco-forms-form').on('click', '[type=\"submit\"]:not(.cancel)', submitForm);\r\n\r\n window.bindUmbracoFormHandling = function (submitButton) {\r\n var form = submitButton.closest('form');\r\n form.removeData('validator')\r\n .removeData('unobtrusiveValidation');\r\n $.validator.unobtrusive.parse(form);\r\n submitButton.on('click', submitForm);\r\n };\r\n }\r\n\r\n})(jQuery);\r\n\r\n// ","(function () {\r\n angular.module('app', []); \r\n})();","(function () {\r\n $(document).foundation();\r\n\r\n})();\r\n\r\nif (!window.matchMedia || !Modernizr.flexbox) {\r\n $('#' + $('html').attr('not-supported-modal')).foundation('open');\r\n}\r\n\r\nfunction popUpWithRedirect(fadeInDuration, redirectDuration, redirectHref, popUpId) {\r\n $(popUpId).fadeIn(fadeInDuration); //'#quickpopup'\r\n window.setTimeout(function () {\r\n window.location.href = redirectHref;//'https://portal.seagullscientific.com/';\r\n }, redirectDuration);\r\n}\r\n\r\n//function bannerSVG() {\r\n// var svg = $(\"#Layer_1\");\r\n// if (svg.length) {\r\n// MorphSVGPlugin.convertToPath(svg.find(\"circle, rect, ellipse, line, polygon, polyline\"));\r\n\r\n// var barCodeLines = [\r\n// '.bar-code-line-1',\r\n// '.bar-code-line-2',\r\n// '.bar-code-line-3',\r\n// '.bar-code-line-4',\r\n// '.bar-code-line-5',\r\n// '.bar-code-line-6',\r\n// '.bar-code-line-7',\r\n// '.bar-code-line-8',\r\n// '.bar-code-line-9',\r\n// '.bar-code-line-10',\r\n// '.bar-code-line-11',\r\n// '.bar-code-line-12',\r\n// '.bar-code-line-13',\r\n// '.bar-code-line-14',\r\n// '.bar-code-line-15',\r\n// '.bar-code-line-16',\r\n// '.bar-code-line-17',\r\n// '.bar-code-line-18',\r\n// '.bar-code-line-19',\r\n// '.bar-code-line-20',\r\n// '.bar-code-line-21',\r\n// '.bar-code-line-22',\r\n// '.bar-code-line-23',\r\n// '.bar-code-line-24'\r\n// ];\r\n// // shuffle the barcode lines\r\n// var currentIndex = barCodeLines.length;\r\n// var tempValue, randomIndex;\r\n// while (currentIndex > 0) {\r\n// randomIndex = Math.floor(Math.random() * currentIndex);\r\n// currentIndex -= 1;\r\n// tempValue = barCodeLines[currentIndex];\r\n// barCodeLines[currentIndex] = barCodeLines[randomIndex];\r\n// barCodeLines[randomIndex] = tempValue;\r\n// }\r\n\r\n// var vinNumbers = [\r\n// '.vin-number-number-1',\r\n// '.vin-number-number-2',\r\n// '.vin-number-number-3',\r\n// '.vin-number-number-4',\r\n// '.vin-number-number-5',\r\n// '.vin-number-number-6',\r\n// '.vin-number-number-7',\r\n// '.vin-number-number-8',\r\n// '.vin-number-number-9',\r\n// '.vin-number-number-10',\r\n// '.vin-number-number-11',\r\n// '.vin-number-number-12',\r\n// '.vin-number-number-13',\r\n// '.vin-number-number-14',\r\n// '.vin-number-number-15',\r\n// '.vin-number-number-16',\r\n// '.vin-number-number-17'\r\n// ];\r\n// // shuffle the vin nums\r\n// currentIndex = vinNumbers.length;\r\n// while (currentIndex > 0) {\r\n// randomIndex = Math.floor(Math.random() * currentIndex);\r\n// currentIndex -= 1;\r\n// tempValue = vinNumbers[currentIndex];\r\n// vinNumbers[currentIndex] = vinNumbers[randomIndex];\r\n// vinNumbers[randomIndex] = tempValue;\r\n// }\r\n\r\n// //Animation Controls\r\n// var tlScene = new TimelineMax();\r\n// tlScene\r\n// .timeScale(1.25)\r\n// .set(svg, { opacity: 1 })\r\n// .add('draw-outlines')\r\n// .fromTo('.data-box-outline', 1, { drawSVG: \"50% 50%\" }, { delay: 0.7, drawSVG: \"0% 100%\" }, 'draw-outlines')\r\n// .fromTo('.nutrition-facts-outline', 1, { drawSVG: \"25% 25%\" }, { delay: 0.5, drawSVG: \"0% 100%\" }, 'draw-outlines')\r\n// .fromTo('.vin-number-outline', 1, { drawSVG: \"50% 50%\" }, { delay: 0.7, drawSVG: \"0% 100%\" }, 'draw-outlines')\r\n// .fromTo('.driver-license-outline', 1, { drawSVG: \"50% 50%\" }, { delay: 0.5, drawSVG: \"0% 100%\" }, 'draw-outlines')\r\n// .fromTo('.pill-bottle-outline-top', 1, { drawSVG: \"50% 50%\" }, { delay: 1.1, drawSVG: \"0% 100%\" }, 'draw-outlines')\r\n// .fromTo('.pill-bottle-outline-bottom', 1, { drawSVG: \"25% 25%\" }, { delay: 1.1, drawSVG: \"0% 100%\" }, 'draw-outlines')\r\n// .fromTo('.bar-code-outline', 1, { drawSVG: \"50% 50%\" }, { delay: 1.1, drawSVG: \"0% 100%\" }, 'draw-outlines')\r\n// .fromTo('.keyboard-outline', 1, { drawSVG: \"50% 50%\" }, { delay: 0.7, drawSVG: \"0% 100%\" }, 'draw-outlines')\r\n// .fromTo('.small-keyboard-outline', 1, { drawSVG: \"25% 25%\" }, { delay: 0.9, drawSVG: \"0% 100%\" }, 'draw-outlines')\r\n// .fromTo('.shoe-outline', 1, { drawSVG: \"75% 75%\" }, { delay: 1.1, drawSVG: \"0% 100%\" }, 'draw-outlines')\r\n// .fromTo('.soup-outline', 1, { drawSVG: \"25% 25%\" }, { delay: 1.3, drawSVG: \"0% 100%\" }, 'draw-outlines')\r\n// .fromTo('.qr-code-outline', 1, { drawSVG: \"50% 50%\" }, { delay: 0.2, drawSVG: \"0% 100%\" }, 'draw-outlines')\r\n// .fromTo('.warning-outline', 1, { drawSVG: \"50% 50%\" }, { delay: 0.5, drawSVG: \"0% 100%\" }, 'draw-outlines')\r\n// .fromTo('.letter-s-outline', 1, { drawSVG: \"50% 50%\" }, { delay: 0.7, drawSVG: \"0% 100%\" }, 'draw-outlines')\r\n// .fromTo('.keyboard-bottom-outline', 1, { drawSVG: \"25% 25%\" }, { delay: 0.5, drawSVG: \"0% 100%\" }, 'draw-outlines')\r\n// .fromTo('.dresser-outline', 1, { drawSVG: \"50% 50%\" }, { delay: 0.2, drawSVG: \"0% 100%\" }, 'draw-outlines')\r\n// .fromTo('.logo-outline', 1, { drawSVG: \"75% 75%\" }, { delay: 0.9, drawSVG: \"0% 100%\" }, 'draw-outlines')\r\n// .fromTo('.empty-1-outline', 1, { drawSVG: \"50% 50%\" }, { delay: 0, drawSVG: \"0% 100%\" }, 'draw-outlines')\r\n// .fromTo('.empty-2-outline', 1, { drawSVG: \"50% 50%\" }, { delay: 0, drawSVG: \"0% 100%\" }, 'draw-outlines')\r\n// .fromTo('.empty-3-outline', 1, { drawSVG: \"50% 50%\" }, { delay: 0, drawSVG: \"0% 100%\" }, 'draw-outlines')\r\n// .fromTo('.empty-4-outline', 1, { drawSVG: \"50% 50%\" }, { delay: 0, drawSVG: \"0% 100%\" }, 'draw-outlines')\r\n\r\n// // data box\r\n// .add('show-data-box', 1.7)\r\n// .from('.data-box-bg', 0.8, { autoAlpha: 0, xPercent: -1, yPercent: -1 }, 'show-data-box')\r\n// .from('.data-box-box', 0.3, { autoAlpha: 0 }, 'show-data-box')\r\n// .from('.data-box-checkboxes', 0.8, { autoAlpha: 0 }, 'show-data-box')\r\n// .staggerFrom(['.data-box-line-1', '.data-box-line-2', '.data-box-line-3'], 0.3, { delay: 0.4, scaleX: 0 }, 0.05, 'show-data-box')\r\n// .staggerFrom(['.data-box-line-4', '.data-box-line-5'], 0.3, { delay: 0.4, scaleX: 0 }, 0.05, 'show-data-box')\r\n\r\n// // nutrition facts\r\n// .add('show-nutrition-facts', 1.5)\r\n// .from('.nutrition-facts', 0.5, { autoAlpha: 0 }, 'show-nutrition-facts')\r\n// .staggerFrom(['.nutrition-facts-line-1', '.nutrition-facts-line-2', '.nutrition-facts-line-3', '.nutrition-facts-line-4',\r\n// '.nutrition-facts-line-5', '.nutrition-facts-line-6', '.nutrition-facts-line-7', '.nutrition-facts-line-8',\r\n// '.nutrition-facts-line-9', '.nutrition-facts-line-10'], 0.3, { delay: 0.1, scaleX: 0 }, 0.05, 'show-nutrition-facts')\r\n// .staggerFrom(['.nutrition-facts-short-1', '.nutrition-facts-short-2', '.nutrition-facts-short-3', '.nutrition-facts-short-4',\r\n// '.nutrition-facts-short-5', '.nutrition-facts-short-6', '.nutrition-facts-short-7', '.nutrition-facts-short-8',\r\n// '.nutrition-facts-short-9'], 0.3, { delay: 0.2, scaleX: 0 }, 0.05, 'show-nutrition-facts')\r\n\r\n// // vin number\r\n// .add('show-vin-number', 1.7)\r\n// .staggerFrom(vinNumbers, 0.4, { autoAlpha: 0 }, 0.03, 'show-vin-number')\r\n// .from('.vin-number-vin', 0.8, { autoAlpha: 0 }, 'show-vin-number')\r\n\r\n// // driver license\r\n// .add('show-driver-license', 1.5)\r\n// .staggerFrom(['.driver-license-line-1', '.driver-license-line-2', '.driver-license-line-3'], 0.3, { delay: 0.4, scaleX: 0 }, 0.05, 'show-driver-license')\r\n// .from('.driver-license-photo', 0.8, { autoAlpha: 0 }, 'show-driver-license')\r\n\r\n// // pill-bottle\r\n// .add('show-pill-bottle-ridges', 1.3)\r\n// .staggerFrom(['.pill-bottle-ridge-1', '.pill-bottle-ridge-2', '.pill-bottle-ridge-3', '.pill-bottle-ridge-4',\r\n// '.pill-bottle-ridge-5', '.pill-bottle-ridge-6', '.pill-bottle-ridge-7'], 0.6, { autoAlpha: 0 }, 0.05, 'show-pill-bottle-ridges')\r\n// .add('show-pill-bottle', 2.1)\r\n// .from('.pill-bottle-label', 0.6, { autoAlpha: 0 }, 'show-pill-bottle')\r\n// .from('.pill-bottle-rx', 0.6, { autoAlpha: 0 }, 'show-pill-bottle')\r\n// .staggerFrom(['.pill-bottle-line-1', '.pill-bottle-line-2', '.pill-bottle-line-3'], 0.3, { delay: 0.2, scaleX: 0 }, 0.05, 'show-pill-bottle')\r\n\r\n// // bar code\r\n// .add('show-bar-code', 2.1)\r\n// .staggerFrom(barCodeLines, 0.4, { autoAlpha: 0 }, 0.03, 'show-bar-code')\r\n// .from('.bar-code-numbers', 0.8, { autoAlpha: 0 }, 'show-bar-code')\r\n\r\n// // keyboard\r\n// .add('show-keyboard', 1.7)\r\n// .staggerFrom('.keyboard-keys .st0', 0.5, { autoAlpha: 0 }, 0.005, 'show-keyboard')\r\n// .staggerFrom(['.keyboard-line-1', '.keyboard-line-2', '.keyboard-line-3'], 0.3, { delay: 0.4, scaleX: 0 }, 0.05, 'show-keyboard')\r\n// .from('.keyboard-box-1', 0.3, { autoAlpha: 0 }, 'show-keyboard')\r\n// .from('.keyboard-box-2', 0.5, { autoAlpha: 0, xPercent: -4 }, 'show-keyboard')\r\n// .from('.keyboard-inner-outline', 0.3, { autoAlpha: 0 }, 'show-keyboard')\r\n\r\n// // small keyboard\r\n// .add('show-small-keyboard', 1.9)\r\n// .from('.small-keyboard-shadow', 0.8, { autoAlpha: 0, xPercent: -1, yPercent: -1 }, 'show-small-keyboard')\r\n// .from('.small-keyboard-keyboard', 0.3, { autoAlpha: 0 }, 'show-small-keyboard')\r\n// .staggerFrom(['.small-keyboard-line-1', '.small-keyboard-line-2', '.small-keyboard-line-3'], 0.3, { delay: 0.4, scaleX: 0 }, 0.05, 'show-small-keyboard')\r\n// .from('.small-keyboard-box', 0.8, { autoAlpha: 0 }, 'show-small-keyboard')\r\n\r\n// // shoe\r\n// .add('show-shoe-inner', 1.9)\r\n// .fromTo('.shoe-inner-outline', 0.6, { drawSVG: \"25% 25%\" }, { drawSVG: \"0% 100%\" }, 'show-shoe-inner')\r\n// .add('show-shoe', 2.1)\r\n// .staggerFrom(['.shoe-line-1', '.shoe-line-2'], 0.3, { delay: 0.4, scaleX: 0 }, 0.05, 'show-shoe')\r\n// .staggerFrom(['.shoe-short-1', '.shoe-short-2'], 0.3, { delay: 0.4, scaleX: 0 }, 0.05, 'show-shoe')\r\n// .staggerFrom(['.shoe-top-line-1', '.shoe-top-line-2'], 0.3, { delay: 0.4, scaleX: 0 }, 0.05, 'show-shoe')\r\n// .from('.shoe-box', 0.8, { autoAlpha: 0 }, 'show-shoe')\r\n// .from('.shoe-shoe', 0.8, { autoAlpha: 0 }, 'show-shoe')\r\n\r\n// // soup\r\n// .add('show-soup', 2.3)\r\n// .from('.soup-bowl-shadow', 0.8, { autoAlpha: 0, xPercent: -1, yPercent: -1 }, 'show-soup')\r\n// .from('.soup-bowl', 0.3, { autoAlpha: 0 }, 'show-soup')\r\n// .from('.soup-price', 0.8, { autoAlpha: 0 }, 'show-shoe')\r\n// .from('.soup-caution', 0.8, { autoAlpha: 0 }, 'show-shoe')\r\n// .staggerFrom(['.soup-line-1', '.soup-line-2'], 0.3, { delay: 0.2, scaleX: 0, transformOrigin: \"50% 0% 0\" }, 0.05, 'show-soup')\r\n\r\n// // qr code\r\n// .add('show-qr-code', 1.2)\r\n// .from('.qr-code-content', 0.8, { autoAlpha: 0 }, 'show-qr-code')\r\n\r\n// // warning\r\n// .add('show-warning', 1.5)\r\n// .from('.warning-warning', 0.8, { autoAlpha: 0 }, 'show-warning')\r\n// .from('.warning-x', 0.8, { autoAlpha: 0 }, 'show-warning')\r\n// .staggerFrom(['.warning-line-1', '.warning-line-2', '.warning-line-3', '.warning-line-4'], 0.3, { delay: 0.2, scaleX: 0, transformOrigin: \"50% 0% 0\" }, 0.05, 'show-warning')\r\n\r\n// // letter s\r\n// .add('show-letter-s', 1.7)\r\n// .from('.letter-s-s', 0.8, { autoAlpha: 0 }, 'show-letter-s')\r\n// .from('.letter-s-made-in', 0.8, { autoAlpha: 0 }, 'show-letter-s')\r\n// .staggerFrom(['.letter-s-icon-1', '.letter-s-icon-2', '.letter-s-icon-3'], 0.5, { autoAlpha: 0 }, 0.1, 'show-letter-s')\r\n\r\n// // keyboard bottom\r\n// .add('show-keyboard-bottom', 1.5)\r\n// .from('.keyboard-bottom-keyboard', 0.8, { autoAlpha: 0 }, 'show-keyboard-bottom')\r\n// .staggerFrom(['.keyboard-bottom-line-1', '.keyboard-bottom-line-2'], 0.3, { delay: 0.4, scaleX: 0 }, 0.05, 'show-keyboard-bottom')\r\n// .staggerFrom(['.keyboard-bottom-line-3', '.keyboard-bottom-line-4'], 0.3, { delay: 0.4, scaleX: 0 }, 0.05, 'show-keyboard-bottom')\r\n\r\n// // dresser\r\n// .add('show-dresser', 1.2)\r\n// .from('.dresser-dresser', 0.8, { autoAlpha: 0 }, 'show-dresser')\r\n// .from('.dresser-title', 0.8, { autoAlpha: 0 }, 'show-dresser')\r\n// .from('.dresser-color', 0.8, { autoAlpha: 0 }, 'show-dresser')\r\n// .from('.dresser-wrenches', 0.8, { autoAlpha: 0 }, 'show-dresser')\r\n// .from('.dresser-checkbox-bg', 0.8, { autoAlpha: 0, xPercent: -1, yPercent: -1 }, 'show-dresser')\r\n// .from('.dresser-checkbox', 0.3, { autoAlpha: 0 }, 'show-dresser')\r\n// .staggerFrom(['.dresser-line-1', '.dresser-line-2', '.dresser-line-3', '.dresser-line-4', '.dresser-line-5'], 0.3, { delay: 0.4, scaleX: 0 }, 0.05, 'show-dresser')\r\n\r\n// // logo\r\n// .add('show-logo', 1.9)\r\n// .from('.logo-logo', 0.8, { autoAlpha: 0 }, 'show-logo')\r\n// .staggerFrom(['.logo-line-1', '.logo-line-2', '.logo-line-3'], 0.3, { delay: 0.2, scaleX: 0, transformOrigin: \"50% 0% 0\" }, 0.05, 'show-logo')\r\n// .play();\r\n\r\n// //debug console.log(\"animation played\");\r\n// }\r\n\r\n//}","(function () {\r\n angular.module('utility', ['ngSanitize'])\r\n .factory('bmgLogger', bmgLogger)\r\n .factory('utility', utility)\r\n .filter('trustAsResourceUrl', trustAsResourceUrl)\r\n .filter('trustAsMarkup', trustAsMarkup)\r\n .filter('replaceLineBreaks', replaceLineBreaks)\r\n .filter('toBackground', toBackground)\r\n .filter('checkboxSet', checkboxSet)\r\n .filter('dateSuffix', dateSuffix)\r\n .filter('getCropUrl', getCropUrl)\r\n .filter('trimNumber', trimNumber)\r\n .filter('hasActive', hasActive)\r\n .filter('wrapMatches', wrapMatches)\r\n .filter('groupBy', groupBy)\r\n .directive('bmgSrc', bmgSrc)\r\n .directive('onError', onError)\r\n .directive('onEnter', onEnter)\r\n .directive('capHeight', capHeight)\r\n .filter('toMonth', toMonth)\r\n .filter('joinArray', joinArray)\r\n .filter('mapPage', mapPage);\r\n trustAsResourceUrl.$inject = ['$sce'];\r\n dateSuffix.$inject = ['$filter'];\r\n\r\n utility.$inject = [];\r\n function utility() {\r\n return {\r\n getResponsiveValue: function (value) {\r\n if (!value || typeof (value) !== 'object') {\r\n return value;\r\n }\r\n if ('large' in value && Foundation.MediaQuery.atLeast('large')) {\r\n return value.large;\r\n }\r\n if ('medium' in value && Foundation.MediaQuery.atLeast('medium')) {\r\n return value.medium;\r\n }\r\n if ('small' in value) {\r\n return value.small;\r\n }\r\n return null;\r\n }\r\n }\r\n }\r\n\r\n function groupBy() {\r\n return function (items, group) { \r\n return items.filter(function (element, index, array) {\r\n return element.groupName == group;\r\n });\r\n }\r\n }\r\n\r\n function trustAsResourceUrl($sce) {\r\n return function (val) {\r\n return $sce.trustAsResourceUrl(val);\r\n }\r\n }\r\n trustAsMarkup.$inject = ['$sce'];\r\n function trustAsMarkup($sce) {\r\n return function (val) {\r\n if (!!val) {\r\n val = val.replace(/style=\"float\\: left;\"/g, 'class=\"left rte\"');\r\n val = val.replace(/style=\"float\\: right;\"/g, 'class=\"right rte\"');\r\n val = val.replace(/');\r\n }\r\n return $sce.trustAs('html', val);\r\n };\r\n }\r\n\r\n function toBackground() {\r\n return function (val) {\r\n if (!val) return {};\r\n return { backgroundImage: 'url(\"' + val + '\")' };\r\n }\r\n }\r\n\r\n function replaceLineBreaks() {\r\n return function (val) {\r\n if (!val || typeof(val) !== 'string') {\r\n return val;\r\n }\r\n return val.replace(/\\r?\\n/g, '
');\r\n }\r\n }\r\n\r\n function checkboxSet() {\r\n return function (val) {\r\n var items = [];\r\n var count = val.length;\r\n for (var i = 0; i < val.length; i++) {\r\n var v = val[i];\r\n if (v.active)\r\n items.push(v.label);\r\n }\r\n if (items.length === 0 || items.length === count)\r\n return ['All'];\r\n return items;\r\n };\r\n }\r\n\r\n function dateSuffix($filter) {\r\n var suffixes = ['th', 'st', 'nd', 'rd'];\r\n var dayFinder = /(\\d+)\\+/g;\r\n return function (input, format) {\r\n if (!input)\r\n return '';\r\n var result = $filter('date')(input, format);\r\n result = result.replace(dayFinder, function (match, day) {\r\n var relevantDigits = (day < 30) ? day % 20 : day % 30;\r\n var suffix = (relevantDigits <= 3) ? suffixes[relevantDigits] : suffixes[0];\r\n return day + suffix;\r\n });\r\n return result;\r\n }\r\n }\r\n\r\n //function getCropUrl() {\r\n // return function (input, cropName) { \r\n // if (!input) { \r\n // console.log('image missing, cropName = ' + cropName);\r\n // return null;\r\n // }\r\n // if (!input.crops) {\r\n // console.log('no crops found');\r\n // if (!input.url)\r\n // return input;\r\n // return input.url;\r\n // }\r\n // for (var i = 0; i < input.crops.length; i++) {\r\n // var crop = input.crops[i];\r\n // if (crop.name === cropName)\r\n // return crop.url;\r\n // }\r\n // console.log('image does not have a crop for \"' + cropName + '\"');\r\n // return input.url;\r\n // }\r\n //}\r\n\r\n function trimNumber() {\r\n return function (number) {\r\n if (number > 1000000)\r\n return (number / 1000000).toPrecision(3) + 'm';\r\n else if (number >= 1000)\r\n return (number / 1000).toPrecision(3) + 'k';\r\n return number;\r\n }\r\n }\r\n\r\n function hasActive() {\r\n return function (array) {\r\n if (array !== undefined) {\r\n for (var i = 0; i < array.length; i++) {\r\n if (array[i].active)\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n }\r\n\r\n function getCropUrl() {\r\n return function (input, cropName) {\r\n if (!input) {\r\n //console.log('image missing');\r\n return null;\r\n }\r\n if (!cropName) {\r\n //console.log('crop name not set');\r\n return input.url;\r\n }\r\n if (typeof (cropName) === 'object') {\r\n var url = input.url;\r\n if (cropName['mode']) {\r\n url = url.replace('&mode=crop', '');\r\n }\r\n var keys = Object.keys(cropName);\r\n for (var i = 0; i < keys.length; i++) {\r\n var key = keys[i];\r\n url += '&' + key + '=' + cropName[key];\r\n }\r\n return url;\r\n }\r\n if (!input.crops) {\r\n //console.log('no crops found');\r\n if (!input.url)\r\n return input;\r\n return input.url;\r\n }\r\n for (var i = 0; i < input.crops.length; i++) {\r\n var crop = input.crops[i];\r\n if (crop.name === cropName)\r\n return crop.url;\r\n }\r\n //console.log('image does not have a crop for \"' + cropName + '\"');\r\n return input.url;\r\n }\r\n }\r\n\r\n function wrapMatches() {\r\n return function(value, term) {\r\n if (value) {\r\n //console.log(term);\r\n var searcher = new RegExp(term, 'gi');\r\n value = value.replace(searcher, '$&');\r\n }\r\n return value;\r\n }\r\n }\r\n\r\n bmgSrc.$inject = ['$parse'];\r\n function bmgSrc($parse) {\r\n var directive = {\r\n restrict: 'A',\r\n link: link\r\n }\r\n return directive;\r\n function link(scope, element, attrs) {\r\n attrs.$observe('bmgSrc', function (value) {\r\n if (value !== undefined) {\r\n attrs.$set('src', value);\r\n }\r\n });\r\n element.on('load.bmgSrc', function () {\r\n scope.$evalAsync(function () {\r\n scope.$emit('imageLoaded', {\r\n element: element,\r\n success: true,\r\n src: attrs.onLoad\r\n })\r\n })\r\n })\r\n .on('error.bmgSrc', function () {\r\n scope.$evalAsync(function () {\r\n scope.$emit('imageLoaded', {\r\n element: element,\r\n success: false,\r\n src: attrs.onLoad\r\n });\r\n });\r\n });\r\n\r\n scope.$on('$destroy', function () {\r\n element.off('load.imgCheck error.imgCheck');\r\n })\r\n }\r\n }\r\n\r\n onError.$inject = ['$parse']\r\n function onError($parse) {\r\n var directive = {\r\n compile: compile\r\n };\r\n return directive;\r\n function compile(element, attrs) {\r\n var fn = $parse(attrs['onError'], null, true);\r\n return function (scope, element, attrs, controller) {\r\n element.on('error', function (event) {\r\n fn(scope, { $event: event });\r\n if (!scope.$$phase)\r\n scope.$apply();\r\n });\r\n scope.$on('$destroy', function () {\r\n element.off('error');\r\n });\r\n }\r\n }\r\n }\r\n\r\n function onEnter() {\r\n return function (scope, element, attrs) {\r\n element.bind(\"keydown keypress\", function (event) {\r\n if (event.which === 13) {\r\n scope.$apply(function () {\r\n scope.$eval(attrs.onEnter);\r\n });\r\n\r\n event.preventDefault();\r\n }\r\n });\r\n };\r\n }\r\n\r\n function bmgLogger() {\r\n return {\r\n info: function(msg) {\r\n console.info(msg);\r\n }\r\n }\r\n }\r\n\r\n function joinArray() {\r\n return function (array, field, separator) {\r\n return _.pluck(array, field).join(separator);\r\n }\r\n }\r\n\r\n\r\n /**\r\n * @ngdoc directive\r\n * @module utility\r\n * @name capHeight:utility\r\n * @restrict A\r\n * @description\r\n * Helper to get around issue where max-height isn't applied to children because the element doesn't have a set height.\r\n */\r\n var capId = 0;\r\n capHeight.$inject = ['$window', '$timeout'];\r\n function capHeight($window, $timeout) {\r\n var directive = {\r\n restrict: 'A',\r\n link: link\r\n };\r\n return directive;\r\n function link($scope, $element) {\r\n var capId = capId++;\r\n function setHeight() {\r\n $element.removeClass('cap-height');\r\n var childHeights = 0;\r\n $element.children().each(function () {\r\n var child = angular.element(this);\r\n var position = child.css('position');\r\n if (position !== 'absolute' && position !== 'fixed') {\r\n childHeights += child.outerHeight();\r\n }\r\n });\r\n if (Math.round(childHeights) > Math.round($element.height())) {\r\n $element.addClass('cap-height');\r\n }\r\n }\r\n setHeight();\r\n\r\n var win = angular.element($window).on('resize.capHeight' + capId, setHeight);\r\n\r\n $scope.$on('checkCaps', setHeight);\r\n\r\n $scope.$on('$destroy', function () {\r\n win.off('resize.capHeight' + capId);\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * @ngdoc directive\r\n * @module utility\r\n * @name toMonth\r\n * @restrict A\r\n * @description\r\n * Helper to get around issue where max-height isn't applied to children because the element doesn't have a set height.\r\n */\r\n toMonth.$inject = ['$filter'];\r\n function toMonth($filter) {\r\n return function (month, format) {\r\n if (!month || isNaN(month)) {\r\n return month;\r\n }\r\n var date = new Date(1, month - 1);\r\n return $filter('date')(date, format);\r\n }\r\n }\r\n\r\n mapPage.$inject = ['$location'];\r\n function mapPage($location) {\r\n return function (url) {\r\n var host = $location.host();\r\n if (url.indexOf(host) > -1) {\r\n return url;\r\n }\r\n return url.replace(/https\\:\\/\\/[^\\/]+/, \"https://\" + host);\r\n };\r\n }\r\n})();\r\n","(function () {\r\n angular.module('app')\r\n .controller('CategoriesController', CategoriesController);\r\n\r\n CategoriesController.$inject = ['$scope', '$location', '$attrs'];\r\n function CategoriesController($scope, $location, $attrs) {\r\n var ctrl = this;\r\n var previousValue = null;\r\n var query = $location.search();\r\n\r\n if ($attrs.categories && $attrs.categories > 0) { \r\n $scope.$root.params.categories = $attrs.categories;\r\n }\r\n else if (query.categories) { \r\n $scope.$root.params.categories = query.categories;\r\n }\r\n \r\n ctrl.clearCheck = function (value, group) {\r\n if (previousValue === value) {\r\n $scope.$root.params[group] = null;\r\n previousValue = null;\r\n }\r\n else {\r\n previousValue = value;\r\n }\r\n }\r\n }\r\n})();","(function () {\r\n angular.module('app')\r\n .controller('FeedGridController', FeedGridController);\r\n\r\n FeedGridController.$inject = ['$scope', '$element', '$attrs', '$window', '$timeout'];\r\n function FeedGridController($scope, $element, $attrs, $window, $timeout) {\r\n var ctrl = this;\r\n $scope.$watch('params', function (newVal) {\r\n if (newVal) {\r\n ctrl.params = angular.copy(newVal);\r\n ctrl.params.id = $attrs.source;\r\n ctrl.params.featured = $attrs.featured;\r\n ctrl.params.includeBodyText = $attrs.hasModal;\r\n ctrl.params.sortType = $attrs.sortType;\r\n ctrl.params.onlypasseddates = $attrs.onlypasseddates;\r\n if (ctrl.params.sortAscending === undefined) {\r\n ctrl.params.sortAscending = $attrs.ascending;\r\n }\r\n if ($attrs.categories && !ctrl.params.categories) {\r\n ctrl.params.categories = $attrs.categories;\r\n }\r\n }\r\n else {\r\n ctrl.params = {\r\n id: $attrs.source,\r\n featured: $attrs.featured,\r\n sortAscending: $attrs.ascending,\r\n includeBodyText: $attrs.hasModal,\r\n sortType: $attrs.sortType,\r\n onlypasseddates: $attrs.onlypasseddates\r\n };\r\n if ($attrs.categories) {\r\n ctrl.params.categories = $attrs.categories;\r\n }\r\n }\r\n });\r\n\r\n ctrl.openModal = function ($event, index) {\r\n $event.preventDefault();\r\n if (ctrl.carousel) {\r\n ctrl.carousel.goToSlide(index, false);\r\n }\r\n this.modalOpen = true;\r\n $scope.$root.lockScroll = true;\r\n };\r\n\r\n ctrl.closeModal = function () {\r\n this.modalOpen = false;\r\n $scope.$root.lockScroll = false;\r\n };\r\n\r\n ctrl.blockClose = function (event) {\r\n event.stopPropagation();\r\n };\r\n\r\n ctrl.registerCarousel = function (carousel) {\r\n ctrl.carousel = carousel;\r\n };\r\n\r\n ctrl.updateSlides = function (slides) {\r\n ctrl.modalSlides = angular.copy(slides);\r\n ctrl.syncAnimations();\r\n };\r\n\r\n ctrl.updateHash = function (slide) {\r\n if (slide) {\r\n $window.location.hash = slide.urlName;\r\n }\r\n };\r\n\r\n var clientMargin = 0;\r\n\r\n function getClientPos(data, index) {\r\n var start = Math.floor(index / data.slideData.length);\r\n var currentIndex = (index + Math.abs(data.slideData.length * start)) % data.slideData.length;\r\n var totalWidth = data.slideData.length * data.carousel.width();\r\n return start * totalWidth + (data.carousel.width() * currentIndex);\r\n }\r\n\r\n ctrl.slideAnimation = function (offset, index, data) {\r\n var width = data.carousel.width();\r\n var totalWidth = data.slideData.length * width;\r\n if (width > 0) {\r\n var rounds = -Math.floor((getClientPos(data, index) + offset + width) / totalWidth);\r\n var roundLength = data.slideData.length;\r\n var renderIndex = index + (rounds * roundLength);\r\n var pos = getClientPos(data, renderIndex);\r\n return {\r\n x: pos + offset,\r\n y: 0\r\n };\r\n }\r\n };\r\n\r\n ctrl.slideSnap = function (offset, data) {\r\n var slideWidth = data.carousel.width();\r\n var index = -Math.round(offset / slideWidth);\r\n return {\r\n index: index,\r\n position: -getClientPos(data, index)\r\n };\r\n };\r\n\r\n ctrl.syncAnimations = function () {\r\n if ($window.wow) {\r\n $timeout(function () {\r\n $window.wow.sync();\r\n });\r\n }\r\n };\r\n\r\n ctrl.checkCaps = function () {\r\n $scope.$broadcast('checkCaps');\r\n };\r\n }\r\n})();","(function () {\r\n angular.module('feedResource', ['ngResource'])\r\n .factory('feedResource', feedResource);\r\n\r\n feedResource.$inject = ['$resource'];\r\n function feedResource($resource) {\r\n return {\r\n list: $resource('/api/feed/:id/', { id: '@id' })\r\n };\r\n }\r\n})();","(function () {\r\n angular.module('app')\r\n .controller('RelatedContentController', RelatedContentController);\r\n\r\n RelatedContentController.$inject = ['$scope', '$attrs'];\r\n function RelatedContentController($scope, $attrs) {\r\n var ctrl = this;\r\n ctrl.cta = $attrs.cta;\r\n }\r\n})();","(function () {\r\n angular.module('relatedContentResource', ['ngResource'])\r\n .factory('relatedContentResource', relatedContentResource);\r\n\r\n relatedContentResource.$inject = ['$resource'];\r\n function relatedContentResource($resource) {\r\n return {\r\n list: $resource('/api/related-content/')\r\n };\r\n }\r\n})();","(function () {\r\n angular.module('app')\r\n .controller('DateFilterController', DateFilterController);\r\n\r\n DateFilterController.$inject = ['$scope', '$attrs', '$location'];\r\n function DateFilterController($scope, $attrs, $location) {\r\n var ctrl = this; \r\n var query = $location.search();\r\n var queryFound = false;\r\n if (query.y && query.m) {\r\n queryFound = true;\r\n $scope.params.month = parseInt(query.m);\r\n $scope.params.year = parseInt(query.y);\r\n }\r\n else if ($attrs.filterByDefault === 'true') {\r\n var now = new Date();\r\n $scope.params.month = now.getMonth() + 1;\r\n $scope.params.year = now.getFullYear();\r\n }\r\n\r\n if ($attrs.onlyPassedDates === 'true') {\r\n $scope.params.onlyPassedDates = queryFound;\r\n }\r\n\r\n ctrl.setDate = function (value) {\r\n var dateVal = new Date(value);\r\n var m = dateVal.getMonth() + 1;\r\n var y = dateVal.getFullYear();\r\n if ($scope.params.month === m && $scope.params.year === y) {\r\n $scope.params.month = undefined;\r\n $scope.params.year = undefined;\r\n if ($attrs.onlyPassedDates === 'true') {\r\n $scope.params.onlyPassedDates = false;\r\n }\r\n }\r\n else {\r\n $scope.params.month = m;\r\n $scope.params.year = y;\r\n if ($attrs.onlyPassedDates === 'true') {\r\n $scope.params.onlyPassedDates = true;\r\n }\r\n }\r\n };\r\n }\r\n})();","(function () {\r\n angular.module('app')\r\n .filter('videoEnableJs', videoEnableJs);\r\n\r\n videoEnableJs.$inject = [];\r\n function videoEnableJs() {\r\n return function (markup, provider, id) {\r\n switch (provider) {\r\n case \"YouTube\":\r\n return markup.replace(\"?\", \"?enablejsapi=1&origin=\" + location.origin + \"&\").replace(\" headerSize && boundingRect.top <= $window.innerHeight) {\r\n provider.play();\r\n }\r\n else {\r\n provider.pause();\r\n }\r\n }\r\n\r\n }\r\n $timeout(configure);\r\n\r\n if ($scope.videoId) {\r\n provider = videoProviders.get($scope.provider);\r\n if (provider !== null) {\r\n provider.init('player-' + $scope.videoId, $scope.loop).then(function () {\r\n configure();\r\n var target = angular.element('#video-' + $scope.videoId);\r\n target.on('closed.zf.reveal', function () {\r\n provider.stop();\r\n }).on('open.zf.reveal', function () {\r\n provider.play();\r\n });\r\n });\r\n }\r\n }\r\n\r\n $scope.$on('slideChange', function (event, data) {\r\n if (provider && provider.ready) {\r\n if (data.index === $scope.$parent.$index) {\r\n provider.play();\r\n }\r\n else {\r\n provider.pause();\r\n }\r\n }\r\n });\r\n\r\n $scope.$on('$destroy', function () {\r\n win.off('scroll.videoManager' + instanceId).off('resize.videoManager' + instanceId);\r\n });\r\n }\r\n }\r\n})();","(function () {\r\n angular.module('app')\r\n .controller('GridCarouselController', GridCarouselController);\r\n\r\n GridCarouselController.$inject = ['$scope', '$element', '$window'];\r\n function GridCarouselController($scope, $element, $window) {\r\n var ctrl = this;\r\n\r\n \r\n function getClientPos(data, index) {\r\n var start = Math.floor(index / data.slideData.length);\r\n var currentIndex = (index + Math.abs(data.slideData.length * start)) % data.slideData.length;\r\n return start * data.totalWidth + data.offsets[currentIndex];\r\n }\r\n\r\n ctrl.slideAnimation = function (offset, index, data) {\r\n var element = angular.element(data.elements[index]);\r\n var images = element.find('img');\r\n var width = data.slideWidth;\r\n if (!width) {\r\n images.css('display', 'none');\r\n width = angular.element(data.elements[index]).outerWidth();\r\n images.css('display', '');\r\n if (!width && data.slideData[index].image) {\r\n width = data.slideData[index].image.width;\r\n }\r\n }\r\n var rounds = -Math.floor((getClientPos(data, index) + offset + (data.slideData.length > 1 ? width : 0) + data.spacing) / data.totalWidth);\r\n var roundLength = data.slideData.length;\r\n var renderIndex = index + (rounds * roundLength);\r\n return {\r\n x: getClientPos(data, renderIndex) + offset,\r\n y: 0,\r\n width: width\r\n };\r\n };\r\n\r\n ctrl.slideAnimationPrep = function (data) {\r\n if (data.slideData) {\r\n var totalWidth = 0;\r\n var offsets = [];\r\n var breakpoints = [];\r\n var elements = [];\r\n var maxHeight = 0;\r\n if (data.slideWidth) {\r\n data.slideElements.width(data.slideWidth);\r\n }\r\n for (var i = 0; i < data.slideData.length; i++) {\r\n offsets.push(totalWidth);\r\n var element = angular.element(data.slideElements[i]).find('>div,>a');\r\n var images = element.find('img');\r\n var width = data.slideWidth;\r\n elements.push(element);\r\n var imagesLoaded = images.hasClass('loaded');\r\n if (!imagesLoaded) {\r\n images.css('display', 'none');\r\n }\r\n var height = element.outerHeight();\r\n if (!imagesLoaded) {\r\n images.css('display', '');\r\n }\r\n var margin = data.spacing;\r\n if (images.length) {\r\n var item = data.slideData[i];\r\n if (data.slideWidth) {\r\n if (!imagesLoaded) {\r\n var source = images.attr('image-source');\r\n var widthResult = /width\\=(\\d+)/.exec(source);\r\n var imageWidth = widthResult && widthResult[1] ? parseInt(widthResult[1]) : (item.image ? item.image.width : 0);\r\n var heightResult = /height\\=(\\d+)/.exec(source);\r\n var heightFound = heightResult && heightResult[1];\r\n var imageHeight = heightFound ? parseInt(heightResult[1]) : (item.image ? item.image.height : 0);\r\n var scale = imageWidth / data.slideWidth;\r\n if (scale > 1 && !heightFound) {\r\n imageHeight /= scale;\r\n }\r\n height += imageHeight;\r\n }\r\n }\r\n else {\r\n width = item.image ? item.image.width : 0;\r\n if (!item.image) {\r\n margin = 0;\r\n }\r\n else {\r\n scale = item.image.height / images.height();\r\n item.image.width /= scale;\r\n item.image.height /= scale;\r\n width = item.image.width;\r\n }\r\n if (!height) {\r\n height = images.height();\r\n }\r\n }\r\n }\r\n maxHeight = Math.max(height, maxHeight);\r\n breakpoints.push(totalWidth + margin + (width / 2));\r\n totalWidth += width + margin;\r\n }\r\n data.elements = elements;\r\n data.totalWidth = totalWidth;\r\n data.offsets = offsets;\r\n data.breakpoints = breakpoints;\r\n data.carousel.find('.slides').height(maxHeight);\r\n }\r\n return data;\r\n };\r\n\r\n ctrl.slideSnap = function (offset, data) {\r\n var pos = 0;\r\n var shift = Math.abs(offset % data.totalWidth);\r\n if (offset > 0) {\r\n shift = data.totalWidth - shift;\r\n }\r\n for (var i = 0; i < data.offsets.length; i++) {\r\n if (shift <= data.breakpoints[i]) {\r\n pos = i;\r\n break;\r\n }\r\n }\r\n var index = -(Math.ceil(offset / data.totalWidth) * data.slideData.length - pos);\r\n return {\r\n index: index,\r\n position: -getClientPos(data, index)\r\n };\r\n };\r\n }\r\n})();","(function () {\r\n angular.module('softwareResource', ['ngResource'])\r\n .factory('softwareResource', softwareResource);\r\n\r\n softwareResource.$inject = ['$resource'];\r\n function softwareResource($resource) {\r\n return {\r\n softwareFeatures: $resource('/api/software/features', {}),\r\n softwareEditions: $resource('/api/software/editions', {})\r\n };\r\n }\r\n})();","(function () {\r\n angular.module('app')\r\n .controller('SoftwareEditionRecommendationController', SoftwareEditionRecommendationController);\r\n\r\n SoftwareEditionRecommendationController.$inject = ['$scope', '$element', '$window', 'softwareResource', '$filter'];\r\n function SoftwareEditionRecommendationController($scope, $element, $window, softwareResource, $filter) {\r\n var ctrl = this;\r\n ctrl.featureFilters = [];\r\n ctrl.softwareEditions = [];\r\n ctrl.homepageId = null;\r\n\r\n function loadEditions() {\r\n //get all feature filters\r\n /*softwareResource.softwareFeatures.get({ isRecommendedOnly: true }, function (data) {\r\n ctrl.featureFilters = data.items;\r\n });*/\r\n //get all software editions\r\n softwareResource.softwareEditions.get({ homepageId: ctrl.homepageId, sortType: 0 }, function (data) {\r\n ctrl.softwareEditions = data.items.filter(e => !e.name.includes(\"Review\"));\r\n\r\n console.info(ctrl.softwareEditions.length);\r\n });\r\n }\r\n\r\n function loadEditionsReview() {\r\n //get all feature filters\r\n /*softwareResource.softwareFeatures.get({ isRecommendedOnly: true }, function (data) {\r\n ctrl.featureFilters = data.items;\r\n });*/\r\n //get all software editions\r\n softwareResource.softwareEditions.get({ homepageId: ctrl.homepageId, sortType: 0 }, function (data) {\r\n ctrl.softwareEditions = data.items.filter(e => e.name.includes(\"Review\"));\r\n\r\n console.info(ctrl.softwareEditions.length);\r\n });\r\n }\r\n\r\n $scope.loadData = function (homepageId, features) {\r\n //console.log(features);\r\n ctrl.homepageId = homepageId;\r\n ctrl.featureFilters = features;\r\n loadEditions();\r\n }\r\n\r\n $scope.loadData = function (homepageId, features, editions) {\r\n //console.log(features);\r\n ctrl.homepageId = homepageId;\r\n ctrl.featureFilters = features;\r\n if (editions !== null && editions !== '')\r\n {\r\n ctrl.softwareEditions = editions;\r\n }\r\n else\r\n {\r\n loadEditions();\r\n }\r\n }\r\n\r\n $scope.loadDataReview = function (homepageId, features) {\r\n //console.log(features);\r\n ctrl.homepageId = homepageId;\r\n ctrl.featureFilters = features;\r\n loadEditionsReview();\r\n }\r\n\r\n $scope.filterClick = function (feature) {\r\n feature.selected = !feature.selected;\r\n filterEditions();\r\n }\r\n\r\n $scope.filterClickSingle = function (feature) {\r\n feature.selected = !feature.selected;\r\n filterEditionsSingle();\r\n }\r\n\r\n function filterEditions() {\r\n var selectedFeatures = _.pluck($filter('filter')(ctrl.featureFilters, { selected: true }), 'id');\r\n angular.forEach(ctrl.softwareEditions, function (edition, index) {\r\n edition.selected = false;\r\n\r\n //select only if there is a selcted features to filter\r\n if (selectedFeatures.length > 0) {\r\n if (_.intersection(_.pluck(edition.recommendedFeatures, 'id'), selectedFeatures).length == selectedFeatures.length) {\r\n edition.selected = true;\r\n }\r\n }\r\n });\r\n }\r\n\r\n function filterEditionsSingle() {\r\n var selectedFeatures = _.pluck($filter('filter')(ctrl.featureFilters, { selected: true }), 'id');\r\n var highestSelected = \"Not Found\";\r\n var highestSelectedFeatures = 0;\r\n angular.forEach(ctrl.softwareEditions, function (edition, index) {\r\n edition.selected = false;\r\n\r\n //select only if there is a selcted features to filter\r\n if (selectedFeatures.length > 0) {\r\n var foundFeatures = _.intersection(_.pluck(edition.recommendedFeatures, 'id'), selectedFeatures).length;\r\n if (foundFeatures > 0) /*highestSelectedFeatures*/ {\r\n \r\n highestSelectedFeatures = foundFeatures;\r\n if (edition.name.indexOf('Enterprise') !== -1) {\r\n highestSelected = 'Enterprise';\r\n }\r\n else if (edition.name.indexOf('Automation') !== -1 && highestSelected != 'Enterprise') {\r\n highestSelected = 'Automation';\r\n }\r\n else if (edition.name.indexOf('Professional') !== -1 && highestSelected != 'Enterprise' && highestSelected != 'Automation') {\r\n highestSelected = 'Professional';\r\n }\r\n else if (edition.name.indexOf('Starter') !== -1 && highestSelected != 'Enterprise' && highestSelected != 'Professional' && highestSelected != 'Automation') {\r\n highestSelected = 'Starter';\r\n }\r\n else if (edition.name.indexOf('Free') !== -1 && highestSelected != 'Enterprise' && highestSelected != 'Professional' && highestSelected != 'Automation' && highestSelected != 'Starter') {\r\n highestSelected = 'Free';\r\n }\r\n\r\n edition.selected = true;\r\n }\r\n }\r\n });\r\n\r\n angular.forEach(ctrl.softwareEditions, function (edition, index) {\r\n if (edition.name.indexOf(highestSelected) !== -1) {\r\n edition.selected = true;\r\n }\r\n else\r\n {\r\n edition.selected = false;\r\n }\r\n });\r\n }\r\n }\r\n})();","(function () {\r\n angular.module('printerResource', ['ngResource'])\r\n .factory('printerResource', printerResource);\r\n\r\n printerResource.$inject = ['$resource'];\r\n function printerResource($resource) {\r\n return {\r\n brands: $resource('/api/printerDrivers/brands', {}),\r\n models: $resource('/api/printerDrivers/models', {})\r\n };\r\n }\r\n})();","(function () {\r\n angular.module('app')\r\n .controller('PrinterSearchController', PrinterSearchController);\r\n\r\n PrinterSearchController.$inject = ['$scope', '$attrs', '$element', '$window', 'printerResource', '$filter'];\r\n function PrinterSearchController($scope, $attrs, $element, $window, printerResource, $filter) {\r\n var ctrl = this;\r\n ctrl.brands = [];\r\n ctrl.selectedBrand = null;\r\n ctrl.printerModels = [];\r\n ctrl.selectedModel = null;\r\n ctrl.buttonDisabledState = true;\r\n ctrl.action = '';\r\n ctrl.downloadPath = $attrs.downloadPath;\r\n\r\n function init() {\r\n //get all feature filters\r\n printerResource.brands.get(null, function (data) {\r\n ctrl.brands = data.items;\r\n });\r\n }\r\n\r\n init();\r\n\r\n ctrl.getModels = function () {\r\n ctrl.selectedModel = null;\r\n ctrl.downloadUrl = null;\r\n printerResource.models.get({ name: ctrl.selectedBrand.manufacturer }, function (data) {\r\n ctrl.printerModels = data.items;\r\n });\r\n };\r\n\r\n ctrl.enableDownload = function () {\r\n if (ctrl.selectedModel) {\r\n ctrl.downloadUrl = ctrl.downloadPath.replace('[driver]', ctrl.selectedBrand.manufacturer.toLowerCase().replace(/\\s+/g, '-').replace(/[^\\w\\u00E0-\\u00FF\\-]+/g, ''));\r\n console.log(ctrl.downloadUrl);\r\n }\r\n };\r\n \r\n ctrl.submit = function () {\r\n console.log(ctrl.selectedModel, ctrl.action);\r\n };\r\n\r\n ctrl.validateClick = function ($event) {\r\n if (ctrl.downloadUrl) {\r\n $event.preventDefault();\r\n }\r\n };\r\n }\r\n})();","(function () {\r\n angular.module('searchResource', ['ngResource'])\r\n .factory('searchResource', searchResource);\r\n\r\n searchResource.$inject = ['$resource'];\r\n function searchResource($resource) {\r\n return {\r\n search: $resource('/api/search/:id', { id: '@id' })\r\n };\r\n }\r\n})();","(function () {\r\n angular.module('geoCountryResource', ['ngResource'])\r\n .factory('geoCountryResource', geoCountryResource);\r\n\r\n geoCountryResource.$inject = ['$resource'];\r\n function geoCountryResource($resource) {\r\n return {\r\n states: $resource('/api/geonames/states', { countryId: '@id', lang: '@lang' })//,\r\n //statesabbreviations: $resource('/api/geonames/stateabbreviations', { countryId: '@id' })\r\n };\r\n }\r\n})();","(function () {\r\n angular.module('app')\r\n .controller('GeoCountryController', GeoCountryController);\r\n \r\n GeoCountryController.$inject = ['$rootScope', '$scope', '$attrs', '$window', 'geoCountryResource', '$element'];\r\n function GeoCountryController($rootScope, $scope, $attrs, $window, geoCountryResource, $element) { \r\n var ctrl = this;\r\n $window.geoFields = $window.geoFields || {};\r\n ctrl.states = [];\r\n //ctrl.stateabbreviations = [];\r\n ctrl.selectedState = null;\r\n ctrl.country = $attrs.id;\r\n ctrl.lang = $attrs.lang;\r\n ctrl.countries = angular.fromJson($attrs.countries);\r\n if (ctrl.countries) {\r\n ctrl.countryMap = {};\r\n for (var i = 0; i < ctrl.countries.length; i++) {\r\n var country = ctrl.countries[i];\r\n ctrl.countryMap[country.ID] = country.Name;\r\n }\r\n $window.geoFields[$element.find('select').attr('name')] = ctrl.countryMap[$attrs.id];\r\n }\r\n\r\n \r\n // US = 6252001 \r\n //var countryResource = $resource('/api/geonames/states', { countryId: '@id' });\r\n\r\n function init() {\r\n _updateStates(ctrl.country, ctrl.lang); \r\n //_updateStateAbbreviations(ctrl.country); \r\n }\r\n\r\n init(); \r\n\r\n function _updateStates(id, lang) { \r\n if (id === undefined || id === '') return;\r\n\r\n // clear selection now\r\n $rootScope.states = [];\r\n\r\n //get all states from the US \r\n //countryResource.get({ id: id }, function (data) { \r\n if (id )\r\n geoCountryResource.states.get({ id: id, lang: lang }, function (data) {\r\n //console.info(data.items);\r\n //ctrl.states = data.items;\r\n $rootScope.states = data.items;\r\n });\r\n }\r\n\r\n //function _updateStateAbbreviations(id) {\r\n // if (id === undefined) return;\r\n\r\n // // clear selection now\r\n // $rootScope.stateabbreviations = [];\r\n\r\n // //get all states from the US \r\n // //countryResource.get({ id: id }, function (data) { \r\n // geoCountryResource.stateabbreviations.get({ id: id }, function (data) {\r\n // //console.info(data.items);\r\n // //ctrl.states = data.items;\r\n // $rootScope.stateabbreviations = data.items;\r\n // });\r\n //}\r\n\r\n $scope.updateStates = function (name, country) {\r\n $window.geoFields[name] = ctrl.countryMap[country];\r\n _updateStates(country, ctrl.lang);\r\n };\r\n\r\n //$scope.updateStateAbbreviations = function (name, country) {\r\n // $window.geoFields[name] = ctrl.countryMap[country];\r\n // _updateStateAbbreviations(country);\r\n //};\r\n\r\n $scope.updateState = function (name, state) {\r\n $window.geoFields[name] = state;\r\n }\r\n }\r\n})();","(function () {\r\n angular.module('app')\r\n .controller('OptInConfirmationController', OptInConfirmationController);\r\n \r\n OptInConfirmationController.$inject = ['$http', '$location', '$attrs', '$element'];\r\n function OptInConfirmationController($http, $location, $attrs, $element) {\r\n var ctrl = this;\r\n ctrl.$onInit = function () {\r\n ctrl.key = $attrs.key;\r\n ctrl.loading = true;\r\n $http({\r\n method: 'POST',\r\n url: '/api/optin/confirm',\r\n headers: {\r\n 'Content-Type': 'application/x-www-form-urlencoded'\r\n },\r\n data: \"=\" + $location.search()[ctrl.key]\r\n })\r\n .then(function () {\r\n var success = $element.find('.success');\r\n new TimelineLite()\r\n .set(success, { display: 'block', opacity: 0 })\r\n .to($element.find('.loader'), .5, { autoAlpha: 0 })\r\n .to(success, .5, { delay: .3, autoAlpha: 1 });\r\n })\r\n .catch(function () {\r\n var error = $element.find('.error');\r\n new TimelineLite()\r\n .set(error, { display: 'block', opacity: 0 })\r\n .to($element.find('.loader'), .5, { autoAlpha: 0 })\r\n .to(error, .5, { delay: .3, autoAlpha: 1 });\r\n });\r\n };\r\n }\r\n})();","(function () {\r\n angular.module('app')\r\n .controller('OptOutConfirmationController', OptOutConfirmationController);\r\n \r\n OptOutConfirmationController.$inject = ['$http', '$location', '$attrs', '$element'];\r\n function OptOutConfirmationController($http, $location, $attrs, $element) {\r\n var ctrl = this;\r\n ctrl.$onInit = function () {\r\n ctrl.key = $attrs.key;\r\n ctrl.loading = true;\r\n $http({\r\n method: 'POST',\r\n url: '/api/optout/confirm',\r\n headers: {\r\n 'Content-Type': 'application/x-www-form-urlencoded'\r\n },\r\n data: \"=\" + $location.search()[ctrl.key]\r\n })\r\n .then(function () {\r\n var success = $element.find('.success');\r\n new TimelineLite()\r\n .set(success, { display: 'block', opacity: 0 })\r\n .to($element.find('.loader'), .5, { autoAlpha: 0 })\r\n .to(success, .5, { delay: .3, autoAlpha: 1 });\r\n })\r\n .catch(function () {\r\n var error = $element.find('.error');\r\n new TimelineLite()\r\n .set(error, { display: 'block', opacity: 0 })\r\n .to($element.find('.loader'), .5, { autoAlpha: 0 })\r\n .to(error, .5, { delay: .3, autoAlpha: 1 });\r\n });\r\n };\r\n }\r\n})();","(function () {\r\n angular.module('app')\r\n .factory('helper', helper);\r\n helper.$inject = ['$window'];\r\n function helper($window) {\r\n return {\r\n getMediaQueries: getMediaQueries,\r\n getMediaQuery: getMediaQuery,\r\n getLoadingIndicator: getLoadingIndicator,\r\n getCurrentMediaQuery: getCurrentMediaQuery\r\n };\r\n\r\n function getMediaQueries() {\r\n var queries = angular.element('meta.foundation-mq').css('fontFamily').replace('\"', '').replace(\"'\", '').split('&');\r\n var mediaQueries = {};\r\n for (var i = 0; i < queries.length; i++) {\r\n var pieces = queries[i].split('=');\r\n var key = pieces[0];\r\n var size = parseFloat(pieces[1]);\r\n mediaQueries[key] = $window.matchMedia('only screen and (min-width: ' + size + 'em)');\r\n mediaQueries[key + ' down'] = $window.matchMedia('only screen and (max-width: ' + size + 'em)');\r\n var nextSize;\r\n if (i < queries.length - 1) {\r\n var nextPieces = queries[i + 1].split('=');\r\n var query = 'only screen and ';\r\n if (size) {\r\n query += '(min-width: ' + size + 'em) and ';\r\n }\r\n query += '(max-width: ' + parseFloat(nextPieces[1]) + 'em';\r\n mediaQueries[key + ' only'] = $window.matchMedia(query);\r\n }\r\n }\r\n return mediaQueries;\r\n }\r\n\r\n function getMediaQuery(key) {\r\n var mediaQueries = getMediaQueries();\r\n return mediaQueries[key];\r\n }\r\n\r\n function getLoadingIndicator() {\r\n return angular.element('');\r\n }\r\n\r\n function getCurrentMediaQuery() {\r\n if (Foundation.MediaQuery.current) {\r\n return Foundation.MediaQuery.current;\r\n }\r\n var queries = getMediaQueries();\r\n var keys = Object.keys(queries);\r\n var result;\r\n for (var i = 0; i < keys.length; i++) {\r\n var key = keys[i];\r\n if (queries[key].matches) {\r\n result = key;\r\n }\r\n else {\r\n break;\r\n }\r\n }\r\n return result;\r\n }\r\n }\r\n})();","(function () {\r\n\tangular.module('components.accordionColumns', [])\r\n\t\t.component('accordionColumn', {\r\n\t\t\trequire: {\r\n\t\t\t\taccordionColumns: '^accordionColumns'\r\n\t\t\t},\r\n\t\t\tbindings: {\r\n\t\t\t\ttitle: '@',\r\n\t\t\t\tlinks: '<'\r\n\t\t\t},\r\n\t\t\ttemplate: '

{{$ctrl.title}}

',\r\n\t\t\tcontroller: accordionColumnController\r\n\t\t});\r\n\r\n\taccordionColumnController.$inject = ['$element']\r\n\tfunction accordionColumnController($element) {\r\n\t\tvar ctrl = this;\r\n\t\tctrl.$onInit = function () {\r\n\t\t $element.addClass('grid-content');\r\n\t\t\tctrl.$element = $element;\r\n\t\t\tctrl.verticalTitle = ctrl.title;\r\n\t\t\tvar split = ctrl.title.split(' ');\r\n\t\t\tif (split.length > 1) {\r\n\t\t\t\tctrl.verticalTitle = '' + split.join('') + '';\r\n\t\t\t}\r\n\t\t\tctrl.accordionColumns.registerColumn(ctrl);\r\n\t\t}\r\n\r\n\t\tctrl.clear = function () {\r\n\t\t if (ctrl.currentLink) {\r\n\t\t ctrl.currentLink.active = false;\r\n\t\t ctrl.currentLink.loading = false;\r\n\t\t }\r\n\t\t}\r\n\r\n\t\tctrl.activate = function (link) {\r\n\t\t ctrl.accordionColumns.clear();\r\n\t\t ctrl.clear();\r\n\t\t\tlink.active = true;\r\n\t\t\tlink.loading = true;\r\n\t\t\tctrl.currentLink = link;\r\n\t\t\tctrl.accordionColumns.activateColumn(ctrl);\r\n\t\t}\r\n\t}\r\n})();","(function () {\r\n angular.module('components.accordionColumns')\r\n .component('accordionColumns', {\r\n bindings: {\r\n animation: '&?',\r\n allOpen: '
',\r\n controller: accordionColumnsContentController\r\n });\r\n\r\n accordionColumnsContentController.$inject = ['$scope', '$element', '$transclude'];\r\n function accordionColumnsContentController($scope, $element, $transclude) {\r\n var ctrl = this;\r\n\r\n ctrl.$onInit = function () {\r\n $element.addClass('grid-content');\r\n ctrl.accordionColumns.registerContent(ctrl);\r\n }\r\n\r\n ctrl.$postLink = function () {\r\n $transclude($scope, function (clone) {\r\n if (clone.length)\r\n $element.find('.default-content').html(clone);\r\n }, null, \"default\");\r\n $transclude($scope, function (clone) {\r\n if (clone.length)\r\n $element.find('.content').html(clone);\r\n }, null, \"content\");\r\n }\r\n\r\n ctrl.updateContent = function (link) {\r\n ctrl.currentLink = link;\r\n }\r\n\r\n ctrl.backToDefault = function () {\r\n ctrl.currentLink = null;\r\n }\r\n }\r\n})();","/**\r\n * @ngdoc directive\r\n * @module components.anchor\r\n * @name components.anchor:anchor\r\n * @scope\r\n * @restrict E\r\n * @description\r\n * A link that scrolls to a section of the page when clicked. Must be nested within the [anchorContainer](/docs/api/components.anchor:anchorContainer) component. It also has an optional dependency on the sticky component. This is only used to ensure the correct \r\n * @param {string} target The anchor target the link will scroll to when clicked.\r\n * @example\r\n \r\n \r\n
\r\n \r\n {{anchor.name}}\r\n \r\n
\r\n
\r\n

{{content.name}}

\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n (function() {\r\n angular.module('dataExample', ['components.anchor', 'utility'])\r\n .controller('exampleController', exampleController);\r\n\r\n exampleController.$inject = ['$scope'];\r\n function exampleController($scope) {\r\n $scope.anchors = [];\r\n for (var i=1; i<5; i++) {\r\n $scope.anchors.push({\r\n name: 'Anchor ' + i,\r\n text: '

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi blandit quam sit amet metus tincidunt rutrum. Pellentesque ut luctus nisl. Quisque commodo risus a lacinia rhoncus. Duis molestie sem vitae feugiat sollicitudin. Vestibulum sit amet aliquet turpis. Nam elit lacus, viverra et scelerisque sed, volutpat eu magna. Sed ultrices felis risus. Sed a dapibus quam.

Etiam tincidunt enim a dui congue, id semper eros volutpat. Aenean elementum orci dolor, at semper eros sollicitudin eu. Quisque eu mi et nunc venenatis faucibus euismod quis tortor. Praesent auctor tellus id pulvinar semper. Integer ultrices ligula eu magna condimentum cursus. Mauris facilisis sapien eu magna feugiat imperdiet. Nulla luctus lacus eu lobortis scelerisque. Morbi tristique turpis nec magna condimentum, tristique congue lectus mattis. Maecenas eu massa eleifend, gravida arcu quis, dignissim diam. Vestibulum pulvinar est ut euismod maximus. Quisque et est diam. Sed finibus nisi id tellus sodales, at tristique metus malesuada.

'\r\n });\r\n }\r\n }\r\n })();\r\n
\r\n
\r\n */\r\n(function () {\r\n angular.module('components.anchor', [])\r\n .component('anchor', {\r\n require: {\r\n container: '^anchorContainer',\r\n stickyManager: '^?stickyManager'\r\n },\r\n bindings: {\r\n target: '@'\r\n },\r\n controller: anchorController\r\n });\r\n\r\n anchorController.$inject = ['$element', '$timeout'];\r\n function anchorController($element, $timeout) {\r\n var ctrl = this;\r\n\r\n ctrl.$postLink = function () {\r\n $timeout(function () {\r\n ctrl.$target = angular.element('[anchor-target=\"' + ctrl.target + '\"]');\r\n ctrl.container.register(ctrl);\r\n });\r\n $element.on('click.anchor', function () {\r\n ctrl.$$scrollToTarget(false);\r\n });\r\n }\r\n\r\n ctrl.isPassed = function () {\r\n var topOffset = (ctrl.container.scrollTarget ? ctrl.container.$scrollTarget.offset().top : 0) + (ctrl.stickyManager ? ctrl.stickyManager.getStickPoint() : 0);\r\n var targetOffset = ctrl.$target[0].getBoundingClientRect();\r\n return targetOffset.top - topOffset <= 0;\r\n };\r\n\r\n ctrl.$$scrollToTarget = function (skipAnimation) {\r\n (ctrl.container.scrollTarget ? ctrl.container.$scrollTarget.offset().top : angular.element('body,html')).stop().animate({\r\n scrollTop: (ctrl.container.scrollTarget ? '+=' : '') + (ctrl.$target.offset().top - (ctrl.container.scrollTarget ? ctrl.container.$scrollTarget.offset().top : 0) - (ctrl.stickyManager ? ctrl.stickyManager.getStickPoint() : 0) + 1)\r\n }, skipAnimation ? 10 : 600);\r\n };\r\n\r\n ctrl.setActive = function (isActive) {\r\n if (isActive) {\r\n $element.addClass(ctrl.container.activeClass || 'active');\r\n }\r\n else {\r\n $element.removeClass(ctrl.container.activeClass || 'active');\r\n }\r\n }\r\n\r\n ctrl.$onDestroy = function () {\r\n $element.off('click.anchor');\r\n };\r\n }\r\n})();","/**\r\n * @ngdoc directive\r\n * @module components.anchor\r\n * @name components.anchor:anchorContainer\r\n * @scope\r\n * @restrict E\r\n * @description\r\n * A container for anchor links (links that scroll to a section of the page when clicked).\r\n * @param {string=} scrollContainer Sets the scrollable region to watch for updates so that active states can be added to the links as the user scrolls. If left empty, it defaults to 'body, html.'\r\n * @param {string=} activeClass Sets the class anchors will use when they are active. Defaults to 'active' if left empty.\r\n * @param {function=} onRegister Callback function that fires when new anchors are registered to the container.\r\n * - anchor: reference to the anchor controller that was registered\r\n * @param {function=} onChange Callback function that fires when the active section changes.\r\n * - anchor: reference to the anchor controller that became active\r\n */\r\n(function () {\r\n angular.module('components.anchor')\r\n .component('anchorContainer', {\r\n bindings: {\r\n scrollTarget: '@?',\r\n activeClass: '@?',\r\n onRegister: '&?',\r\n onChange: '&?'\r\n },\r\n controller: anchorContainerController\r\n });\r\n\r\n anchorContainerController.$inject = ['$window', '$timeout'];\r\n function anchorContainerController($window, $timeout) {\r\n var ctrl = this;\r\n ctrl.$onInit = function () {\r\n ctrl.anchors = [];\r\n ctrl.$scrollTarget = angular.element(ctrl.scrollTarget || $window);\r\n ctrl.$scrollTarget.on('scroll.anchor-' + ctrl.target, ctrl.$$updateAnchors);\r\n }\r\n\r\n ctrl.register = function (anchor) {\r\n ctrl.anchors.push(anchor);\r\n if (ctrl.onRegister) {\r\n ctrl.onRegister({ anchor: anchor });\r\n }\r\n }\r\n\r\n ctrl.$$updateAnchors = function (status) {\r\n var last;\r\n $timeout(function () {\r\n for (var i = 0; i < ctrl.anchors.length; i++) {\r\n var anchor = ctrl.anchors[i];\r\n if (anchor.isPassed()) {\r\n last = i;\r\n }\r\n else {\r\n break;\r\n }\r\n }\r\n for (var i = 0; i < ctrl.anchors.length; i++) {\r\n ctrl.anchors[i].setActive(i === last);\r\n }\r\n if (ctrl.onChange) {\r\n if (last === undefined) {\r\n ctrl.onChange({ anchor: null });\r\n }\r\n else {\r\n ctrl.onChange({ anchor: ctrl.anchors[last] });\r\n }\r\n }\r\n })\r\n }\r\n\r\n ctrl.$onDestroy = function () {\r\n ctrl.$scrollTarget.off('scroll.anchor-' + ctrl.target);\r\n };\r\n }\r\n})();","(function () {\r\n angular.module('app')\r\n .controller('AnimatedMultiImageTextController', AnimatedMultiImageTextController);\r\n\r\n AnimatedMultiImageTextController.$inject = ['$scope', '$element'];\r\n function AnimatedMultiImageTextController($scope, $element) {\r\n var ctrl = this;\r\n var container = $element.find('.large-display');\r\n var tl = new TimelineMax({ repeat: -1 });\r\n var firstImages = container.find('.image-set-1 img');\r\n var secondImages = container.find('.image-set-2 img');\r\n var thirdImages = container.find('.image-set-3 img');\r\n var fourthImages = container.find('.image-set-4 img');\r\n var box = container.find('.box');\r\n var text = container.find('.text');\r\n var textItems = container.find('.text-item');\r\n for (var i = 0; i < firstImages.length; i++) {\r\n var next = (i + 1) % firstImages.length;\r\n tl\r\n .fromTo(box, 1, { rotationY: 0 }, { delay: 4, repeatDelay: 4, rotationY: 180 })\r\n .fromTo(text, .5, { x: 0, opacity: 1 }, { delay: -.8, x: 30, opacity: 0 })\r\n .set(textItems[i], { display: 'none' })\r\n .set(textItems[next], { display: 'block' })\r\n .set(box, { rotationY: 0 })\r\n .fromTo(box, 1, { rotationY: 0 }, { rotationY: 180 })\r\n .set(box, { rotationY: 0 })\r\n .fromTo(text, .5, { x: -30, opacity: 0 }, { delay: -.5, x: 0, opacity: 1 })\r\n .fromTo(firstImages[i], .5, { opacity: 1, x: '0%' }, { delay: -.5, opacity: 0, x: '100%' })\r\n .fromTo(firstImages[next], .5, { opacity: 0, x: '-100%' }, { delay: -.5, opacity: 1, x: '0%' })\r\n .fromTo(secondImages[i], .5, { opacity: 1, x: '0%' }, { delay: -.4, opacity: 0, x: '100%' })\r\n .fromTo(secondImages[next], .5, { opacity: 0, x: '-100%' }, { delay: -.5, opacity: 1, x: '0%' })\r\n .fromTo(thirdImages[i], .5, { opacity: 1, x: '0%' }, { delay: -.4, opacity: 0, x: '100%' })\r\n .fromTo(thirdImages[next], .5, { opacity: 0, x: '-100%' }, { delay: -.5, opacity: 1, x: '0%' })\r\n .fromTo(fourthImages[i], .5, { opacity: 1, x: '0%' }, { delay: -.4, opacity: 0, x: '100%' })\r\n .fromTo(fourthImages[next], .5, { opacity: 0, x: '-100%' }, { delay: -.5, opacity: 1, x: '0%' });\r\n \r\n \r\n }\r\n }\r\n})();","/**\r\n * @ngdoc directive\r\n * @module components.calendar\r\n * @name components.calendar:calendar\r\n * @scope\r\n * @restrict E\r\n * @description\r\n * A calendar widget that can be connected to external javascript logic.\r\n * @param {number=} month The month the calendar will start on. Defaults to the current month if left empty.\r\n * @param {number=} year The year the calendar will start on. Defaults to the current year if left empty.\r\n * @param {array=} events Array of days that have events for the selected month. Used to add styles for those days and to provide callback when one of those days is clicked.\r\n * @param {function=} onMonthChange Callback that is triggered when the month changes. Passes the following information to the function\r\n * - month: the month the calendar is changing to (1-12)\r\n * - year: the year the calendar is changing to\r\n * @param {function=} onEventClick Callback function that's triggered when a day with an event is clicked. Passes the following information to the function\r\n * - month: the month the clicked event belongs to (1-12)\r\n * - year: the year the clicked event belongs to\r\n * - day: the day of the clicked event (1-31)\r\n * @example\r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n \r\n (function() {\r\n angular.module('dataExample', ['components.calendar'])\r\n .controller('exampleController', exampleController);\r\n\r\n exampleController.$inject = ['$scope'];\r\n function exampleController($scope) {\r\n $scope.eventDays = [1, 5, 22];\r\n $scope.updateMonth = function(month, year) {\r\n alert('The month is now ' + month + '/' + year + '.');\r\n }\r\n\r\n \r\n $scope.reportDay = function(day, month, year) {\r\n alert('You clicked on the event for ' + month + '/' + day + '/' + year + '.');\r\n }\r\n }\r\n })();\r\n \r\n
\r\n */\r\n\r\n(function () {\r\n angular.module('components.calendar', [])\r\n .component('calendar', {\r\n bindings: {\r\n //parentDate: ' -1;\r\n }\r\n }\r\n }\r\n\r\n ctrl.$$daysInMonth = function(year, month) {\r\n return new Date(year, month + 1, 0).getDate();\r\n }\r\n\r\n ctrl.$$generateCalendar = function () {\r\n ctrl.inCurrentMonth = ctrl.today.getMonth() === ctrl.month && ctrl.today.getFullYear() === ctrl.year;\r\n var pos = ctrl.date.getDay();\r\n ctrl.calendar.outerStart = [];\r\n var outerDays = ctrl.$$daysInMonth(ctrl.year, ctrl.month - 1);\r\n for (var i = 0; i < pos; i++)\r\n ctrl.calendar.outerStart[i] = outerDays - pos + i + 1;\r\n var currentDays = ctrl.$$daysInMonth(ctrl.year, ctrl.month);\r\n ctrl.calendar.days.splice(Math.min(currentDays, ctrl.calendar.days.length) - 1, ctrl.calendar.days.length - currentDays);\r\n for (var i = 0; i < currentDays; i++) {\r\n var day = i + 1;\r\n var d = ctrl.calendar.days[i];\r\n ctrl.calendar.days[i] = {\r\n today: ctrl.inCurrentMonth && ctrl.today.getDate() === day,\r\n event: ctrl.events && ctrl.events.indexOf(day) > -1\r\n }\r\n }\r\n var daysAfter = 7 - (new Date(ctrl.year, ctrl.month, currentDays + 1)).getDay();\r\n ctrl.calendar.outerEnd = [];\r\n if (daysAfter < 7) {\r\n for (var i = 0; i < daysAfter; i++)\r\n ctrl.calendar.outerEnd[i] = i + 1;\r\n }\r\n }\r\n\r\n /**\r\n * @ngdoc method\r\n * @name pagination#goToMonth\r\n * @methodOf components.calendar:calendar\r\n * @kind function\r\n * @description\r\n * Moves the calendar to the desired month.\r\n * @param {string} year The year to go to.\r\n * @param {object} month The month to go to.\r\n */\r\n ctrl.goToMonth = function (year, month) {\r\n if (ctrl.year == year && ctrl.month == month) return;\r\n //console.info('goToMonth');\r\n if (year !== undefined && month !== undefined) {\r\n if (month > -1 && month < 12) {\r\n for (var i = 0; i < ctrl.calendar.days.length; i++) {\r\n ctrl.calendar.days[i].event = ctrl.events && ctrl.events.indexOf(i + 1) > -1;\r\n }\r\n ctrl.year = year;\r\n ctrl.month = month;\r\n ctrl.date = new Date(ctrl.year, ctrl.month);\r\n ctrl.$$generateCalendar();\r\n if (ctrl.onMonthChange) {\r\n ctrl.onMonthChange({\r\n year: ctrl.year,\r\n month: ctrl.month + 1\r\n });\r\n }\r\n }\r\n else {\r\n console.log('Month out of range');\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * @ngdoc method\r\n * @name pagination#prevMonth\r\n * @methodOf components.calendar:calendar\r\n * @kind function\r\n * @description\r\n * Moves the calendar to the previous month.\r\n */\r\n ctrl.prevMonth = function () {\r\n var month = ctrl.month;\r\n var year = ctrl.year;\r\n\r\n month--;\r\n if (month < 0) {\r\n year--;\r\n month = 11;\r\n }\r\n ctrl.goToMonth(year, month);\r\n }\r\n\r\n /**\r\n * @ngdoc method\r\n * @name pagination#next\r\n * @methodOf components.calendar:calendar\r\n * @kind function\r\n * @description\r\n * Moves the calendar to the next month.\r\n */\r\n ctrl.nextMonth = function () {\r\n var month = ctrl.month;\r\n var year = ctrl.year;\r\n\r\n month++;\r\n if (month > 11) {\r\n year++;\r\n month = 0;\r\n }\r\n ctrl.goToMonth(year, month);\r\n }\r\n\r\n ctrl.handleEventClick = function (day) {\r\n if (ctrl.calendar.days[day].event && ctrl.onEventClick) {\r\n ctrl.onEventClick({\r\n day: day + 1,\r\n month: ctrl.month + 1,\r\n year: ctrl.year\r\n });\r\n }\r\n }\r\n }\r\n})();","\r\n(function () {\r\n angular.module('components.carousel', []); \r\n})();","/**\r\n * @ngdoc directive\r\n * @module components.carousel\r\n * @name components.carousel:carouselNav\r\n * @scope\r\n * @restrict E\r\n * @description\r\n * Generates a set of buttons that used to change the current slide of the attached carousel. Must be nested beneath a (carousel-sync)[/docs/api/components.carousel:carouselSync] tag to function.\r\n * @param {array} slides Same array that is passed to its associated carousel. Used to generate a matching number of buttons.\r\n * @example\r\n \r\n \r\n
\r\n \r\n \r\n \r\n

{{slide.name}}

\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n (function() {\r\n angular.module('dataExample', ['components.carousel'])\r\n .controller('exampleController', exampleController);\r\n\r\n exampleController.$inject = ['$scope'];\r\n function exampleController($scope) {\r\n $scope.slides = [];\r\n for (var i=0; i<5; i++) {\r\n $scope.slides.push({\r\n name: 'Slide ' + i,\r\n summary: '

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam eu pharetra ex. Curabitur eu nunc id dolor laoreet consectetur nec ornare elit. Vivamus elementum turpis ac mi vehicula fermentum. Morbi eget neque justo. Cras id elit condimentum felis vehicula suscipit. Maecenas sagittis pulvinar ante, eu cursus justo placerat ac. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam lacus leo, tristique eu nunc a, placerat placerat tortor. Fusce eget consectetur ante. Suspendisse lobortis dui libero. In ac libero vel eros ultricies auctor nec in felis. Vestibulum sed odio orci.

Curabitur pellentesque lobortis dui, et luctus ex convallis id. Cras scelerisque augue at imperdiet placerat. In diam velit, congue at diam ut, iaculis feugiat turpis. Donec id elit id elit vestibulum semper. Curabitur quis neque quis ipsum ultricies tincidunt vitae varius lectus. Proin at erat vestibulum, hendrerit urna ac, cursus mi. Cras pulvinar at felis vitae gravida. Nunc egestas rhoncus felis, vel vestibulum nisl condimentum quis. Vestibulum quis iaculis elit.

'\r\n });\r\n }\r\n }\r\n })();\r\n
\r\n
\r\n */\r\n(function () {\r\n\tangular.module('components.carousel')\r\n\t\t.component('carouselNav', {\r\n\t\t bindings: {\r\n slides: '<'\r\n\t\t },\r\n\t\t\trequire: {\r\n\t\t\t\t'carouselSync': '^carouselSync'\r\n\t\t\t},\r\n\t\t\ttemplate: '',\r\n\t\t\tcontroller: carouselNavController\r\n\t\t});\r\n\r\n\tcarouselNavController.$inject = ['$scope'];\r\n\tfunction carouselNavController($scope) {\r\n\t\tvar ctrl = this;\r\n\t\tctrl.$onInit = function () {\r\n\t\t\tctrl.index = 0;\r\n\t\t\tctrl.carouselIndex = ctrl.carouselSync.registerCarousel(ctrl);\r\n\t\t}\r\n\r\n\t\tctrl.goToSlide = function (index) {\r\n\t\t $scope.$evalAsync(function () {\r\n\t\t ctrl.index = index;\r\n\t\t });\r\n\t\t}\r\n\t}\r\n})();","(function () {\r\n angular.module('components.carousel')\r\n .component('carouselSet', {\r\n bindings: {\r\n small: '<',\r\n medium: ' .current > li'), duration, {\r\n transform: 'rotateX(0)'\r\n }, {\r\n transform: 'rotateX(90deg)'\r\n }, .1, 0, function () {\r\n $timeout(function () {\r\n ctrl.$currentIndex = (ctrl.$currentIndex + ctrl.$setSize) % ctrl.items.length;\r\n ctrl.$$buildSets();\r\n tl.staggerFromTo($element.find('> .current > li'), duration, {\r\n transform: 'rotateX(270deg)'\r\n }, {\r\n transform: 'rotateX(360deg)'\r\n }, .1, '+=0', callback);\r\n });\r\n });\r\n }\r\n }\r\n ctrl.$mediaQueries = helper.getMediaQueries();\r\n angular.element($window).on('resize.carouselSet', ctrl.$$setSizing);\r\n ctrl.$$setSizing();\r\n ctrl.$$buildSets(ctrl.items);\r\n }\r\n ctrl.$onChanges = function (changes) {\r\n if (changes.items.currentValue) {\r\n ctrl.$$buildSets(changes.items.currentValue);\r\n $timeout.cancel(ctrl.$timer);\r\n if (ctrl.items.length > ctrl.$setSize) {\r\n ctrl.$timer = $timeout(ctrl.$$switchSets, ctrl.interval);\r\n }\r\n }\r\n if (changes.maxHeight.currentValue) {\r\n ctrl.heightSetting = {\r\n height: ctrl.maxHeight\r\n };\r\n }\r\n }\r\n\r\n ctrl.$postLink = function () {\r\n ctrl.$template = angular.element('');\r\n ctrl.$template.find('li').append(content);\r\n $element.html(ctrl.$template);\r\n $compile($element.contents())($scope);\r\n if (ctrl.items && ctrl.items.length > ctrl.$setSize) {\r\n $timeout.cancel(ctrl.$timer);\r\n ctrl.$timer = $timeout(ctrl.$$switchSets, ctrl.interval)\r\n }\r\n }\r\n\r\n ctrl.$$setSizing = function () {\r\n var prevSize = ctrl.$setSize;\r\n var keys = Object.keys(ctrl.$mediaQueries);\r\n for (var i = 0; i < keys.length; i++) {\r\n var key = keys[i];\r\n if (key.indexOf(\"down\") === -1 && key.indexOf(\"up\") === -1 && key.indexOf(\"only\") === -1) {\r\n if (ctrl.$mediaQueries[key].matches) {\r\n if (ctrl[key]) {\r\n ctrl.$setSize = ctrl[key];\r\n }\r\n }\r\n else {\r\n break;\r\n }\r\n }\r\n }\r\n if (prevSize !== ctrl.$setSize) {\r\n if (ctrl.items && ctrl.items.length > ctrl.$setSize) {\r\n $timeout.cancel(ctrl.$timer);\r\n ctrl.$timer = $timeout(ctrl.$$switchSets, ctrl.interval);\r\n }\r\n }\r\n }\r\n\r\n ctrl.$$switchSets = function () {\r\n $timeout(function () {\r\n ctrl.animation(function () {\r\n $timeout.cancel(ctrl.$timer);\r\n if (ctrl.items.length > ctrl.$setSize) {\r\n ctrl.$timer = $timeout(ctrl.$$switchSets, ctrl.interval);\r\n }\r\n });\r\n });\r\n }\r\n\r\n ctrl.$$buildSets = function() {\r\n if (ctrl.items !== undefined) {\r\n if (ctrl.items.length <= ctrl.$setSize) {\r\n ctrl.currentSet = ctrl.items;\r\n }\r\n else {\r\n var end = (ctrl.$currentIndex + ctrl.$setSize) % ctrl.items.length;\r\n var endShort = end < ctrl.$currentIndex;\r\n ctrl.currentSet = ctrl.items.slice(ctrl.$currentIndex, endShort ? ctrl.items.length : end);\r\n if (endShort) {\r\n ctrl.currentSet = ctrl.currentSet.concat(ctrl.items.slice(0, ctrl.$setSize - ctrl.currentSet.length));\r\n }\r\n }\r\n }\r\n else {\r\n ctrl.currentSet = [];\r\n ctrl.nextSet = [];\r\n }\r\n }\r\n }\r\n})();","/**\r\n * @ngdoc directive\r\n * @module components.carousel\r\n * @name components.carousel:carouselSync\r\n * @scope\r\n * @restrict E\r\n * @description\r\n * Container that syncs carousels and carousel navs.\r\n * @example\r\n \r\n \r\n
\r\n \r\n \r\n \r\n

{{slide.name}}

\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 angular.module('dataExample', ['components.carousel'])\r\n .controller('exampleController', exampleController);\r\n\r\n exampleController.$inject = ['$scope'];\r\n function exampleController($scope) {\r\n $scope.slides = [];\r\n for (var i=0; i<5; i++) {\r\n $scope.slides.push({\r\n name: 'Slide ' + i,\r\n summary: '

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam eu pharetra ex. Curabitur eu nunc id dolor laoreet consectetur nec ornare elit. Vivamus elementum turpis ac mi vehicula fermentum. Morbi eget neque justo. Cras id elit condimentum felis vehicula suscipit. Maecenas sagittis pulvinar ante, eu cursus justo placerat ac. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam lacus leo, tristique eu nunc a, placerat placerat tortor. Fusce eget consectetur ante. Suspendisse lobortis dui libero. In ac libero vel eros ultricies auctor nec in felis. Vestibulum sed odio orci.

Curabitur pellentesque lobortis dui, et luctus ex convallis id. Cras scelerisque augue at imperdiet placerat. In diam velit, congue at diam ut, iaculis feugiat turpis. Donec id elit id elit vestibulum semper. Curabitur quis neque quis ipsum ultricies tincidunt vitae varius lectus. Proin at erat vestibulum, hendrerit urna ac, cursus mi. Cras pulvinar at felis vitae gravida. Nunc egestas rhoncus felis, vel vestibulum nisl condimentum quis. Vestibulum quis iaculis elit.

'\r\n });\r\n }\r\n }\r\n })();\r\n
\r\n
\r\n */\r\n(function () {\r\n\tangular.module('components.carousel')\r\n\t\t.component('carouselSync', {\r\n\t\t\tcontroller: carouselSyncController\r\n\t\t});\r\n\r\n\tfunction carouselSyncController() {\r\n\t\tvar ctrl = this;\r\n\t\tctrl.$onInit = function() {\r\n\t\t\tctrl.$carousels = [];\r\n };\r\n\t\tctrl.registerCarousel = function(carousel) {\r\n ctrl.$carousels.push(carousel);\r\n return ctrl.$carousels.length - 1;\r\n\t\t};\r\n\r\n ctrl.updateCarousels = function (index, carouselIndex) {\r\n for (var i = 0; i < ctrl.$carousels.length; i++) {\r\n if (i !== carouselIndex) {\r\n ctrl.$carousels[i].goToSlide(index, true, true);\r\n }\r\n }\r\n };\r\n\t}\r\n})();","(function () {\r\n angular.module('components.carousel')\r\n .component('carouselV2', {\r\n require: {\r\n parentCarousel: '?^^carouselV2',\r\n carouselSync: '?^carouselSync',\r\n paginator: '?^bmgPagination'\r\n },\r\n bindings: {\r\n slides: '<',\r\n slideCount: '');\r\n slideContent.html($element.html());\r\n ctrl.$$dragDisabled = slideContent.find('carousel').length > 0 || (ctrl.$slideCount !== undefined && ctrl.slides && ctrl.slides.length <= ctrl.$slideCount);\r\n if (ctrl.carouselSync !== null) {\r\n ctrl.carouselIndex = ctrl.carouselSync.registerCarousel(ctrl);\r\n }\r\n \r\n if (ctrl.onInit) {\r\n ctrl.onInit({\r\n ctrl: ctrl\r\n });\r\n }\r\n };\r\n\r\n ctrl.$onChanges = function (changes) {\r\n if (changes.startSlide) {\r\n ctrl.goToSlide(changes.startSlide.currentValue, false);\r\n }\r\n $timeout(function () {\r\n ctrl.$$updateSlideReferences(true);\r\n if (ctrl.onChange) {\r\n ctrl.onChange({\r\n changes: changes\r\n });\r\n }\r\n });\r\n if (changes.slides && !changes.slides.previousValue && ctrl.auto) {\r\n ctrl.$$nextAutoStep();\r\n }\r\n };\r\n\r\n ctrl.$postLink = function () {\r\n var markup = `\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 var html = angular.element(markup);\r\n ctrl.$$dragger = html.find('.drag-tracker')[0];\r\n ctrl.$$slider = html.find('.slides').find('>div');\r\n html.find('.slide').html(slideContent.find('>slide').html().replace('carousel-repeat', 'ng-repeat'));\r\n html.find('.controls').html(slideContent.find('>controls').html());\r\n $element.html(html);\r\n $compile($element.contents())($scope);\r\n if (!ctrl.$$dragDisabled) {\r\n TweenLite.set(ctrl.$$dragger, {\r\n position: 'absolute',\r\n x: 0\r\n });\r\n ctrl.$$draggable = Draggable.create(ctrl.$$dragger, {\r\n type: 'x',\r\n trigger: $element,\r\n lockAxis: true,\r\n edgeResistance: .65,\r\n dragResistance: .1,\r\n dragClickables: true,\r\n throwResistance: .1,\r\n maxDuration: 3,\r\n throwProps: true,\r\n zIndexBoost: true,\r\n snap: function (endValue) {\r\n var snapData = ctrl.animationSnap({ offset: endValue, data: ctrl.animationData });\r\n ctrl.$$updateIndex(snapData.index);\r\n return snapData.position;\r\n },\r\n onDragStart: function () {\r\n if (ctrl.parentCarousel) {\r\n ctrl.parentCarousel.$$draggable[0].disable();\r\n }\r\n if (ctrl.auto) {\r\n $timeout.cancel(ctrl.$$autoRunner);\r\n }\r\n },\r\n onDragEnd: function () {\r\n if (ctrl.parentCarousel) {\r\n ctrl.parentCarousel.$$draggable[0].enable();\r\n }\r\n },\r\n onThrowComplete: function () {\r\n if (ctrl.auto) {\r\n ctrl.$$nextAutoStep();\r\n }\r\n },\r\n onThrowUpdate: ctrl.$$updateSlidePositions,\r\n onDrag: ctrl.$$updateSlidePositions\r\n });\r\n if (ctrl.disableDrag) {\r\n ctrl.$$draggable[0].disable();\r\n }\r\n }\r\n\r\n $timeout(function () {\r\n ctrl.$$slideElements = $element.find('> .loader-wrap > .slides > div > .slide');;\r\n ctrl.$$updateSlideReferences(false);\r\n });\r\n var updateWidth;\r\n function getWidth() {\r\n $timeout.cancel(ctrl.$$autoRunner);\r\n $timeout.cancel(updateWidth);\r\n updateWidth = $timeout(function () {\r\n ctrl.$$updateSlideReferences();\r\n ctrl.$$updateSlidePositions();\r\n ctrl.positionDraggable(false);\r\n if (ctrl.auto) {\r\n ctrl.$$nextAutoStep();\r\n }\r\n }, 100);\r\n }\r\n\r\n win = angular.element($window)\r\n .on('resize.carousel', getWidth)\r\n .on('changed.zf.mediaquery', function () {\r\n ctrl.$slideCount = utility.getResponsiveValue(ctrl.slideCount);\r\n if (ctrl.$slideCount === undefined) {\r\n ctrl.$slideCount = 1;\r\n }\r\n getWidth();\r\n });\r\n if (ctrl.slides) {\r\n getWidth();\r\n if (ctrl.auto) {\r\n ctrl.$$nextAutoStep();\r\n }\r\n }\r\n };\r\n\r\n ctrl.$$updateSlideReferences = function (slidesChanged) {\r\n if (slidesChanged) {\r\n ctrl.$$slideElements = $element.find('> .loader-wrap > .slides > div > .slide');\r\n }\r\n ctrl.maxHeight = 0;\r\n for (var i = 0; i < ctrl.$$slideElements.length; i++) {\r\n var slide = angular.element(ctrl.$$slideElements[i]);\r\n if (ctrl.maxHeight < slide.outerHeight()) {\r\n ctrl.maxHeight = slide.outerHeight();\r\n }\r\n }\r\n var slideContainerWidth = $element.find('.slides').width();\r\n ctrl.animationData = ctrl.animationPrep({\r\n data: {\r\n slideElements: ctrl.$$slideElements,\r\n slideData: ctrl.slides,\r\n carousel: $element,\r\n slideContainerWidth: slideContainerWidth,\r\n spacing: ctrl.spacing,\r\n slideWidth: ctrl.$slideCount && ctrl.slides ? (slideContainerWidth - (ctrl.spacing * (ctrl.$slideCount - 1))) / ctrl.$slideCount : 0\r\n }\r\n });\r\n if (ctrl.preAnimation) {\r\n ctrl.preAnimation({\r\n offset: 0,\r\n data: ctrl.animationData\r\n })\r\n }\r\n if (ctrl.animationData) {\r\n for (i = 0; i < ctrl.$$slideElements.length; i++) {\r\n TweenLite.set(\r\n ctrl.animationData.slideElements[i],\r\n ctrl.animation({\r\n offset: 0,\r\n direction: 0,\r\n index: i,\r\n data: ctrl.animationData\r\n }));\r\n }\r\n }\r\n };\r\n\r\n ctrl.$$nextAutoStep = function () {\r\n $timeout.cancel(ctrl.$$autoRunner);\r\n ctrl.$$autoRunner = $timeout(function () {\r\n ctrl.scrollWidthRight().then(ctrl.$$nextAutoStep);\r\n }, ctrl.autoInterval);\r\n };\r\n\r\n ctrl.handleChildEdgeHit = function (direction) {\r\n if (direction) {\r\n ctrl.nextSlide();\r\n }\r\n else {\r\n ctrl.prevSlide();\r\n }\r\n };\r\n\r\n ctrl.$onDestroy = function () {\r\n win.off('resize.carousel');\r\n };\r\n\r\n ctrl.$$findIndexByKey = function (target, start, promise) {\r\n for (var i = start; i < ctrl.slides.length; i++) {\r\n if (ctrl.slides[i].urlName === target) {\r\n promise.resolve(i);\r\n return;\r\n }\r\n }\r\n if (ctrl.paginator) {\r\n if (!ctrl.paginator.paginationPromise.$resolved) {\r\n ctrl.paginator.paginationPromise.$promise.then(function () {\r\n ctrl.$$findIndexByKey(target, 0, promise);\r\n });\r\n }\r\n else {\r\n ctrl.paginator.nextPage(function () {\r\n ctrl.$$findIndexByKey(target, i, promise);\r\n });\r\n }\r\n }\r\n else {\r\n promise.reject('Key not found');\r\n }\r\n };\r\n\r\n ctrl.$$updateSlidePositions = function () {\r\n var xShift = ctrl.$$dragger._gsTransform.x;\r\n if (ctrl.$previousOffset === undefined) {\r\n ctrl.$previousOffset = xShift;\r\n }\r\n var dir = xShift - ctrl.$previousOffset;\r\n if (dir) {\r\n dir = dir / Math.abs(dir);\r\n }\r\n if (ctrl.preAnimation) {\r\n ctrl.preAnimation({\r\n offset: xShift,\r\n data: ctrl.animationData\r\n })\r\n }\r\n if (ctrl.slides && ctrl.animationData) {\r\n for (var i = 0; i < ctrl.slides.length; i++) {\r\n TweenLite.set(\r\n ctrl.animationData.slideElements[i],\r\n ctrl.animation({\r\n offset: xShift,\r\n direction: dir,\r\n index: i,\r\n data: ctrl.animationData\r\n }));\r\n }\r\n }\r\n ctrl.$previousOffset = xShift;\r\n $scope.$broadcast('carouselV2.updated', {\r\n offset: xShift,\r\n direction: dir\r\n });\r\n };\r\n\r\n ctrl.$$updateIndex = function (index, synced) {\r\n if (ctrl.onEdge) {\r\n if (index >= ctrl.slides.length) {\r\n ctrl.onEdge({\r\n direction: 1\r\n });\r\n }\r\n else if (index < 0) {\r\n ctrl.onEdge({\r\n direction: 0\r\n });\r\n }\r\n }\r\n newIndex = index >= 0 ? index % ctrl.slides.length : ctrl.slides.length - 1 + ((index + 1) % ctrl.slides.length);\r\n if (ctrl.index !== newIndex) {\r\n var forward, backward;\r\n if (newIndex > ctrl.index) {\r\n forward = newIndex - ctrl.index;\r\n backward = ctrl.index + (ctrl.slides.length - newIndex);\r\n }\r\n else {\r\n forward = newIndex + (ctrl.slides.length - ctrl.index);\r\n backward = ctrl.index - newIndex;\r\n }\r\n if (forward <= backward) {\r\n ctrl.renderIndex += forward;\r\n }\r\n else {\r\n ctrl.renderIndex -= backward;\r\n }\r\n ctrl.index = newIndex;\r\n if (!synced) {\r\n if (ctrl.carouselSync) {\r\n ctrl.carouselSync.updateCarousels(newIndex, ctrl.carouselIndex);\r\n }\r\n if (ctrl.onSlideChange) {\r\n ctrl.onSlideChange({\r\n index: newIndex,\r\n slide: ctrl.slides[index],\r\n ctrl: ctrl\r\n });\r\n }\r\n }\r\n }\r\n };\r\n\r\n ctrl.updateSlides = function (data) {\r\n ctrl.nextDisabled = data.rows - 1 > ctrl.index;\r\n };\r\n\r\n ctrl.scrollWidthLeft = function () {\r\n return ctrl.$$scrollWidth(1);\r\n };\r\n\r\n ctrl.scrollWidthRight = function () {\r\n return ctrl.$$scrollWidth(-1);\r\n };\r\n\r\n ctrl.$$scrollWidth = function (dir) {\r\n var deferred = $q.defer();\r\n if (!ctrl.$$dragDisabled)\r\n ctrl.$$draggable[0].disable();\r\n var snap = ctrl.animationSnap({ offset: ctrl.$$dragger._gsTransform.x + (dir * ctrl.animationData.slideContainerWidth), data: ctrl.animationData });\r\n ctrl.$$updateIndex(snap.index);\r\n TweenLite.to(ctrl.$$dragger, .8, {\r\n throwProps: {\r\n x: {\r\n velocity: 'auto',\r\n end: snap.position\r\n }\r\n },\r\n onUpdate: ctrl.$$updateSlidePositions,\r\n onComplete: function () {\r\n if (!ctrl.$$dragDisabled) {\r\n ctrl.$$draggable[0].update();\r\n if (!ctrl.disableDrag) {\r\n ctrl.$$draggable[0].enable();\r\n }\r\n }\r\n deferred.resolve();\r\n }\r\n });\r\n return deferred.promise;\r\n };\r\n\r\n ctrl.goToSlide = function (index, animate, synced) {\r\n ctrl.$$updateIndex(index, synced);\r\n var animationComplete = ctrl.positionDraggable(animate);\r\n if (ctrl.index >= 0 && ctrl.index < ctrl.slides.length) {\r\n ctrl.prevDisabled = ctrl.index === 0;\r\n ctrl.nextDisabled = ctrl.index >= ctrl.slides.rows - 1;\r\n }\r\n return animationComplete;\r\n };\r\n\r\n ctrl.prevSlide = function () {\r\n if (ctrl.index === 0 && ctrl.onEdge) {\r\n ctrl.onEdge({\r\n direction: 0\r\n });\r\n }\r\n else {\r\n ctrl.goToSlide(ctrl.index - 1, true);\r\n }\r\n };\r\n\r\n ctrl.nextSlide = function () {\r\n if (ctrl.index === ctrl.slides.length - 1 && ctrl.onEdge) {\r\n ctrl.onEdge({\r\n direction: 1\r\n });\r\n }\r\n else {\r\n ctrl.goToSlide(ctrl.index + 1, true);\r\n }\r\n };\r\n\r\n ctrl.positionDraggable = function (animate) {\r\n var deferred = $q.defer();\r\n var target = ctrl.animation({\r\n offset: ctrl.$$dragger._gsTransform.x,\r\n index: ctrl.index,\r\n data: ctrl.animationData\r\n });\r\n var targetShift = target.offsetShift;\r\n if (targetShift === undefined) {\r\n targetShift = target.x;\r\n }\r\n if (animate) {\r\n if (!ctrl.$$dragDisabled)\r\n ctrl.$$draggable[0].disable();\r\n TweenLite.to(ctrl.$$dragger, .8, {\r\n throwProps: {\r\n x: {\r\n velocity: 'auto',\r\n end: ctrl.$$dragger._gsTransform.x - targetShift\r\n }\r\n },\r\n onComplete: function () {\r\n if (!ctrl.$$dragDisabled) {\r\n ctrl.$$draggable[0].update();\r\n if (!ctrl.disableDrag) {\r\n ctrl.$$draggable[0].enable();\r\n }\r\n }\r\n deferred.resolve();\r\n },\r\n onUpdate: ctrl.$$updateSlidePositions\r\n });\r\n }\r\n else if (target) {\r\n TweenLite.set(ctrl.$$dragger, {\r\n x: ctrl.$$dragger._gsTransform.x - targetShift\r\n });\r\n if (!ctrl.$$dragDisabled) {\r\n ctrl.$$draggable[0].update();\r\n }\r\n ctrl.$$updateSlidePositions();\r\n deferred.resolve();\r\n }\r\n return deferred.promise;\r\n };\r\n }\r\n})();","(function () {\r\n angular.module('app')\r\n .directive('equalizer', equalizer)\r\n function equalizer() {\r\n var directive = {\r\n restrict: 'A',\r\n require: '^?equalizerManager',\r\n link: link\r\n };\r\n return directive;\r\n function link($scope, $element, $attrs, equalizerManager) {\r\n if (equalizerManager) {\r\n equalizerManager.registerEqualizer($attrs.equalizer, $element);\r\n }\r\n }\r\n }\r\n})();","(function () {\r\n angular.module('app')\r\n .directive('equalizerManager', equalizerManager);\r\n\r\n function equalizerManager() {\r\n var directive = {\r\n restrict: 'A',\r\n controller: equalizerManagerController,\r\n link: function () { },\r\n priority: 99\r\n };\r\n return directive;\r\n }\r\n\r\n equalizerManagerController.$inject = ['$scope', '$element', '$attrs', '$window', 'helper', '$timeout','bmgLogger'];\r\n function equalizerManagerController($scope, $element, $attrs, $window, helper, $timeout, bmgLogger) {\r\n var ctrl = this;\r\n ctrl.$mediaQueries = helper.getMediaQueries();\r\n ctrl.counts = {};\r\n if ($attrs.class) {\r\n var keys = Object.keys(ctrl.$mediaQueries);\r\n for (var i = 0; i < keys.length; i++) {\r\n var key = keys[i];\r\n var regex = new RegExp('(' + key + '\\\\-up\\\\-)(\\\\d+)', 'g');\r\n var result = regex.exec($attrs.class);\r\n if (result !== null) {\r\n ctrl.counts[key] = parseInt(result[2]);\r\n }\r\n }\r\n }\r\n ctrl.mediaQuery = $attrs.equalizerManager ? ctrl.$mediaQueries[$attrs.equalizerManager] : $window.matchMedia('(min-width: 0px)');\r\n ctrl.$items = {};\r\n ctrl.registerEqualizer = function (key, element) {\r\n if (!ctrl.$items[key]) {\r\n ctrl.$items[key] = [];\r\n }\r\n ctrl.$items[key].push(element);\r\n ctrl.$updateHeights();\r\n };\r\n\r\n angular.element($window).on('resize.equalizerManager', function () {\r\n ctrl.$updateSize();\r\n ctrl.$updateHeights();\r\n });\r\n\r\n ctrl.$updateSize = function() {\r\n var size = 0;\r\n ctrl.$gridSize = 9999;\r\n var keys = Object.keys(ctrl.$mediaQueries);\r\n for (var i=0; i 1 && i % ctrl.$gridSize === 0) {\r\n ctrl.$calcHeights(itemSet);\r\n itemSet = [];\r\n }\r\n itemSet.push(angular.element(items[i]));\r\n }\r\n }\r\n if (itemSet.length > 0) {\r\n ctrl.$calcHeights(itemSet);\r\n }\r\n }\r\n });\r\n };\r\n\r\n ctrl.$calcHeights = function (itemSet) {\r\n var max = 0;\r\n for (var j = 0; j < itemSet.length; j++) {\r\n var element = itemSet[j];\r\n element.css({\r\n height: '',\r\n flex: ''\r\n });\r\n max = Math.max(element.outerHeight(), max);\r\n }\r\n\r\n if (ctrl.mediaQuery.matches && ctrl.$gridSize > 1 && itemSet.length > 1) {\r\n for (var j = 0; j < itemSet.length; j++) {\r\n var element = itemSet[j];\r\n if ($attrs.equalizerManager == 'flex') {\r\n element.css('flex', '0 0 ' + max + 'px')\r\n }\r\n else {\r\n element.css('height', max);\r\n }\r\n }\r\n }\r\n }\r\n\r\n ctrl.$updateSize();\r\n }\r\n})();","(function () {\r\n angular.module('app')\r\n .component('compile', {\r\n bindings: {\r\n 'content': '<',\r\n 'ready': '\r\n
\r\n
\r\n
\r\n
\r\n \r\n `,\r\n controller: ExpanderController\r\n });\r\n\r\n\r\n var count = 0;\r\n ExpanderController.$inject = ['$scope', '$element', '$window', '$transclude', '$interval'];\r\n function ExpanderController($scope, $element, $window, $transclude, $interval) {\r\n var ctrl = this;\r\n ctrl._id = count++;\r\n ctrl.$onInit = function () {\r\n ctrl.open = false;\r\n ctrl._overlay = $element.find('.overlay div');\r\n ctrl._trigger = $element.find('.trigger');\r\n ctrl._content = $element.find('.content');\r\n ctrl._container = $element.closest('.expander-container');\r\n if (!ctrl.space) {\r\n ctrl.space = 16;\r\n }\r\n\r\n $transclude($scope, function (clone) {\r\n if (clone.length) {\r\n ctrl._content.append(clone);\r\n }\r\n }, null, 'content');\r\n $transclude($scope, function (clone) {\r\n if (clone.length) {\r\n ctrl._trigger.append(clone);\r\n }\r\n }, null, 'trigger');\r\n\r\n if (ctrl.onInit) {\r\n ctrl.onInit({\r\n expander: ctrl\r\n });\r\n }\r\n };\r\n\r\n ctrl.$postLink = function () {\r\n if ($element.find('[class*=\"fa-\"]').length) {\r\n var html = angular.element('html');\r\n var fontLoadCheck = $interval(function () {\r\n if (html.is('.fa-events-icons-ready,.fa-events-icons-failed')) {\r\n ctrl._setAnimation();\r\n $interval.cancel(fontLoadCheck);\r\n }\r\n }, 100);\r\n }\r\n else {\r\n ctrl._setAnimation();\r\n }\r\n ctrl._window = angular.element($window).on(`resize.expander${ctrl._id}`, ctrl._setAnimation);\r\n };\r\n\r\n ctrl.$destroy = function () {\r\n ctrl._window.off(`resize.expander${ctrl._id}`);\r\n };\r\n\r\n ctrl._setAnimation = function () {\r\n var width = ctrl._container.width();\r\n var doubleWidth = width * 2;\r\n var shift = ctrl._container[0].getBoundingClientRect().right - ctrl._trigger[0].getBoundingClientRect().right - parseInt(ctrl._container.css('padding-right'));\r\n ctrl._animation = new TimelineLite({\r\n paused: true,\r\n onComplete: function () {\r\n if (ctrl.onFinish) {\r\n $scope.$evalAsync(function () {\r\n ctrl.onFinish({\r\n expander: ctrl\r\n });\r\n });\r\n }\r\n },\r\n onReverseComplete: function () {\r\n if (ctrl.onFinish) {\r\n $scope.$evalAsync(function () {\r\n ctrl.onFinish({\r\n expander: ctrl\r\n });\r\n });\r\n }\r\n }\r\n })\r\n .set($element, { delay: .001, zIndex: 2 })\r\n .to(ctrl._overlay, .5, { width: doubleWidth, height: doubleWidth, x: -width, y: -width });\r\n if (shift > 0) {\r\n ctrl._animation\r\n .to($element, .3, { delay: -.2, x: shift, width: width });\r\n }\r\n ctrl._animation\r\n .set(ctrl._content, { right: ctrl._trigger.width() + ctrl.space, top: (ctrl._trigger.height() - ctrl._content.height()) / 2 })\r\n .to(ctrl._content, .3, { width: width - ctrl._trigger.width() - ctrl.space, opacity: 1 });\r\n };\r\n\r\n ctrl.toggle = function ($event) {\r\n if ($event) {\r\n $event.stopPropagation();\r\n }\r\n ctrl.open = !ctrl.open;\r\n if (ctrl.onStart) {\r\n ctrl.onStart({\r\n expander: ctrl\r\n });\r\n }\r\n if (ctrl.open) {\r\n $element.addClass('open');\r\n ctrl._animation.play();\r\n }\r\n else {\r\n $element.removeClass('open');\r\n ctrl._animation.reverse();\r\n }\r\n };\r\n }\r\n})();","(function () {\r\n angular.module('app')\r\n .controller('FeaturesController', FeaturesController);\r\n\r\n FeaturesController.$inject = ['$element', '$window'];\r\n function FeaturesController($element, $window) {\r\n var ctrl = this;\r\n ctrl.featureText = $element.find('.feature-text');\r\n ctrl.calcHeight = function () {\r\n var height = ctrl.featureText.height();\r\n ctrl.textHeight = height === 0 ? 1000 : Math.max(ctrl.featureText.height() - 300, 300);\r\n };\r\n angular.element($window).on('resize', ctrl.calcHeight);\r\n ctrl.calcHeight();\r\n ctrl.getAnimationDuration = function () {\r\n return ctrl.textHeight;\r\n };\r\n }\r\n})();","(function () {\r\n angular.module('app')\r\n .directive('imageSource', imageSource);\r\n\r\n var id = 0;\r\n imageSource.$inject = ['helper', '$window', '$parse', '$q', '$timeout'];\r\n function imageSource(helper, $window, $parse, $q, $timeout) {\r\n var directive = {\r\n priority: 99,\r\n restrict: 'A',\r\n link: link\r\n };\r\n return directive;\r\n\r\n function link($scope, $element, $attrs, carousel) {\r\n var directiveId = id;\r\n id++;\r\n var expression;\r\n var settings = $parse($attrs.imageSource)($scope);\r\n var queries = helper.getMediaQueries();\r\n var url;\r\n var win = angular.element($window);\r\n var deferred = $q.defer();\r\n var cancelListener = $scope.$on('carouselV2.updated', checkPosition);\r\n deferred.promise.then(cancelListener);\r\n var placeholder = angular.element('
');\r\n var placeholderImage = placeholder.find('img');\r\n var positioned = false;\r\n //used 30 instead of 0 to get around microsoft edge image sizing bug, where images had a height of 30 before the source is loaded\r\n if ($element.height() > 30) {\r\n positioned = true;\r\n placeholderImage.css({\r\n top: -$element.outerHeight() / 2 - 17\r\n });\r\n }\r\n $element.on('transitionend.imageSource', function () {\r\n placeholder.remove();\r\n $element.off('transitionend.imageSource');\r\n });\r\n if ($element.is('img')) {\r\n $element.after(placeholder);\r\n }\r\n else {\r\n $element.append(placeholder);\r\n }\r\n function setSource() {\r\n deferred.promise.then(function () {\r\n if (!url) {\r\n $element.addClass('loaded no-image');\r\n placeholder.remove();\r\n }\r\n else {\r\n $element.removeClass('loaded');\r\n var image = new Image();\r\n image.onload = image.onerror = function () {\r\n $element.addClass('loaded');\r\n if (!positioned) {\r\n positioned = true;\r\n placeholderImage.css({\r\n position: 'absolute',\r\n top: -$element.outerHeight() / 2 - 17\r\n });\r\n }\r\n placeholder.remove();\r\n };\r\n image.src = url;\r\n if ($element.is('img')) {\r\n $element.attr('src', url);\r\n }\r\n else {\r\n $element.css('backgroundImage', \"url('\" + url + \"')\");\r\n }\r\n }\r\n scroller.off('scroll.imageSource' + directiveId);\r\n });\r\n }\r\n\r\n function checkPosition() {\r\n var rect = $element[0].getBoundingClientRect();\r\n if (rect.top <= win.height() && rect.left <= win.width() && rect.bottom <= win.height() + rect.height && rect.right >= 0) {\r\n deferred.resolve();\r\n }\r\n }\r\n\r\n var scroller = win.on('scroll.imageSource' + directiveId, checkPosition);\r\n var previousSize;\r\n\r\n //var offsets = scroller[0].getBoundingClientRect();\r\n if (!settings || typeof (settings) === 'string') {\r\n url = settings;\r\n setSource();\r\n }\r\n else {\r\n var retina = $window.matchMedia('only screen and (min-resolution: 124dpi), only screen and (min-resolution: 1.3dppx), only screen and (min-resolution: 48.8dpcm)');\r\n function getUrl() {\r\n var keys = Object.keys(queries);\r\n var result;\r\n for (var i = 0; i < keys.length; i++) {\r\n var key = keys[i];\r\n if (key.indexOf(\"down\") === -1 && key.indexOf(\"up\") === -1 && key.indexOf(\"only\") === -1) {\r\n if (queries[key].matches) {\r\n if (settings[key]) {\r\n result = key;\r\n }\r\n }\r\n else {\r\n break;\r\n }\r\n }\r\n }\r\n if (result) {\r\n if (retina.matches && settings[result + 'retina']) {\r\n result = result + 'retina';\r\n }\r\n url = settings[result];\r\n }\r\n if (previousSize !== result) {\r\n setSource();\r\n }\r\n previousSize = result;\r\n }\r\n\r\n win.on('resize.imageSource' + directiveId, getUrl);\r\n getUrl();\r\n }\r\n $timeout(function () {\r\n checkPosition();\r\n });\r\n }\r\n $scope.$on('$destroy', function () {\r\n win.off('resize.imageSource' + directiveId);\r\n scroller.off('scroll.imageSource' + directiveId);\r\n scroller.off('scroll.imageSource' + directiveId);\r\n $element.off('transitionend.imageSource');\r\n cancelListener();\r\n });\r\n }\r\n})();","(function () {\r\n angular.module('app')\r\n .directive('fitText', fitText);\r\n\r\n var id = 0;\r\n fitText.$inject = ['$window'];\r\n function fitText($window) {\r\n var directive = {\r\n restrict: 'A',\r\n scope: {\r\n minWidth: '=',\r\n maxWidth: '=',\r\n minSize: '=',\r\n maxSize: '=?'\r\n },\r\n link: link\r\n };\r\n return directive;\r\n function link($scope, $element) {\r\n $scope.id = id++;\r\n\r\n function sizeText() {\r\n $element.css('font-size', '');\r\n $scope.$maxSize = $scope.maxSize || parseInt($element.css('font-size'));\r\n var width = $element.width();\r\n if (width <= $scope.minWidth) {\r\n $element.css('font-size', $scope.minSize);\r\n }\r\n else if (width <= $scope.maxWidth) {\r\n var widthDiff = $scope.maxWidth - $scope.minWidth;\r\n var sizeDiff = $scope.$maxSize - $scope.minSize;\r\n $element.css('font-size', (sizeDiff * ((width - $scope.minWidth) / widthDiff) + $scope.minSize) + 'px');\r\n }\r\n }\r\n sizeText();\r\n var win = angular.element($window)\r\n .on(`resize.fitText${id}`, sizeText);\r\n }\r\n }\r\n})();","(function () {\r\n angular.module('app')\r\n .component('labeledList', {\r\n bindings: {\r\n space: ' -1) {\r\n ctrl.addedIds.slice(addedIndex, 1);\r\n }\r\n var addedIndex = ctrl.$addedIds.indexOf(item.id);\r\n if (addedIndex > -1) {\r\n ctrl.addedIds.slice(addedIndex, 1);\r\n }\r\n }\r\n else if (index > -1) {\r\n ctrl.items[index] = item;\r\n }\r\n }\r\n if (item.width > ctrl.currentPadding) {\r\n ctrl.currentPadding = item.width;\r\n }\r\n else if (item.width < ctrl.currentPadding) {\r\n var padding = 0;\r\n for (var i = 0; i < ctrl.items.length; i++) {\r\n var entry = ctrl.items[i];\r\n if (padding < entry.width) {\r\n padding = entry.width;\r\n }\r\n }\r\n ctrl.currentPadding = padding;\r\n }\r\n for (var i = 0; i < ctrl.items.length; i++) {\r\n ctrl.items[i].element.css('padding-left', ctrl.currentPadding + (ctrl.space || 16))\r\n }\r\n }\r\n }\r\n})();","(function () {\r\n angular.module('app')\r\n .component('labeledListItem', {\r\n bindings: {\r\n label: '@?',\r\n labelClass: '@?'\r\n },\r\n template: `\r\n {{$ctrl.label}}\r\n \r\n `,\r\n transclude: true,\r\n require: {\r\n labeledList: '^labeledList'\r\n },\r\n controller: labeledListItemController\r\n });\r\n\r\n labeledListItemController.$inject = ['$scope', '$element', '$window', '$timeout', '$interval'];\r\n var id = 0;\r\n function labeledListItemController($scope, $element, $window, $timeout, $interval) {\r\n id++;\r\n var ctrl = this;\r\n ctrl.id = id;\r\n ctrl.$postLink = function () {\r\n ctrl.$labelElement = $element.find('> span');\r\n ctrl.previousWidth = ctrl.$labelElement.width();\r\n if (ctrl.labelClass) {\r\n var fontLoadCheck = $interval(function () {\r\n if (angular.element('html').is('.fa-events-icons-ready,.fa-events-icons-failed')) {\r\n ctrl.$updatePadding();\r\n $interval.cancel(fontLoadCheck);\r\n }\r\n }, 100);\r\n }\r\n else {\r\n $timeout(ctrl.$updatePadding, 15);\r\n }\r\n ctrl.$window = angular.element($window).on('resize.labeledListItem' + id, function () {\r\n $scope.$evalAsync(ctrl.$updatePadding);\r\n })\r\n $element.on('mutateme.zf.trigger click.zf.accordion keydown.zf.accordion', function () {\r\n $scope.$evalAsync(ctrl.$updatePadding);\r\n });\r\n var accordion = $element.closest('.accordion').on('down.zf.accordion', function () {\r\n $scope.$evalAsync(ctrl.$updatePadding);\r\n })\r\n };\r\n\r\n ctrl.$onDestroy = function () {\r\n ctrl.labeledList.updatePadding({\r\n element: $element,\r\n id: ctrl.id,\r\n width: 0\r\n }, true);\r\n ctrl.$window.off('resize.labeledListItem' + id);\r\n };\r\n\r\n ctrl.$updatePadding = function () {\r\n var newWidth = ctrl.$labelElement.width();\r\n if (newWidth && newWidth !== ctrl.previousWidth) {\r\n ctrl.labeledList.updatePadding({\r\n element: $element,\r\n id: ctrl.id,\r\n width: newWidth\r\n });\r\n ctrl.previousWidth = newWidth;\r\n }\r\n }\r\n }\r\n})();","(function () {\r\n angular.module('app')\r\n .component('lazyPartial', {\r\n bindings: {\r\n pageId: '<',\r\n partial: '@',\r\n onReady: '&?'\r\n },\r\n template: `\r\n
\r\n
\r\n `,\r\n transclude: true,\r\n controller: LazyPartialController\r\n });\r\n\r\n LazyPartialController.$inject = ['lazyPartialService', '$element', '$compile', '$scope', '$timeout'];\r\n function LazyPartialController(lazyPartialService, $element, $compile, $scope, $timeout) {\r\n var ctrl = this;\r\n ctrl.$onInit = function () {\r\n ctrl._content = $element.find('> .content');\r\n ctrl._placeholder = $element.find('> .placeholder');\r\n lazyPartialService.getPartial(ctrl.pageId, ctrl.partial)\r\n .then(function (response) {\r\n ctrl._content.html(response.data);\r\n $compile(ctrl._content)($scope);\r\n $timeout(function () {\r\n $element.addClass('ready');\r\n if (ctrl.onReady) {\r\n ctrl.onReady({\r\n id: ctrl.id,\r\n partial: ctrl.partial\r\n });\r\n }\r\n else {\r\n new TimelineLite()\r\n .to(ctrl._placeholder, .4, { autoAlpha: 0 })\r\n .fromTo(ctrl._content, .5, { autoAlpha: 0, y: -20 }, { delay: .2, autoAlpha: 1, y: 0 })\r\n .set(ctrl._content, { clearProps: 'transform' });\r\n }\r\n });\r\n })\r\n .catch(function (error) {\r\n console.log(error);\r\n $element.append('

Failed to load partial.

');\r\n });\r\n };\r\n }\r\n})();","(function () {\r\n angular.module('app')\r\n .factory('lazyPartialService', lazyPartialService);\r\n\r\n lazyPartialService.$inject = ['$http', '$cacheFactory'];\r\n \r\n function lazyPartialService($http, $cacheFactory) {\r\n var dataCache = $cacheFactory.get('headerPartial');\r\n return {\r\n getPartial: function (pageId, partial) {\r\n return $http.get('/api/main/partial', {\r\n params: {\r\n pageId: pageId,\r\n partial: partial\r\n },\r\n cache: dataCache\r\n });\r\n }\r\n };\r\n }\r\n})();","(function () {\r\n angular.module('components.loader', [\r\n 'ngAnimate'\r\n ])\r\n .component('loader', {\r\n bindings: {\r\n onContentReady: '&?',\r\n onError: '&?'\r\n },\r\n template: '
',\r\n transclude: {\r\n indicator: '?indicator',\r\n content: '?content'\r\n },\r\n controller: loaderController\r\n });\r\n\r\n loaderController.$inject = ['$element', '$attrs', '$q', '$transclude', '$timeout'];\r\n function loaderController($element, $attrs, $q, $transclude, $timeout) {\r\n var ctrl = this;\r\n ctrl.$onInit = function () {\r\n ctrl.ready = false;\r\n\r\n if (!$transclude.isSlotFilled('content')) {\r\n $transclude(function (clone) {\r\n if (clone.length)\r\n $element.find('.content').html(clone);\r\n });\r\n }\r\n else {\r\n $transclude(function (clone) {\r\n if (clone.length)\r\n $element.find('.loading-indicator').html(clone);\r\n }, null, 'indicator');\r\n $transclude(function (clone) {\r\n if (clone.length)\r\n $element.find('.content').html(clone);\r\n }, null, 'content');\r\n }\r\n }\r\n ctrl.$postLink = function () {\r\n ctrl.initialized = true;\r\n var deferred = $q.defer();\r\n if (ctrl.onContentReady !== undefined) {\r\n ctrl.onContentReady({deferred: deferred})\r\n }\r\n else {\r\n var count = 0;\r\n var images = $element.find('.content img').filter(function() {\r\n return !$(this).prop('complete');\r\n }).on('load.loader', function () {\r\n count++;\r\n if (count === images.length)\r\n deferred.resolve();\r\n }).on('error.loader', function (error) {\r\n images.off('load.loader');\r\n deferred.reject(error);\r\n });\r\n if (!images.length)\r\n deferred.resolve();\r\n }\r\n deferred.promise.then(function () {\r\n ctrl.ready = true;\r\n }).catch(function (error) {\r\n if (ctrl.onError !== undefined)\r\n ctrl.onError({ error: error });\r\n ctrl.ready = true;\r\n });\r\n }\r\n }\r\n})();","(function () {\r\n angular.module('app')\r\n .directive('open', dataOpen);\r\n\r\n dataOpen.$inject = [];\r\n function dataOpen() {\r\n var directive = {\r\n restrict: 'A',\r\n require: {\r\n modalLoader: '^^modalLoader'\r\n },\r\n bindToController: true,\r\n controller: controller\r\n };\r\n\r\n controller.$inject = ['$element', '$timeout'];\r\n function controller($element, $timeout) {\r\n var ctrl = this;\r\n ctrl.$onInit = function () {\r\n $timeout(function () {\r\n ctrl.target = $element.data('open');\r\n ctrl.modalLoader.load(ctrl.target);\r\n });\r\n };\r\n }\r\n\r\n return directive;\r\n }\r\n})();","(function () {\r\n angular.module('app')\r\n .directive('modalLoader', modalLoader);\r\n\r\n function modalLoader() {\r\n var directive = {\r\n restrict: 'A',\r\n controller: controller\r\n };\r\n\r\n controller.$inject = ['$timeout', '$attrs', '$http', '$compile', '$scope', '$window'];\r\n function controller($timeout, $attrs, $http, $compile, $scope, $window) {\r\n var ctrl = this;\r\n\r\n ctrl.$onInit = function () {\r\n ctrl.delay = $attrs.delay ? parseInt($attrs.delay) : 800;\r\n ctrl.loadedModals = [];\r\n ctrl._modalQueue = [];\r\n if ($attrs.rootId) {\r\n ctrl.rootId = parseInt($attrs.rootId);\r\n }\r\n };\r\n\r\n ctrl.load = function (modalName) {\r\n if (ctrl.loadedModals.indexOf(modalName) === -1) {\r\n ctrl.loadedModals.push(modalName);\r\n ctrl._modalQueue.push(modalName);\r\n $timeout.cancel(ctrl._requestTimer);\r\n ctrl._requestTimer = $timeout(function () {\r\n if (ctrl.rootId) {\r\n $http.get('/api/main/modals/get/' + ctrl.rootId, {\r\n params: {\r\n modals: ctrl._modalQueue\r\n }\r\n })\r\n .then(function (data) {\r\n var body = angular.element('body');\r\n var items = data.data.items;\r\n for (var i = 0; i < items.length; i++) {\r\n var modal = ctrl._buildModal(items[i]);\r\n body.append(modal);\r\n new Foundation.Reveal(modal);\r\n $compile(modal.contents())($scope);\r\n $timeout(function () {\r\n if ($window.bindUmbracoFormHandling) {\r\n var button = this.modal.find('.umbraco-forms-form [type=\"submit\"]:not(.cancel)');\r\n if (button.length) {\r\n $window.bindUmbracoFormHandling(button);\r\n }\r\n }\r\n var innerModals = this.modal.find('.reveal');\r\n if (innerModals.length) {\r\n for (var j = 0; j < innerModals.length; j++) {\r\n var innerModal = angular.element(innerModals[j]);\r\n new Foundation.Reveal(innerModal);\r\n }\r\n }\r\n }.bind({ modal: modal }));\r\n }\r\n })\r\n .catch(function (error) {\r\n console.log(error);\r\n });\r\n ctrl._modalQueue = [];\r\n }\r\n }, ctrl.delay);\r\n }\r\n };\r\n\r\n ctrl._buildModal = function (modal) {\r\n var modalString = `\r\n
\r\n \r\n
${modal.bodyText}
\r\n ${modal.closeButtonText ? `\r\n \r\n ` : ''}\r\n
\r\n `;\r\n return angular.element(modalString);\r\n };\r\n }\r\n\r\n return directive;\r\n }\r\n})();","(function () {\r\n angular.module('components.pageModals', ['ngResource'])\r\n .component('pageModals', {\r\n bindings: {\r\n 'homeId': '@'\r\n },\r\n transclude: true,\r\n template: `\r\n
0 ? modal.backgroundColor : '#fff')}\">\r\n \r\n
\r\n \r\n
`,\r\n controller: pageModalsController\r\n })\r\n .directive('pageModalsRepeat', pageModalsRepeat)\r\n\r\n pageModalsController.$inject = ['$scope', '$element', '$resource', '$timeout'];\r\n function pageModalsController($scope, $element, $resource, $timeout) {\r\n var ctrl = this;\r\n ctrl.modals = [];\r\n ctrl.modalLoading = true;\r\n\r\n this.$onInit = function () {\r\n $timeout(function() {\r\n var linkModals = angular.element('a[data-open]');\r\n if (linkModals.length > 0) {\r\n var modals = [];\r\n $.each(linkModals, function (i) {\r\n var linkModal = $(linkModals[i]).attr('data-open');\r\n if (!modals.includes(linkModal) && angular.element('div#' + linkModal).length == 0) {\r\n modals.push($(linkModals[i]).attr('data-open'));\r\n }\r\n })\r\n\r\n if (modals.length > 0) {\r\n $resource('/api/main/modals/get/' + $scope.$ctrl.homeId).get({ modals: modals }, function (data) {\r\n //check if modal is already loaded\r\n angular.forEach(data.items, function (value, key) {\r\n if (angular.element('div#' + value.urlName).length == 0) {\r\n ctrl.modals.push(value);\r\n }\r\n });\r\n\r\n ctrl.modalLoading = false;\r\n });\r\n }\r\n }\r\n }, 2000);\r\n }\r\n }\r\n\r\n pageModalsRepeat.$inject = [];\r\n function pageModalsRepeat() {\r\n return {\r\n link: link\r\n };\r\n\r\n function link(scope, element, attrs) {\r\n new Foundation.Reveal($(element));\r\n }\r\n }\r\n\r\n})();","/**\r\n * @ngdoc directive\r\n * @module components.pagination\r\n * @name components.pagination:pagination\r\n * @scope\r\n * @restrict E\r\n * @description\r\n * The pagination component \r\n * @param {string=} service String that refers to an ngResource stored in a factory. Should be in the form of \"factory.resource.\" This resource will be called each time the filters change and when a new page is loaded. Should **not** be used together with the **data** param.\r\n * @param {number=} take Controls the number of items to include in each page. Defaults to 15.\r\n * @param {array=} data Array to be split up into pages. Should **not** be used with the **service** param.\r\n * @param {number=} page Page number to start on. Defaults to 1.\r\n * @param {string=} required Comma separated list of parameters that required. Delays the initial pagination load until each parameter has a value set. Used to avoid unnessary api calls.\r\n * @param {function=} onChange Callback function for when the page/filter is changed. Passes the following fields to the function.\r\n * - page: the current page\r\n * - newItems: the items that were just loaded\r\n * - items: all items that have been loaded for the current set of filters\r\n * - rows: the total number of items that can be loaded\r\n * - finished: flag indicating whether all items have been loaded\r\n * - empty: flag indicating that no items were found\r\n * @example\r\n \r\n \r\n
\r\n \r\n
    \r\n
  • {{item}}
  • \r\n
\r\n
\r\n
\r\n
\r\n \r\n (function() {\r\n angular.module('dataExample', ['components.pagination'])\r\n .controller('exampleController', exampleController);\r\n\r\n exampleController.$inject = ['$scope'];\r\n function exampleController($scope) {\r\n var data = [];\r\n for (var i=0; i<25; i++) {\r\n data.push('example ' + i);\r\n }\r\n $scope.exampleData = data;\r\n }\r\n })();\r\n \r\n
\r\n */\r\n\r\n(function () {\r\n angular.module('components.pagination', [\r\n 'ngResource'\r\n ])\r\n .component('pagination', {\r\n bindings: {\r\n service: '@?',\r\n take: '= boundingBox.bottom - 500) {\r\n ctrl.nextPage();\r\n }\r\n });\r\n }\r\n };\r\n\r\n ctrl.$onDestroy = function () {\r\n if (ctrl.$scroller) {\r\n ctrl.$scroller.off('scroll.pagination');\r\n }\r\n };\r\n\r\n /**\r\n * @ngdoc method\r\n * @name pagination#updateParam\r\n * @methodOf components.pagination:pagination\r\n * @kind function\r\n * @description\r\n * Updates a param passed to the pagination service. Only works for service driven pagination.\r\n * @param {string} key The name of the parameter that will be passed to the api call.\r\n * @param {object} value The value of the parameter.\r\n */\r\n ctrl.updateParam = function (key, value) {\r\n //console.info('DEBUG: updateParam');\r\n //console.info(ctrl.params);\r\n if (!ctrl.params)\r\n ctrl.params = {};\r\n ctrl.params[key] = value;\r\n ctrl.$$toPage(1, true);\r\n };\r\n\r\n /**\r\n * @ngdoc method\r\n * @name pagination#$$paramsValid\r\n * @methodOf components.pagination:pagination\r\n * @kind function\r\n * @description\r\n * Internal method used to check whether a value has been set for every required parameter. Used to delay service requests until all of the parameters have been populated.\r\n * @return {bool} True if all required parameters have a value.\r\n */\r\n ctrl.$$paramsValid = function () {\r\n if (!ctrl.required)\r\n return true;\r\n if (!ctrl.params) {\r\n return false;\r\n }\r\n var requirements = ctrl.required.replace(' ', '').split(',');\r\n for (var i = 0; i < requirements.length; i++) {\r\n var target = ctrl.params[requirements[i]];\r\n if (target === undefined || target === null)\r\n return false;\r\n }\r\n return true;\r\n };\r\n\r\n\r\n\r\n /**\r\n * @ngdoc method\r\n * @name pagination#getParam\r\n * @methodOf components.pagination:pagination\r\n * @kind function\r\n * @description\r\n * Gets the current value of a filter parameter.\r\n * @param {string} param The key for the filter parameter.\r\n * @return {object} The value of the requested parameter. Returns undefined if no value has been set.\r\n */\r\n ctrl.getParam = function (param) {\r\n if (ctrl.params)\r\n return ctrl.params[param];\r\n return undefined;\r\n };\r\n\r\n /**\r\n * @ngdoc method\r\n * @name pagination#prevPage\r\n * @methodOf components.pagination:pagination\r\n * @kind function\r\n * @description\r\n * Loads the items for the previous page of content.\r\n * @param {bool=} param If true, the newly loaded content will replace the current content.\r\n */\r\n ctrl.prevPage = function (refresh) {\r\n if (ctrl.page > 1 && ctrl.loading) {\r\n ctrl.$$toPage(ctrl.page - 1, refresh);\r\n }\r\n };\r\n\r\n /**\r\n * @ngdoc method\r\n * @name pagination#nextPage\r\n * @methodOf components.pagination:pagination\r\n * @kind function\r\n * @description\r\n * Loads the items for the next page of content.\r\n * @param {bool=} param If true, the newly loaded content will replace the current content.\r\n */\r\n ctrl.nextPage = function (refresh) {\r\n if (!ctrl.finished && !ctrl.loading) {\r\n ctrl.$$toPage(ctrl.page + 1, refresh);\r\n }\r\n };\r\n\r\n /**\r\n * @ngdoc method\r\n * @name pagination#clearParam\r\n * @methodOf components.pagination:pagination\r\n * @kind function\r\n * @description\r\n * Used to remove a param from the pagination filtering. Primarily used to clear out search terms.\r\n * @param {string} param The filter parameter to be reset.\r\n */\r\n ctrl.clearParam = function (param) {\r\n ctrl.params[param] = null;\r\n ctrl.$$toPage(1, true);\r\n };\r\n\r\n /**\r\n * @ngdoc method\r\n * @name pagination#$$toPage\r\n * @methodOf components.pagination:pagination\r\n * @kind function\r\n * @description\r\n * Loads the content for a selected page.\r\n * @param {number} page The page to load content for.\r\n * @param {bool=} refresh Replace the existing list of content with the new list if true. Used when filter parameters change and when the pagination is navigable with buttons.\r\n */\r\n ctrl.$$toPage = function (page, refresh) {\r\n var skip = (page - 1) * ctrl.take;\r\n var deferred = $q.defer();\r\n ctrl.$promise = deferred.promise;\r\n ctrl.loading = true;\r\n ctrl.empty = false;\r\n if (ctrl.$resource) {\r\n if (refresh && ctrl.initialized) {\r\n var stickPoint = ctrl.stickyManager ? ctrl.stickyManager.getStickPoint(1) : 0;\r\n var top = $element[0].getBoundingClientRect().top;\r\n var shift = top - ctrl.$scroller.height() + stickPoint;\r\n if (top < stickPoint) {\r\n ctrl.scrollTarget.stop().animate({\r\n scrollTop: '+=' + (top - stickPoint)\r\n }, 300);\r\n }\r\n else if (top >= ctrl.$scroller.height()) {\r\n ctrl.scrollTarget.stop().animate({\r\n scrollTop: '+=' + (top - stickPoint)\r\n }, 300);\r\n }\r\n }\r\n var params = angular.copy(ctrl.params);\r\n params.pageSize = ctrl.take;\r\n params.offset = skip;\r\n ctrl.$resource.get(params).$promise.then(function (data) {\r\n deferred.resolve(data);\r\n }).catch(function (error) {\r\n deferred.reject(error);\r\n })\r\n }\r\n else if (ctrl.data) {\r\n if (skip > ctrl.data.length - 1)\r\n deferred.reject({ message: 'No content found for this page.' });\r\n else {\r\n deferred.resolve({\r\n items: ctrl.data.slice(skip, skip + ctrl.take),\r\n rows: ctrl.data.length\r\n });\r\n }\r\n }\r\n deferred.promise.then(function (data) {\r\n if (refresh) {\r\n ctrl.items = data.items;\r\n ctrl.$lastCheck = 0;\r\n }\r\n else {\r\n for (var i = 0; i < data.items.length; i++)\r\n ctrl.items.push(data.items[i]);\r\n }\r\n ctrl.page = page;\r\n ctrl.rows = data.rows;\r\n ctrl.pageLimit = Math.ceil(data.rows / ctrl.take);\r\n ctrl.finished = ctrl.page * ctrl.take >= ctrl.rows;\r\n ctrl.initialized = true;\r\n ctrl.empty = ctrl.items.length === 0;\r\n ctrl.loading = false;\r\n $timeout(function () {\r\n var boundingBox = $element[0].getBoundingClientRect();\r\n if (ctrl.$isInfinite && !ctrl.finished && ctrl.$scroller.height() >= boundingBox.bottom - 500) {\r\n ctrl.nextPage();\r\n }\r\n if (ctrl.onChange) {\r\n ctrl.onChange({\r\n page: ctrl.page,\r\n newItems: data.items,\r\n items: ctrl.items,\r\n rows: ctrl.rows,\r\n finished: ctrl.finished,\r\n empty: ctrl.empty,\r\n controller: ctrl\r\n })\r\n }\r\n })\r\n }).catch(function (error) {\r\n if (ctrl.onError)\r\n ctrl.onError({ message: error.message });\r\n });\r\n return deferred.promise;\r\n };\r\n\r\n ctrl.findItem = function (item, evaluator) {\r\n ctrl.$lastCheck = 0;\r\n if (ctrl.page > 1) {\r\n ctrl.$$toPage(1, true);\r\n ctrl.$promise.then(function () {\r\n findMatch(item, evaluator)\r\n })\r\n }\r\n else\r\n findMatch(item, evaluator);\r\n\r\n function findMatch(item, evaluator) {\r\n var match, matchIndex;\r\n for (var i = ctrl.$lastCheck; i < ctrl.items.length; i++) {\r\n if (evaluator(item, ctrl.items[i])) {\r\n match = ctrl.items[i];\r\n matchIndex = i;\r\n }\r\n }\r\n if (!match) {\r\n if (!ctrl.finished) {\r\n ctrl.$lastCheck = ctrl.items.length;\r\n ctrl.nextPage(true);\r\n ctrl.$promise.then(function () {\r\n findMatch(item, evaluator);\r\n });\r\n }\r\n else if (ctrl.onError) {\r\n ctrl.onError({ message: \"Item not found.\" });\r\n }\r\n }\r\n else if (ctrl.onFound) {\r\n $timeout(function () {\r\n var rect = $element.find('[ng-repeat$=\"$ctrl.items\"]')[matchIndex].getBoundingClientRect();\r\n var padding = 0;\r\n if (ctrl.scrollTarget.length > 1) {\r\n padding = parseInt(angular.element(ctrl.scrollTarget[1]).css('padding-top'))\r\n }\r\n ctrl.scrollTarget.animate({\r\n scrollTop: '+=' + (rect.top - padding)\r\n }, 500, function () {\r\n ctrl.onFound({ match: match });\r\n });\r\n });\r\n }\r\n }\r\n };\r\n }\r\n})();","/**\r\n * @ngdoc directive\r\n * @module components.pagination\r\n * @name components.pagination:paginationFilter\r\n * @requires pagination\r\n * @restrict E\r\n * @description\r\n * Filters paginated content. Must be nested within the pagination component\r\n * @param {string} param The name of the key that is passed to the pagination logic.\r\n * @param {string=} default The default value of the filter (not implemented yet).\r\n * @param {promise=} promise A promise that delays initialization of the filter. Used when the content of the filter is loaded asynchronously.\r\n * @param {function=} onUpdate Callback function that is triggered when the filter changes Passes the following fields to the function.\r\n * - key: the param the filter is tied to\r\n * - value: the filter's current value\r\n * @example\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

    {{post.name}}

    \r\n

    {{post.excerpt}}

    \r\n
  • \r\n
\r\n
\r\n
\r\n
\r\n \r\n (function() {\r\n angular.module('example', ['components.pagination', 'services.global'])\r\n })();\r\n \r\n
\r\n */\r\n\r\n(function () {\r\n angular.module('components.pagination')\r\n .component('paginationFilter', {\r\n require: {\r\n pagination: '^pagination'\r\n },\r\n bindings: {\r\n param: '@',\r\n promise: ' -1 ? val : false;\r\n input.attr('ng-model', '$ctrl.value[' + i + ']');\r\n }\r\n ctrl.value = result;\r\n }\r\n else if (inputs.is('[type=\"radio\"]')) {\r\n for (var i = 0; i < inputs.length; i++) {\r\n var input = angular.element(inputs[i]);\r\n input.attr('ng-model', '$ctrl.value');\r\n }\r\n }\r\n else {\r\n inputs.attr('ng-model', '$ctrl.value');\r\n }\r\n if (!$element.find('[ng-submit]').length) {\r\n $scope.$watch('$ctrl.value', function (value) {\r\n if (!ctrl.$$initialLoad) {\r\n $timeout.cancel(ctrl.$updateTimer);\r\n ctrl.$updateTimer = $timeout(ctrl.updateFilterParam, ctrl.delay)\r\n }\r\n ctrl.$$initialLoad = false;\r\n }, true)\r\n }\r\n var repeaters = $element.find('[ng-repeat]');\r\n if (repeaters.length) {\r\n repeaters.removeAttr('ng-repeat')\r\n }\r\n $compile($element.contents())($scope);\r\n });\r\n });\r\n }\r\n\r\n ctrl.$onInit = function () {\r\n if (ctrl.promise) {\r\n ctrl.promise.then(ctrl.$$initalizeContent);\r\n }\r\n else {\r\n ctrl.$$initalizeContent();\r\n }\r\n }\r\n /**\r\n * @ngdoc method\r\n * @name paginationFilter#updateFilterParam\r\n * @methodOf components.pagination:paginationFilter\r\n * @description\r\n * Processes the filter's current value into what is expected and passes that value to the pagination component. Can be used inside ng-submit to only trigger the update on form submission.\r\n * @param {bool=} reset Clears the value of the filter after the update is passed to the pagination. Used to clear filter forms after submission.\r\n */\r\n ctrl.updateFilterParam = function (reset) {\r\n var val = angular.copy(ctrl.value);\r\n if (Array.isArray(val)) {\r\n var result = [];\r\n for (var i = 0; i < val.length; i++) {\r\n var v = val[i];\r\n if (v === 0 || !!v)\r\n result.push(v);\r\n }\r\n val = result;\r\n }\r\n ctrl.pagination.updateParam(ctrl.param, val);\r\n if (ctrl.onUpdate)\r\n ctrl.onUpdate({ key: ctrl.param, value: val });\r\n if (reset)\r\n ctrl.value = undefined;\r\n }\r\n\r\n /**\r\n * @ngdoc method\r\n * @name paginationFilter#clearFilter\r\n * @methodOf components.pagination:paginationFilter\r\n * @description\r\n * Clears the value of the filter parameter.\r\n */\r\n ctrl.clearFilter = function () {\r\n ctrl.value = undefined;\r\n }\r\n }\r\n})();","/**\r\n * @ngdoc directive\r\n * @module components.pagination\r\n * @name components.pagination:paginationLoadMore\r\n * @restrict E\r\n * @requires pagination\r\n * @description\r\n * Appends the next page of paginated results to the current list when clicked. Any markup can be passed into the component. This button will disappear when there are no more items to load.\r\n * @example\r\n \r\n \r\n
\r\n \r\n
    \r\n
  • {{item}}
  • \r\n
\r\n Click me to load more!!!\r\n
\r\n
\r\n
\r\n \r\n (function() {\r\n angular.module('dataExample', ['components.pagination'])\r\n .controller('exampleController', exampleController);\r\n\r\n exampleController.$inject = ['$scope'];\r\n function exampleController($scope) {\r\n var data = [];\r\n for (var i=0; i<25; i++) {\r\n data.push('example ' + i);\r\n }\r\n $scope.exampleData = data;\r\n }\r\n })();\r\n \r\n
\r\n */\r\n(function () {\r\n angular.module('components.pagination')\r\n .component('paginationLoadMore', {\r\n require: {\r\n pagination: '^pagination'\r\n },\r\n transclude: true,\r\n controller: paginationLoadMoreController,\r\n template: '
'\r\n });\r\n\r\n paginationLoadMoreController.$inject = ['$element', '$transclude'];\r\n function paginationLoadMoreController($element, $transclude) {\r\n var ctrl = this;\r\n ctrl.$onInit = function () {\r\n $transclude(function (clone) {\r\n if (clone.length) {\r\n $element.find('div').html(clone);\r\n }\r\n })\r\n }\r\n\r\n ctrl.loadMore = function () {\r\n ctrl.pagination.nextPage();\r\n }\r\n }\r\n})();","/**\r\n * @ngdoc directive\r\n * @module components.pagination\r\n * @name components.pagination:paginationPageLinks\r\n * @restrict E\r\n * @requires pagination\r\n * @description\r\n * Lists links to the pages of paginated content.\r\n * @example\r\n \r\n \r\n
\r\n \r\n

Current Page: {{$ctrl.page}}

\r\n
    \r\n
  • {{item}}
  • \r\n
\r\n Click me to load more!!!\r\n
\r\n
\r\n
\r\n \r\n (function() {\r\n angular.module('dataExample', ['components.pagination'])\r\n .controller('exampleController', exampleController);\r\n\r\n exampleController.$inject = ['$scope'];\r\n function exampleController($scope) {\r\n var data = [];\r\n for (var i=0; i<1000; i++) {\r\n data.push('example ' + i);\r\n }\r\n $scope.exampleData = data;\r\n }\r\n })();\r\n \r\n
\r\n */\r\n\r\n(function () {\r\n\tangular.module('components.pagination')\r\n\t\t.component('paginationPageLinks', {\r\n\t\t\trequire: {\r\n\t\t\t\t'pagination': '^pagination'\r\n\t\t\t},\r\n\t\t\tbindings: {\r\n 'spacing': '<'\r\n\t\t\t},\r\n template: '',\r\n controller: paginationPageLinksController\r\n\t\t});\r\n\r\n\tpaginationPageLinksController.$inject = ['$scope', '$element'];\r\n\tfunction paginationPageLinksController($scope, $element) {\r\n\t\tvar ctrl = this;\r\n\t\tctrl.$onInit = function () {\r\n\t\t $element.addClass('ng-hide');\r\n\t\t $scope.$watch('$ctrl.pagination.$promise', function (promise) {\r\n\t\t if (promise !== undefined) {\r\n\t\t promise.then(function (data) {\r\n\t\t if (data.rows > data.items.length) {\r\n\t\t $element.removeClass('ng-hide');\r\n\t\t ctrl.$$calculateSpacing();\r\n\t\t }\r\n\t\t else {\r\n\t\t $element.addClass('ng-hide');\r\n\t\t }\r\n\t\t });\r\n\t\t }\r\n\t\t });\r\n\t\t}\r\n\r\n\t\tctrl.$$calculateSpacing = function () {\r\n\t\t var total = 0;\r\n\t\t for (var i = 0; i < ctrl.spacing.length; i++) {\r\n\t\t total += ctrl.spacing[i];\r\n\t\t }\r\n\t\t var set = [];\r\n\t\t for (var i = 1; i <= ctrl.pagination.pageLimit; i++) {\r\n\t\t set.push(i);\r\n\t\t }\r\n\t\t if (total >= ctrl.pagination.pageLimit)\r\n\t\t ctrl.blocks = [set];\r\n\t\t else {\r\n\t\t var gaps = ctrl.pagination.pageLimit - total;\r\n\t\t var space = gaps / (ctrl.spacing.length - 1);\r\n\t\t ctrl.blocks = [];\r\n\t\t var pos = 0;\r\n\t\t for (var i = 0; i < ctrl.spacing.length; i++) {\r\n\t\t ctrl.blocks.push(set.slice(Math.round(pos), ctrl.spacing[i] + pos));\r\n\t\t pos += ctrl.spacing[i] + space;\r\n\t\t }\r\n\t\t }\r\n\t\t}\r\n\r\n\t\tctrl.toPage = function (page) {\r\n\t\t ctrl.pagination.$$toPage(page, true);\r\n\t\t}\r\n\r\n\t\tctrl.prevPage = function() {\r\n\t\t ctrl.pagination.prevPage(true);\r\n\t\t}\r\n\r\n\t\tctrl.nextPage = function() {\r\n\t\t ctrl.pagination.nextPage(true);\r\n\t\t}\r\n\t}\r\n})();","(function () {\r\n angular.module('components.paginationOld', [\r\n 'services.global',\r\n 'components.sort'\r\n ])\r\n .controller('BmgPaginationController', bmgPaginationController)\r\n .directive('bmgPagination', bmgPagination)\r\n .directive('bmgPaginationModal', bmgPaginationModal)\r\n .directive('bmgPaginationPageLinks', bmgPaginationPageLinks)\r\n .directive('bmgPaginationTrigger', bmgPaginationTrigger)\r\n .directive('bmgPaginationFilter', bmgPaginationFilter)\r\n .directive('bmgPaginationParam', bmgPaginationParam)\r\n .directive('bmgPaginationEmpty', bmgPaginationEmpty)\r\n .directive('bmgPaginationFinished', bmgPaginationFinished);\r\n bmgPaginationTrigger.$inject = ['$animate'];\r\n bmgPaginationEmpty.$inject = ['$animate'];\r\n bmgPaginationFinished.$inject = ['$animate'];\r\n\r\n bmgPaginationController.$inject = ['$scope', '$injector', '$timeout', '$q', '$stateParams', 'FoundationApi'];\r\n function bmgPaginationController($scope, $injector, $timeout, $q, $stateParams, foundationApi) {\r\n var controller = this;\r\n var infinite = $scope.infinite = controller.infinite = $scope.infinite === 'false' ? false : true;\r\n var currentPage = controller.currentPage = $scope.currentPage = $scope.page || 0;\r\n var startPage = currentPage;\r\n var take = controller.take = $scope.take = $scope.take || 15;\r\n var service, method;\r\n var items = controller.items = $scope.items = [];\r\n var container = controller.container = angular.element($scope.container || '#content > .grid-content:first-child');\r\n var filters = {};\r\n var previousData;\r\n var delay;\r\n var initLoad = true;\r\n controller.empty = $scope.empty = false;\r\n controller.toPage = function (page, refresh, callback) {\r\n function processData(data) {\r\n if (infinite && !reset && !refresh) {\r\n for (var i = 0; i < data.items.length; i++)\r\n items.push(data.items[i]);\r\n }\r\n else\r\n items = controller.items = $scope.items = data.items;\r\n controller.rows = $scope.rows = data.totalCount || data.rows;\r\n controller.pageLimit = $scope.pageLimit = Math.ceil(data.rows / take);\r\n $scope.finished = items.length === data.totalCount || items.length === data.rows;\r\n controller.empty = $scope.empty = items.length === 0;\r\n reset = false;\r\n if (callback !== undefined) {\r\n callback(data);\r\n }\r\n }\r\n var newPage = currentPage;\r\n switch (page) {\r\n case 'prev':\r\n newPage--;\r\n break;\r\n case 'next':\r\n newPage++;\r\n break;\r\n default:\r\n newPage = page;\r\n break;\r\n }\r\n if (newPage > -1) {\r\n if (service) {\r\n $timeout.cancel(delay);\r\n delay = $timeout(function () {\r\n currentPage = newPage;\r\n var params = {\r\n pageSize: take,\r\n offset: currentPage * take\r\n };\r\n var preventExecution = false;\r\n for (var key in $scope.additionalParams) {\r\n if ($scope.additionalParams[key] === null) {\r\n preventExecution = true;\r\n break;\r\n }\r\n params[key] = $scope.additionalParams[key];\r\n }\r\n for (var key in filters) {\r\n if (!filters[key])\r\n delete params[key];\r\n else\r\n params[key] = filters[key];\r\n }\r\n if ((!preventExecution && !angular.equals(params, previousData)) || refresh) {\r\n $scope.currentPage = page;\r\n initLoad = false;\r\n previousData = params;\r\n controller.paginationPromise = $scope.paginationPromise = service[method].get(params, processData);\r\n }\r\n });\r\n }\r\n else if ($scope.data !== undefined) {\r\n var offset = currentPage * take;\r\n processData({\r\n ctrl: controller,\r\n items: angular.copy($scope.data.slice(offset, offset + take)),\r\n rows: $scope.data.length\r\n });\r\n }\r\n }\r\n };\r\n controller.nextPage = function (callback) {\r\n controller.toPage(currentPage + 1, false, callback);\r\n },\r\n controller.prevPage = function (callback) {\r\n controller.toPage(currentPage - 1, false, callback);\r\n }\r\n\r\n controller.hasMore = function () {\r\n return !$scope.finished;\r\n }\r\n\r\n controller.refresh = function () {\r\n controller.toPage(0, true);\r\n }\r\n\r\n controller.updateFilter = function (filterName, data) {\r\n filters[filterName] = data;\r\n reset = true;\r\n controller.toPage(0);\r\n }\r\n\r\n controller.reset = function () {\r\n filters = {};\r\n items = controller.items = $scope.items = [];\r\n controller.toPage(0);\r\n }\r\n\r\n controller.registerTrigger = function () {\r\n $scope.hasControls = true;\r\n }\r\n\r\n controller.switchService = function (serv) {\r\n if (serv !== service) {\r\n if (serv) {\r\n var servicePieces = serv.split('.');\r\n if (servicePieces.length !== 2)\r\n console.log('\"' + service + '\" is not a valid service');\r\n else {\r\n service = controller.service = $injector.get(servicePieces[0]);\r\n method = controller.method = servicePieces[1];\r\n controller.toPage(startPage);\r\n }\r\n }\r\n else\r\n console.log('Service is not defined');\r\n }\r\n }\r\n\r\n controller.pushToFront = function (item) {\r\n $scope.items.unshift(item);\r\n }\r\n\r\n //loads the initial set of data\r\n controller.switchService($scope.service);\r\n var reset = false;\r\n $scope.$watch('additionalParams', function (newVal) {\r\n reset = true;\r\n controller.toPage(initLoad && $stateParams.page !== undefined ? $stateParams.page - 1 : 0);\r\n }, true);\r\n\r\n // activity helper methods \r\n $scope.getItemTypeString = function (activity) {\r\n switch (activity.Item.Type) {\r\n case 0: return 'Idea';\r\n case 1: return 'Researach';\r\n case 2: return 'Innovation';\r\n case 3: return 'Feedback';\r\n }\r\n };\r\n\r\n $scope.getActionTypeString = function (activity) {\r\n switch (activity.ActionType) {\r\n case 0: return 'Added';\r\n case 1: return 'Submitted';\r\n case 2: return 'Created';\r\n case 3: return 'Updated';\r\n }\r\n };\r\n\r\n $scope.getHeader = function (activity) {\r\n return $scope.getItemTypeString(activity) + ' ' + $scope.getActionTypeString(activity);\r\n };\r\n\r\n $scope.$root.$on('refreshPagination', controller.refresh);\r\n }\r\n\r\n bmgPagination.$inject = ['$timeout', '$window', '$transitions'];\r\n function bmgPagination($timeout, $window, $transitions) {\r\n var nextId = 0;\r\n var directive = {\r\n scope: {\r\n take: '@?',\r\n service: '@?',\r\n page: '@?',\r\n container: '@?',\r\n infinite: '@?',\r\n additionalParams: '=?',\r\n data: '=?',\r\n onChange: '&?'\r\n },\r\n restrict: 'EA',\r\n transclude: true,\r\n replace: true,\r\n templateUrl: '/angular/components/pagination/pagination.html',\r\n controller: 'BmgPaginationController',\r\n link: link\r\n };\r\n return directive;\r\n function link(scope, element, attrs, controller, transclude) {\r\n if (attrs.state !== undefined) {\r\n controller.state = scope.state = attrs.state;\r\n $transitions.onEnter({\r\n to: attrs.state\r\n }, function ($transition$) {\r\n controller.toPage($transition$.params().page - 1, true);\r\n })\r\n }\r\n var id = nextId++;\r\n var itemContainer;\r\n var checkPoint;\r\n var window = angular.element($window);\r\n function updateCheckPoint() {\r\n checkPoint = window.height() * 1.5;\r\n }\r\n window.off('resize.pagination').on('resize.pagination', updateCheckPoint)\r\n updateCheckPoint();\r\n transclude(scope, function (clone, scope) {\r\n if (clone.length) {\r\n element.append(clone);\r\n }\r\n });\r\n scope.$emit('paginationReady');\r\n function loadCheck(event) {\r\n if (((scope.paginationPromise !== undefined && scope.paginationPromise.$resolved) || scope.data !== undefined) && itemContainer) {\r\n var bottom = itemContainer.getBoundingClientRect().bottom;\r\n if (bottom < checkPoint)\r\n controller.nextPage();\r\n }\r\n }\r\n\r\n var watchingScroll = false;\r\n scope.$watch('hasControls', function (hasControls) {\r\n if (hasControls)\r\n controller.container.off('scroll.paginate' + id);\r\n else {\r\n controller.container.on('scroll.paginate' + id, loadCheck);\r\n watchingScroll = true;\r\n scope.$on('$destroy', function () {\r\n controller.container.off('scroll.paginate' + id);\r\n });\r\n scope.$watch('items', function (items) {\r\n if (items !== undefined && items.length > 0 && itemContainer === undefined) {\r\n $timeout(function () {\r\n itemContainer = element.find('[ng-repeat*=\"in items\"]:eq(0)').parent()[0];\r\n }, 0);\r\n }\r\n if (scope.onChange !== undefined) {\r\n scope.onChange({\r\n items: items,\r\n rows: controller.rows\r\n });\r\n }\r\n scope.itemsBinding = items;\r\n });\r\n scope.$watch('finished', function (finished) {\r\n if (finished)\r\n controller.container.off('scroll.paginate' + id);\r\n else\r\n controller.container.on('scroll.paginate' + id, loadCheck);\r\n });\r\n }\r\n });\r\n }\r\n }\r\n\r\n bmgPaginationPageLinks.$inject = [];\r\n function bmgPaginationPageLinks() {\r\n var directive = {\r\n restrict: 'E',\r\n replace: true,\r\n templateUrl: '/angular/components/pagination/pagination-page-links.html',\r\n require: '^bmgPagination',\r\n link: link\r\n }\r\n return directive;\r\n\r\n function link(scope, element, attrs, controller) {\r\n controller.registerTrigger();\r\n }\r\n }\r\n\r\n bmgPaginationModal.$inject = ['$window', '$templateRequest', '$compile'];\r\n function bmgPaginationModal($window, $templateRequest, $compile) {\r\n var nextId = 0;\r\n var directive = {\r\n scope: {\r\n initialLimit: '=?',\r\n take: '@?',\r\n service: '@?',\r\n page: '@?',\r\n params: '=?'\r\n },\r\n restrict: 'EA',\r\n transclude: {\r\n emptyMessage: '?emptyMessage',\r\n finishedMessage: '?finishedMessage',\r\n banner: '?banner',\r\n entry: '?entry'\r\n },\r\n replace: true,\r\n template: '
',\r\n link: link\r\n };\r\n return directive;\r\n function link(scope, element, attrs, controller, transclude) {\r\n var id = nextId++;\r\n var itemContainer;\r\n var window = angular.element($window);\r\n var scroller;\r\n if (scope.initialLimit === undefined)\r\n scope.initialLimit = 5;\r\n $templateRequest('/angular/components/pagination/pagination-modal.html', true).then(function (markup) {\r\n if (scope.$$destroyed) return;\r\n var paginator = angular.element(markup);\r\n transclude(scope, function (clone) {\r\n if (clone.length)\r\n paginator.find('[ng-repeat]').html(clone);\r\n }, null, 'entry');\r\n transclude(scope, function (clone) {\r\n if (clone.length)\r\n paginator.find('.banner').html(clone);\r\n }, null, 'banner');\r\n transclude(function (clone) {\r\n if (clone.length)\r\n paginator.find('.empty').html(clone);\r\n }, null, 'emptyMessage');\r\n transclude(function (clone) {\r\n if (clone.length)\r\n paginator.find('.finished').html(clone);\r\n }, null, 'finishedMessage');\r\n if (attrs.take !== undefined)\r\n paginator.attr('take', attrs.take);\r\n var modalId = 'pagination-modal-' + id;\r\n paginator.attr({\r\n service: attrs.service,\r\n container: '#' + modalId + ' .pagination-container'\r\n });\r\n paginator.find('[zf-open]').attr('zf-open', modalId);\r\n paginator.find('zf-modal').attr('id', modalId);\r\n element.append(paginator);\r\n $compile(element.contents())(scope);\r\n });\r\n }\r\n }\r\n\r\n function bmgPaginationTrigger($animate) {\r\n var directive = {\r\n restrict: 'A',\r\n scope: {\r\n page: '@',\r\n trigger: '@?'\r\n },\r\n require: '^bmgPagination',\r\n controller: function () { },\r\n link: link\r\n }\r\n return directive;\r\n function link(scope, element, attrs, controller) {\r\n controller.registerTrigger();\r\n if (scope.trigger === undefined)\r\n scope.trigger = 'click';\r\n element.on(scope.trigger, function () {\r\n controller.toPage(scope.page);\r\n return false;\r\n });\r\n scope.$parent.$watch('finished', function (newVal) {\r\n if (newVal)\r\n $animate.addClass(element, 'ng-hide');\r\n else\r\n $animate.removeClass(element, 'ng-hide');\r\n });\r\n }\r\n }\r\n\r\n function bmgPaginationFilter() {\r\n var directive = {\r\n restrict: 'E',\r\n scope: {\r\n data: '=',\r\n name: '@',\r\n property: '@?',\r\n disableDataChanges: '=?'\r\n },\r\n transclude: true,\r\n replace: true,\r\n template: '
',\r\n require: '^bmgPagination',\r\n link: link\r\n };\r\n\r\n return directive;\r\n\r\n function link(scope, element, attrs, controller, transclude) {\r\n if (scope.property === undefined)\r\n scope.property = 'value';\r\n if (!scope.disableDataChanges) {\r\n scope.$watch('data', function (newVal) {\r\n if (newVal !== undefined) {\r\n var actives = [];\r\n for (var key in newVal) {\r\n if (newVal[key].active)\r\n actives.push(newVal[key][scope.property])\r\n }\r\n if (actives.length === 0)\r\n actives = undefined;\r\n controller.updateFilter(scope.name, actives);\r\n }\r\n }, true);\r\n }\r\n scope.$watch(scope.name, function (newVal, preVal) {\r\n if (newVal !== preVal)\r\n controller.updateFilter(scope.name, newVal);\r\n });\r\n transclude(scope, function (clone, scope) {\r\n element.append(clone);\r\n });\r\n }\r\n }\r\n\r\n function bmgPaginationParam() {\r\n var directive = {\r\n restrict: 'A',\r\n require: ['^bmgPagination', 'ngModel'],\r\n link: link\r\n };\r\n\r\n return directive;\r\n\r\n function link(scope, element, attrs, controllers) {\r\n var paginator = controllers[0];\r\n var ngModel = controllers[1];\r\n var pieces = attrs.ngModel.split('.');\r\n var name = pieces[pieces.length - 1];\r\n scope.$watch('data', function (newVal) {\r\n if (newVal !== undefined) {\r\n var actives = [];\r\n for (var key in newVal) {\r\n if (newVal[key].active)\r\n actives.push(newVal[key].value)\r\n }\r\n if (actives.length === 0)\r\n actives = undefined;\r\n paginator.updateFilter(scope.name, actives);\r\n }\r\n }, true);\r\n ngModel.$viewChangeListeners.push(function () {\r\n paginator.updateFilter(name, ngModel.$modelValue);\r\n });\r\n }\r\n }\r\n\r\n function bmgPaginationServiceSwitcher() {\r\n var directive = {\r\n restrict: 'E',\r\n replace: true,\r\n scope: {\r\n services: '='\r\n },\r\n require: '^bmgPagination',\r\n template: '',\r\n link: link\r\n };\r\n return directive;\r\n function link(scope, element, attrs, controller) {\r\n scope.service = controller.service;\r\n scope.$watch('service', function (newVal) {\r\n\r\n })\r\n }\r\n }\r\n\r\n function bmgPaginationEmpty($animate) {\r\n var directive = {\r\n restrict: 'E',\r\n scope: {\r\n page: '@',\r\n trigger: '@?'\r\n },\r\n transclude: true,\r\n replace: true,\r\n template: '
',\r\n require: '^bmgPagination',\r\n link: link\r\n }\r\n return directive;\r\n function link(scope, element, attrs, controller) {\r\n scope.$parent.$watch('items', function (newVal) {\r\n if (newVal && controller.empty)\r\n $animate.removeClass(element, 'ng-hide');\r\n else\r\n $animate.addClass(element, 'ng-hide');\r\n })\r\n }\r\n }\r\n\r\n function bmgPaginationFinished($animate) {\r\n var directive = {\r\n restrict: 'E',\r\n transclude: true,\r\n replace: true,\r\n template: '
',\r\n require: '^bmgPagination',\r\n link: link\r\n }\r\n return directive;\r\n function link(scope, element, attrs, controller) {\r\n scope.$watch('finished', function (newVal) {\r\n if (newVal && !controller.empty)\r\n $animate.removeClass(element, 'ng-hide');\r\n else\r\n $animate.addClass(element, 'ng-hide');\r\n })\r\n }\r\n }\r\n})();","/**\r\n * @ngdoc directive\r\n * @module components.query\r\n * @name components.query:query\r\n * @scope\r\n * @restrict E\r\n * @description\r\n * A utility widget for calling apis. The data returned by the api is accessed with \"$ctrl.results.\"\r\n * @param {string} service The name of resource defined at /angular/services/global.js.\r\n * @param {number=} take The number of items to process. Typically used for apis that support pagination.\r\n * @param {string=} method The type of request to make to the service. Defaults to 'GET' if empty.\r\n * @param {object=} params Additional parameters that will be passed to the api.\r\n * @example\r\n \r\n \r\n
\r\n \r\n
\r\n

{{post.name}}\r\n

{{post.summary}}\r\n

\r\n
\r\n
\r\n
\r\n \r\n (function() {\r\n angular.module('dataExample', ['components.query', 'services.global'])\r\n .controller('exampleController', exampleController);\r\n\r\n exampleController.$inject = ['$scope'];\r\n function exampleController($scope) {\r\n }\r\n })();\r\n \r\n
\r\n */\r\n(function () {\r\n angular.module('components.query', [])\r\n .component('query', {\r\n bindings: {\r\n 'service': '@',\r\n 'take': '
',\r\n controller: queryController\r\n })\r\n\r\n queryController.$inject = ['$scope', '$injector', '$transclude', '$element', '$timeout'];\r\n function queryController($scope, $injector, $transclude, $element, $timeout) {\r\n var ctrl = this;\r\n\r\n ctrl.$onInit = function () {\r\n $transclude($scope, function (clone) {\r\n if (clone.length) {\r\n $element.find('.content').append(clone);\r\n }\r\n });\r\n };\r\n\r\n ctrl.$onChanges = function (changes) {\r\n if (changes.method && !changes.method.currentValue) {\r\n ctrl.method = 'get';\r\n }\r\n if (changes.params && !changes.params.currentValue) {\r\n ctrl.params = {};\r\n }\r\n\r\n if (ctrl.take !== undefined) {\r\n ctrl.params.pageSize = ctrl.take;\r\n }\r\n if (changes.service) {\r\n var servicePieces = ctrl.service.split('.');\r\n var serviceContainer = $injector.get(servicePieces[0]);\r\n ctrl.$resource = serviceContainer[servicePieces[1]];\r\n }\r\n\r\n if (changes.params && ctrl.$$paramsValid()) {\r\n ctrl.loading = true;\r\n ctrl.results = ctrl.$resource[ctrl.method](ctrl.params);\r\n ctrl.results.$promise.then(function (data) {\r\n $timeout(function () {\r\n ctrl.loading = false;\r\n if (ctrl.onChange) {\r\n ctrl.onChange({\r\n data: data\r\n });\r\n }\r\n })\r\n })\r\n }\r\n }\r\n\r\n ctrl.$$paramsValid = function () {\r\n if (!ctrl.required)\r\n return true;\r\n if (!ctrl.params) {\r\n return false;\r\n }\r\n var requirements = ctrl.required.replace(' ', '').split(',');\r\n for (var i = 0; i < requirements.length; i++) {\r\n var target = ctrl.params[requirements[i]];\r\n if (target === undefined || target === null)\r\n return false;\r\n }\r\n return true;\r\n }\r\n }\r\n})();","(function () {\r\n angular.module('components.relatedContent', [\r\n 'utility', \r\n 'ngAnimate'\r\n ]) \r\n .directive('relatedContent', relatedContent)\r\n .controller('relatedContentController', relatedContentController);\r\n \r\n relatedContentController.$inject = ['$scope', 'global']\r\n function relatedContentController($scope, global) {\r\n var controller = this;\r\n \r\n $scope.content = global.relatedContent.get({ id: $scope.id }, function (data) {\r\n $scope.maxCharacters = data.maxCharacters; \r\n $scope.emptySectionText = data.emptySectionText;\r\n $scope.news = data.news;\r\n $scope.projects = data.projects;\r\n $scope.resources = data.resources;\r\n $scope.services = data.services;\r\n $scope.technologies = data.technologies;\r\n $scope.isEmployeeView = data.isEmployeeView;\r\n $scope.hideSection = (data.news === undefined || data.news.length < 1) && (data.projects === undefined || data.projects.length < 1) &&\r\n (data.services === undefined || data.services.length < 1) && (data.resources === undefined || data.resources.length < 1); \r\n });\r\n }\r\n\r\n relatedContent.$inject = ['$window', '$filter', '$timeout', 'global'];\r\n function relatedContent($window, $filter, $timeout, global) {\r\n var directive = {\r\n scope: {\r\n id: '='\r\n },\r\n templateUrl: '/angular/components/relatedContent/relatedContent.html',\r\n replace: true,\r\n restrict: 'E',\r\n link: link,\r\n controller: 'relatedContentController',\r\n };\r\n return directive;\r\n function link(scope, element, attrs) {\r\n \r\n }\r\n }\r\n\r\n})();","(function () {\r\n angular.module('app')\r\n .factory('scrollMagicAnimations', scrollMagicAnimations);\r\n\r\n scrollMagicAnimations.$inject = [];\r\n\r\n function scrollMagicAnimations() {\r\n var animations = {\r\n moveUp: {\r\n parameters: ['$element', 'distance'],\r\n animation: function ($element, distance) {\r\n return new TweenLite.to($element, .5, { y: -distance });\r\n }\r\n },\r\n moveDown: {\r\n parameters: ['$element', 'distance'],\r\n animation: function ($element, distance) {\r\n return new TweenLite.to($element, .5, { y: distance });\r\n }\r\n },\r\n moveLeft: {\r\n parameters: ['$element', 'distance'],\r\n animation: function($element, distance) {\r\n return new TweenLite.to($element, .5, { x: distance });\r\n }\r\n },\r\n moveRight: {\r\n parameters: ['$element', 'distance'],\r\n animation: function ($element, distance) {\r\n return new TweenLite.to($element, .5, { x: -distance });\r\n }\r\n },\r\n upAndDown: {\r\n parameters: ['$element', '$size', 'selector', 'distance'],\r\n animation: function($element, $size, selector, distance) {\r\n if ($size === 'small') {\r\n return new TimelineLite();\r\n }\r\n var dist = typeof (distance) === 'string' ? '-' + distance : -distance;\r\n var content = $element.find(selector);\r\n return new TimelineLite()\r\n .fromTo(content, .5, { autoAlpha: 0, y: dist }, { autoAlpha: 1, y: 0 })\r\n .to(content, .5, { delay: .5, autoAlpha: 0, y: distance });\r\n },\r\n clear: function ($element, $size, selector, distance) {\r\n $element.find(selector).css({\r\n opacity: '',\r\n visibility: '',\r\n transform: '',\r\n height: '',\r\n width: ''\r\n });\r\n }\r\n },\r\n fillTarget: {\r\n parameters: ['$element', '$size', 'start', 'end'],\r\n animation: function ($element, $size, start, end) {\r\n var startElement = $element.find(start);\r\n var endElement = angular.element(end);\r\n startElement.css({\r\n width: '',\r\n height: '',\r\n transform: ''\r\n });\r\n endElement.css({\r\n opacity: ''\r\n });\r\n if ($size === 'small') {\r\n return new TimelineLite();\r\n }\r\n var startOffset = startElement[0].getBoundingClientRect();\r\n var endOffset = endElement[0].getBoundingClientRect();\r\n var pin = endElement.closest('.scrollmagic-pin-spacer');\r\n var pinAdjustment = pin.length ? parseInt(pin.css('padding-top')) : 0;\r\n return new TimelineLite()\r\n .set(endElement, { autoAlpha: 0 })\r\n .to(startElement, .5, { width: endOffset.width, height: endOffset.height, x: endOffset.left - startOffset.left, y: endOffset.top - pinAdjustment - startOffset.top })\r\n .set(endElement, { autoAlpha: 1 })\r\n .set(startElement, { autoAlpha: 0 });\r\n },\r\n clear: function($element, $size, start, end) {\r\n $element.find(start).css({\r\n opacity: '',\r\n visibility: '',\r\n width: '',\r\n height: '',\r\n translate: ''\r\n });\r\n angular.element(end).css({\r\n opacity: '',\r\n visibility: ''\r\n });\r\n }\r\n },\r\n softwareFree: {\r\n parameters: ['$element', '$size'],\r\n animation: function ($element, $size) {\r\n MorphSVGPlugin.convertToPath($element.find(\"circle, rect, ellipse, line, polygon, polyline\"));\r\n return new TimelineMax()\r\n\r\n // setup\r\n .set($element.find('.scene2-page'), { autoAlpha: 0 })\r\n\r\n // scene1\r\n .to($element.find('.scene1-fade-out-rect'), 1, { autoAlpha: 0 })\r\n .add('scene1-morph-to-page')\r\n .to($element.find('.scene1-morph-to-page'), 1, { morphSVG: $element.find('.scene2-page')[0] }, 'scene1-morph-to-page')\r\n .to($element.find('.scene1-content'), 1, { autoAlpha: 0 }, 'scene1-morph-to-page')\r\n\r\n // scene2\r\n .from($element.find('.scene2-mask'), 0.1, { autoAlpha: 0 }, 'scene2-show-content-with-line')\r\n .add('scene2-show-content-with-line')\r\n .from($element.find('.scene2-content'), 0.1, { autoAlpha: 0 }, 'scene2-show-content-with-line')\r\n .from($element.find('.scene2-show-mask-line'), 0.1, { autoAlpha: 0 }, 'scene2-show-content-with-line')\r\n .fromTo($element.find('.scene2-mask'), 1.1, { xPercent: 0, scaleX: 1 }, { xPercent: 80, scaleX: 0 }, 'scene2-show-content-with-line')\r\n .fromTo($element.find('.scene2-show-mask-line'), 1.1, { xPercent: 0 }, { xPercent: 90 }, 'scene2-show-content-with-line')\r\n .to($element.find('.scene2-show-mask-line'), 0.2, { autoAlpha: 0 })\r\n\r\n // scene3\r\n .add('scene3-morph-to-speech')\r\n .to($element.find('.scene2-content'), 0.3, { autoAlpha: 0 }, 'scene3-morph-to-speech')\r\n .to($element.find('.scene1-morph-to-page'), 0.3, { morphSVG: $element.find('.scene3-speech-bubble')[0] }, 'scene3-morph-to-speech')\r\n .add('scene3-animate-in')\r\n .from($element.find('.scene3-speech-bubble'), 0.1, { autoAlpha: 0 }, 'scene3-animate-in')\r\n .from($element.find('.scene3-headphones'), 0.1, { autoAlpha: 0 }, 'scene3-animate-in')\r\n .fromTo($element.find('.scene3-headphones-line-1'), 0.7, { drawSVG: \"0% 0%\" }, { drawSVG: \"0% 100%\" }, 'scene3-animate-in')\r\n .fromTo($element.find('.scene3-headphones-line-2'), 0.7, { drawSVG: \"0% 0%\" }, { drawSVG: \"0% 100%\" }, 'scene3-animate-in')\r\n .fromTo($element.find('.scene3-headphones-line-3'), 0.7, { drawSVG: \"0% 0%\" }, { drawSVG: \"0% 100%\" }, 'scene3-animate-in')\r\n .fromTo($element.find('.scene3-headphones-line-4'), 0.7, { drawSVG: \"0% 0%\" }, { drawSVG: \"0% 100%\" }, 'scene3-animate-in')\r\n .fromTo($element.find('.scene3-headphones-line-5'), 0.7, { drawSVG: \"0% 0%\" }, { drawSVG: \"0% 100%\" }, 'scene3-animate-in')\r\n .fromTo($element.find('.scene3-headphones-line-6'), 0.7, { drawSVG: \"0% 0%\" }, { drawSVG: \"0% 100%\" }, 'scene3-animate-in')\r\n .fromTo($element.find('.scene3-headphones-line-7'), 0.7, { drawSVG: \"0% 0%\" }, { drawSVG: \"0% 100%\" }, 'scene3-animate-in')\r\n .fromTo($element.find('.scene3-headphones-line-8'), 0.7, { drawSVG: \"0% 0%\" }, { drawSVG: \"0% 100%\" }, 'scene3-animate-in')\r\n .fromTo($element.find('.scene3-headphones-line-9'), 0.7, { drawSVG: \"0% 0%\" }, { drawSVG: \"0% 100%\" }, 'scene3-animate-in')\r\n .fromTo($element.find('.scene3-headphones-line-10'), 0.7, { drawSVG: \"0% 0%\" }, { drawSVG: \"0% 100%\" }, 'scene3-animate-in')\r\n .from($element.find('.scene3-speech-tail'), 1.5, { autoAlpha: 0, yPercent: -10 }, 'scene3-animate-in')\r\n .staggerFrom([$element.find('.scene3-speech-1'), $element.find('.scene3-speech-2'), $element.find('.scene3-speech-3')], 0.3, { autoAlpha: 0, cycle: { xPercent: [-10, 10, -10] } }, 0.1, 'scene3-animate-in');\r\n }\r\n },\r\n softwareProfessional: {\r\n parameters: ['$element', '$size'],\r\n animation: function ($element, $size) {\r\n MorphSVGPlugin.convertToPath($element.find(\"circle, rect, ellipse, line, polygon, polyline\"));\r\n return new TimelineMax()\r\n\r\n // setup\r\n .set($element.find('.scene2-page'), { autoAlpha: 0 })\r\n .set($element.find('.scene3-screen'), { autoAlpha: 0 })\r\n\r\n // scene1\r\n .to($element.find('.scene1-fade-out-rect'), 1, { autoAlpha: 0 })\r\n .add('scene1-morph-to-page')\r\n .to($element.find('.scene1-morph-to-page'), 1, { morphSVG: $element.find('.scene2-page')[0] }, 'scene1-morph-to-page')\r\n .to($element.find('.scene1-content'), 1, { autoAlpha: 0 }, 'scene1-morph-to-page')\r\n\r\n // scene2\r\n .add('scene2-fade-in')\r\n .from($element.find('.scene2-page-contents'), 0.5, { autoAlpha: 0 }, 'scene2-fade-in')\r\n .from($element.find('.scene2-list-graphic'), 0.5, { autoAlpha: 0 }, 'scene2-fade-in')\r\n .from($element.find('.scene2-connections'), 0.5, { autoAlpha: 0 }, 'scene2-fade-in')\r\n .fromTo($element.find('.scene2-connection-1'), 1, { drawSVG: \"0% 0%\" }, { drawSVG: \"0% 100%\" }, 'scene2-fade-in')\r\n .fromTo($element.find('.scene2-connection-2'), 1, { drawSVG: \"0% 0%\" }, { drawSVG: \"0% 100%\" }, 'scene2-fade-in')\r\n .fromTo($element.find('.scene2-connection-3'), 1, { drawSVG: \"0% 0%\" }, { drawSVG: \"0% 100%\" }, 'scene2-fade-in')\r\n\r\n // scene3\r\n .add('scene3-morph-to-screen')\r\n .to($element.find('.scene2-page-contents'), 0.5, { autoAlpha: 0 }, 'scene3-morph-to-screen')\r\n .to($element.find('.scene2-list-graphic'), 0.5, { autoAlpha: 0 }, 'scene3-morph-to-screen')\r\n .to($element.find('.scene2-connections'), 0.5, { autoAlpha: 0 }, 'scene3-morph-to-screen')\r\n .to($element.find('.scene1-morph-to-page'), 1, { morphSVG: $element.find('.scene3-screen')[0] }, 'scene3-morph-to-screen')\r\n .add('scene3-fade-in')\r\n .from($element.find('.scene3-screen-outlines'), 1, { autoAlpha: 0 }, 'scene3-fade-in')\r\n .fromTo($element.find('.scene3-screen-outline-1'), 1, { drawSVG: \"0% 0%\" }, { drawSVG: \"0% 100%\" }, 'scene3-fade-in')\r\n .fromTo($element.find('.scene3-screen-outline-2'), 1, { drawSVG: \"0% 0%\" }, { drawSVG: \"0% 100%\" }, 'scene3-fade-in')\r\n .fromTo($element.find('.scene3-screen-outline-3'), 1, { drawSVG: \"0% 0%\" }, { drawSVG: \"0% 100%\" }, 'scene3-fade-in')\r\n .fromTo($element.find('.scene3-screen-outline-4'), 1, { drawSVG: \"0% 0%\" }, { drawSVG: \"0% 100%\" }, 'scene3-fade-in')\r\n .fromTo($element.find('.scene3-screen-outline-5'), 1, { drawSVG: \"0% 0%\" }, { drawSVG: \"0% 100%\" }, 'scene3-fade-in')\r\n .from($element.find('.scene3-screen-content'), 1, { autoAlpha: 0 }, 'scene3-fade-in')\r\n .staggerFromTo([$element.find('.scene3-screen-line-1'), $element.find('.scene3-screen-line-2'), $element.find('.scene3-screen-line-3')], 1, { scaleX: 0 }, { scaleX: 1 }, 0.33, 'scene3-fade-in')\r\n\r\n // scene4\r\n .add('scene4-morph-to-speech')\r\n .to($element.find('.scene3-screen-outlines'), 0.3, { autoAlpha: 0 }, 'scene4-morph-to-speech')\r\n .to($element.find('.scene3-screen-content'), 0.3, { autoAlpha: 0 }, 'scene4-morph-to-speech')\r\n .to($element.find('.scene1-morph-to-page'), 0.3, { morphSVG: $element.find('.scene4-speech-bubble')[0] }, 'scene4-morph-to-speech')\r\n .add('scene4-animate-in')\r\n .from($element.find('.scene4-speech-bubble'), 0.1, { autoAlpha: 0 }, 'scene4-animate-in')\r\n .from($element.find('.scene4-headphones'), 0.1, { autoAlpha: 0 }, 'scene4-animate-in')\r\n .fromTo($element.find('.scene4-headphones-line-1'), 0.7, { drawSVG: \"0% 0%\" }, { drawSVG: \"0% 100%\" }, 'scene4-animate-in')\r\n .fromTo($element.find('.scene4-headphones-line-2'), 0.7, { drawSVG: \"0% 0%\" }, { drawSVG: \"0% 100%\" }, 'scene4-animate-in')\r\n .fromTo($element.find('.scene4-headphones-line-3'), 0.7, { drawSVG: \"0% 0%\" }, { drawSVG: \"0% 100%\" }, 'scene4-animate-in')\r\n .fromTo($element.find('.scene4-headphones-line-4'), 0.7, { drawSVG: \"0% 0%\" }, { drawSVG: \"0% 100%\" }, 'scene4-animate-in')\r\n .fromTo($element.find('.scene4-headphones-line-5'), 0.7, { drawSVG: \"0% 0%\" }, { drawSVG: \"0% 100%\" }, 'scene4-animate-in')\r\n .fromTo($element.find('.scene4-headphones-line-6'), 0.7, { drawSVG: \"0% 0%\" }, { drawSVG: \"0% 100%\" }, 'scene4-animate-in')\r\n .fromTo($element.find('.scene4-headphones-line-7'), 0.7, { drawSVG: \"0% 0%\" }, { drawSVG: \"0% 100%\" }, 'scene4-animate-in')\r\n .fromTo($element.find('.scene4-headphones-line-8'), 0.7, { drawSVG: \"0% 0%\" }, { drawSVG: \"0% 100%\" }, 'scene4-animate-in')\r\n .fromTo($element.find('.scene4-headphones-line-9'), 0.7, { drawSVG: \"0% 0%\" }, { drawSVG: \"0% 100%\" }, 'scene4-animate-in')\r\n .fromTo($element.find('.scene4-headphones-line-10'), 0.7, { drawSVG: \"0% 0%\" }, { drawSVG: \"0% 100%\" }, 'scene4-animate-in')\r\n .from($element.find('.scene4-speech-tail'), 1.5, { autoAlpha: 0, yPercent: -10 }, 'scene4-animate-in')\r\n .staggerFrom([$element.find('.scene4-speech-1'), $element.find('.scene4-speech-2'), $element.find('.scene4-speech-3')], 0.3, { autoAlpha: 0, cycle: { xPercent: [-10, 10, -10] } }, 0.1, 'scene4-animate-in');\r\n }\r\n },\r\n softwareAutomation: {\r\n parameters: ['$element', '$size'],\r\n animation: function ($element, $size) {\r\n MorphSVGPlugin.convertToPath($element.find(\"circle, rect, ellipse, line, polygon, polyline\"));\r\n return new TimelineMax()\r\n\r\n // scene1\r\n .to($element.find('.scene1-gear'), 2, { transformOrigin: \"50% 50% 0\", rotation: 45, ease: Linear.easeNone }, 0)\r\n\r\n // time: 2\r\n\r\n // scene2\r\n .add('scene2-fade-in')\r\n .to($element.find('.scene1-background'), 0.5, { autoAlpha: 0 }, 'scene2-fade-in')\r\n .to($element.find('.scene1-gear-inner'), 0.5, { autoAlpha: 0 }, 'scene2-fade-in')\r\n .to($element.find('.scene1-gear-teeth'), 0.5, { autoAlpha: 0 }, 'scene2-fade-in')\r\n .to($element.find('.scene1-content'), 0.5, { autoAlpha: 0 }, 'scene2-fade-in')\r\n .to($element.find('.scene1-gear-morph'), 1, { morphSVG: $element.find('.scene2-outer-circle')[0] }, 'scene2-fade-in')\r\n .add('scene2-animate-in')\r\n .from($element.find('.scene2-content'), 0.5, { autoAlpha: 0 }, 'scene2-animate-in')\r\n .from($element.find('.scene2-node-1'), 0.5, { autoAlpha: 0 }, 'scene2-animate-in')\r\n .from($element.find('.scene2-node-2'), 0.5, { autoAlpha: 0 }, 'scene2-animate-in')\r\n .from($element.find('.scene2-node-3'), 0.5, { autoAlpha: 0 }, 'scene2-animate-in')\r\n .from($element.find('.scene2-square-1'), 1, { autoAlpha: 0, transformOrigin: \"50% 50% 0\", scale: 0.1 }, 2 + 0.5)\r\n .from($element.find('.scene2-square-2'), 1, { autoAlpha: 0, transformOrigin: \"50% 50% 0\", scale: 0.1 }, 2 + 0.6)\r\n .from($element.find('.scene2-square-3'), 1, { autoAlpha: 0, transformOrigin: \"50% 50% 0\", scale: 0.1 }, 2 + 0.7)\r\n\r\n // time: 3.7\r\n\r\n // scene3\r\n .add('scene3-morph-to-screen')\r\n .to($element.find('.scene1-gear-morph'), 0.5, { autoAlpha: 0 }, 'scene3-morph-to-screen')\r\n .to($element.find('.scene2-content'), 0.5, { autoAlpha: 0 }, 'scene3-morph-to-screen')\r\n .to($element.find('.scene2-node-1'), 0.5, { autoAlpha: 0 }, 'scene3-morph-to-screen')\r\n .to($element.find('.scene2-node-2'), 0.5, { autoAlpha: 0 }, 'scene3-morph-to-screen')\r\n .to($element.find('.scene2-node-3'), 0.5, { autoAlpha: 0 }, 'scene3-morph-to-screen')\r\n .to($element.find('.scene2-square-1'), 0.5, { autoAlpha: 0 }, 'scene3-morph-to-screen')\r\n .to($element.find('.scene2-square-3'), 0.5, { autoAlpha: 0 }, 'scene3-morph-to-screen')\r\n .to($element.find('.scene2-square-2'), 1, { morphSVG: $element.find('.scene3-morph-outline')[0] }, 'scene3-morph-to-screen')\r\n .from($element.find('.scene3-content'), 1, { autoAlpha: 0 }, 3.7 + 0.7)\r\n .from($element.find('.scene3-morph-outline'), 1, { autoAlpha: 0 }, 3.7 + 0.7)\r\n .from($element.find('.scene3-morph-rect'), 1, { autoAlpha: 0 }, 3.7 + 0.7)\r\n\r\n // time: 5.4\r\n\r\n // scene4\r\n .add('scene4-morph-to-speech')\r\n .to($element.find('.scene2-square-2'), 0.3, { autoAlpha: 0 }, 'scene4-morph-to-speech')\r\n .to($element.find('.scene3-content'), 0.3, { autoAlpha: 0 }, 'scene4-morph-to-speech')\r\n .to($element.find('.scene3-morph-outline'), 0.3, { autoAlpha: 0 }, 'scene4-morph-to-speech')\r\n .to($element.find('.scene3-morph-rect'), 0.5, { morphSVG: $element.find('.scene4-speech-bubble')[0] }, 'scene4-morph-to-speech')\r\n .add('scene4-animate-in')\r\n .from($element.find('.scene4-speech-bubble'), 0.1, { autoAlpha: 0 }, 'scene4-animate-in')\r\n .from($element.find('.scene4-headphones'), 0.1, { autoAlpha: 0 }, 'scene4-animate-in')\r\n .fromTo($element.find('.scene4-headphones-line-1'), 0.7, { drawSVG: \"0% 0%\" }, { drawSVG: \"0% 100%\" }, 'scene4-animate-in')\r\n .fromTo($element.find('.scene4-headphones-line-2'), 0.7, { drawSVG: \"0% 0%\" }, { drawSVG: \"0% 100%\" }, 'scene4-animate-in')\r\n .fromTo($element.find('.scene4-headphones-line-3'), 0.7, { drawSVG: \"0% 0%\" }, { drawSVG: \"0% 100%\" }, 'scene4-animate-in')\r\n .fromTo($element.find('.scene4-headphones-line-4'), 0.7, { drawSVG: \"0% 0%\" }, { drawSVG: \"0% 100%\" }, 'scene4-animate-in')\r\n .fromTo($element.find('.scene4-headphones-line-5'), 0.7, { drawSVG: \"0% 0%\" }, { drawSVG: \"0% 100%\" }, 'scene4-animate-in')\r\n .fromTo($element.find('.scene4-headphones-line-6'), 0.7, { drawSVG: \"0% 0%\" }, { drawSVG: \"0% 100%\" }, 'scene4-animate-in')\r\n .fromTo($element.find('.scene4-headphones-line-7'), 0.7, { drawSVG: \"0% 0%\" }, { drawSVG: \"0% 100%\" }, 'scene4-animate-in')\r\n .fromTo($element.find('.scene4-headphones-line-8'), 0.7, { drawSVG: \"0% 0%\" }, { drawSVG: \"0% 100%\" }, 'scene4-animate-in')\r\n .fromTo($element.find('.scene4-headphones-line-9'), 0.7, { drawSVG: \"0% 0%\" }, { drawSVG: \"0% 100%\" }, 'scene4-animate-in')\r\n .fromTo($element.find('.scene4-headphones-line-10'), 0.7, { drawSVG: \"0% 0%\" }, { drawSVG: \"0% 100%\" }, 'scene4-animate-in')\r\n .from($element.find('.scene4-speech-tail'), 1.5, { autoAlpha: 0, yPercent: -10 }, 'scene4-animate-in')\r\n .staggerFrom([$element.find('.scene4-speech-1'), $element.find('.scene4-speech-2'), $element.find('.scene4-speech-3')], 0.3, { autoAlpha: 0, cycle: { xPercent: [-10, 10, -10] } }, 0.1, 'scene4-animate-in');\r\n }\r\n },\r\n softwareEnterprise: {\r\n parameters: ['$element', '$size'],\r\n animation: function ($element, $size) {\r\n MorphSVGPlugin.convertToPath($element.find(\"circle, rect, ellipse, line, polygon, polyline\"));\r\n return new TimelineMax()\r\n \r\n // scene1\r\n .from($element.find('.scene1-arrow-1'), 1, { autoAlpha: 0, xPercent: -10, yPercent: -10 })\r\n .from($element.find('.scene1-arrow-2'), 1, { autoAlpha: 0, xPercent: 10, yPercent: 10 }, 0.2)\r\n .from($element.find('.scene1-arrow-3'), 1, { autoAlpha: 0, xPercent: 10, yPercent: -10 }, 0.4)\r\n .from($element.find('.scene1-arrow-4'), 1, { autoAlpha: 0, xPercent: -10, yPercent: 2 }, 0.6)\r\n .from($element.find('.scene1-arrow-5'), 1, { autoAlpha: 0, xPercent: 10, yPercent: 0 }, 0.8)\r\n .from($element.find('.scene1-arrow-6'), 1, { autoAlpha: 0, xPercent: -2, yPercent: 10 }, 1)\r\n .to($element.find('.scene1-ring'), 2, { transformOrigin: \"50% 50% 0\", rotation: 30, ease: Linear.easeNone }, 0)\r\n\r\n // time: 2\r\n\r\n // scene2\r\n .add('scene1-fade-out')\r\n .to($element.find('.scene1-ring'), 1, { autoAlpha: 0 }, 'scene1-fade-out')\r\n .to($element.find('.scene1-graphic'), 1, { autoAlpha: 0 }, 'scene1-fade-out')\r\n .to($element.find('.scene1-arrows'), 1, { autoAlpha: 0 }, 'scene1-fade-out')\r\n .from($element.find('.scene2-ring'), 1, { autoAlpha: 0 }, 'scene1-fade-out')\r\n .from($element.find('.scene2-globe'), 1, { autoAlpha: 0 }, 'scene1-fade-out')\r\n .to($element.find('.scene2-ring'), 2.6, { transformOrigin: \"50% 50% 0\", rotation: 10, ease: Linear.easeNone }, 2 + 0)\r\n .from($element.find('.scene2-pin-1'), 1, { autoAlpha: 0, transformOrigin: \"50% 50% 0\", scale: 0.1 }, 2 + 1)\r\n .from($element.find('.scene2-pin-2'), 1, { autoAlpha: 0, transformOrigin: \"50% 50% 0\", scale: 0.1 }, 2 + 1.2)\r\n .from($element.find('.scene2-pin-3'), 1, { autoAlpha: 0, transformOrigin: \"50% 50% 0\", scale: 0.1 }, 2 + 1.4)\r\n .from($element.find('.scene2-pin-4'), 1, { autoAlpha: 0, transformOrigin: \"50% 50% 0\", scale: 0.1 }, 2 + 1.6)\r\n\r\n // time: 4.6\r\n\r\n // scene3\r\n .add('scene3-fade-in')\r\n .to($element.find('.scene2-ring'), 1, { autoAlpha: 0 }, 'scene3-fade-in')\r\n .to($element.find('.scene2-globe'), 1, { autoAlpha: 0 }, 'scene3-fade-in')\r\n .to($element.find('.scene2-pin-1'), 1, { autoAlpha: 0 }, 'scene3-fade-in')\r\n .to($element.find('.scene2-pin-2'), 1, { autoAlpha: 0 }, 'scene3-fade-in')\r\n .to($element.find('.scene2-pin-3'), 1, { autoAlpha: 0 }, 'scene3-fade-in')\r\n .to($element.find('.scene2-pin-4'), 1, { autoAlpha: 0 }, 'scene3-fade-in')\r\n .from($element.find('.scene3-page'), 1, { autoAlpha: 0 }, 'scene3-fade-in')\r\n .from($element.find('.scene3-glasses'), 1, { autoAlpha: 0 }, 'scene3-fade-in')\r\n\r\n // time: 5.6\r\n\r\n // scene4\r\n .add('scene4-morph-to-circle')\r\n .to($element.find('.scene3-page'), 0.5, { autoAlpha: 0 }, 'scene4-morph-to-circle')\r\n .to($element.find('.scene3-glasses-part-1'), 0.5, { autoAlpha: 0 }, 'scene4-morph-to-circle')\r\n .to($element.find('.scene3-glasses-part-2'), 0.5, { autoAlpha: 0 }, 'scene4-morph-to-circle')\r\n .to($element.find('.scene3-glasses-part-3'), 0.5, { autoAlpha: 0 }, 'scene4-morph-to-circle')\r\n .to($element.find('.scene3-glasses-part-4'), 0.5, { autoAlpha: 0 }, 'scene4-morph-to-circle')\r\n .to($element.find('.scene3-glasses-part-5'), 0.5, { autoAlpha: 0 }, 'scene4-morph-to-circle')\r\n .to($element.find('.scene3-glasses-part-6'), 0.5, { autoAlpha: 0 }, 'scene4-morph-to-circle')\r\n .to($element.find('.scene3-glasses-part-7'), 0.5, { autoAlpha: 0 }, 'scene4-morph-to-circle')\r\n .to($element.find('.scene3-glasses-part-8'), 0.5, { autoAlpha: 0 }, 'scene4-morph-to-circle')\r\n .to($element.find('.scene3-glasses-part-9'), 0.5, { autoAlpha: 0 }, 'scene4-morph-to-circle')\r\n .to($element.find('.scene3-glasses-part-10'), 0.5, { autoAlpha: 0 }, 'scene4-morph-to-circle')\r\n .to($element.find('.scene3-glasses-glass'), 1, { morphSVG: $element.find('.scene4-outer-circle')[0] }, 'scene4-morph-to-circle')\r\n .add('scene4-animate-in')\r\n .from($element.find('.scene4-content'), 0.5, { autoAlpha: 0 }, 'scene4-animate-in')\r\n .from($element.find('.scene4-node-1'), 0.5, { autoAlpha: 0 }, 'scene4-animate-in')\r\n .from($element.find('.scene4-node-2'), 0.5, { autoAlpha: 0 }, 'scene4-animate-in')\r\n .from($element.find('.scene4-node-3'), 0.5, { autoAlpha: 0 }, 'scene4-animate-in')\r\n .from($element.find('.scene4-square-1'), 1, { autoAlpha: 0, transformOrigin: \"50% 50% 0\", scale: 0.1 }, 5.6 + 0.5)\r\n .from($element.find('.scene4-square-2'), 1, { autoAlpha: 0, transformOrigin: \"50% 50% 0\", scale: 0.1 }, 5.6 + 0.6)\r\n .from($element.find('.scene4-square-3'), 1, { autoAlpha: 0, transformOrigin: \"50% 50% 0\", scale: 0.1 }, 5.6 + 0.7)\r\n\r\n // time: 7.3\r\n\r\n // scene5\r\n .add('scene5-morph-to-phone')\r\n .to($element.find('.scene3-glasses-glass'), 0.5, { autoAlpha: 0 }, 'scene5-morph-to-phone')\r\n .to($element.find('.scene4-content'), 0.5, { autoAlpha: 0 }, 'scene5-morph-to-phone')\r\n .to($element.find('.scene4-node-1'), 0.5, { autoAlpha: 0 }, 'scene5-morph-to-phone')\r\n .to($element.find('.scene4-node-2'), 0.5, { autoAlpha: 0 }, 'scene5-morph-to-phone')\r\n .to($element.find('.scene4-node-3'), 0.5, { autoAlpha: 0 }, 'scene5-morph-to-phone')\r\n .to($element.find('.scene4-square-1'), 0.5, { autoAlpha: 0 }, 'scene5-morph-to-phone')\r\n .to($element.find('.scene4-square-3'), 0.5, { autoAlpha: 0 }, 'scene5-morph-to-phone')\r\n .to($element.find('.scene4-square-2'), 0.5, { morphSVG: $element.find('.scene5-phone')[0] }, 'scene5-morph-to-phone')\r\n .from($element.find('.scene5-phone-gradient'), 0.5, { autoAlpha: 0 }, 7.3 + 0.25)\r\n .from($element.find('.scene5-phone-content'), 0.5, { autoAlpha: 0 }, 7.3 + 0.25)\r\n .from($element.find('.scene5-morph-button'), 0.5, { autoAlpha: 0 }, 7.3 + 0.25)\r\n .from($element.find('.scene5-phone'), 0.5, { autoAlpha: 0 }, 7.3 + 0.5)\r\n\r\n // time: 8.3\r\n\r\n // scene6\r\n .add('scene6-morph-to-fill')\r\n .to($element.find('.scene5-phone-gradient'), 0.5, { autoAlpha: 0 }, 'scene6-morph-to-fill')\r\n .to($element.find('.scene5-phone-content'), 0.5, { autoAlpha: 0 }, 'scene6-morph-to-fill')\r\n .to($element.find('.scene5-phone'), 0.5, { autoAlpha: 0 }, 'scene6-morph-to-fill')\r\n .to($element.find('.scene4-square-2'), 0.5, { autoAlpha: 0 }, 'scene6-morph-to-fill')\r\n .to($element.find('.scene5-morph-button'), 1, { morphSVG: $element.find('.scene6-fill-rect')[0] }, 'scene6-morph-to-fill')\r\n .add('scene6-fade-in')\r\n .from($element.find('.scene6-content'), 1, { autoAlpha: 0 }, 'scene6-fade-in')\r\n .from($element.find('.scene6-fill-rect'), 1, { autoAlpha: 0 }, 'scene6-fade-in')\r\n\r\n // time: 10.3\r\n\r\n // scene7\r\n .add('scene7-fade-in')\r\n .to($element.find('.scene6-content'), 0.5, { autoAlpha: 0 }, 'scene7-fade-in')\r\n .to($element.find('.scene6-fill-rect'), 0.5, { autoAlpha: 0 }, 'scene7-fade-in')\r\n .to($element.find('.scene5-morph-button'), 0.5, { autoAlpha: 0 }, 'scene7-fade-in')\r\n .from($element.find('.scene7-content'), 0.5, { autoAlpha: 0 }, 'scene7-fade-in')\r\n .fromTo($element.find('.scene7-checkmark-2'), 0.3, { drawSVG: \"0% 0%\" }, { drawSVG: \"0% 100%\" }, \"-=0.3\")\r\n .from($element.find('.scene7-checkmark-bg-2'), 0.3, { autoAlpha: 0 }, \"-=0.3\")\r\n .add('scene7-show-checkmark')\r\n .fromTo($element.find('.scene7-checkmark-1'), 0.3, { drawSVG: \"0% 0%\" }, { drawSVG: \"0% 100%\" }, 'scene7-show-checkmark')\r\n .from($element.find('.scene7-checkmark-bg-1'), 0.3, { autoAlpha: 0 }, 'scene7-show-checkmark')\r\n\r\n // time: 11.1\r\n\r\n // scene8\r\n .add('scene7-animate-out')\r\n .to($element.find('.scene7-content'), 0.3, { autoAlpha: 0 }, 'scene7-animate-out')\r\n .to($element.find('.scene7-checkmark-1'), 0.3, { autoAlpha: 0 }, 'scene7-animate-out')\r\n .to($element.find('.scene7-checkmark-bg-1'), 0.3, { autoAlpha: 0 }, 'scene7-animate-out')\r\n .to($element.find('.scene7-checkmark-2'), 0.3, { autoAlpha: 0 }, 'scene7-animate-out')\r\n .to($element.find('.scene7-checkmark-bg-2'), 0.3, { autoAlpha: 0 }, 'scene7-animate-out')\r\n .add('scene8-animate-in')\r\n .from($element.find('.scene8-speech-bubble'), 0.1, { autoAlpha: 0 }, 'scene8-animate-in')\r\n .from($element.find('.scene8-headphones'), 0.1, { autoAlpha: 0 }, 'scene8-animate-in')\r\n .fromTo($element.find('.scene8-headphones-line-1'), 0.7, { drawSVG: \"0% 0%\" }, { drawSVG: \"0% 100%\" }, 'scene8-animate-in')\r\n .fromTo($element.find('.scene8-headphones-line-2'), 0.7, { drawSVG: \"0% 0%\" }, { drawSVG: \"0% 100%\" }, 'scene8-animate-in')\r\n .fromTo($element.find('.scene8-headphones-line-3'), 0.7, { drawSVG: \"0% 0%\" }, { drawSVG: \"0% 100%\" }, 'scene8-animate-in')\r\n .fromTo($element.find('.scene8-headphones-line-4'), 0.7, { drawSVG: \"0% 0%\" }, { drawSVG: \"0% 100%\" }, 'scene8-animate-in')\r\n .fromTo($element.find('.scene8-headphones-line-5'), 0.7, { drawSVG: \"0% 0%\" }, { drawSVG: \"0% 100%\" }, 'scene8-animate-in')\r\n .fromTo($element.find('.scene8-headphones-line-6'), 0.7, { drawSVG: \"0% 0%\" }, { drawSVG: \"0% 100%\" }, 'scene8-animate-in')\r\n .fromTo($element.find('.scene8-headphones-line-7'), 0.7, { drawSVG: \"0% 0%\" }, { drawSVG: \"0% 100%\" }, 'scene8-animate-in')\r\n .fromTo($element.find('.scene8-headphones-line-8'), 0.7, { drawSVG: \"0% 0%\" }, { drawSVG: \"0% 100%\" }, 'scene8-animate-in')\r\n .fromTo($element.find('.scene8-headphones-line-9'), 0.7, { drawSVG: \"0% 0%\" }, { drawSVG: \"0% 100%\" }, 'scene8-animate-in')\r\n .fromTo($element.find('.scene8-headphones-line-10'), 0.7, { drawSVG: \"0% 0%\" }, { drawSVG: \"0% 100%\" }, 'scene8-animate-in')\r\n .from($element.find('.scene8-speech-tail'), 1.5, { autoAlpha: 0, yPercent: -10 }, 'scene8-animate-in')\r\n .staggerFrom([$element.find('.scene8-speech-1'), $element.find('.scene8-speech-2'), $element.find('.scene8-speech-3')], 0.3, { autoAlpha: 0, cycle: { xPercent: [-10, 10, -10] } }, 0.1, 'scene8-animate-in');\r\n }\r\n }\r\n };\r\n var callers = {};\r\n var keys = Object.keys(animations);\r\n for (var i = 0; i < keys.length; i++) {\r\n var key = keys[i];\r\n var animation = animations[key];\r\n callers[key] = {\r\n get: function (settings) {\r\n var params = [];\r\n for (var j = 0; j < this.parameters.length; j++) {\r\n params.push(settings[this.parameters[j]]);\r\n }\r\n return this.animation.apply(this, params);\r\n }.bind(animation),\r\n clear: function (settings) {\r\n if (!this.clear) {\r\n return function () { };\r\n }\r\n var params = [];\r\n for (var j = 0; j < this.parameters.length; j++) {\r\n params.push(settings[this.parameters[j]]);\r\n }\r\n return this.clear.apply(this, params);\r\n }.bind(animation)\r\n };\r\n }\r\n return callers;\r\n }\r\n})();","(function () {\r\n angular.module('app')\r\n .directive('scrollMagicContainer', scrollMagicContainer);\r\n\r\n var id = 0;\r\n function scrollMagicContainer() {\r\n var directive = {\r\n restrict: 'A',\r\n bindToController: true,\r\n controller: controller\r\n };\r\n function controller($element, $attrs, $window) {\r\n var ctrl = this;\r\n var win = angular.element($window);\r\n ctrl._id = id++;\r\n ctrl._loadPosition = 0;\r\n ctrl._sceneQueue = {};\r\n\r\n ctrl.$onInit = function () {\r\n ctrl.magic = new ScrollMagic.Controller(); \r\n };\r\n\r\n ctrl.addScene = function (scene) {\r\n scene.addTo(ctrl.magic);\r\n ctrl._loadPosition++;\r\n var queue = ctrl._sceneQueue[ctrl._loadPosition];\r\n if (queue) {\r\n console.log(queue);\r\n for (var i = 0; i < queue.length; i++) {\r\n queue[i].finishInit();\r\n }\r\n }\r\n };\r\n\r\n ctrl.queueScene = function (scene) {\r\n if (scene.loadOrder) {\r\n var queue = ctrl._sceneQueue[scene.loadOrder];\r\n if (!queue) {\r\n queue = ctrl._sceneQueue[scene.loadOrder] = [];\r\n }\r\n queue.push(scene);\r\n }\r\n else {\r\n scene.finishInit();\r\n }\r\n };\r\n }\r\n controller.$inject = ['$element', '$attrs', '$window'];\r\n return directive;\r\n }\r\n})();","(function () {\r\n angular.module('app')\r\n .component('scrollMagicScene', {\r\n bindings: {\r\n animation: '@',\r\n animationSettings: '\r\n `,\r\n transclude: true,\r\n require: {\r\n stickyManager: '^^?stickyManager',\r\n scrollMagicContainer: '^^scrollMagicContainer'\r\n },\r\n controller: scrollMagicSceneController\r\n });\r\n\r\n var id = 0;\r\n scrollMagicSceneController.$inject = ['$scope', '$element', 'scrollMagicAnimations', '$transclude', '$window', '$timeout'];\r\n function scrollMagicSceneController($scope, $element, scrollMagicAnimations, $transclude, $window, $timeout) {\r\n var ctrl = this;\r\n ctrl._id = id++;\r\n ctrl.$onInit = function () {\r\n ctrl._container = $element.find('>div');\r\n $transclude($scope, function (clone) {\r\n if (clone.length) {\r\n ctrl._container.html(clone);\r\n }\r\n });\r\n\r\n ctrl._win = angular.element($window);\r\n if (ctrl.loadOrder) {\r\n ctrl.scrollMagicContainer.queueScene(ctrl);\r\n }\r\n else {\r\n ctrl.finishInit();\r\n }\r\n\r\n ctrl._win.on(`resize.scrollMagic${ctrl._id}`, function () {\r\n if (ctrl.reset && ctrl._enabled) {\r\n ctrl._tween.progress(0);\r\n ctrl.animationFunction.clear(ctrl.animationSettings);\r\n ctrl._tween = ctrl.animationFunction.get(ctrl.animationSettings);\r\n ctrl.scene.setTween(ctrl._tween);\r\n ctrl.scene.triggerHook(ctrl.triggerHook || (ctrl.stickyManager ? ctrl.stickyManager.getStickPoint() / ctrl._win.height() : 0));\r\n }\r\n }).on('changed.zf.mediaquery', function (event, newSize) {\r\n var curEnabled = ctrl._enabled;\r\n ctrl.animationSettings.$size = newSize;\r\n ctrl._enabled = ctrl.enable === undefined || Foundation.MediaQuery.atLeast(ctrl.enable);\r\n ctrl.scene.enabled(ctrl._enabled);\r\n if (ctrl.pin) {\r\n if (curEnabled && !ctrl._enabled) {\r\n ctrl.scene.removePin(true);\r\n $element.find('.scrollmagic-pin-spacer').attr('style', '');\r\n ctrl._pinned = false;\r\n }\r\n else if (!curEnabled && ctrl._enabled) {\r\n ctrl.scene.setPin(ctrl._container[0]);\r\n }\r\n }\r\n if (!ctrl._enabled) {\r\n ctrl.animationFunction.clear(ctrl.animationSettings);\r\n }\r\n });\r\n };\r\n\r\n ctrl.finishInit = function () {\r\n $timeout(function () {\r\n ctrl.animationFunction = scrollMagicAnimations[ctrl.animation];\r\n ctrl.scene = new ScrollMagic.Scene({\r\n triggerElement: ctrl.triggerElement || ctrl._container[0],\r\n duration: ctrl.duration || 800,\r\n triggerHook: ctrl.triggerHook || (ctrl.stickyManager ? ctrl.stickyManager.getStickPoint() / ctrl._win.height() : 0),\r\n offset: ctrl.offset || 0\r\n });\r\n ctrl._enabled = ctrl.enable === undefined || Foundation.MediaQuery.atLeast(ctrl.enable);\r\n if (ctrl._enabled && ctrl.pin) {\r\n ctrl.scene.setPin(ctrl._container[0]);\r\n }\r\n\r\n if (!ctrl.animationSettings) {\r\n ctrl.animationSettings = {};\r\n }\r\n ctrl.animationSettings.$element = ctrl._container;\r\n ctrl.animationSettings.$size = Foundation.MediaQuery.current;\r\n ctrl._tween = ctrl.animationFunction.get(ctrl.animationSettings);\r\n ctrl.scene.setTween(ctrl._tween);\r\n ctrl.scrollMagicContainer.addScene(ctrl.scene);\r\n ctrl.scene.enabled(ctrl._enabled);\r\n \r\n if (ctrl.hookPromise) {\r\n ctrl.hookPromise.then(function () {\r\n ctrl.scene.triggerHook(ctrl.triggerHook || (ctrl.stickyManager ? ctrl.stickyManager.getStickPoint() / ctrl._win.height() : 0));\r\n });\r\n }\r\n });\r\n };\r\n\r\n ctrl.$onDestroy = function () {\r\n ctrl._win.off(`resize.scrollMagic${ctrl._id}`);\r\n };\r\n }\r\n})();","(function () {\r\n angular.module('app')\r\n .controller('SideImageCarouselController', SideImageCarouselController);\r\n\r\n SideImageCarouselController.$inject = ['$scope'];\r\n function SideImageCarouselController($scope) {\r\n var ctrl = this;\r\n \r\n function getClientPos(data, index) {\r\n var start = Math.floor(index / data.slideData.length);\r\n var currentIndex = (index + Math.abs(data.slideData.length * start)) % data.slideData.length;\r\n return start * data.totalWidth + data.offsets[currentIndex];\r\n }\r\n\r\n ctrl.imageAnimation = function (offset, index, data) {\r\n var width = data.slideWidth;\r\n var rounds = -Math.floor((getClientPos(data, index) + offset + (data.slideData.length > 1 ? width : 0) + data.spacing) / data.totalWidth);\r\n var roundLength = data.slideData.length;\r\n var renderIndex = index + (rounds * roundLength);\r\n return {\r\n opacity: 1 - Math.max(0, Math.min(Math.abs((getClientPos(data, renderIndex) + offset) / width), 1)),\r\n y: 0,\r\n x: 0,\r\n width: width,\r\n offsetShift: getClientPos(data, renderIndex) + offset\r\n };\r\n };\r\n\r\n ctrl.slideAnimation = function (offset, index, data) {\r\n var width = data.slideWidth;\r\n var rounds = -Math.floor((getClientPos(data, index) + offset + (data.slideData.length > 1 ? width : 0) + data.spacing) / data.totalWidth);\r\n var roundLength = data.slideData.length;\r\n var renderIndex = index + (rounds * roundLength);\r\n return {\r\n opacity: 1 - Math.max(0, Math.min(Math.abs((getClientPos(data, renderIndex) + offset) / width), 1)),\r\n x: getClientPos(data, renderIndex) + offset,\r\n y: 0,\r\n width: width\r\n };\r\n };\r\n\r\n ctrl.slideAnimationPrep = function (data) {\r\n if (data.slideData) {\r\n var totalWidth = 0;\r\n var offsets = [];\r\n var breakpoints = [];\r\n var elements = [];\r\n var maxHeight = 0;\r\n var slides = data.carousel.find('.slides')\r\n .css('height', '');\r\n if (data.slideWidth) {\r\n data.slideElements.width(data.slideWidth);\r\n }\r\n for (var i = 0; i < data.slideData.length; i++) {\r\n offsets.push(totalWidth);\r\n var element = angular.element(data.slideElements[i]).find('>div,>a');\r\n var images = element.find('img');\r\n var width = data.slideWidth;\r\n elements.push(element);\r\n var imagesLoaded = images.hasClass('loaded');\r\n if (!imagesLoaded) {\r\n images.css('display', 'none');\r\n }\r\n var height = element.outerHeight();\r\n if (!imagesLoaded) {\r\n images.css('display', '');\r\n }\r\n var margin = data.spacing;\r\n maxHeight = Math.max(height, maxHeight);\r\n breakpoints.push(totalWidth + margin + (width / 2));\r\n totalWidth += width + margin;\r\n }\r\n data.elements = elements;\r\n data.totalWidth = totalWidth;\r\n data.offsets = offsets;\r\n data.breakpoints = breakpoints;\r\n slides.height(maxHeight);\r\n }\r\n return data;\r\n };\r\n\r\n ctrl.slideSnap = function (offset, data) {\r\n var pos = 0;\r\n var shift = Math.abs(offset % data.totalWidth);\r\n if (offset > 0) {\r\n shift = data.totalWidth - shift;\r\n }\r\n for (var i = 0; i < data.offsets.length; i++) {\r\n if (shift <= data.breakpoints[i]) {\r\n pos = i;\r\n break;\r\n }\r\n }\r\n var index = -(Math.ceil(offset / data.totalWidth) * data.slideData.length - pos);\r\n return {\r\n index: index,\r\n position: -getClientPos(data, index)\r\n };\r\n };\r\n }\r\n})();","/**\r\n * @ngdoc directive\r\n * @module components.sticky\r\n * @name components.sticky:sticky\r\n * @scope\r\n * @restrict E\r\n * @description\r\n * Used for elements that stick to the top of the defined scrollable region when the user scrolls past the element. Do note that there is an issue with how the sticky element displays caused by differences in how this page is structured with our typical front end.\r\n * @param {string} scrollTarget Selector for the scrollable element that will be stuck to.\r\n * @param {function=} onStick Callback triggered when sticky element starts sticking. (not implemented)\r\n * @param {function=} onRelease Callback triggered when sticky element stops sticking. (not implemented)\r\n * @example\r\n \r\n \r\n
\r\n

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin ac condimentum neque, vitae faucibus ipsum. Ut porttitor justo nec ante ultricies, eget luctus massa porta. Curabitur pellentesque consequat nulla in tempor. Nullam rutrum odio non mattis sagittis. Vestibulum tincidunt enim vitae ex ultrices, id finibus quam tincidunt. Vivamus hendrerit lorem vitae diam porta luctus. Mauris fermentum imperdiet tempus. Fusce eu lacus est. Curabitur vel condimentum enim, sit amet auctor urna. Nam volutpat enim enim, vel egestas justo fermentum hendrerit. Donec sagittis tincidunt accumsan. Donec feugiat tempor orci. Maecenas condimentum ligula at accumsan fermentum. Integer cursus tellus non dictum condimentum.

\r\n \r\n

Testing things

\r\n
\r\n

Cras lacinia iaculis ex, eu laoreet turpis semper ac. In vulputate sagittis sem nec laoreet. Nunc nec ornare sapien. Nam quis lectus felis. Pellentesque at eros accumsan, tincidunt lorem quis, aliquam leo. Integer in aliquet dolor. Integer interdum posuere dignissim. Donec commodo ligula a quam mattis, quis pharetra neque porta. Morbi facilisis ligula vitae ligula dignissim, at sollicitudin nibh ultrices. Proin at facilisis magna. Sed fermentum varius pulvinar. Fusce iaculis nibh eu mi rutrum egestas in vel felis. Suspendisse pulvinar ante vel ante ullamcorper maximus.

\r\n

Vivamus urna est, convallis nec aliquam et, dictum a erat. Praesent nunc est, viverra sit amet urna ac, eleifend tincidunt ligula. Praesent porta luctus tellus vel gravida. Ut leo lorem, finibus et rhoncus in, ornare at sapien. Aenean mi nibh, accumsan maximus volutpat sit amet, tincidunt in erat. Morbi eros tellus, ullamcorper vitae odio sed, egestas placerat nunc. Morbi ac lacinia felis. Integer posuere facilisis turpis at sollicitudin. Donec odio tellus, posuere eget neque et, imperdiet lobortis ligula. Aliquam quis dolor rhoncus, iaculis lacus tempus, pellentesque turpis. Cras lobortis leo sit amet magna ullamcorper semper. Proin gravida neque id metus commodo congue. Praesent condimentum, quam imperdiet pulvinar convallis, ex tellus tincidunt sapien, quis vulputate ex nulla quis eros.

\r\n

Donec ornare lectus sit amet ipsum scelerisque, eu varius nisi tincidunt. Pellentesque vestibulum justo eget risus commodo, sed vehicula magna consequat. Etiam mollis risus sit amet magna pellentesque hendrerit. Donec ut lorem tincidunt, semper massa in, pretium mauris. Quisque in tincidunt est, et finibus dolor. Aenean ac dolor eu mi laoreet suscipit vitae sed ipsum. Curabitur placerat varius lorem ac rutrum. Fusce in nibh et magna luctus vulputate. Pellentesque sit amet dictum magna, vitae molestie nunc. Morbi iaculis sapien mollis nulla blandit convallis. In a elementum elit. Sed vel dolor condimentum lectus lacinia accumsan quis vitae diam.

\r\n

Duis lectus libero, tempor quis neque ut, feugiat lacinia ex. Nunc sed tortor eget lacus bibendum congue. Sed eget mi sit amet elit volutpat tempus et quis nunc. Mauris id aliquam nulla. Phasellus cursus scelerisque mi. Nulla a suscipit quam. Sed eleifend odio non tellus tincidunt iaculis. Mauris nec tortor justo. Fusce pretium, velit at ultricies mattis, justo elit ultricies nibh, a elementum metus nibh rhoncus lorem. Pellentesque vitae nunc vel ante facilisis aliquet tincidunt et dolor. Etiam ante augue, laoreet ac elit vitae, tristique vestibulum ipsum. Vivamus faucibus mauris non nunc convallis, interdum interdum enim sodales. Cras ipsum neque, dignissim eu vestibulum et, tincidunt non odio. Morbi non ornare odio. Duis dignissim, sem at vehicula porttitor, libero lorem finibus turpis, nec pharetra neque augue ut eros.

\r\n
\r\n
\r\n \r\n (function() {\r\n angular.module('dataExample', ['components.sticky'])\r\n .controller('exampleController', exampleController);\r\n\r\n exampleController.$inject = ['$scope'];\r\n function exampleController($scope) {\r\n }\r\n })();\r\n \r\n \r\n #content {\r\n height: 600px;\r\n overflow: auto;\r\n }\r\n \r\n
\r\n */\r\n(function () {\r\n angular.module('components.sticky', [])\r\n .component('sticky', {\r\n bindings: {\r\n scrollTarget: '@',\r\n restrict: '@?',\r\n prioritize: '
',\r\n transclude: true,\r\n controller: stickyController\r\n });\r\n\r\n stickyController.$inject = ['$element', '$window', '$scope', '$timeout'];\r\n var id = 0;\r\n function stickyController($element, $window, $scope, $timeout) {\r\n var ctrl = this;\r\n ctrl.$id = id++;\r\n ctrl.$onInit = function () {\r\n ctrl.sticking = false;\r\n ctrl.stickyManager.registerSticky(ctrl.$id, $element, ctrl);\r\n };\r\n ctrl.$postLink = function () {\r\n ctrl._stylesReady = new Promise(ctrl._stylesReadyCheck);\r\n ctrl._stylesReady.then(function () {\r\n ctrl.$sticker = $element.find('>.sticker');\r\n ctrl.$content = ctrl.$sticker.find('> .content');\r\n ctrl.$spacer = $element.find('>.spacer');\r\n ctrl.$spacer.height(ctrl.$content.outerHeight());\r\n ctrl.$scrollTarget = ctrl.scrollTarget ? angular.element(ctrl.scrollTarget) : angular.element($window);\r\n ctrl.$scrollTarget.on('scroll.sticky', ctrl.$$asyncUpdateSticky);\r\n ctrl.$window = angular.element($window).on('resize.sticky', function () {\r\n ctrl.$$updateSticky(true);\r\n });\r\n $timeout(function () {\r\n ctrl.$$updateSticky();\r\n if (ctrl.onInit) {\r\n ctrl.onInit({\r\n sticking: ctrl.sticking,\r\n element: $element\r\n });\r\n }\r\n });\r\n });\r\n };\r\n\r\n ctrl._stylesReadyCheck = function (resolve, reject) {\r\n if ($element.css('display') !== 'inline') {\r\n resolve();\r\n }\r\n else {\r\n $timeout(function () {\r\n ctrl._stylesReadyCheck(resolve, reject);\r\n }, 100);\r\n }\r\n };\r\n\r\n ctrl.$$asyncUpdateSticky = function () {\r\n $scope.$evalAsync(ctrl.$$updateSticky);\r\n };\r\n\r\n ctrl.$$updateSticky = function (forceUpdate) {\r\n ctrl.released = ctrl.$$isReleased();\r\n if (!ctrl.released) {\r\n var newSticky = ctrl.$$isSticky();\r\n if (newSticky !== ctrl.sticking || forceUpdate) {\r\n ctrl.sticking = newSticky;\r\n ctrl.$$updateStyling();\r\n }\r\n }\r\n ctrl.$content.css({\r\n maxHeight: ctrl.sticking ? 'calc(100vh - ' + ((ctrl.scrollTarget ? ctrl.$scrollTarget.offset().top : 0) + (ctrl.stickyManager ? ctrl.stickyManager.getStickPoint(ctrl.$id) : 0)) + 'px)' : ''\r\n });\r\n };\r\n\r\n ctrl.$$isSticky = function () {\r\n if (ctrl.restrict && !Foundation.MediaQuery.atLeast(ctrl.restrict)) {\r\n return false;\r\n }\r\n var offset = $element[0].getBoundingClientRect().top + parseInt($element.css('padding-top')) + parseInt($element.css('margin-top'));\r\n var topOffset = (ctrl.scrollTarget ? ctrl.$scrollTarget.offset().top : 0) + (ctrl.stickyManager ? ctrl.stickyManager.getStickPoint(ctrl.$id) : 0);\r\n return offset <= topOffset;\r\n };\r\n\r\n ctrl.$$isReleased = function () {\r\n if (!ctrl.stickyContainer || (ctrl.restrict && !Foundation.MediaQuery.atLeast(ctrl.restrict))) {\r\n return false;\r\n }\r\n return ctrl.$content.outerHeight() >= ctrl.stickyContainer.getBottom() - (ctrl.stickyManager ? ctrl.stickyManager.getStickPoint(ctrl.$id) : 0);\r\n };\r\n\r\n ctrl.$$updateStyling = function () {\r\n var elementOffset = $element[0].getBoundingClientRect();\r\n ctrl.$sticker.css({\r\n left: ctrl.sticking ? elementOffset.left : '',\r\n width: ctrl.sticking ? elementOffset.width : '',\r\n top: ctrl.sticking ? (ctrl.scrollTarget ? ctrl.$scrollTarget.offset().top : 0) + (ctrl.stickyManager ? ctrl.stickyManager.getStickPoint(ctrl.$id) : 0) : ''\r\n });\r\n var height = ctrl.$content.outerHeight();\r\n ctrl.$spacer.height(height);\r\n };\r\n\r\n ctrl.$onDestroy = function () {\r\n ctrl.$scrollTarget.off('scroll.sticky');\r\n ctrl.$window.off('resize.sticky');\r\n };\r\n }\r\n})();","(function () {\r\n angular.module('app')\r\n .directive('stickyContainer', stickyContainer);\r\n \r\n function stickyContainer() {\r\n var directive = {\r\n restrict: 'A',\r\n require: {\r\n stickyManager: '?^^stickyManager'\r\n },\r\n bindToController: true,\r\n controller: controller,\r\n controllerAs: 'sc'\r\n };\r\n function controller($element, $timeout) {\r\n var ctrl = this;\r\n ctrl.getBottom = function () {\r\n return $element[0].getBoundingClientRect().bottom;\r\n };\r\n\r\n ctrl.scrollToTop = function () {\r\n $timeout(function () {\r\n var offset = $element[0].getBoundingClientRect().top;\r\n if (offset < 0) {\r\n angular.element('html, body').animate({\r\n scrollTop: '-=' + -(offset - (ctrl.stickyManager ? ctrl.stickyManager.getStickPoint(1) : 0))\r\n });\r\n }\r\n });\r\n };\r\n }\r\n controller.$inject = ['$element', '$timeout'];\r\n return directive;\r\n }\r\n})();","(function () {\r\n angular.module('app')\r\n .directive('stickyManager', stickyManager);\r\n\r\n stickyManager.$inject = [];\r\n function stickyManager() {\r\n var directive = {\r\n restrict: 'A',\r\n controller: controller\r\n };\r\n return directive;\r\n function controller() {\r\n var ctrl = this;\r\n ctrl.$onInit = function () {\r\n ctrl.stickies = [];\r\n };\r\n\r\n ctrl.stickPoint = 0;\r\n ctrl.getStickPoint = function (id) {\r\n var offset = 0;\r\n for (var i = 0; i < ctrl.stickies.length; i++) {\r\n var target = ctrl.stickies[i];\r\n if (target.id === id) {\r\n return offset;\r\n }\r\n else if (!target.controller.released && target.controller.sticking) {\r\n offset += target.element.height();\r\n }\r\n }\r\n return offset;\r\n };\r\n\r\n ctrl.registerSticky = function (id, element, controller) {\r\n var registration = {\r\n id: id,\r\n element: element,\r\n controller: controller\r\n };\r\n if (controller.prioritize) {\r\n ctrl.stickies.unshift(registration);\r\n }\r\n else {\r\n ctrl.stickies.push(registration);\r\n }\r\n };\r\n }\r\n }\r\n})();","\r\n(function () {\r\n angular.module('pages.home', [\r\n //'ngCookies'\r\n ])\r\n .controller('homeController', homeController);\r\n\r\n /**\r\n * @ngdoc controller\r\n * @name pages.homeController\r\n * @requires components.pagination\r\n * @description\r\n * Controller used for the blog and blog detail templates.\r\n */\r\n homeController.$inject = ['$scope', '$window'];//, '$cookies'];\r\n function homeController($scope, $window) {//, $cookies) {\r\n var ctrl = this;\r\n var banner = angular.element('.banner');\r\n\r\n var videoBackground = banner.find('.video-background');\r\n if (videoBackground.length) {\r\n videoBackground.YTPlayer({\r\n fitToBackground: true,\r\n videoId: videoBackground.attr('video-id')\r\n })\r\n }\r\n\r\n ctrl.$onInit = function () {\r\n ctrl.$win = angular.element($window).on('resize.home', ctrl.sizeBanner); \r\n }\r\n\r\n ctrl.$onDestroy = function () {\r\n ctrl.$win.off('resize.home');\r\n }\r\n var panels = angular.element('[data-tabs-content=\"home-sections\"] > div');\r\n if (panels.filter('.is-active').length > 1) {\r\n angular.element(panels[0]).removeClass('is-active');\r\n }\r\n else {\r\n var tabControls = angular.element('#home-sections').on('change.zf.tabs', function () {\r\n angular.element(panels[0]).removeClass('is-active');\r\n tabControls.off('change.zf.tabs');\r\n });\r\n }\r\n\r\n var alert = angular.element('.reveal.is-alert');\r\n if (alert.length) {\r\n //var alertTime = parseInt(alert.attr('last-update'));\r\n //var alertViewed = $cookies.get('alert-viewed');\r\n //if (!alertViewed || alertViewed < alertTime) {\r\n alert.foundation('open');\r\n //$cookies.put('alert-viewed', alertTime);\r\n //}\r\n }\r\n }\r\n})();","(function () {\r\n angular.module('pages.master', [\r\n 'app',\r\n 'components.anchor',\r\n 'components.sticky',\r\n 'components.carousel', \r\n 'components.loader',\r\n 'components.pagination',\r\n 'components.query',\r\n 'components.pageModals',\r\n 'pages.home',\r\n 'pages.scrolledContent',\r\n 'pages.tabbedContent',\r\n 'utility',\r\n 'softwareResource',\r\n 'printerResource',\r\n 'searchResource',\r\n 'geoCountryResource',\r\n 'ngResource',\r\n 'feedResource',\r\n 'relatedContentResource'\r\n ])\r\n .config(config)\r\n .run(run)\r\n .controller('modalSetController', modalSetController);\r\n \r\n run.$inject = ['$rootScope', '$window', '$timeout','$anchorScroll', '$location', '$compile', '$q'];\r\n function run($rootScope, $window, $timeout, $anchorScroll, $location, $compile, $q) {\r\n $rootScope.ready = true;\r\n var navReadyPromise = $q.defer();\r\n $rootScope.navReady = navReadyPromise.promise;\r\n $anchorScroll.yOffset = 100;\r\n \r\n $rootScope.toggleSearch = function () {\r\n $rootScope.searchOpen = !$rootScope.searchOpen;\r\n };\r\n var body = angular.element('body');\r\n body.css('border-right-width', $window.outerWidth - angular.element('body').width());\r\n var header, mobileNavigation, mainLinks, secondaryLinks, bar, buttonsL1, back, cont, layer2, innerLayers;\r\n $rootScope.toggleDropdown = function (expander) {\r\n header = header || angular.element('.header');\r\n mobileNavigation = header.find('.mobile-navigation');\r\n back = mobileNavigation.find('.back');\r\n cont = mobileNavigation.find('.continue');\r\n layer2 = mobileNavigation.find('.layer-2');\r\n mainLinks = mobileNavigation.find('.main-links .arrow-link');\r\n secondaryLinks = mobileNavigation.find('.secondary-links .arrow-link');\r\n bar = mobileNavigation.find('.bar div');\r\n buttonsL1 = mobileNavigation.find('.layer-1 .mdl-button');\r\n innerLayers = mobileNavigation.find('.inner-layer');\r\n if (expander.open) {\r\n new TimelineLite()\r\n .set(mobileNavigation, { height: 'calc(100vh - ' + header.height() + 'px)' })\r\n .fromTo(mobileNavigation, .5, { x: '-100%' }, { x: '0%' })\r\n .addLabel('navOpen')\r\n .staggerFromTo(mainLinks, .3, { x: '-=100', opacity: 0 }, { x: 0, opacity: 1 }, .1, 'navOpen-=.2')\r\n .fromTo(bar, .3, { width: 0 }, { width: 316 })\r\n .staggerFromTo(secondaryLinks, .3, { x: '-=100', opacity: 0 }, { x: 0, opacity: 1 }, .1)\r\n .staggerFromTo(buttonsL1, .4, { y: '+=50', opacity: 0 }, { y: 0, opacity: 1 }, .1);\r\n }\r\n else {\r\n new TimelineLite()\r\n .fromTo(mobileNavigation, .3, { x: '0%' }, { x: '-100%' })\r\n .set(mobileNavigation, { clearProps: 'all' })\r\n .set(back, { clearProps: 'all' })\r\n .set(cont, { clearProps: 'all' })\r\n .set(layer2, { clearProps: 'all' })\r\n .set(mainLinks, { clearProps: 'all' })\r\n .set(secondaryLinks, { clearProps: 'all' })\r\n .set(bar, { clearProps: 'all' })\r\n .set(buttonsL1, { clearProps: 'all' });\r\n }\r\n };\r\n var childReveal;\r\n $rootScope.showChildren = function ($event, url, index) {\r\n $rootScope.targetUrl = url;\r\n var aboveLinks = angular.element(mainLinks.filter(function (i) {\r\n return i < index;\r\n }).get().reverse());\r\n var target = angular.element(mainLinks[index]);\r\n var belowLinks = mainLinks.filter(function (i) {\r\n return i > index;\r\n });\r\n cont.html(target.html());\r\n var targetOffset = target[0].getBoundingClientRect();\r\n var contOffset = cont[0].getBoundingClientRect();\r\n var curLayer = angular.element(innerLayers[index]);\r\n childReveal = new TimelineLite({paused: true, onReverseComplete:$rootScope.reverseComplete})\r\n .set(cont, { position: 'absolute', top: 16, right: 16, autoAlpha: 1, y: targetOffset.top - contOffset.top + 1, width: targetOffset.width })\r\n .set(target, { autoAlpha: 0 })\r\n .addLabel('panelTransition')\r\n .staggerTo(aboveLinks, .3, { x: '-=100', autoAlpha: 0 }, .1)\r\n .staggerTo(belowLinks, .3, { x: '-=100', autoAlpha: 0 }, .1, 'panelTransition')\r\n .to(cont, .4, { y: 0, width: contOffset.width }, 'panelTransition')\r\n .to(bar, .3, { delay: -.3, width: 0, x: -316 })\r\n .staggerTo(secondaryLinks, .3, { x: '-=100', autoAlpha: 0 }, .1)\r\n .staggerTo(buttonsL1, .4, { y: '-=50', autoAlpha: 0 }, .1)\r\n .fromTo(back, .3, { rotationX: 90 }, { autoAlpha: 1, rotationX: 0 })\r\n .set(curLayer, { autoAlpha: 1, zIndex: 1 })\r\n .set(layer2, { x: '-100%' }, 'panelTransition');\r\n\r\n var ctaLinks = curLayer.find('.cta-links a');\r\n if (ctaLinks.length) {\r\n childReveal.staggerFromTo(ctaLinks, .3, { autoAlpha: 0, x: '-=70', y: '-=80' }, { autoAlpha: 1, x: 0, y: 0 }, .05);\r\n }\r\n var barredLinks = curLayer.find('.barred-links li');\r\n if (barredLinks.length) {\r\n var animateLeft = true;\r\n for (var i = 0; i < barredLinks.length; i++) {\r\n var link = angular.element(barredLinks[i]);\r\n var bars = link.find('div');\r\n childReveal\r\n .addLabel(`barsReveal${i}`)\r\n .set(bars[0], { justifyContent: animateLeft ? 'flex-end' : 'flex-start' })\r\n .to(angular.element(bars[0]).find('span'), .3, { width: '100%' })\r\n .fromTo(link.find('a'), .3, { autoAlpha: 0, scale: .5 }, { autoAlpha: 1, scale: 1 });\r\n animateLeft = !animateLeft;\r\n if (bars.length > 1) {\r\n childReveal\r\n .set(bars[1], { justifyContent: animateLeft ? 'flex-end' : 'flex-start' })\r\n .to(angular.element(bars[1]).find('span'), .3, { width: '100%' }, `barsReveal${i}`);\r\n animateLeft = !animateLeft;\r\n }\r\n }\r\n }\r\n var subLinks = curLayer.find('.sub-links > li');\r\n animateLeft = true;\r\n for (i = 0; i < subLinks.length; i++) {\r\n link = angular.element(subLinks[i]);\r\n var innerBar = link.find('.inner-bar');\r\n if (innerBar.length) {\r\n childReveal\r\n .set(innerBar, { justifyContent: animateLeft ? 'flex-end' : 'flex-start' })\r\n .fromTo(innerBar.find('span'), .3, { width: 0 }, { width: '100%' });\r\n animateLeft = !animateLeft;\r\n }\r\n childReveal\r\n .staggerFromTo(link.find('a'), .3, { y: '+=100', autoAlpha: 0 }, { y: 0, autoAlpha: 1 }, .1);\r\n }\r\n\r\n var additionalLinks = curLayer.find('.additional-links a');\r\n if (additionalLinks.length) {\r\n for (i = 0; i < additionalLinks.length; i++) {\r\n link = angular.element(additionalLinks[i]);\r\n var even = i % 2 === 0;\r\n childReveal\r\n .fromTo(link, .3, { x: even ? '-=100' : '+=100', delay: even ? 0 : -.3, autoAlpha: 0 }, { x: 0, autoAlpha: 1 });\r\n }\r\n }\r\n childReveal.play();\r\n };\r\n var scroller = angular.element('html,body');\r\n var accordions = angular.element('.accordion').on('down.zf.accordion', function (event) {\r\n header = header || angular.element('.header');\r\n event.stopPropagation();\r\n var target = angular.element(event.currentTarget).find('> .is-active');\r\n var shift = target[0].getBoundingClientRect().top - (header ? header.height() : 0);\r\n if (shift < 0) {\r\n scroller.animate({\r\n scrollTop: '+=' + shift\r\n }, 250);\r\n }\r\n });\r\n\r\n $rootScope.back = function () {\r\n childReveal.stop().reverse();\r\n };\r\n\r\n $rootScope.reverseComplete = function () {\r\n var cleanup = new TimelineLite()\r\n .set(back, { clearProps: 'all' })\r\n .set(cont, { clearProps: 'all' })\r\n .set(layer2, { clearProps: 'all' })\r\n .set(mainLinks, { clearProps: 'all' })\r\n .set(secondaryLinks, { clearProps: 'all' })\r\n .set(bar, { clearProps: 'all' })\r\n .set(buttonsL1, { clearProps: 'all' })\r\n .set(mainLinks, { x: 0, opacity: 1 })\r\n .set(secondaryLinks, { x: 0, opacity: 1 })\r\n .set(bar, { width: 316 })\r\n .set(buttonsL1, { y: 0, opacity: 1 });\r\n for (var i = 0; i < innerLayers.length; i++) {\r\n var curLayer = angular.element(innerLayers[i]);\r\n cleanup.set(curLayer, { autoAlpha: 0, zIndex: 0 });\r\n } \r\n };\r\n\r\n $rootScope.switchLanguage = function (url, expander) {\r\n if (url) {\r\n //removed for language subdirectories\r\n //if (location.origin + '/' === url) {\r\n // if (expander) {\r\n // expander.toggle();\r\n // }\r\n //}\r\n //else {\r\n location = url;\r\n //}\r\n }\r\n };\r\n\r\n $timeout(function () {\r\n var datepickers = $('.datepickerfield');\r\n if (datepickers.datepicker) {\r\n datepickers.datepicker({\r\n dateFormat: 'mm/dd/y',\r\n onClose: function (date, instance) {\r\n instance.input.valid();\r\n }\r\n });\r\n }\r\n\r\n $anchorScroll();\r\n });\r\n\r\n //Forces components that bind to \"params\" to update when it's modified.\r\n $rootScope.params = {};\r\n $rootScope.$watch('params', function (newVal) {\r\n if (newVal) {\r\n $rootScope.params = angular.copy($rootScope.params);\r\n }\r\n }, true);\r\n var searchExpander;\r\n\r\n $rootScope.searchData = {};\r\n\r\n $rootScope.registerSearchExpander = function (expander) {\r\n searchExpander = expander;\r\n };\r\n\r\n $rootScope.search = function ($event) {\r\n console.log(searchExpander);\r\n if (searchExpander && !searchExpander.open) {\r\n var input = angular.element($event.target).find('input');\r\n input.focus();\r\n if (!input.val()) {\r\n $event.preventDefault();\r\n }\r\n }\r\n else {\r\n $event.preventDefault();\r\n }\r\n };\r\n var expanderFix, gridContainer;\r\n var expanded = false;\r\n var expandTimeout;\r\n $rootScope.expanderFix = function () {\r\n header = header || angular.element('.header');\r\n $timeout.cancel(expandTimeout);\r\n if (!expanderFix) {\r\n expanderFix = header.find('.expander-fix');\r\n gridContainer = header.find('.grid-container');\r\n }\r\n expanded = !expanded;\r\n if (expanded) {\r\n expanderFix.width((header.width() - gridContainer.width()) / 2);\r\n }\r\n else {\r\n expandTimeout = $timeout(function () {\r\n expanderFix.width(0);\r\n }, 400);\r\n }\r\n };\r\n\r\n $rootScope.reinitializeTabs = function (element) {\r\n tabs = element.find('.tabs');\r\n new Foundation.Tabs(tabs);\r\n };\r\n\r\n $rootScope.openChat = function () {\r\n var target = angular.element('.zopim[data-test-id=\"ChatWidgetButton\"] iframe');\r\n if (target.length) {\r\n target.contents().find('.meshim_widget_components_ChatButton').click();\r\n }\r\n };\r\n var signupParams = \"GetFreeEditionPKC=true&screen=signUp&signupemail=\";\r\n var signupParamsFreeTrial = \"GetFreeEditionPKC=false&screen=signUp&signupemail=\";\r\n var params = $location.search();\r\n var trackData = params['TrackData'] || params['trackData'] || params['trackdata'];\r\n if (trackData) {\r\n trackData = encodeURIComponent(trackData);\r\n }\r\n $rootScope.requestFreeTrial = function ($event, email, url) {\r\n $event.preventDefault();\r\n if (!url) {\r\n url = \"https://portal.seagullscientific.com/\";\r\n }\r\n var target = url + \"?\" + signupParamsFreeTrial; //ASH 3/20/20: removed '+ email'\r\n if (trackData) {\r\n target += '&TrackData=' + trackData;\r\n }\r\n location = target;\r\n };\r\n\r\n $rootScope.addEmail = function($event, email) {\r\n $event.preventDefault();\r\n var target = angular.element($event.target).attr('href');\r\n target += (target.indexOf(\"?\") > -1 ? \"&\" : \"?\") + signupParams + email;\r\n if (trackData) {\r\n target += '&TrackData=' + trackData;\r\n }\r\n location = target;\r\n };\r\n\r\n $rootScope.prepReveal = function () {\r\n console.log('Header Ready: ' + (new Date().getTime() - $window.startTime));\r\n $window.navReady = true;\r\n //dynamically loads header dropdown elements\r\n function loadHeaderElements() {\r\n\r\n if (!Foundation.MediaQuery.atLeast('xlarge')) {\r\n var mobileNav = angular.element('.mobile-navigation').html($window.header.mobileNav);\r\n $compile(mobileNav.contents())($rootScope);\r\n win.off('changed.zf.mediaquery.header');\r\n }\r\n }\r\n var win = angular.element($window).on('changed.zf.mediaquery.header', loadHeaderElements);\r\n $timeout(function () {\r\n loadHeaderElements();\r\n navReadyPromise.resolve();\r\n });\r\n\r\n };\r\n\r\n $rootScope.gridStickyReady = function (element) {\r\n element.foundation();\r\n };\r\n }\r\n\r\n config.$inject = ['$locationProvider'];\r\n function config($locationProvider) {\r\n $locationProvider.html5Mode({\r\n enabled: true,\r\n requireBase: false,\r\n rewriteLinks: false\r\n });\r\n }\r\n\r\n function modalSetController() {\r\n\r\n }\r\n})();\r\n\r\n","(function () {\r\n angular.module('pages.scrolledContent', [])\r\n .controller('scrolledContentController', scrolledContentController);\r\n\r\n /**\r\n * @ngdoc controller\r\n * @name pages.scrolledContentController\r\n * @description\r\n * Controller used for scrolled content doc type.\r\n */\r\n scrolledContentController.$inject = ['$scope', '$location', '$window'];\r\n function scrolledContentController($scope, $location, $window) {\r\n $scope.checkHash = function (anchor) {\r\n fromUpdate = false;\r\n if (anchor.target === $location.hash()) {\r\n anchor.$$scrollToTarget(true);\r\n }\r\n }\r\n var fromUpdate = false;\r\n $scope.updateHash = function (anchor) {\r\n fromUpdate = true;\r\n if (anchor) {\r\n $location.hash(anchor.target).replace();\r\n }\r\n else {\r\n if (window.history) {\r\n history.replaceState('', document.title, $window.location.pathname);\r\n }\r\n }\r\n }\r\n\r\n var scrollLinks = angular.element('a[href*=\"' + $location.path() + '#\"]').on('click.scrolledContent', function ($event) {\r\n var target = angular.element($event.currentTarget).attr('href').split('#')[1];\r\n angular.element('anchor[target=\"' + target + '\"]').click();\r\n });\r\n }\r\n})();","(function () {\r\n angular.module('pages.tabbedContent', [])\r\n .controller('tabbedContentController', tabbedContentController);\r\n\r\n /**\r\n * @ngdoc controller\r\n * @name pages.scrolledContentController\r\n * @description\r\n * Controller used for scrolled content doc type.\r\n */\r\n tabbedContentController.$inject = ['$scope', '$location'];\r\n function tabbedContentController($scope, $location) {\r\n var tabs;\r\n $scope.reinitializeTabs = function () {\r\n tabs = angular.element('#section-tabs');\r\n new Foundation.Tabs(tabs);\r\n }\r\n\r\n var tabContent = angular.element('[data-tabs-content=\"section-tabs\"]');\r\n var header = angular.element('.header');\r\n\r\n $scope.backToTop = function ($event) {\r\n var shift = tabContent.offset().top - header.height() - tabs.height();\r\n if (shift < 0) {\r\n angular.element('#content').animate({\r\n scrollTop: '+=' + shift\r\n }, 300);\r\n }\r\n }\r\n }\r\n})();","/*\r\n * Jack Witt @ Bonsai Media Co\r\n * 1/17/19\r\n * A js file to handle transitions between pages while loading\r\n */\r\n\r\n$(function () { \r\n //Whenever a new page is loaded, show animation and store link \r\n var wrapper = $(\".page-transition-wrapper\");\r\n var upper = $(\".animate-down\");\r\n var lower = $(\".animate-up\");\r\n var icon = $(\".center-animated-icon\");\r\n \r\n //full transition animation timeline\r\n var lockAnimation = false;\r\n window.revealPromise\r\n .then(function () {\r\n var downloads = $('[driver-path]');\r\n if (downloads.length) {\r\n lockAnimation = true;\r\n for (var i = 0; i < downloads.length; i++) {\r\n var download = $(downloads[i]).attr('driver-path').trim();\r\n setTimeout(function () {\r\n window.location.assign(download);\r\n }.bind({ download: download }), 100);\r\n }\r\n }\r\n });\r\n //var wrapperAnimation = new TimelineLite({\r\n // paused: true,\r\n // onComplete: function () { \r\n // //bannerSVG(); //callback to banner svg anim\r\n // var downloads = $('[driver-path]');\r\n // if (downloads.length) {\r\n // lockAnimation = true;\r\n // for (var i = 0; i < downloads.length; i++) {\r\n // var download = $(downloads[i]).attr('driver-path').trim();\r\n // setTimeout(function () {\r\n // window.location.assign(download);\r\n // }.bind({ download: download }), 100);\r\n // }\r\n // }\r\n \r\n // }\r\n //});\r\n var rotatingText = $('.banner .rotating-text');\r\n window.fontReady(\"Open Sans\")\r\n .then(function () {\r\n for (i = 0; i < rotatingText.length; i++) {\r\n var rotator = $(rotatingText[i]);\r\n var containerTagName = rotator.closest('h1,h2,h3,h4,h5,h6,li,p').prop('tagName');\r\n var banner = rotator.closest('.banner');\r\n var containerTest = $('<' + containerTagName + '>g');\r\n containerTest.css('display', 'inline-block');\r\n var text = rotator.find('.r-text');\r\n banner.find('.rte').append(containerTest);\r\n var height = containerTest.height();\r\n var fontSize = parseInt(containerTest.css('fontSize'));\r\n //rotatingText.css('top', (height - fontSize) / 2);\r\n text.attr('y', height - 15);\r\n rotator.attr('viewport', '0 0 10 ' + height);\r\n rotator.height(height);\r\n text.css('fill', containerTest.css('color'));\r\n var masks = rotator.find('mask rect');\r\n var scanner = rotator.find('.scanner');\r\n var mask = $(masks[0]);\r\n var maxWidth = 0;\r\n for (var j = 0; j < text.length; j++) {\r\n var t = $(text[j]);\r\n containerTest.text(t.text());\r\n var tWidth = containerTest.width();\r\n maxWidth = Math.max(tWidth, maxWidth);\r\n }\r\n var tl = new TimelineMax({\r\n repeat: -1,\r\n repeatDelay: 1.5\r\n })\r\n .set(rotator, { width: maxWidth });\r\n for (j = 0; j < text.length; j++) {\r\n mask = $(masks[j]);\r\n var tNext = $(text[j + 1 === masks.length ? 0 : j + 1]);\r\n var next = $(masks[j + 1 === masks.length ? 0 : j + 1]);\r\n containerTest.text(tNext.text());\r\n var label = 'animation-' + j;\r\n tl\r\n .addLabel(label, j === 0 ? '+=0' : '+=1.5')\r\n .fromTo(scanner, .7, { x: 0 }, { x: maxWidth + 6 }, label)\r\n .fromTo(mask, .7, { attr: { x: 0 } }, { attr: { x: maxWidth } }, label)\r\n .fromTo(next, .7, { attr: { x: -10000 } }, { attr: { x: maxWidth - 10000 } }, label)\r\n .set(mask, { attr: { x: -10000 } });\r\n }\r\n tl.progress(1);\r\n\r\n containerTest.remove();\r\n }\r\n });\r\n window.onbeforeunload = function () {\r\n if (!lockAnimation && window.wrapperAnimation) {\r\n window.wrapperAnimation.reverse();\r\n }\r\n lockAnimation = false;\r\n };\r\n}); ","$(function () {\r\n console.log('Bootstrap: ' + + (new Date().getTime() - window.startTime));\r\n angular.bootstrap(document, ['pages.master']);\r\n});"]}