{"version":3,"file":"scripts/main.min.js","mappings":"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","sources":["webpack:///./scripts/shared/shifter.js","webpack:///./angular/components/umbracoForms/umbraco-forms-validation.js","webpack:///./scripts/greensock/utils/VelocityTracker.js","webpack:///./scripts/greensock/InertiaPlugin.js","webpack:///./angular/components/carousel/carousel.component.js","webpack:///./scripts/widgets/products-by-category.js","webpack:///./scripts/shared/revealer.js","webpack:///./scripts/shared/zoomer.js","webpack:///./scripts/widgets/brands.js","webpack:///./scripts/widgets/services.js","webpack:///./scripts/shared/header.js","webpack:///./scripts/shared/searchclearer.js","webpack:///./angular/app.js","webpack:///./app_plugins/VideoEmbedder/js/wrapper.js","webpack:///./angular/components/utility/wrapper.js","webpack:///./angular/components/utility/join.filter.js","webpack:///./angular/components/utility/trust-as-markup.filter.js","webpack:///./angular/components/utility/to-num-array.js","webpack:///./angular/components/utility/helper.factory.js","webpack:///./angular/components/utility/image-source.directive.js","webpack:///./angular/components/utility/query.component.js","webpack:///./angular/components/utility/pagination.component.js","webpack:///./angular/components/utility/lazy-element.component.js","webpack:///./angular/components/utility/compile.component.js","webpack:///./angular/components/utility/get-crop-url.filter.js","webpack:///./angular/components/utility/strip-paragraphs.filter.js","webpack:///./angular/components/utility/fit-text.directive.js","webpack:///./angular/components/utility/attrs.directive.js","webpack:///./angular/components/utility/arrayFilter.filter.js","webpack:///./angular/components/reviews/reviews.controller.js","webpack:///./angular/components/stars/stars.component.js","webpack:///./app_plugins/LazyModals/data-open.directive.js","webpack:///./app_plugins/LazyModals/modal-loader.directive.js","webpack:///./app_plugins/VideoEmbedder/js/video-enable-js.filter.js","webpack:///./app_plugins/VideoEmbedder/js/video-manager.directive.js","webpack:///./app_plugins/VideoEmbedder/js/video-providers.factory.js","webpack:///./angular/components/sticky/wrapper.js","webpack:///./angular/components/sticky/sticky-manager.directive.js","webpack:///./angular/components/sticky/sticky-container.directive.js","webpack:///./angular/components/sticky/sticky.component.js","webpack:///./angular/components/carousel/wrapper.js","webpack:///./angular/components/carousel/carousel-nav.component.js","webpack:///./angular/components/carousel/carousel-sync.component.js","webpack:///./angular/components/carousel/carousel-resource.factory.js","webpack:///./angular/components/carousel/carousel.controller.js","webpack:///./angular/components/multiCheckbox/multi-checkbox.component.js","webpack:///./angular/components/umbracoForms/wrapper.js","webpack:///./angular/components/umbracoForms/umbraco-forms.controller.js","webpack:///./app_plugins/Feed/feedResource.factory.js","webpack:///./app_plugins/Feed/feedGrid.controller.js","webpack:///./app_plugins/Search/searchResource.factory.js","webpack:///./app_plugins/Search/search.controller.js","webpack:///./angular/components/locationSearch/location-search.component.js","webpack:///./angular/components/checkboxDropdown/checkbox-dropdown.component.js","webpack:///./angular/components/googleMap/google-map-component.js","webpack:///./scripts/widgets/dealer-search.controller.js","webpack:///./angular/components/formFields/product-selector.component.js","webpack:///./angular/components/formFields/distributor-selector.component.js","webpack:///./app_plugins/Products/productResource.factory.js","webpack:///./scripts/main.js"],"sourcesContent":["\r\nexport class Shifter {\r\n constructor(element) {\r\n this.element = typeof (element) === 'string' ? document.querySelector(element) : element;\r\n this.container = this.element.querySelector('.shift-block');\r\n this.level = 0;\r\n this.activeLayers = [];\r\n \r\n }\r\n\r\n init() {\r\n this.testNode = this.element.querySelector('.shifter-group:nth-child(2)');\r\n this.backLink = this.element.querySelector('.back');\r\n this.backLink.addEventListener('click', this.back.bind(this));\r\n this.toStartLink = this.element.querySelector('.back-to-start');\r\n this.toStartLink.addEventListener('click', this.backToStart.bind(this));\r\n Array.from(this.element.querySelectorAll('.has-children')).forEach(link => {\r\n link.addEventListener('click', function(event) {\r\n event.preventDefault();\r\n this.loadNext(link.getAttribute(\"group-id\"));\r\n }.bind(this))\r\n })\r\n }\r\n\r\n back(event) {\r\n event.preventDefault();\r\n this.backToLevel(this.level - 1);\r\n }\r\n\r\n backToStart(event) {\r\n event.preventDefault();\r\n this.backToLevel(0);\r\n }\r\n\r\n backToLevel(level) {\r\n if (!this._locked && level >= 0 && level < this.level) {\r\n this.animate(level);\r\n }\r\n }\r\n\r\n loadNext(id) {\r\n if (!this._locked) {\r\n var target = this.element.querySelector('#' + id);\r\n if (target) {\r\n target.classList.add('active');\r\n this.activeLayers.push(target);\r\n this.animate(this.level + 1, true)\r\n }\r\n }\r\n }\r\n\r\n animate(level, isForward) {\r\n if (this.testNode) {\r\n var styles = getComputedStyle(this.testNode);\r\n this.testNode.style.display = 'block';\r\n this.offset = parseInt(styles.marginLeft) + this.testNode.clientWidth;\r\n this.testNode.style.display = '';\r\n }\r\n this._locked = true;\r\n var self = this;\r\n var tl = gsap.timeline({\r\n onComplete: () => {\r\n self._locked = false;\r\n while (self.activeLayers.length > this.level) {\r\n self.activeLayers.pop().classList.remove('active');\r\n }\r\n }\r\n })\r\n .addLabel('start');\r\n if (!isForward) {\r\n if (level === 0) {\r\n tl\r\n .to(this.backLink, .3, { x: -20, autoAlpha: 0, pointerEvents: 'none' });\r\n }\r\n if (level < 2) {\r\n tl\r\n .to(this.toStartLink, .3, { x: 20, autoAlpha: 0, pointerEvents: 'none' });\r\n }\r\n }\r\n tl\r\n .to(this.container, {\r\n duration: .6,\r\n x: -level * this.offset,\r\n }, 'start');\r\n if (isForward) {\r\n if (this.level === 0) {\r\n tl\r\n .fromTo(this.backLink, .3, { x: -20 }, { x: 0, autoAlpha: 1, pointerEvents: 'initial' }, '-=.1')\r\n }\r\n if (level > 1 && this.level < 2) {\r\n tl\r\n .fromTo(this.toStartLink, .3, { x: 20 }, { x: 0, autoAlpha: 1, pointerEvents: 'initial' }, '-=.1')\r\n }\r\n }\r\n this.level = level;\r\n }\r\n\r\n reset() {\r\n this.level = 0;\r\n this.activeLayers = [];\r\n gsap.set([this.backLink, this.toStartLink, this.container], { clearProps: 'all' });\r\n }\r\n}","export default function UmbracoFormsValidation() {\r\n // polyfill for matches and closest\r\n if (!Element.prototype.matches) Element.prototype.matches = Element.prototype.msMatchesSelector;\r\n if (!Element.prototype.closest) Element.prototype.closest = function (selector) {\r\n var el = this;\r\n while (el) {\r\n if (el.matches(selector)) {\r\n return el;\r\n }\r\n el = el.parentElement;\r\n }\r\n };\r\n\r\n\r\n\r\n //execute init() on document ready\r\n if (document.readyState === \"complete\" || (document.readyState !== \"loading\" && !document.documentElement.doScroll)) {\r\n listen();\r\n } else {\r\n document.addEventListener(\"DOMContentLoaded\", listen);\r\n }\r\n\r\n function listen() {\r\n if (typeof umbracoFormsCollection === \"undefined\") {\r\n //this will occur if this js file is loaded before the inline scripts, in which case\r\n //we'll listen for the inline scripts to execute a custom event.\r\n document.addEventListener(\"umbracoFormLoaded\", init);\r\n }\r\n else {\r\n initCollection(umbracoFormsCollection);\r\n }\r\n }\r\n\r\n function initCollection(formsCollection) {\r\n configureUmbracoFormsValidation();\r\n\r\n for (var i = 0; i < formsCollection.length; i++) {\r\n init({ form: formsCollection[i] });\r\n }\r\n }\r\n\r\n function init(e) {\r\n var formItem = JSON.parse(decodeURI(e.form));\r\n\r\n var forms = document.querySelectorAll('.umbraco-forms-form');\r\n for (var i = 0; i < forms.length; i++) {\r\n var form = forms[i];\r\n\r\n dependencyCheck(form);\r\n\r\n var page = form.querySelector('.umbraco-forms-page');\r\n var conditions = new UmbracoFormsConditions(page,\r\n formItem.fieldSetConditions,\r\n formItem.fieldConditions,\r\n formItem.recordValues);\r\n conditions.watch();\r\n }\r\n }\r\n\r\n /** Configures the jquery validation for Umbraco forms */\r\n function configureUmbracoFormsValidation() {\r\n\r\n if (window.aspnetValidation !== undefined) {\r\n // Asp-net validation setup:\r\n\r\n var validationService = new aspnetValidation.ValidationService();\r\n\r\n // TODO: equivilant to this:\r\n /*\r\n $.validator.setDefaults({\r\n ignore: \":hidden\"\r\n });\r\n */\r\n\r\n function required(value, element, params) {\r\n // Handle single and multiple checkboxes:\r\n if (element.type.toLowerCase() === \"checkbox\" || element.type.toLowerCase() === \"radio\") {\r\n var allCheckboxesOfThisName = element.form.querySelectorAll(\"input[name='\" + element.name + \"']\");\r\n for (var i = 0; i < allCheckboxesOfThisName.length; i++) {\r\n if (allCheckboxesOfThisName[i].checked === true) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n return Boolean(value);\r\n }\r\n validationService.addProvider(\"requiredcb\", required);\r\n validationService.addProvider(\"required\", required);// this will go instead of the build-in required.\r\n\r\n\r\n function umbracoforms_regex(value, element, params) {\r\n if (!value || !params.pattern) {\r\n return true;\r\n }\r\n\r\n var r = new RegExp(params.pattern);\r\n return r.test(value);\r\n }\r\n validationService.addProvider(\"umbracoforms_regex\", umbracoforms_regex);\r\n\r\n function wrapProviderWithIgnorerBehaviour(provider) {\r\n return function (value, element, params) {\r\n\r\n // If field is hidden we ignorer the validation.\r\n if (element.offsetParent === null) {\r\n return true;\r\n }\r\n\r\n return provider(value, element, params);\r\n }\r\n }\r\n\r\n // we can only incept with default validator if we do it after bootstrapping but before window load event triggers validationservice.\r\n window.addEventListener('load', function () {\r\n\r\n // Wrap all providers with ignorer hidden fields logic:\r\n for (var key in validationService.providers) {\r\n validationService.providers[key] = wrapProviderWithIgnorerBehaviour(validationService.providers[key]);\r\n }\r\n });\r\n\r\n // bootstrap validation service.\r\n validationService.bootstrap();\r\n\r\n // Without jquery validation, the previous page submit button click isn't sent with it's name,\r\n // so can't be used server-side to determine whether to go forward or back.\r\n // Hence we'll use an alternate method, setting a hidden field that's also used in the check.\r\n var handlePreviousClicked = function () {\r\n this.form.elements[\"PreviousClicked\"].value = \"clicked\";\r\n };\r\n var previousButtonElements = document.getElementsByClassName(\"prev cancel\");\r\n for (var i = 0; i < previousButtonElements.length; i++) {\r\n previousButtonElements[i].form.elements[\"PreviousClicked\"].value = \"\";\r\n previousButtonElements[i].addEventListener('click', handlePreviousClicked, false);\r\n }\r\n\r\n } else if (typeof jQuery === \"function\" && $.validator) {\r\n //Jquery validation setup\r\n\r\n $.validator.setDefaults({\r\n ignore: \"\"\r\n });\r\n\r\n $.validator.unobtrusive.adapters.addBool(\"requiredcb\", \"required\");\r\n\r\n\r\n $.validator.addMethod(\"umbracoforms_regex\", function (value, element) {\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 //var submitInputs = document.querySelectorAll(\".umbraco-forms-form input[type=submit]:not(.cancel)\");\r\n //for (var i = 0; i < submitInputs.length; i++) {\r\n // var input = submitInputs[i];\r\n // input.addEventListener(\"click\", function (evt) {\r\n // evt.preventDefault();\r\n // var frm = $(this).closest(\"form\");\r\n // frm.validate();\r\n // if (frm.valid()) {\r\n // frm.submit();\r\n // this.setAttribute(\"disabled\", \"disabled\");\r\n\r\n // }\r\n // }.bind(input));\r\n //}\r\n }\r\n\r\n }\r\n\r\n /**\r\n * method to determine if Umbraco Forms can run and has the required dependencies loaded\r\n * @param {Form Element} formEl the element of the form\r\n */\r\n function dependencyCheck(formEl) {\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 and We do not need to perform this check here.\r\n // Similarly we need a check for if running in a rich text editor.\r\n var isBackOffice = function () {\r\n return typeof Umbraco !== \"undefined\" && typeof Umbraco.Sys !== \"undefined\";\r\n };\r\n var isBackOfficeRte = function () {\r\n return document.body.id === \"tinymce\";\r\n };\r\n if (isBackOffice() || isBackOfficeRte()) {\r\n return;\r\n }\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 var hasValidationFramework = false;\r\n\r\n if (window.jQuery && $ && $.validator !== undefined) {\r\n hasValidationFramework = true;\r\n } else if (window.aspnetValidation !== undefined) {\r\n hasValidationFramework = true;\r\n }\r\n\r\n if (hasValidationFramework === false) {\r\n errorMessage = errorMessage + \"Umbraco Forms requires a validation framework to run, please read documentation for posible options.\";\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 /**\r\n * Class to handle Umbraco Forms conditional statements\r\n * @param {any} form a reference to the form\r\n * @param {any} fieldsetConditions a reference to the fieldset conditions\r\n * @param {any} fieldConditions a reference to the field conditions\r\n * @param {any} values the form values\r\n * @return {Object} reference to the created class\r\n */\r\n function UmbracoFormsConditions(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 self = {};\r\n self.form = form;\r\n self.fieldsetConditions = fieldsetConditions;\r\n self.fieldConditions = fieldConditions;\r\n self.values = values;\r\n self.dataTypes = {};\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, dataTypes) {\r\n\r\n var selectFields = page.querySelectorAll(\"select\");\r\n for (var i = 0; i < selectFields.length; i++) {\r\n var field = selectFields[i];\r\n formValues[field.getAttribute(\"id\")] = field.value ? field.querySelector(\"option[value='\" + field.value.replace(/'/g, \"\\\\'\") + \"']\").innerText : null;\r\n dataTypes[field.getAttribute(\"id\")] = \"select\";\r\n }\r\n\r\n var textareaFields = page.querySelectorAll(\"textarea\");\r\n for (var i = 0; i < textareaFields.length; i++) {\r\n var field = textareaFields[i];\r\n formValues[field.getAttribute(\"id\")] = field.value;\r\n dataTypes[field.getAttribute(\"id\")] = \"textarea\";\r\n }\r\n\r\n // clear out all saved checkbox values to we can safely append\r\n var checkboxFields = page.querySelectorAll(\"input[type=checkbox]\");\r\n for (var i = 0; i < checkboxFields.length; i++) {\r\n var field = checkboxFields[i];\r\n formValues[field.getAttribute(\"name\")] = null;\r\n dataTypes[field.getAttribute(\"id\")] = \"checkbox\";\r\n }\r\n\r\n //$page.find(\"input\").each(function () {\r\n var inputFields = page.querySelectorAll(\"input\");\r\n for (var i = 0; i < inputFields.length; i++) {\r\n var field = inputFields[i];\r\n\r\n if (field.getAttribute('type') === \"text\" || field.getAttribute(\"type\") === \"hidden\") {\r\n formValues[field.getAttribute(\"id\")] = field.value;\r\n dataTypes[field.getAttribute(\"id\")] = \"text\";\r\n }\r\n\r\n if (field.getAttribute('type') === \"radio\") {\r\n if (field.matches(':checked')) {\r\n formValues[field.getAttribute(\"name\")] = field.value;\r\n dataTypes[field.getAttribute(\"id\")] = \"radio\";\r\n }\r\n }\r\n\r\n if (field.getAttribute(\"type\") === \"checkbox\") {\r\n if (field.getAttribute(\"id\") !== field.getAttribute(\"name\")) {\r\n if (field.matches(\":checked\")) {\r\n if (formValues[field.getAttribute(\"name\")] === null) {\r\n formValues[field.getAttribute(\"name\")] = field.value;\r\n }\r\n else {\r\n formValues[field.getAttribute(\"name\")] += \";;\" + field.value;\r\n }\r\n }\r\n }\r\n else {\r\n formValues[field.getAttribute(\"name\")] = (field.matches(\":checked\") ? \"true\" : \"false\");\r\n }\r\n }\r\n }\r\n }\r\n\r\n /* Public api */\r\n\r\n self.operators = {\r\n Is: function (value, expected, dataType) {\r\n if ((value || \"\") === expected) {\r\n return true;\r\n }\r\n if (value == null) {\r\n return (expected == value);\r\n }\r\n\r\n if (dataType === \"checkbox\") {\r\n if (expected.toUpperCase() === \"TRUE\" || expected.toUpperCase() === \"ON\") {\r\n expected = \"true\"\r\n } else if (expected.toUpperCase() === \"FALSE\" || expected.toUpperCase() === \"OFF\") {\r\n expected = \"false\"\r\n }\r\n }\r\n\r\n var values = value.split(';;');\r\n var matchingExpected = values.filter(\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, dataType) {\r\n if (value == null) {\r\n return (unexpected != value);\r\n }\r\n var values = value.split(';;');\r\n var matchingUnexpected = values.filter(\r\n function (o) {\r\n return o === unexpected;\r\n });\r\n\r\n if (dataType === \"checkbox\") {\r\n if (unexpected.toUpperCase() === \"TRUE\" || unexpected.toUpperCase() === \"ON\") {\r\n unexpected = \"true\"\r\n } else if (unexpected.toUpperCase() === \"FALSE\" || unexpected.toUpperCase() === \"OFF\") {\r\n unexpected = \"false\"\r\n }\r\n }\r\n return (value || \"\") !== unexpected && matchingUnexpected.length === 0;\r\n },\r\n GreaterThen: function (value, limit, dataType) {\r\n return parseInt(value) > parseInt(limit);\r\n },\r\n LessThen: function (value, limit, dataType) {\r\n return parseInt(value) < parseInt(limit);\r\n },\r\n StartsWith: function (value, criteria, dataType) {\r\n return value && value.indexOf(criteria) === 0;\r\n },\r\n EndsWith: function (value, criteria, dataType) {\r\n return value && value.indexOf(criteria) === value.length - criteria.length;\r\n },\r\n Contains: function (value, criteria, dataType) {\r\n return value && value.indexOf(criteria) > -1;\r\n }\r\n };\r\n\r\n self.watch = function () {\r\n // This is a special case for pikaday\r\n // The only way around to pickup the value, for now, is to \r\n // subscribe to blur events \r\n var datepickerfields = self.form.querySelectorAll('.datepickerfield');\r\n for (var i = 0; i < datepickerfields.length; i++) {\r\n var field = datepickerfields[i];\r\n field.addEventListener('blur', function () {\r\n if (this.value === \"\") {\r\n // Here comes the hack\r\n // Force the hidden datepicker field the datepicker field\r\n var id = this.getAttribute(\"id\");\r\n var hiddenDatePickerField = id.substr(0, id.length - 2);\r\n self.values[hiddenDatePickerField] = \"\";\r\n document.getElementById(hiddenDatePickerField).value = \"\";// sadly we cant use querySelector with current mark-up (would need to prefix IDs)\r\n }\r\n\r\n populateFieldValues(self.form, self.values, self.dataTypes);\r\n //process the conditions\r\n self.run();\r\n }.bind(field));\r\n }\r\n //subscribe to change events\r\n var changeablefields = self.form.querySelectorAll(\"input, textarea, select\");\r\n for (var i = 0; i < changeablefields.length; i++) {\r\n var field = changeablefields[i];\r\n field.addEventListener(\"change\", function () {\r\n populateFieldValues(self.form, self.values, self.dataTypes);\r\n //process the conditions\r\n self.run();\r\n }.bind(field));\r\n }\r\n\r\n //register all values from the current fields on the page\r\n populateFieldValues(self.form, self.values, self.dataTypes);\r\n\r\n //the initial run-through of all the conditions\r\n self.run();\r\n };\r\n\r\n self.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 = self.values[rule.field],\r\n dataType = self.dataTypes[rule.field],\r\n func = self.operators[rule.operator],\r\n result = value !== null && func(value, rule.value, dataType);\r\n return result;\r\n }\r\n\r\n function evaluateRule(rule) {\r\n var dependencyIsVisible = true;\r\n\r\n if (self.fieldConditions[rule.field]) {\r\n dependencyIsVisible = isVisible(rule.field, self.fieldConditions[rule.field]);\r\n }\r\n\r\n if (dependencyIsVisible) {\r\n return evaluateRuleInstance(rule);\r\n }\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 (self.fieldsetConditions[rule.fieldsetId]) {\r\n\r\n fieldsetVisibilities[rule.fieldsetId] =\r\n isVisible(rule.fieldsetId, self.fieldsetConditions[rule.fieldsetId]);\r\n\r\n if (!fieldsetVisibilities[rule.fieldsetId]) {\r\n hasHiddenFieldset = true;\r\n }\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 }\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\r\n var success;\r\n if (cachedResult === undefined) {\r\n cachedResults[id] = show; // set default value to avoid circular issues\r\n success = (cachedResults[id] = evaluateCondition(id, condition));\r\n } else {\r\n success = cachedResult;\r\n }\r\n\r\n var 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 (element) {\r\n if (shouldShow) {\r\n element.style.display = \"\";\r\n }\r\n else {\r\n element.style.display = \"none\";\r\n }\r\n }\r\n }\r\n\r\n for (fsId in self.fieldsetConditions) {\r\n if (self.fieldsetConditions.hasOwnProperty(fsId)) {\r\n handleCondition(document.getElementById(fsId), fsId, self.fieldsetConditions[fsId], \"Fieldset\");// sadly we cant use querySelector with current mark-up (would need to prefix IDs)\r\n }\r\n }\r\n\r\n for (fieldId in self.fieldConditions) {\r\n if (self.fieldConditions.hasOwnProperty(fieldId)) {\r\n if (document.getElementById(fieldId)) {\r\n handleCondition(document.getElementById(fieldId).closest(\".umbraco-forms-field\"),// sadly we cant use querySelector with current mark-up (would need to prefix IDs)\r\n fieldId,\r\n self.fieldConditions[fieldId],\r\n \"Field\");\r\n }\r\n }\r\n }\r\n };\r\n\r\n return self;\r\n }\r\n};","/*!\r\n * VelocityTracker: 3.5.0\r\n * https://greensock.com\r\n *\r\n * Copyright 2008-2020, GreenSock. All rights reserved.\r\n * Subject to the terms at https://greensock.com/standard-license or for\r\n * Club GreenSock members, the agreement issued with that membership.\r\n * @author: Jack Doyle, jack@greensock.com\r\n*/\r\n\r\n/* eslint-disable */\r\nvar gsap,\r\n _coreInitted,\r\n _toArray,\r\n _getUnit,\r\n _first,\r\n _ticker,\r\n _time1,\r\n _time2,\r\n _getCache,\r\n _getGSAP = function _getGSAP() {\r\n return gsap || typeof window !== \"undefined\" && (gsap = window.gsap);\r\n},\r\n _lookup = {},\r\n _round = function _round(value) {\r\n return Math.round(value * 10000) / 10000;\r\n},\r\n _getID = function _getID(target) {\r\n return _getCache(target).id;\r\n},\r\n _getByTarget = function _getByTarget(target) {\r\n return _lookup[_getID(typeof target === \"string\" ? _toArray(target)[0] : target)];\r\n},\r\n _onTick = function _onTick(time) {\r\n var pt = _first,\r\n val; //if the frame rate is too high, we won't be able to track the velocity as well, so only update the values about 20 times per second\r\n\r\n if (time - _time1 >= 0.05) {\r\n _time2 = _time1;\r\n _time1 = time;\r\n\r\n while (pt) {\r\n val = pt.g(pt.t, pt.p);\r\n\r\n if (val !== pt.v1 || time - pt.t1 > 0.2) {\r\n //use a threshold of 0.2 seconds for zeroing-out velocity. If we only use 0.05 and things update slightly slower, like some Android devices dispatch \"touchmove\" events sluggishly so 2 or 3 ticks of the gsap.ticker may elapse inbetween, thus it may appear like the object is not moving but it actually is but it's not updating as frequently. A threshold of 0.2 seconds seems to be a good balance. We want to update things frequently (0.05 seconds) when they're moving so that we can respond to fast motions accurately, but we want to be more resistant to go back to a zero velocity.\r\n pt.v2 = pt.v1;\r\n pt.v1 = val;\r\n pt.t2 = pt.t1;\r\n pt.t1 = time;\r\n }\r\n\r\n pt = pt._next;\r\n }\r\n }\r\n},\r\n _types = {\r\n deg: 360,\r\n rad: Math.PI * 2\r\n},\r\n _initCore = function _initCore() {\r\n gsap = _getGSAP();\r\n\r\n if (gsap) {\r\n _toArray = gsap.utils.toArray;\r\n _getUnit = gsap.utils.getUnit;\r\n _getCache = gsap.core.getCache;\r\n _ticker = gsap.ticker;\r\n _coreInitted = 1;\r\n }\r\n};\r\n\r\nvar PropTracker = function PropTracker(target, property, type, next) {\r\n this.t = target;\r\n this.p = property;\r\n this.g = target._gsap.get;\r\n this.rCap = _types[type || _getUnit(this.g(target, property))]; //rotational cap (for degrees, \"deg\", it's 360 and for radians, \"rad\", it's Math.PI * 2)\r\n\r\n this.v1 = this.v2 = 0;\r\n this.t1 = this.t2 = _ticker.time;\r\n\r\n if (next) {\r\n this._next = next;\r\n next._prev = this;\r\n }\r\n};\r\n\r\nexport var VelocityTracker = /*#__PURE__*/function () {\r\n function VelocityTracker(target, property) {\r\n if (!_coreInitted) {\r\n _initCore();\r\n }\r\n\r\n this.target = _toArray(target)[0];\r\n _lookup[_getID(this.target)] = this;\r\n this._props = {};\r\n property && this.add(property);\r\n }\r\n\r\n VelocityTracker.register = function register(core) {\r\n gsap = core;\r\n\r\n _initCore();\r\n };\r\n\r\n var _proto = VelocityTracker.prototype;\r\n\r\n _proto.get = function get(property, skipRecentTick) {\r\n var pt = this._props[property] || console.warn(\"Not tracking \" + property + \" velocity.\"),\r\n val,\r\n dif,\r\n rotationCap;\r\n val = parseFloat(skipRecentTick ? pt.v1 : pt.g(pt.t, pt.p));\r\n dif = val - parseFloat(pt.v2);\r\n rotationCap = pt.rCap;\r\n\r\n if (rotationCap) {\r\n //rotational values need special interpretation so that if, for example, they go from 179 to -178 degrees it is interpreted as a change of 3 instead of -357.\r\n dif = dif % rotationCap;\r\n\r\n if (dif !== dif % (rotationCap / 2)) {\r\n dif = dif < 0 ? dif + rotationCap : dif - rotationCap;\r\n }\r\n }\r\n\r\n return _round(dif / ((skipRecentTick ? pt.t1 : _ticker.time) - pt.t2));\r\n };\r\n\r\n _proto.getAll = function getAll() {\r\n var result = {},\r\n props = this._props,\r\n p;\r\n\r\n for (p in props) {\r\n result[p] = this.get(p);\r\n }\r\n\r\n return result;\r\n };\r\n\r\n _proto.isTracking = function isTracking(property) {\r\n return property in this._props;\r\n };\r\n\r\n _proto.add = function add(property, type) {\r\n if (!(property in this._props)) {\r\n if (!_first) {\r\n _ticker.add(_onTick);\r\n\r\n _time1 = _time2 = _ticker.time;\r\n }\r\n\r\n _first = this._props[property] = new PropTracker(this.target, property, type, _first);\r\n }\r\n };\r\n\r\n _proto.remove = function remove(property) {\r\n var pt = this._props[property],\r\n prev,\r\n next;\r\n\r\n if (pt) {\r\n prev = pt._prev;\r\n next = pt._next;\r\n\r\n if (prev) {\r\n prev._next = next;\r\n }\r\n\r\n if (next) {\r\n next._prev = prev;\r\n } else if (_first === pt) {\r\n _ticker.remove(_onTick);\r\n\r\n _first = 0;\r\n }\r\n\r\n delete this._props[property];\r\n }\r\n };\r\n\r\n _proto.kill = function kill(shallow) {\r\n for (var p in this._props) {\r\n this.remove(p);\r\n }\r\n\r\n if (!shallow) {\r\n delete _lookup[_getID(this.target)];\r\n }\r\n };\r\n\r\n VelocityTracker.track = function track(targets, properties, types) {\r\n if (!_coreInitted) {\r\n _initCore();\r\n }\r\n\r\n var result = [],\r\n targs = _toArray(targets),\r\n a = properties.split(\",\"),\r\n t = (types || \"\").split(\",\"),\r\n i = targs.length,\r\n tracker,\r\n j;\r\n\r\n while (i--) {\r\n tracker = _getByTarget(targs[i]) || new VelocityTracker(targs[i]);\r\n j = a.length;\r\n\r\n while (j--) {\r\n tracker.add(a[j], t[j] || t[0]);\r\n }\r\n\r\n result.push(tracker);\r\n }\r\n\r\n return result;\r\n };\r\n\r\n VelocityTracker.untrack = function untrack(targets, properties) {\r\n var props = (properties || \"\").split(\",\");\r\n\r\n _toArray(targets).forEach(function (target) {\r\n var tracker = _getByTarget(target);\r\n\r\n if (tracker) {\r\n if (!props.length) {\r\n tracker.kill(1);\r\n } else {\r\n props.forEach(function (p) {\r\n return tracker.remove(p);\r\n });\r\n }\r\n }\r\n });\r\n };\r\n\r\n VelocityTracker.isTracking = function isTracking(target, property) {\r\n var tracker = _getByTarget(target);\r\n\r\n return tracker && tracker.isTracking(property);\r\n };\r\n\r\n VelocityTracker.getVelocity = function getVelocity(target, property) {\r\n var tracker = _getByTarget(target);\r\n\r\n return !tracker || !tracker.isTracking(property) ? console.warn(\"Not tracking velocity of \" + property) : tracker.get(property);\r\n };\r\n\r\n return VelocityTracker;\r\n}();\r\nVelocityTracker.getByTarget = _getByTarget;\r\n_getGSAP() && gsap.registerPlugin(VelocityTracker);\r\nexport { VelocityTracker as default };","/*!\r\n * InertiaPlugin 3.5.0\r\n * https://greensock.com\r\n *\r\n * @license Copyright 2008-2020, GreenSock. All rights reserved.\r\n * Subject to the terms at https://greensock.com/standard-license or for\r\n * Club GreenSock members, the agreement issued with that membership.\r\n * @author: Jack Doyle, jack@greensock.com\r\n*/\r\n\r\n/* eslint-disable */\r\nimport { VelocityTracker } from \"./utils/VelocityTracker.js\";\r\n\r\nvar gsap,\r\n _coreInitted,\r\n _parseEase,\r\n _toArray,\r\n _power3,\r\n _config,\r\n _getUnit,\r\n PropTween,\r\n _getCache,\r\n _checkPointRatio,\r\n _clamp,\r\n _processingVars,\r\n _getTracker = VelocityTracker.getByTarget,\r\n _getGSAP = function _getGSAP() {\r\n return gsap || typeof window !== \"undefined\" && (gsap = window.gsap) && gsap.registerPlugin && gsap;\r\n},\r\n _isString = function _isString(value) {\r\n return typeof value === \"string\";\r\n},\r\n _isNumber = function _isNumber(value) {\r\n return typeof value === \"number\";\r\n},\r\n _isObject = function _isObject(value) {\r\n return typeof value === \"object\";\r\n},\r\n _isFunction = function _isFunction(value) {\r\n return typeof value === \"function\";\r\n},\r\n _bonusValidated = 1,\r\n //InertiaPlugin\r\n_isArray = Array.isArray,\r\n _emptyFunc = function _emptyFunc(p) {\r\n return p;\r\n},\r\n _bigNum = 1e10,\r\n _tinyNum = 1 / _bigNum,\r\n _checkPoint = 0.05,\r\n _round = function _round(value) {\r\n return Math.round(value * 10000) / 10000;\r\n},\r\n _extend = function _extend(obj, defaults, exclude) {\r\n for (var p in defaults) {\r\n if (!(p in obj) && p !== exclude) {\r\n obj[p] = defaults[p];\r\n }\r\n }\r\n\r\n return obj;\r\n},\r\n _deepClone = function _deepClone(obj) {\r\n var copy = {},\r\n p,\r\n v;\r\n\r\n for (p in obj) {\r\n copy[p] = _isObject(v = obj[p]) ? _deepClone(v) : v;\r\n }\r\n\r\n return copy;\r\n},\r\n _getClosest = function _getClosest(n, values, max, min, radius) {\r\n var i = values.length,\r\n closest = 0,\r\n absDif = _bigNum,\r\n val,\r\n dif,\r\n p,\r\n dist;\r\n\r\n if (_isObject(n)) {\r\n while (i--) {\r\n val = values[i];\r\n dif = 0;\r\n\r\n for (p in n) {\r\n dist = val[p] - n[p];\r\n dif += dist * dist;\r\n }\r\n\r\n if (dif < absDif) {\r\n closest = i;\r\n absDif = dif;\r\n }\r\n }\r\n\r\n if ((radius || _bigNum) < _bigNum && radius < Math.sqrt(absDif)) {\r\n return n;\r\n }\r\n } else {\r\n while (i--) {\r\n val = values[i];\r\n dif = val - n;\r\n\r\n if (dif < 0) {\r\n dif = -dif;\r\n }\r\n\r\n if (dif < absDif && val >= min && val <= max) {\r\n closest = i;\r\n absDif = dif;\r\n }\r\n }\r\n }\r\n\r\n return values[closest];\r\n},\r\n _parseEnd = function _parseEnd(curProp, end, max, min, name, radius) {\r\n if (curProp.end === \"auto\") {\r\n return curProp;\r\n }\r\n\r\n var endVar = curProp.end,\r\n adjustedEnd,\r\n p;\r\n max = isNaN(max) ? _bigNum : max;\r\n min = isNaN(min) ? -_bigNum : min;\r\n\r\n if (_isObject(end)) {\r\n //for objects, like {x, y} where they're linked and we must pass an object to the function or find the closest value in an array.\r\n adjustedEnd = end.calculated ? end : (_isFunction(endVar) ? endVar(end) : _getClosest(end, endVar, max, min, radius)) || end;\r\n\r\n if (!end.calculated) {\r\n for (p in adjustedEnd) {\r\n end[p] = adjustedEnd[p];\r\n }\r\n\r\n end.calculated = true;\r\n }\r\n\r\n adjustedEnd = adjustedEnd[name];\r\n } else {\r\n adjustedEnd = _isFunction(endVar) ? endVar(end) : _isArray(endVar) ? _getClosest(end, endVar, max, min, radius) : parseFloat(endVar);\r\n }\r\n\r\n if (adjustedEnd > max) {\r\n adjustedEnd = max;\r\n } else if (adjustedEnd < min) {\r\n adjustedEnd = min;\r\n }\r\n\r\n return {\r\n max: adjustedEnd,\r\n min: adjustedEnd,\r\n unitFactor: curProp.unitFactor\r\n };\r\n},\r\n _getNumOrDefault = function _getNumOrDefault(vars, property, defaultValue) {\r\n return isNaN(vars[property]) ? defaultValue : +vars[property];\r\n},\r\n _calculateChange = function _calculateChange(velocity, duration) {\r\n return duration * _checkPoint * velocity / _checkPointRatio;\r\n},\r\n _calculateDuration = function _calculateDuration(start, end, velocity) {\r\n return Math.abs((end - start) * _checkPointRatio / velocity / _checkPoint);\r\n},\r\n _reservedProps = {\r\n resistance: 1,\r\n checkpoint: 1,\r\n preventOvershoot: 1,\r\n linkedProps: 1,\r\n radius: 1,\r\n duration: 1\r\n},\r\n _processLinkedProps = function _processLinkedProps(target, vars, getVal, resistance) {\r\n if (vars.linkedProps) {\r\n //when there are linkedProps (typically \"x,y\" where snapping has to factor in multiple properties, we must first populate an object with all of those end values, then feed it to the function that make any necessary alterations. So the point of this first loop is to simply build an object (like {x:100, y:204.5}) for feeding into that function which we'll do later in the \"real\" loop.\r\n var linkedPropNames = vars.linkedProps.split(\",\"),\r\n linkedProps = {},\r\n i,\r\n p,\r\n curProp,\r\n curVelocity,\r\n tracker,\r\n curDuration;\r\n\r\n for (i = 0; i < linkedPropNames.length; i++) {\r\n p = linkedPropNames[i];\r\n curProp = vars[p];\r\n\r\n if (curProp) {\r\n if (_isNumber(curProp.velocity)) {\r\n curVelocity = curProp.velocity;\r\n } else {\r\n tracker = tracker || _getTracker(target);\r\n curVelocity = tracker && tracker.isTracking(p) ? tracker.get(p) : 0;\r\n }\r\n\r\n curDuration = Math.abs(curVelocity / _getNumOrDefault(curProp, \"resistance\", resistance));\r\n linkedProps[p] = parseFloat(getVal(target, p)) + _calculateChange(curVelocity, curDuration);\r\n }\r\n }\r\n\r\n return linkedProps;\r\n }\r\n},\r\n _calculateTweenDuration = function _calculateTweenDuration(target, vars, maxDuration, minDuration, overshootTolerance, recordEnd) {\r\n if (maxDuration === void 0) {\r\n maxDuration = 10;\r\n }\r\n\r\n if (minDuration === void 0) {\r\n minDuration = 0.2;\r\n }\r\n\r\n if (overshootTolerance === void 0) {\r\n overshootTolerance = 1;\r\n }\r\n\r\n if (recordEnd === void 0) {\r\n recordEnd = 0;\r\n }\r\n\r\n _isString(target) && (target = _toArray(target)[0]);\r\n\r\n if (!target) {\r\n return 0;\r\n }\r\n\r\n var duration = 0,\r\n clippedDuration = _bigNum,\r\n inertiaVars = vars.inertia || vars,\r\n getVal = _getCache(target).get,\r\n resistance = _getNumOrDefault(inertiaVars, \"resistance\", _config.resistance),\r\n p,\r\n curProp,\r\n curDuration,\r\n curVelocity,\r\n curVal,\r\n end,\r\n curClippedDuration,\r\n tracker,\r\n unitFactor,\r\n linkedProps; //when there are linkedProps (typically \"x,y\" where snapping has to factor in multiple properties, we must first populate an object with all of those end values, then feed it to the function that make any necessary alterations. So the point of this first loop is to simply build an object (like {x:100, y:204.5}) for feeding into that function which we'll do later in the \"real\" loop.\r\n\r\n\r\n linkedProps = _processLinkedProps(target, inertiaVars, getVal, resistance);\r\n\r\n for (p in inertiaVars) {\r\n if (!_reservedProps[p]) {\r\n curProp = inertiaVars[p];\r\n\r\n if (!_isObject(curProp)) {\r\n tracker = tracker || _getTracker(target);\r\n\r\n if (tracker && tracker.isTracking(p)) {\r\n curProp = _isNumber(curProp) ? {\r\n velocity: curProp\r\n } : {\r\n velocity: tracker.get(p)\r\n }; //if we're tracking this property, we should use the tracking velocity and then use the numeric value that was passed in as the min and max so that it tweens exactly there.\r\n } else {\r\n curVelocity = +curProp || 0;\r\n curDuration = Math.abs(curVelocity / resistance);\r\n }\r\n }\r\n\r\n if (_isObject(curProp)) {\r\n if (_isNumber(curProp.velocity)) {\r\n curVelocity = curProp.velocity;\r\n } else {\r\n tracker = tracker || _getTracker(target);\r\n curVelocity = tracker && tracker.isTracking(p) ? tracker.get(p) : 0;\r\n }\r\n\r\n curDuration = _clamp(minDuration, maxDuration, Math.abs(curVelocity / _getNumOrDefault(curProp, \"resistance\", resistance)));\r\n curVal = parseFloat(getVal(target, p)) || 0;\r\n end = curVal + _calculateChange(curVelocity, curDuration);\r\n\r\n if (\"end\" in curProp) {\r\n curProp = _parseEnd(curProp, linkedProps && p in linkedProps ? linkedProps : end, curProp.max, curProp.min, p, inertiaVars.radius);\r\n\r\n if (recordEnd) {\r\n _processingVars === vars && (_processingVars = inertiaVars = _deepClone(vars));\r\n inertiaVars[p] = _extend(curProp, inertiaVars[p], \"end\");\r\n }\r\n }\r\n\r\n if (\"max\" in curProp && end > +curProp.max + _tinyNum) {\r\n unitFactor = curProp.unitFactor || _config.unitFactors[p] || 1; //some values are measured in special units like radians in which case our thresholds need to be adjusted accordingly.\r\n //if the value is already exceeding the max or the velocity is too low, the duration can end up being uncomfortably long but in most situations, users want the snapping to occur relatively quickly (0.75 seconds), so we implement a cap here to make things more intuitive. If the max and min match, it means we're animating to a particular value and we don't want to shorten the time unless the velocity is really slow. Example: a rotation where the start and natural end value are less than the snapping spot, but the natural end is pretty close to the snap.\r\n\r\n curClippedDuration = curVal > curProp.max && curProp.min !== curProp.max || curVelocity * unitFactor > -15 && curVelocity * unitFactor < 45 ? minDuration + (maxDuration - minDuration) * 0.1 : _calculateDuration(curVal, curProp.max, curVelocity);\r\n\r\n if (curClippedDuration + overshootTolerance < clippedDuration) {\r\n clippedDuration = curClippedDuration + overshootTolerance;\r\n }\r\n } else if (\"min\" in curProp && end < +curProp.min - _tinyNum) {\r\n unitFactor = curProp.unitFactor || _config.unitFactors[p] || 1; //some values are measured in special units like radians in which case our thresholds need to be adjusted accordingly.\r\n //if the value is already exceeding the min or if the velocity is too low, the duration can end up being uncomfortably long but in most situations, users want the snapping to occur relatively quickly (0.75 seconds), so we implement a cap here to make things more intuitive.\r\n\r\n curClippedDuration = curVal < curProp.min && curProp.min !== curProp.max || curVelocity * unitFactor > -45 && curVelocity * unitFactor < 15 ? minDuration + (maxDuration - minDuration) * 0.1 : _calculateDuration(curVal, curProp.min, curVelocity);\r\n\r\n if (curClippedDuration + overshootTolerance < clippedDuration) {\r\n clippedDuration = curClippedDuration + overshootTolerance;\r\n }\r\n }\r\n\r\n curClippedDuration > duration && (duration = curClippedDuration);\r\n }\r\n\r\n curDuration > duration && (duration = curDuration);\r\n }\r\n }\r\n\r\n duration > clippedDuration && (duration = clippedDuration);\r\n return duration > maxDuration ? maxDuration : duration < minDuration ? minDuration : duration;\r\n},\r\n _initCore = function _initCore() {\r\n gsap = _getGSAP();\r\n\r\n if (gsap) {\r\n _parseEase = gsap.parseEase;\r\n _toArray = gsap.utils.toArray;\r\n _getUnit = gsap.utils.getUnit;\r\n _getCache = gsap.core.getCache;\r\n _clamp = gsap.utils.clamp;\r\n _power3 = _parseEase(\"power3\");\r\n _checkPointRatio = _power3(0.05);\r\n PropTween = gsap.core.PropTween;\r\n gsap.config({\r\n resistance: 100,\r\n unitFactors: {\r\n time: 1000,\r\n totalTime: 1000,\r\n progress: 1000,\r\n totalProgress: 1000\r\n }\r\n });\r\n _config = gsap.config();\r\n gsap.registerPlugin(VelocityTracker);\r\n _coreInitted = 1;\r\n }\r\n};\r\n\r\nexport var InertiaPlugin = {\r\n version: \"3.5.0\",\r\n name: \"inertia\",\r\n register: function register(core) {\r\n gsap = core;\r\n\r\n _initCore();\r\n },\r\n init: function init(target, vars, tween, index, targets) {\r\n _coreInitted || _initCore();\r\n\r\n var tracker = _getTracker(target);\r\n\r\n if (vars === \"auto\") {\r\n if (!tracker) {\r\n console.warn(\"No inertia tracking on \" + target + \". InertiaPlugin.track(target) first.\");\r\n return;\r\n }\r\n\r\n vars = tracker.getAll();\r\n }\r\n\r\n this.target = target;\r\n this.tween = tween;\r\n _processingVars = vars; // gets swapped inside _calculateTweenDuration() if there's a function-based value encountered (to avoid double-calling it)\r\n\r\n var cache = target._gsap,\r\n getVal = cache.get,\r\n dur = vars.duration,\r\n durIsObj = _isObject(dur),\r\n preventOvershoot = vars.preventOvershoot || durIsObj && dur.overshoot === 0,\r\n resistance = _getNumOrDefault(vars, \"resistance\", _config.resistance),\r\n duration = _isNumber(dur) ? dur : _calculateTweenDuration(target, vars, durIsObj && dur.max || 10, durIsObj && dur.min || 0.2, durIsObj && \"overshoot\" in dur ? +dur.overshoot : preventOvershoot ? 0 : 1, true),\r\n p,\r\n curProp,\r\n curVal,\r\n unit,\r\n velocity,\r\n change1,\r\n end,\r\n change2,\r\n linkedProps;\r\n\r\n vars = _processingVars;\r\n _processingVars = 0; //when there are linkedProps (typically \"x,y\" where snapping has to factor in multiple properties, we must first populate an object with all of those end values, then feed it to the function that make any necessary alterations. So the point of this first loop is to simply build an object (like {x:100, y:204.5}) for feeding into that function which we'll do later in the \"real\" loop.\r\n\r\n linkedProps = _processLinkedProps(target, vars, getVal, resistance);\r\n\r\n for (p in vars) {\r\n if (!_reservedProps[p]) {\r\n curProp = vars[p];\r\n _isFunction(curProp) && (curProp = curProp(index, target, targets));\r\n\r\n if (_isNumber(curProp)) {\r\n velocity = curProp;\r\n } else if (_isObject(curProp) && !isNaN(curProp.velocity)) {\r\n velocity = +curProp.velocity;\r\n } else {\r\n if (tracker && tracker.isTracking(p)) {\r\n velocity = tracker.get(p);\r\n } else {\r\n console.warn(\"ERROR: No velocity was defined for \" + target + \" property: \" + p);\r\n }\r\n }\r\n\r\n change1 = _calculateChange(velocity, duration);\r\n change2 = 0;\r\n curVal = getVal(target, p);\r\n unit = _getUnit(curVal);\r\n curVal = parseFloat(curVal);\r\n\r\n if (_isObject(curProp)) {\r\n end = curVal + change1;\r\n\r\n if (\"end\" in curProp) {\r\n curProp = _parseEnd(curProp, linkedProps && p in linkedProps ? linkedProps : end, curProp.max, curProp.min, p, vars.radius);\r\n }\r\n\r\n if (\"max\" in curProp && +curProp.max < end) {\r\n if (preventOvershoot || curProp.preventOvershoot) {\r\n change1 = curProp.max - curVal;\r\n } else {\r\n change2 = curProp.max - curVal - change1;\r\n }\r\n } else if (\"min\" in curProp && +curProp.min > end) {\r\n if (preventOvershoot || curProp.preventOvershoot) {\r\n change1 = curProp.min - curVal;\r\n } else {\r\n change2 = curProp.min - curVal - change1;\r\n }\r\n }\r\n }\r\n\r\n this._props.push(p);\r\n\r\n this._pt = new PropTween(this._pt, target, p, curVal, 0, _emptyFunc, 0, cache.set(target, p, this));\r\n this._pt.u = unit || 0;\r\n this._pt.c1 = change1;\r\n this._pt.c2 = change2;\r\n }\r\n }\r\n\r\n tween.duration(duration);\r\n return _bonusValidated;\r\n },\r\n render: function render(ratio, data) {\r\n var pt = data._pt;\r\n ratio = _power3(data.tween._time / data.tween._dur);\r\n\r\n while (pt) {\r\n pt.set(pt.t, pt.p, _round(pt.s + pt.c1 * ratio + pt.c2 * ratio * ratio) + pt.u, pt.d, ratio);\r\n pt = pt._next;\r\n }\r\n }\r\n};\r\n\"track,untrack,isTracking,getVelocity,getByTarget\".split(\",\").forEach(function (name) {\r\n return InertiaPlugin[name] = VelocityTracker[name];\r\n});\r\n_getGSAP() && gsap.registerPlugin(InertiaPlugin);\r\nexport { InertiaPlugin as default, VelocityTracker };","/**\r\n * @ngdoc directive\r\n * @module components.carousel\r\n * @name components.carousel:carousel\r\n * @scope\r\n * @restrict E\r\n * @description\r\n * Carousel with physics driven animations powered by greensock. Note that it does not currently support infinite scroll.\r\n * @param {array=} slides Data used to manually set the slides included in the carousel.\r\n * @param {number=} slideCount The number of slides to show at once. Defaults to 1 if left empty.\r\n * @param {bool=} auto Causes the carousel to automatically move through its slides if true.\r\n * @param {number=} autoInterval The time in milliseconds before an autoplaying carousel moves to the next slide.\r\n * @param {number=} startSlide The index of the slide to start on.\r\n * @param {function=} onInit Function triggered when the carousel is initialized. Passes the following data to the callback.\r\n * - ctrl: A reference to the carousel object. Used for cases where carousel methods need to be triggered by an external source.\r\n * @param {function=} onSlideChange Function triggered when the current slide changes. Passes the following data to the callback.\r\n * - index: the index of the current slide\r\n * - slide: the data for the current slide\r\n * @param {function=} onEdge Function triggered when attempting to move past the first or last slide. Passes the following data to the callback.\r\n * - direction: 0 if the carousel is moving to the left and 1 if the carousel is moving to the right\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 (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\nimport { InertiaPlugin } from \"../../../scripts/greensock/InertiaPlugin\";\r\ngsap.registerPlugin(InertiaPlugin);\r\nexport default function CarouselComponent(module) {\r\n angular.module(module || 'app')\r\n .component('carousel', {\r\n require: {\r\n parentCarousel: '?^^carousel',\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().replace(/template\\-if/g, 'ng-if'));\r\n ctrl._dragDisabled = slideContent.find('carousel').length > 0 || (ctrl._slideCount && ctrl.slides && ctrl.slides.length <= ctrl._slideCount);\r\n if (ctrl.carouselSync !== null) {\r\n ctrl.carouselSync.registerCarousel(ctrl);\r\n }\r\n }\r\n\r\n ctrl.$onChanges = function (changes) {\r\n if (changes.startSlide && ctrl.slides && ctrl.slides.length > 0) {\r\n ctrl.goToSlide(changes.startSlide.currentValue, false);\r\n }\r\n if (changes.slides && changes.slides.currentValue && changes.slides.currentValue.length > 0) {\r\n if (ctrl.circular && changes.slides.currentValue.length < ctrl._slideCount * 2) {\r\n ctrl.slides = changes.slides.currentValue.concat(changes.slides.currentValue);\r\n }\r\n\r\n if (!ctrl.circular) {\r\n ctrl.prevDisabled = !ctrl.index;\r\n ctrl.nextDisabled = ctrl.index >= ctrl.slides.length - ctrl._slideCount;\r\n }\r\n ctrl._angle = 360 / ctrl.slides.length;\r\n $timeout(function () {\r\n ctrl.slideElements = ctrl._slider.find('> .slide');\r\n ctrl._updateWidth();\r\n \r\n if (!ctrl._draggable) {\r\n if (!ctrl._dragDisabled) {\r\n //var sliderWidth = ctrl._slider.width();\r\n //if (ctrl.slides.length > ctrl._slideCount) {\r\n // $element.width(sliderWidth);\r\n //}\r\n ctrl._draggable = Draggable.create(ctrl._dragger, {\r\n type: 'x',\r\n trigger: ctrl._slider,\r\n inertia: true,\r\n lockAxis: true,\r\n edgeResistance: .65,\r\n dragResistance: .1,\r\n throwResistance: .1,\r\n maxDuration: 3,\r\n throwProps: true,\r\n zIndexBoost: false,\r\n onThrowUpdate: ctrl._updatePositions,\r\n onThrowComplete: function () {\r\n if (ctrl.auto) {\r\n ctrl._nextAutoStep();\r\n }\r\n },\r\n snap: function (endValue) {\r\n var width = ctrl.slides.length * ctrl.width;\r\n if (ctrl.circular) {\r\n var pos = ((this.x % width) + width) % width;\r\n ctrl._updateIndex(Math.round(pos / ctrl.width));\r\n var virtualIndex = Math.round(endValue / ctrl.width);\r\n return virtualIndex * ctrl.width;\r\n }\r\n var index = -Math.round((ctrl._slideSpacing ? endValue - Math.floor(endValue / ctrl._slideSpacing) : endValue) / ctrl.width);\r\n ctrl._updateIndex(index);\r\n if (!ctrl.circular) {\r\n $scope.$evalAsync(() => {\r\n ctrl.prevDisabled = ctrl.index === 0;\r\n ctrl.nextDisabled = ctrl.index >= ctrl.slides.length - ctrl._slideCount;\r\n });\r\n }\r\n return -(Math.min(ctrl.index, ctrl.slides.length - ctrl._slideCount)) * ctrl.width - (ctrl.index === 0 ? 0 : ctrl._slideSpacing * (ctrl.index - ctrl._slideCount + 1));\r\n },\r\n onDragStart: function () {\r\n if (ctrl.auto) {\r\n $timeout.cancel(ctrl._autoRunner);\r\n }\r\n },\r\n onDragEnd: function () {\r\n if (ctrl.auto) {\r\n ctrl._nextAutoStep();\r\n }\r\n },\r\n onDrag: ctrl._updatePositions\r\n });\r\n }\r\n }\r\n\r\n if (ctrl.onChange) {\r\n ctrl.onChange({\r\n changes: changes\r\n });\r\n }\r\n })\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 if ($scope.$destroyed)\r\n return;\r\n var html = angular.element(markup);\r\n ctrl._slides = html.find('.slides');\r\n ctrl._slider = html.find('.slides').find('>div');\r\n html.find('.slide').html(slideContent.find('>slide').html());\r\n html.find('.controls').html(slideContent.find('>controls').html());\r\n ctrl._dragger = html.find('.drag-tracker');\r\n ctrl.previousPosition = 0;\r\n $element.html(html);\r\n $compile($element.contents())($scope);\r\n \r\n\r\n win = $($window)\r\n .on('resize.carousel', ctrl._resize)\r\n .on('changed.zf.mediaquery', ctrl._setSlideCount);\r\n $scope.$on('feedModalOpened', ctrl._resize);\r\n if (ctrl.onInit) {\r\n ctrl.onInit({\r\n ctrl: ctrl\r\n });\r\n }\r\n }\r\n\r\n ctrl._resize = function () {\r\n $timeout.cancel(ctrl._autoRunner);\r\n ctrl.width = (ctrl._slides.width() - ctrl._slideSpacing * (ctrl._slideCount - 1)) * ctrl._slideScale / ctrl._slideCount;\r\n ctrl.positionDraggable(ctrl.index, false);\r\n if (ctrl.auto) {\r\n ctrl._nextAutoStep();\r\n }\r\n }\r\n\r\n ctrl._updateWidth = function () {\r\n ctrl.width = (ctrl._slides.width() - ctrl._slideSpacing * (ctrl._slideCount - 1)) * ctrl._slideScale / ctrl._slideCount;\r\n if (ctrl.slides) {\r\n ctrl._updatePositions();\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 var targetIndex = ctrl.index + ctrl._slideCount;\r\n var half = Math.floor(ctrl._slideCount / 2);\r\n if (ctrl.index == 0) {\r\n targetIndex += Math.floor(ctrl._slideCount / 2);\r\n }\r\n var max = ctrl.slides.length - ctrl._slideCount + half;\r\n var old = targetIndex;\r\n if (targetIndex > max) {\r\n targetIndex = ctrl.index < max ? max : 0;\r\n }\r\n ctrl.goToSlide(targetIndex, true).then(ctrl._nextAutoStep);\r\n }, ctrl.autoInterval);\r\n }\r\n\r\n ctrl._setSlideCount = function () {\r\n ctrl._slideSpacing = helper.getResponsiveValue(ctrl.modifiers.spacing);\r\n ctrl._slideScale = helper.getResponsiveValue(ctrl.modifiers.slideWidth);\r\n ctrl._slideCount = helper.getResponsiveValue(ctrl.slideCount);\r\n if (ctrl._slideCount === undefined) {\r\n ctrl._slideCount = 1;\r\n }\r\n };\r\n\r\n ctrl._updatePositions = function () {\r\n var isSlideable = ctrl.slides.length > ctrl._slideCount;\r\n var width = ctrl.slides.length * ctrl.width + (ctrl.slides.length - 1) * ctrl._slideSpacing;\r\n var x = this.x || (ctrl._draggable ? parseInt(ctrl._dragger[0]._gsap.x) : 0);\r\n var pos = !isSlideable ? 0 : ctrl.circular ? ((this.x % width) + width) % width : (isNaN(x) ? parseInt(x) : x);\r\n gsap.set(ctrl._slider, {\r\n x: pos,\r\n width: width\r\n });\r\n var absPos = Math.abs(pos);\r\n var indexPos = absPos / (ctrl.width + (ctrl._slideSpacing || 0));\r\n var newIndex = Math.round(indexPos);\r\n if (ctrl.index !== newIndex) {\r\n var previousIndex = ctrl.index;\r\n ctrl._updateIndex(newIndex);\r\n if (ctrl.onSlideChange) {\r\n ctrl.onSlideChange({\r\n index: ctrl.index,\r\n previousIndex: previousIndex,\r\n slide: ctrl.slides[ctrl.index],\r\n ctrl: ctrl\r\n });\r\n }\r\n $scope.$broadcast('slideChange', {\r\n index: newIndex,\r\n slide: ctrl.slides[ctrl.index]\r\n });\r\n }\r\n \r\n for (var i = 0; i < ctrl.slideElements.length; i++) {\r\n var slideOffset = 0;\r\n if (ctrl.circular) {\r\n var slide = ctrl.slides[i];\r\n if (isSlideable) {\r\n if (i === 1) {\r\n console.log(ctrl._angle, indexPos);\r\n }\r\n var angle = ctrl._angle * (indexPos - i);\r\n if (Math.abs(angle) < 90) {\r\n if (i === 1) {\r\n console.log('visible');\r\n }\r\n if (!slide._test) {\r\n slide._test = 0;\r\n }\r\n slideOffset = slide._test;\r\n if (i === 1) {\r\n console.log(slideOffset);\r\n }\r\n }\r\n else if (angle > 180) {\r\n if (i === 1) {\r\n console.log('left');\r\n }\r\n slide._test = slideOffset = width;\r\n }\r\n else if (angle < -180) {\r\n if (i === 1) {\r\n console.log('right', i);\r\n }\r\n slide._test = slideOffset = -width;\r\n }\r\n }\r\n }\r\n var baseStyles = {\r\n x: slideOffset,\r\n width: ctrl.width,\r\n marginLeft: i > 0 ? ctrl._slideSpacing + 'px' : 0\r\n };\r\n var newStyles = ctrl.modifiers.slideStyles(i - indexPos, ctrl._slideCount);\r\n TweenLite.set(ctrl.slideElements[i], {\r\n ...baseStyles,\r\n ...newStyles\r\n });\r\n }\r\n\r\n $scope.$broadcast('carouselV2.updated', {\r\n offset: this.x\r\n });\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\r\n .off('resize.carousel')\r\n .off('changed.zf.mediaquery');\r\n }\r\n\r\n /*ctrl._registerTransitions = function () {\r\n $transitions.onStart({\r\n to: ctrl.route,\r\n from: function (state) {\r\n return state.name !== ctrl.route;\r\n }\r\n }, function (transition) {\r\n ctrl.targetParams = transition.params('to');\r\n if (!ctrl.blockTransition) {\r\n var deferred = $q.defer();\r\n var target = ctrl.targetParams[ctrl.routeTarget];\r\n if (isNaN(target)) {\r\n ctrl._findIndexByKey(target, 0, deferred)\r\n }\r\n else {\r\n\r\n if (ctrl.parentCarousel) {\r\n if (angular.equals(ctrl.parentCarousel.slides[ctrl.parentCarousel.index].images, ctrl.slides)) {\r\n deferred.resolve(parseInt(target));\r\n }\r\n else {\r\n deferred.reject('Not active sub slide');\r\n }\r\n }\r\n else {\r\n deferred.resolve(parseInt(target));\r\n }\r\n }\r\n deferred.promise.then(function (index) {\r\n if (transition.from().name !== ctrl.route && ctrl.onSlideChange) {\r\n ctrl.onSlideChange({\r\n index: index,\r\n slide: ctrl.slides[index]\r\n });\r\n }\r\n ctrl.goToSlide(index, transition.from().name === ctrl.route && !ctrl.parentCarousel);\r\n });\r\n //return deferred.promise;\r\n }\r\n ctrl.blockTransition = false;\r\n });\r\n if ($state.current.name === ctrl.route) {\r\n ctrl.targetParams = angular.copy($stateParams);\r\n var deferred = $q.defer();\r\n ctrl.indexResolved = deferred.promise;\r\n var target = $stateParams[ctrl.routeTarget];\r\n if (isNaN(target)) {\r\n ctrl._findIndexByKey(target, 0, deferred)\r\n }\r\n else {\r\n if (ctrl.parentCarousel) {\r\n ctrl.parentCarousel.indexResolved.then(function (index) {\r\n if (angular.equals(ctrl.parentCarousel.slides[index].images, ctrl.slides)) {\r\n deferred.resolve(parseInt(target));\r\n }\r\n else {\r\n deferred.reject('Not active sub slide');\r\n }\r\n }).catch(function (response) {\r\n deferred.reject('Parent carousel failed to determine index');\r\n });\r\n }\r\n else {\r\n deferred.resolve(parseInt(target));\r\n }\r\n }\r\n deferred.promise.then(function (index) {\r\n if (ctrl.onSlideChange) {\r\n ctrl.onSlideChange({\r\n index: index,\r\n slide: ctrl.slides[index]\r\n });\r\n }\r\n $timeout(function () {\r\n ctrl.goToSlide(index, false);\r\n });\r\n });\r\n }\r\n }*/\r\n\r\n ctrl._updateIndex = function (index, lockAnimation) {\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: -1\r\n });\r\n }\r\n }\r\n index = Math.min(ctrl.slides.length - 1, Math.max(0, index));\r\n if (ctrl.index !== index) {\r\n var previousIndex = ctrl.index;\r\n ctrl.index = index;\r\n if (!ctrl.circular) {\r\n ctrl.prevDisabled = ctrl.index === 0;\r\n ctrl.nextDisabled = ctrl.index >= ctrl.slides.length - ctrl._slideCount;\r\n }\r\n if (ctrl.carouselSync) {\r\n ctrl.carouselSync.updateCarousels(index);\r\n }\r\n if (ctrl.onSlideChange) {\r\n ctrl.onSlideChange({\r\n index: ctrl.index,\r\n previousIndex: previousIndex,\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.prevDisabled = data.rows - 1 < 0;\r\n ctrl.nextDisabled = data.rows - 1 > ctrl.index;\r\n }\r\n\r\n ctrl.goToSlide = function (index, animate) {\r\n ctrl._updateIndex(index);\r\n var animationComplete = ctrl.positionDraggable(ctrl.index, animate);\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 - ctrl._slideCount, 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 + ctrl._slideCount, true);\r\n }\r\n }\r\n\r\n ctrl.positionDraggable = function (targetIndex, animate) {\r\n if (ctrl.slides === null || ctrl.slides.length === undefined)\r\n return;\r\n\r\n var deferred = $q.defer();\r\n if (ctrl._slider) {\r\n if (animate) {\r\n if (!ctrl._dragDisabled)\r\n ctrl._draggable[0].disable();\r\n var pos = parseInt(ctrl._dragger[0]._gsap.x);\r\n var maxIndex = ctrl.slides.length - ctrl._slideCount;\r\n var end = -Math.max(0, Math.min(ctrl.slides.length - ctrl._slideCount, targetIndex)) * (ctrl.width + ctrl._slideSpacing);\r\n var velocity = ctrl._slides.width();\r\n if (targetIndex >= maxIndex || end < pos) {\r\n velocity = -velocity;\r\n }\r\n gsap.to(ctrl._dragger, {\r\n inertia: {\r\n x: {\r\n velocity: velocity,\r\n end: end\r\n }\r\n },\r\n onUpdate: ctrl._updatePositions,\r\n onComplete: function () {\r\n if (!ctrl._dragDisabled) {\r\n ctrl._draggable[0].update();\r\n ctrl._draggable[0].enable();\r\n }\r\n deferred.resolve();\r\n }\r\n });\r\n }\r\n else {\r\n gsap.set(ctrl._dragger, {\r\n x: -Math.max(0, Math.min(ctrl.slides.length - ctrl._slideCount, targetIndex)) * (ctrl.width + ctrl._slideSpacing)\r\n });\r\n ctrl._updatePositions();\r\n if (!ctrl._dragDisabled) {\r\n ctrl._draggable[0].update();\r\n }\r\n deferred.resolve();\r\n }\r\n }\r\n else {\r\n deferred.resolve();\r\n }\r\n return deferred.promise;\r\n }\r\n }\r\n}","import WidgetUtility from '../shared/widget-utility';\r\n\r\nclass ProductsByCategory {\r\n constructor(container) {\r\n if (typeof (container) === 'string') {\r\n this.selector = container;\r\n }\r\n else if (container instanceof NodeList) {\r\n this.containers = Array.from(container);\r\n }\r\n else {\r\n this.container = [container];\r\n }\r\n }\r\n\r\n init() {\r\n if (this.selector) {\r\n this.containers = Array.from(document.querySelectorAll(this.selector));\r\n }\r\n this.containers.forEach(container => {\r\n var groups = container.querySelectorAll('.category-group');\r\n Array.from(groups).forEach(group => {\r\n var group = new CategoryGroup(group);\r\n group.init();\r\n })\r\n })\r\n }\r\n}\r\n\r\nclass CategoryGroup {\r\n constructor(element) {\r\n this.element = typeof (element) === 'string' ? document.querySelector(element) : element;\r\n\r\n }\r\n\r\n init() {\r\n this.controls = this.element.querySelector('.controls');\r\n this.tabs = Array.from(this.element.querySelectorAll('.underline-link'));\r\n this.summaries = Array.from(this.element.querySelectorAll('.summary'));\r\n this.backgrounds = Array.from(this.element.querySelectorAll('.background > img'));\r\n this.carouselContainers = Array.from(this.element.querySelectorAll('.products-container'));\r\n this.carousels = Array.from(this.element.querySelectorAll('.products > ul'));\r\n this.index = 0;\r\n this._items = Array.from(this.carousels[this.index].querySelectorAll('li'));\r\n this.tabs.forEach(tab => {\r\n tab.addEventListener('click', this.switchCategory.bind(this));\r\n });\r\n this.prevButton = this.element.querySelector('.circle-button--previous');\r\n this.prevButton.addEventListener('click', this._shiftLeft.bind(this));\r\n this.nextButton = this.element.querySelector('.circle-button--next');\r\n this.nextButton.addEventListener('click', this._shiftRight.bind(this));\r\n window.addEventListener('DOMContentLoaded', () => {\r\n this._findViewpointIndexes();\r\n this._updateNavigationVisibility();\r\n if (!this.nextButton.classList.contains('disabled')) {\r\n this.controls.style.display = 'inherit';\r\n }\r\n });\r\n window.addEventListener('resize', this._handleResize.bind(this));\r\n }\r\n _handleResize() {\r\n this._findViewpointIndexes();\r\n this._updateNavigationVisibility();\r\n }\r\n\r\n switchCategory(event) {\r\n if (!this._locked) {\r\n this._locked = true;\r\n var parent = event.target.parentNode;\r\n var index = Array.from(parent.parentNode.children).indexOf(parent);\r\n var activeItems = this._getAnimationElements(this.index);\r\n var targetItems = this._getAnimationElements(index);\r\n activeItems.tab.classList.remove('active');\r\n targetItems.tab.classList.add('active');\r\n var tl = new TimelineLite({\r\n onComplete: function () {\r\n this._locked = false;\r\n activeItems.background.classList.remove('active');\r\n activeItems.itemsContainer.classList.remove('active');\r\n activeItems.summary.classList.remove('active');\r\n targetItems.background.classList.add('active');\r\n targetItems.itemsContainer.classList.add('active');\r\n targetItems.summary.classList.add('active');\r\n gsap.set([activeItems.background, activeItems.summary, activeItems.carousel, activeItems.button], { clearProps: 'all' });\r\n if (activeItems.items.length) {\r\n gsap.set([activeItems.background, activeItems.summary, activeItems.carousel, activeItems.button, activeItems.items], { clearProps: 'all' });\r\n }\r\n gsap.set([targetItems.background, targetItems.summary, targetItems.label, targetItems.visibleItems, targetItems.button, this.prevButton, this.nextButton], { clearProps: 'all' });\r\n if (targetItems.items.length) {\r\n gsap.set([targetItems.background, targetItems.summary, targetItems.carousel, targetItems.button], { clearProps: 'all' });\r\n }\r\n this._items = targetItems.items;\r\n this._findViewpointIndexes();\r\n this._updateNavigationVisibility();\r\n }.bind(this)\r\n })\r\n .set(targetItems.background, { display: 'inherit' })\r\n .addLabel('start')\r\n .to([this.prevButton, this.nextButton], { autoAlpha: 0, duration: .4 })\r\n .fromTo(activeItems.background, { zIndex: 2, autoAlpha: 1, x: 0 }, { autoAlpha: 0, x: 200, duration: 1 }, 'start')\r\n .to(activeItems.summary, { x: 100, autoAlpha: 0, duration: .5 }, '-=.8')\r\n .to(activeItems.label, { x: 100, autoAlpha: 0, duration: .5 }, '-=.4')\r\n .set(targetItems.itemsContainer, { display: 'inherit' })\r\n .set(targetItems.summary, { display: 'inherit' })\r\n .addLabel('summary')\r\n if (activeItems.visibleItems.length) {\r\n tl.staggerTo(activeItems.visibleItems, .3, { x: 100, autoAlpha: 0 }, .05, '-=.4')\r\n }\r\n tl\r\n .fromTo(activeItems.button, { x: 0, autoAlpha: 1 }, { x: 64, autoAlpha: 0, duration: .3 }, '-=.1')\r\n .fromTo(targetItems.summary, { x: -100, autoAlpha: 0 }, { x: 0, autoAlpha: 1, duration: .5 }, 'summary')\r\n .fromTo(targetItems.label, { x: -100, autoAlpha: 0 }, { x: 0, autoAlpha: 1, duration: .5 }, '-=.4')\r\n .staggerFrom(targetItems.visibleItems, .3, { x: -50, autoAlpha: 0 }, .05, '-=.4')\r\n .addLabel('carouselReady')\r\n .set(this.controls, { display: targetItems.showControls ? 'block' : 'none' });\r\n if (targetItems.showControls) {\r\n tl.to([this.prevButton, this.nextButton], { autoAlpha: 1, duration: .4 });\r\n }\r\n tl.fromTo(targetItems.button, { x: -64, autoAlpha: 0 }, { x: 0, autoAlpha: 1, duration: .2 }, 'carouselReady-=.2');\r\n this.index = index;\r\n }\r\n }\r\n\r\n _getAnimationElements(index) {\r\n var carouselContainer = this.carouselContainers[index];\r\n carouselContainer.style.display = 'inherit';\r\n var allItems = Array.from(carouselContainer.querySelectorAll('li'));\r\n var docWidth = document.documentElement.clientWidth;\r\n var items = Array.from(allItems).filter(node => {\r\n var rect = node.getBoundingClientRect();\r\n return rect.left > -rect.width && rect.right < docWidth + rect.width;\r\n });\r\n carouselContainer.style.display = '';\r\n return {\r\n showControls: allItems.length !== items.length,\r\n tab: this.tabs[index],\r\n background: this.backgrounds[index],\r\n label: carouselContainer.querySelector('h5'),\r\n carousel: this.carousels[index],\r\n items: allItems,\r\n visibleItems: items,\r\n itemsContainer: carouselContainer,\r\n summary: this.summaries[index],\r\n button: carouselContainer.querySelector('.button-container')\r\n }\r\n }\r\n\r\n _shiftLeft() {\r\n this._shift(1);\r\n }\r\n\r\n _shiftRight() {\r\n this._shift(-1);\r\n }\r\n\r\n _shift(direction) {\r\n if (!this._locked) {\r\n this._locked = true;\r\n var currentCarousel = this.carouselContainers[this.index].querySelector('.products');\r\n var containerEdge = currentCarousel.getBoundingClientRect().left;\r\n var list = this.carousels[this.index];\r\n var leftShiftMax = currentCarousel.clientWidth - this._items[this._items.length - 1].getBoundingClientRect().right;\r\n var shift, oldShift;\r\n shift = oldShift = list._gsap ? parseInt(list._gsap.x) : 0;\r\n if (direction === 1) {\r\n var left = document.documentElement.clientWidth - this._items[this.leftEdge].getBoundingClientRect().right;\r\n var offset = left;\r\n for (var i = this.leftEdge - 1; i >= 0; i--) {\r\n var newOffset = containerEdge - this._items[i].getBoundingClientRect().left;\r\n if (newOffset <= left) {\r\n offset = newOffset;\r\n }\r\n else {\r\n break;\r\n }\r\n }\r\n shift = Math.min(0, shift + offset);\r\n }\r\n else {\r\n var right = containerEdge - this._items[this.rightEdge].getBoundingClientRect().left;\r\n shift += Math.max(right, leftShiftMax);\r\n }\r\n if (shift === 0) {\r\n this.prevButton.classList.add('disabled');\r\n }\r\n else {\r\n this.prevButton.classList.remove('disabled');\r\n }\r\n if (oldShift + leftShiftMax === shift) {\r\n\r\n this.nextButton.classList.add('disabled');\r\n }\r\n else {\r\n this.nextButton.classList.remove('disabled');\r\n }\r\n TweenLite.to(list, .5, {\r\n x: shift,\r\n onComplete: function () {\r\n this._locked = false;\r\n this._findViewpointIndexes();\r\n }.bind(this)\r\n });\r\n }\r\n }\r\n\r\n\r\n _findViewpointIndexes() {\r\n var found = false;\r\n var lastFound = false;\r\n var docWidth = document.documentElement.clientWidth;\r\n for (var i = 0; i < this._items.length; i++) {\r\n var rect = this._items[i].getBoundingClientRect();\r\n if (rect.left >= 0 && rect.right <= docWidth) {\r\n if (!found) {\r\n this.leftEdge = Math.max(i - 1, 0);\r\n found = true;\r\n }\r\n }\r\n else if (found) {\r\n this.rightEdge = i;\r\n lastFound = true;\r\n break;\r\n }\r\n\r\n }\r\n if (!lastFound) {\r\n this.rightEdge = this._items.length - 1;\r\n }\r\n }\r\n\r\n _updateNavigationVisibility() {\r\n if (this.leftEdge === 0) {\r\n this.prevButton.classList.add('disabled');\r\n }\r\n else {\r\n this.prevButton.classList.remove('disabled');\r\n }\r\n if (this.rightEdge === this._items.length - 1) {\r\n this.nextButton.classList.add('disabled');\r\n }\r\n else {\r\n this.nextButton.classList.remove('disabled');\r\n }\r\n }\r\n}\r\n\r\nexport { ProductsByCategory as default, CategoryGroup };","export default class Revealer {\r\n constructor(element) {\r\n this.trigger = typeof (element) === 'string' ? document.querySelector(element) : element;\r\n this.container = this.trigger.parentNode.querySelector('.reveal-container');\r\n this.items = Array.from(this.container.querySelectorAll('.reveal-target'));\r\n }\r\n\r\n init() {\r\n this.trigger.addEventListener('click', this.reveal.bind(this));\r\n }\r\n\r\n reveal() {\r\n var startHeight = this.container.clientHeight;\r\n this.items.forEach(item => {\r\n item.classList.remove('reveal-target');\r\n });\r\n gsap.timeline()\r\n .set(this.trigger, { display: 'none' })\r\n .fromTo(this.container, { height: startHeight }, { height: this.container.clientHeight, duration: .6 });\r\n\r\n }\r\n}","export default class Zoomer {\r\n constructor(options) {\r\n if (options.trigger) {\r\n this.trigger = typeof (options.trigger) === 'string' ? document.querySelector(options.trigger) : options.trigger;\r\n }\r\n this.images = Array.from(typeof (options.image) === 'string' ? document.querySelectorAll(options.images) : options.images);\r\n this.aligner = typeof (options.trigger) === 'string' ? document.querySelector(options.aligner) : options.aligner;\r\n }\r\n\r\n init() {\r\n this.imageSizes = {};\r\n this._createElements();\r\n if (this.trigger) {\r\n this.enabled = false;\r\n this.trigger.addEventListener('click', this.toggle.bind(this));\r\n }\r\n else {\r\n this.enable();\r\n }\r\n }\r\n\r\n _createElements() {\r\n this.zoomPanel = document.createElement('div');\r\n this.zoomPanel.classList.add('zoom-panel');\r\n this.overlays = [];\r\n this.overlayMarkers = [];\r\n document.body.appendChild(this.zoomPanel);\r\n this.images.forEach((image, i) => {\r\n image.event = this.revealZoomedView.bind(this);\r\n var overlay = image.closest('.zoom-overlay-container');\r\n overlay.addEventListener('mouseleave', function (event) {\r\n this.hideZoomedView(i);\r\n }.bind(this));\r\n overlay.addEventListener('mousemove', function(event) {\r\n this._positionZoom(event, i);\r\n }.bind(this));\r\n\r\n var overlayMarker = document.createElement('div');\r\n overlayMarker.classList.add('zoom-overlay');\r\n overlay.appendChild(overlayMarker);\r\n this.overlays.push(overlay);\r\n this.overlayMarkers.push(overlayMarker);\r\n });\r\n }\r\n\r\n toggle() {\r\n if (this.enabled) {\r\n this.disable();\r\n }\r\n else {\r\n this.enable();\r\n }\r\n }\r\n\r\n enable() {\r\n if (this.trigger) {\r\n this.trigger.classList.add('active');\r\n }\r\n this.images.forEach(image => {\r\n image.addEventListener('mouseenter', image.event);\r\n });\r\n this.enabled = true;\r\n }\r\n\r\n disable() {\r\n if (this.trigger) {\r\n this.trigger.classList.remove('active');\r\n }\r\n this.images.forEach(image => {\r\n image.removeEventListener('mouseenter', image.event);\r\n });\r\n this.enabled = false;\r\n }\r\n\r\n revealZoomedView(event) {\r\n var image = event.target;\r\n var index = this.images.indexOf(image);\r\n var pos = image.getBoundingClientRect();\r\n var alignRect = this.aligner.getBoundingClientRect();\r\n if ((pos.left + pos.right) / 2 > (document.body.clientWidth / 2)) {\r\n this.zoomPanel.style.width = (alignRect.width + alignRect.x - 16) + \"px\";\r\n this.zoomPanel.style.left = \"16px\";\r\n }\r\n else {\r\n this.zoomPanel.style.width = (document.body.clientWidth - 16 - alignRect.x) + \"px\";\r\n this.zoomPanel.style.left = alignRect.x + \"px\";\r\n }\r\n var source = image.src;\r\n var queryPoint = source.indexOf(\"?\");\r\n if (queryPoint > -1) {\r\n source = image.src.substring(0, queryPoint);\r\n }\r\n this.imageSize = {\r\n width: image.clientWidth,\r\n height: image.clientHeight\r\n };\r\n this._getImage(source)\r\n .then(zoomedSize => {\r\n this.zoomedSize = zoomedSize;\r\n if (this.imageSize.width < this.zoomedSize.width || this.imageSize.height < this.zoomedSize.height) {\r\n this.zoomPanel.style.backgroundImage = 'url(\"' + source + '\")';\r\n\r\n this.zoomPanel.classList.add('active');\r\n this._updateOverlay(event, index);\r\n }\r\n });\r\n }\r\n\r\n _getImage(url) {\r\n return new Promise((resolve, reject) => {\r\n if (this.imageSizes[url]) {\r\n resolve(this.imageSizes[url]);\r\n }\r\n else {\r\n var image = new Image();\r\n image.onload = function() {\r\n var dimensions = {\r\n width: image.width,\r\n height: image.height\r\n };\r\n this.imageSizes[url] = dimensions;\r\n resolve(dimensions);\r\n }.bind(this);\r\n image.onerror = (error) => {\r\n reject(error);\r\n };\r\n image.src = url;\r\n }\r\n });\r\n }\r\n\r\n _updateOverlay(event, index) {\r\n var marker = this.overlayMarkers[index];\r\n var overlay = this.overlays[index];\r\n var image = this.images[index];\r\n overlay.style.height = (image.clientHeight * 100 / overlay.parentNode.clientHeight) + '%';\r\n overlay.classList.add('active');\r\n var ratio = this._getRatio();\r\n marker.style.width = ratio.x * 100 + '%';\r\n marker.style.height = ratio.y * 100 + '%';\r\n this._positionZoom(event, index);\r\n }\r\n\r\n _getRatio() {\r\n if (!this.zoomedSize) {\r\n return null;\r\n }\r\n return {\r\n x: Math.min(this.zoomPanel.clientWidth / this.zoomedSize.width, 1),\r\n y: Math.min(this.zoomPanel.clientHeight / this.zoomedSize.height, 1)\r\n };\r\n }\r\n\r\n _positionZoom(event, index) {\r\n window.requestAnimationFrame(function () {\r\n var ratio = this._getRatio();\r\n if (!ratio) {\r\n return;\r\n }\r\n var edgeLimit = {\r\n x: 1 - ratio.x,\r\n y: 1 - ratio.y\r\n }\r\n var center = {\r\n x: ratio.x / 2,\r\n y: ratio.y / 2\r\n }\r\n\r\n var pos;\r\n if (event.offsetX) {\r\n pos = {\r\n x: event.offsetX / this.imageSize.width,\r\n y: event.offsetY / this.imageSize.height\r\n };\r\n }\r\n else {\r\n var overlayRect = this.overlays[index].getBoundingClientRect();\r\n pos = {\r\n x: (event.pageX - overlayRect.x) / this.imageSize.width,\r\n y: (event.pageY - overlayRect.y) / this.imageSize.height\r\n }\r\n }\r\n var offset = {\r\n x: Math.min(Math.max(0, pos.x - center.x), edgeLimit.x),\r\n y: Math.min(Math.max(0, pos.y - center.y), edgeLimit.y)\r\n }\r\n this.overlayMarkers[index].style.transform = 'translate(' + (offset.x * this.imageSize.width) + 'px,' + (offset.y * this.imageSize.height) + 'px)';\r\n this.zoomPanel.style.backgroundPosition = (-offset.x * this.zoomedSize.width) + 'px ' + (-offset.y * this.zoomedSize.height) + 'px';\r\n }.bind(this));\r\n }\r\n\r\n hideZoomedView(index) {\r\n this.overlays[index].classList.remove('active');\r\n this.zoomPanel.classList.remove('active');\r\n }\r\n}","class Brands {\r\n constructor(element) {\r\n this.container = typeof (element) === 'string' ? document.querySelector(element) : element;\r\n }\r\n\r\n init() {\r\n this._rightAligned = !!this.container.querySelector('.right-aligned');\r\n this.triggers = this.container.querySelectorAll('.brand-trigger');\r\n this.targetContainer = this.container.querySelector('.brand-target-container');\r\n this.tabBackgrounds = this.container.querySelectorAll('.tab-background');\r\n this.targets = this.targetContainer.querySelectorAll('.brand-target');\r\n this.tabs = Array.from(this.container.querySelectorAll('.brand-tab'));\r\n this.targetId = this.container.querySelector('[target-id]').getAttribute('target-id');\r\n this.modal = document.querySelector('#' + this.targetId);\r\n this.modalContainer = this.modal.querySelector('.message');\r\n this.triggers.forEach(trigger => {\r\n trigger.addEventListener('click', function () {\r\n this._triggerSwitch(trigger);\r\n }.bind(this));\r\n });\r\n\r\n this.tabs.forEach(tab => {\r\n tab.addEventListener('click', function () {\r\n this._filterTargets(tab);\r\n }.bind(this));\r\n });\r\n this._setHeight();\r\n window.addEventListener('resize', this._setHeight.bind(this));\r\n this._currentTrigger = 0;\r\n this._currentTab = 0;\r\n }\r\n\r\n _triggerSwitch(element) {\r\n var parent = element.parentNode;\r\n var index = Array.from(parent.parentNode.children).indexOf(parent);\r\n this._switchBrand(index);\r\n }\r\n\r\n _switchBrand(index) {\r\n if (!this._locked) {\r\n var isLarge = Foundation.MediaQuery.atLeast('large');\r\n if (index !== this._currentTrigger || !isLarge) {\r\n this._locked = true;\r\n this.triggers[this._currentTrigger].classList.remove('active');\r\n this.triggers[index].classList.add('active');\r\n if (isLarge) {\r\n var tl = new TimelineLite({\r\n onComplete: function () {\r\n this._currentTrigger = index;\r\n this._locked = false;\r\n }.bind(this)\r\n })\r\n .set(this.targets[index], { display: 'block' })\r\n .addLabel('start')\r\n .to(this.targets[this._currentTrigger], { x: this._rightAligned ? '-50%' : '50%', autoAlpha: 0, duration: .4 }, 'start')\r\n .fromTo(this.targets[index], { x: this._rightAligned ? '10%' : '-10%', autoAlpha: 0 }, { x: '0%', autoAlpha: 1, duration: .4, delay: -.2 });\r\n }\r\n else {\r\n this.modalContainer.innerHTML = this.targets[index].innerHTML;\r\n $(this.modal).foundation('open');\r\n this._currentTrigger = index;\r\n this._locked = false;\r\n }\r\n }\r\n }\r\n }\r\n\r\n _setHeight() {\r\n if (this.tabs.length) {\r\n var text = this.container.querySelector('.text');\r\n text.style.height = '';\r\n var hiddens = Array.from(this.container.querySelectorAll('.hidden'));\r\n hiddens.forEach(hidden => {\r\n hidden.classList.remove('hidden');\r\n });\r\n text.style.height = text.clientHeight + 'px';\r\n hiddens.forEach(hidden => {\r\n hidden.classList.add('hidden');\r\n });\r\n }\r\n var info = this.container.querySelector('.brand-info');\r\n info.style.height = '';\r\n if (Foundation.MediaQuery.atLeast('large')) {\r\n var maxHeight = 0;\r\n this.targets.forEach(target => {\r\n target.style.display = 'block';\r\n maxHeight = Math.max(target.clientHeight, maxHeight);\r\n target.style.display = '';\r\n });\r\n info.style.height = (maxHeight + 102) + 'px';\r\n }\r\n }\r\n\r\n _filterTargets(tab) {\r\n if (!this._locked) {\r\n var parent = tab.parentNode;\r\n var index = Array.from(parent.parentNode.children).indexOf(parent);\r\n if (index != this._currentTab) {\r\n var targetClass = tab.getAttribute(\"target-class\");\r\n var notHidden;\r\n var currentHidden = false;\r\n this.tabs.forEach((tab, i) => {\r\n if (i === index) {\r\n tab.classList.add('active');\r\n }\r\n else {\r\n tab.classList.remove('active');\r\n }\r\n });\r\n this.triggers.forEach((trigger, i) => {\r\n var parent = trigger.parentNode;\r\n if (parent.classList.contains(targetClass)) {\r\n parent.classList.remove('hidden');\r\n if (notHidden === undefined) {\r\n notHidden = i\r\n }\r\n }\r\n else {\r\n parent.classList.add('hidden');\r\n if (i === this._currentTrigger) {\r\n currentHidden = true;\r\n }\r\n }\r\n });\r\n if (Foundation.MediaQuery.atLeast('large')) {\r\n if (currentHidden) {\r\n this._switchBrand(notHidden);\r\n }\r\n if (this.tabBackgrounds && this.tabBackgrounds.length) {\r\n var tl = new TimelineLite({\r\n onComplete: function () {\r\n gsap.set(this.tabBackgrounds[this._currentTab], { clearProps: 'zIndex,opacity,visibility,x,display' });\r\n this._currentTab = index;\r\n }.bind(this)\r\n })\r\n .set(this.tabBackgrounds[index], { display: 'inherit' })\r\n .fromTo(this.tabBackgrounds[this._currentTab], { zIndex: 2, autoAlpha: 1, x: 0 }, { autoAlpha: 0, x: 200, duration: .5 }, 'start')\r\n }\r\n }\r\n else {\r\n this._currentTab = index;\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport { Brands as default };","class Services {\r\n constructor(element) {\r\n this.container = typeof (element) === 'string' ? document.querySelector(element) : element;\r\n }\r\n\r\n init() {\r\n this.tiles = Array.from(this.container.querySelectorAll('.tile'));\r\n if (Foundation.MediaQuery.atLeast('medium')) {\r\n this.tiles.forEach(tile => {\r\n var hiddenBlock = tile.querySelector('.hidden-block');\r\n hiddenBlock.style.display = 'block';\r\n hiddenBlock.style.marginBottom = -hiddenBlock.clientHeight + 'px';\r\n tile.addEventListener('mouseenter', () => {\r\n if (!tile._timeline) {\r\n var icon = tile.querySelector('.icon');\r\n var hiddenBlock = tile.querySelector('.hidden-block');\r\n hiddenBlock.style.display = 'block';\r\n tile._timeline = gsap.timeline()\r\n .addLabel('start')\r\n .to(icon, { marginTop: -(icon.clientHeight + parseInt(getComputedStyle(icon).marginBottom)), autoAlpha: 0, duration: .3 })\r\n .to(hiddenBlock, { autoAlpha: 1, marginBottom: 0, duration: .3 }, 'start');\r\n }\r\n else {\r\n tile._timeline.play();\r\n }\r\n });\r\n tile.addEventListener('mouseleave', () => {\r\n tile._timeline.reverse();\r\n })\r\n });\r\n }\r\n }\r\n}\r\n\r\nexport { Services as default };","import { Shifter } from './shifter';\r\nimport { Suggestor } from './suggestor';\r\n\r\nexport default function Header() {\r\n var header = document.querySelector('#header');\r\n\r\n var shifter = new Shifter(header.querySelector('.shifter'));\r\n shifter.init();\r\n header.querySelector('#menu-toggle').addEventListener('click', () => {\r\n document.body.classList.toggle('menu-open');\r\n if (!document.body.classList.contains('menu-open')) {\r\n shifter.reset();\r\n }\r\n });\r\n header.querySelector('.mobile-overlay').addEventListener('click', () => {\r\n document.body.classList.remove('menu-open');\r\n });\r\n\r\n /*var searchForm = header.querySelector('.expandable.search');\r\n\r\n var suggestor = new Suggestor({\r\n element: searchForm.querySelector('.suggestor'),\r\n callback: (value) => {\r\n searchInput.value = value;\r\n searchForm.submit();\r\n }\r\n });\r\n\r\n var searchInput = header.querySelector('.expandable.search input');\r\n searchInput.addEventListener('keyup', event => {\r\n suggestor.updateSuggestions(event.target.value);\r\n });\r\n searchInput.addEventListener('blur', event => {\r\n suggestor.hide();\r\n });*/\r\n}","export default class SearchClearer {\r\n constructor(element) {\r\n this.trigger = typeof (element) === 'string' ? document.querySelector(element) : element;\r\n this.input = this.trigger.querySelector(('input[type=\"text\"]'));\r\n this.crossButton = this.trigger.querySelector('button');\r\n this.submitButton = this.trigger.querySelector('button[type=\"submit\"]');\r\n this.scopeValue = undefined;\r\n this.lastPropertyName = undefined;\r\n }\r\n init() {\r\n this.input.addEventListener('input', this.searchclearer.bind(this));\r\n this.crossButton.addEventListener('click', this.clearText.bind(this));\r\n this.input.addEventListener('load', this.pageLoad.bind(this));\r\n\r\n window.addEventListener(\"load\", this.pageLoad.bind(this));\r\n }\r\n\r\n searchclearer(e) {\r\n if (e.target.value.length > 0)\r\n this.crossButton.style.display = 'block';\r\n else\r\n this.crossButton.style.display = 'none';\r\n }\r\n\r\n clearText() {\r\n this.crossButton.click();\r\n this.crossButton.style.display = 'none';\r\n\r\n if (!this.crossButton.className.includes(\"clear-not-submit\") && this.input.attributes[\"ng-model\"]) {\r\n let parts = this.input.attributes[\"ng-model\"].value.split('.');\r\n this.lastPropertyName = parts[parts.length - 1];\r\n let scope = $(this.input).scope();\r\n this.scopeValue = scope;\r\n for (let i = 0; i < parts.length - 1; i++) {\r\n this.scopeValue = scope[parts[i]]; //this.scopeValue will hold last property object here\r\n }\r\n this.scopeValue[this.lastPropertyName] = undefined; //it will clear last property value\r\n scope.$apply(); //this tells angular to update all the bindings with the new data\r\n this.submitButton.click();\r\n this.input.focus();\r\n }\r\n else {\r\n this.input.value = '';\r\n this.input.focus();\r\n }\r\n }\r\n\r\n pageLoad() {\r\n if (this.input.value.length > 0)\r\n this.crossButton.style.display = 'block';\r\n else\r\n this.crossButton.style.display = 'none';\r\n }\r\n}","/****----COMMON----****/\r\nimport Utility from './components/utility/wrapper';\r\n/****----COMPONENTS----****/\r\nimport Sticky from './components/sticky/wrapper';\r\nimport UmbracoForms from './components/umbracoForms/wrapper';\r\nimport Carousel from './components/carousel/wrapper';\r\nimport FeedGridController from '../app_plugins/Feed/feedGrid.controller';\r\nimport FeedResource from '../app_plugins/Feed/feedResource.factory';\r\nimport SearchController from '../app_plugins/Search/search.controller';\r\nimport SearchResource from '../app_plugins/Search/searchResource.factory';\r\nimport VideoWrapper from '../app_plugins/VideoEmbedder/js/wrapper';\r\nimport DataOpenDirective from '../app_plugins/LazyModals/data-open.directive';\r\nimport ModalLoaderDirective from '../app_plugins/LazyModals/modal-loader.directive';\r\nimport MultiCheckbox from './components/multiCheckbox/multi-checkbox.component';\r\nimport ReviewsController from './components/reviews/reviews.controller';\r\nimport StarsComponent from './components/stars/stars.component';\r\nimport LocationSearchComponent from './components/locationSearch/location-search.component';\r\nimport CheckboxDropdownComponent from './components/checkboxDropdown/checkbox-dropdown.component';\r\nimport DealerSearchController from '../scripts/widgets/dealer-search.controller';\r\nimport GoogleMapComponent from './components/googleMap/google-map-component';\r\nimport ProductSelectorComponent from './components/formFields/product-selector.component';\r\nimport DistributorSelectorComponent from './components/formFields/distributor-selector.component';\r\nimport ProductResource from '../app_plugins/Products/productResource.factory';\r\n\r\nexport default function App() {\r\n var module = 'app';\r\n angular.module('app', [])\r\n .config(config)\r\n .run(run);\r\n\r\n run.$inject = [];\r\n function run() {\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 Utility(module);\r\n ReviewsController(module);\r\n StarsComponent(module);\r\n DataOpenDirective(module);\r\n ModalLoaderDirective(module);\r\n VideoWrapper(module);\r\n Sticky(module);\r\n Carousel(module);\r\n MultiCheckbox(module);\r\n UmbracoForms(module);\r\n FeedResource(module);\r\n FeedGridController(module);\r\n SearchResource(module);\r\n SearchController(module);\r\n LocationSearchComponent(module);\r\n CheckboxDropdownComponent(module);\r\n GoogleMapComponent(module);\r\n DealerSearchController(module);\r\n ProductSelectorComponent(module);\r\n DistributorSelectorComponent(module);\r\n ProductResource(module);\r\n\r\n angular.bootstrap(document, ['app']);\r\n}","import VideoEnableJsFilter from \"./video-enable-js.filter\";\r\nimport VideoManagerDirective from \"./video-manager.directive\";\r\nimport VideoProvidersFactory from \"./video-providers.factory\";\r\n\r\nexport default function VideoWrapper(moduleName) {\r\n VideoEnableJsFilter(moduleName);\r\n VideoManagerDirective(moduleName);\r\n VideoProvidersFactory(moduleName);\r\n}","import ImageSourceDirective from './image-source.directive.js';\r\nimport HelperFactory from './helper.factory.js';\r\nimport QueryComponent from './query.component';\r\nimport PaginationComponent from './pagination.component';\r\nimport LazyElementComponent from './lazy-element.component';\r\nimport CompileComponent from './compile.component';\r\nimport GetCropUrlFilter from './get-crop-url.filter';\r\nimport TrustAsMarkupFilter from './trust-as-markup.filter.js';\r\nimport StripParagraphsFilter from './strip-paragraphs.filter.js';\r\nimport FitTextDirective from './fit-text.directive.js';\r\nimport ToNumArrayFilter from './to-num-array.js';\r\nimport AttrsDirective from './attrs.directive';\r\nimport JoinFilter from './join.filter';\r\nimport ArrayFilter from './arrayFilter.filter';\r\nexport default function Utility(module) {\r\n JoinFilter(module);\r\n TrustAsMarkupFilter(module);\r\n ToNumArrayFilter(module);\r\n HelperFactory(module);\r\n ImageSourceDirective(module);\r\n QueryComponent(module);\r\n PaginationComponent(module);\r\n LazyElementComponent(module);\r\n CompileComponent(module);\r\n GetCropUrlFilter(module);\r\n StripParagraphsFilter(module);\r\n FitTextDirective(module);\r\n AttrsDirective(module);\r\n ArrayFilter(module);\r\n};","export default function JoinFilter(module) {\r\n angular.module(module || 'app')\r\n .filter('join', join);\r\n\r\n function join() {\r\n return function (value, property, separator) {\r\n if (!value || !Array.isArray(value)) {\r\n return value;\r\n }\r\n if (!separator) {\r\n separator = ', ';\r\n }\r\n var result = property ? value[0][property] : value[0];\r\n for (var i = 1; i < value.length; i++) {\r\n result += separator + (property ? value[i][property] : value[i]);\r\n }\r\n return result;\r\n }\r\n }\r\n}","export default function TrustAsMarkupFilter(moduleName) {\r\n angular.module(moduleName || 'app')\r\n .filter('trustAsMarkup', trustAsMarkup);\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} ","export default function ToNumArrayFilter(moduleName) {\r\n angular.module(moduleName || 'app')\r\n .filter('toNumArray', toNumArray);\r\n\r\n toNumArray.$inject = ['$sce'];\r\n function toNumArray($sce) {\r\n return function (val, start) {\r\n if (isNaN(val)) {\r\n return [];\r\n }\r\n if (start === undefined) {\r\n start = 1;\r\n }\r\n var result = [];\r\n for (var i = start; i <= val; i++) {\r\n result.push(i);\r\n }\r\n return result;\r\n };\r\n }\r\n} ","export default function HelperFactory(module) {\r\n angular.module(module || 'app')\r\n .factory('helper', helper);\r\n helper.$inject = ['$window', '$rootScope', '$q', '$timeout'];\r\n var userPromise;\r\n var scripts = [];\r\n var googleApiPromise;\r\n\r\n function helper($window, $rootScope, $q, $timeout) {\r\n return {\r\n getMediaQueries: getMediaQueries,\r\n getMediaQuery: getMediaQuery,\r\n getLoadingIndicator: getLoadingIndicator,\r\n getCurrentMediaQuery: getCurrentMediaQuery,\r\n getResponsiveValue: getResponsiveValue,\r\n alert: alert,\r\n loadScript: loadScript,\r\n loadGoogleScripts: loadGoogleScripts\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 alert(title, text) {\r\n $rootScope.alert = {\r\n title: title,\r\n text: text.indexOf('<') === 0 ? text : '

' + text + '

'\r\n };\r\n $rootScope.$evalAsync(function () {\r\n angular.element('#alert').foundation('open');\r\n });\r\n }\r\n\r\n function getResponsiveValue(value) {\r\n if (Foundation.MediaQuery.queries.length < 2) {\r\n Foundation.MediaQuery._reInit();\r\n }\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 function loadScript(source) {\r\n var scriptFound = !!scripts[source];\r\n if (!scriptFound) {\r\n var script = document.createElement('script');\r\n script.async = 1;\r\n script.src = source;\r\n document.querySelector('head').appendChild(script);\r\n }\r\n return scriptFound;\r\n }\r\n\r\n function loadGoogleScripts(apiKey) {\r\n if (googleApiPromise) {\r\n return googleApiPromise;\r\n }\r\n var deferred = $q.defer();\r\n googleApiPromise = deferred.promise;\r\n var scripts = [\r\n 'https://maps.googleapis.com/maps/api/js?libraries=places&callback=_initGoogleApi&key=' + apiKey\r\n ];\r\n var remainingScripts = scripts.length;\r\n $window._initGoogleApi = () => {\r\n remainingScripts--;\r\n if (remainingScripts === 0) {\r\n deferred.resolve();\r\n }\r\n }\r\n scripts.forEach(script => loadScript(script));\r\n return googleApiPromise;\r\n }\r\n }\r\n};","export default function ImageSourceDirective(module) {\r\n angular.module(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(module === 'umbraco' ? '.umb-editor-container' : $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 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 if ($element.is('img')) {\r\n $element.after(placeholder);\r\n }\r\n else {\r\n $element.append(placeholder);\r\n }\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 if (typeof $scope.onloadCallback === \"function\") {\r\n $scope.onloadCallback();\r\n }\r\n\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 $scope.$emit('updateSlantedBackground');\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() * 1.5 && rect.left <= win.width() * 1.5 && rect.bottom <= win.height() * 1.5 + rect.height && rect.right >= -win.width() * .5) {\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 $attrs.$observe(\"imageSourceModel\", function (value) {\r\n if (!value) return;\r\n\r\n deferred.resolve();\r\n url = value;\r\n setSource();\r\n });\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 $element.off('transitionend.imageSource');\r\n cancelListener();\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 exampleController.$inject = ['$scope'];\r\n function exampleController($scope) {\r\n }\r\n })();\r\n \r\n
\r\n */\r\nexport default function QueryComponent(module) {\r\n angular.module(module || 'app')\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 if (changes.params && ctrl.$$paramsValid()) {\r\n ctrl.loading = true;\r\n ctrl.$resource(ctrl.params).then(function (results) {\r\n ctrl.results = results.data;\r\n $timeout(function () {\r\n ctrl.loading = false;\r\n if (ctrl.onChange) {\r\n ctrl.onChange({\r\n data: ctrl.results,\r\n items: ctrl.results && ctrl.results.items ? ctrl.results.items : []\r\n });\r\n }\r\n });\r\n });\r\n }\r\n }\r\n\r\n ctrl.$$paramsValid = function () {\r\n if (!ctrl.requiredParams)\r\n return true;\r\n if (!ctrl.params) {\r\n return false;\r\n }\r\n var requirements = ctrl.requiredParams.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 * @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\nexport default function PaginationComponent(module) {\r\n angular.module(module || 'app')\r\n .component('pagination', {\r\n bindings: {\r\n service: '@?',\r\n take: 'item');\r\n ctrl.params.reservedIndexes = [];\r\n for (var i = 0; i < items.length; i++) {\r\n var item = angular.element(items[i]);\r\n var index = parseInt(item.attr('index'));\r\n ctrl.params.reservedIndexes.push(index);\r\n ctrl._injectedItems.push({\r\n id: 'injected-' + i,\r\n index: index,\r\n markup: item.html(),\r\n _isInjected: true\r\n })\r\n }\r\n }\r\n $element.append(clone.filter(':not(injected-items)'));\r\n }\r\n });\r\n ctrl._transcluded = true;\r\n }\r\n if (changes.service) {\r\n if (changes.service.currentValue) {\r\n var servicePieces = changes.service.currentValue.split('.');\r\n var serviceContainer = $injector.get(servicePieces[0]);\r\n ctrl.$resource = serviceContainer[servicePieces[1]];\r\n }\r\n else {\r\n ctrl.$resource = null;\r\n }\r\n }\r\n if (changes.params && changes.params.currentValue) {\r\n if (ctrl.$$paramsValid(changes.params.currentValue) && ctrl._paramsChanged(changes.params.currentValue, changes.params.previousValue)) {\r\n ctrl.$$toPage(!changes.params.previousValue || changes.params.previousValue.page === undefined ? ctrl.page : 1, true, changes.params.currentValue);\r\n }\r\n else if (ctrl.onError) {\r\n ctrl.onError({ message: 'Required parameter is missing.' });\r\n }\r\n }\r\n };\r\n\r\n ctrl._paramsChanged = function (newValue, oldValue) {\r\n if (newValue && oldValue) {\r\n var newKeys = Object.keys(newValue);\r\n var oldKeys = Object.keys(oldValue);\r\n if (newKeys.length !== oldKeys.length) {\r\n return true;\r\n }\r\n for (var i = 0; i < newKeys.length; i++) {\r\n var key = newKeys[i];\r\n if (typeof (newValue[key]) === 'object') {\r\n if (JSON.stringify(newValue[key]) !== JSON.stringify(oldValue[key])) {\r\n return true;\r\n }\r\n }\r\n else if (newValue[key] !== oldValue[key]) {\r\n return true;\r\n }\r\n }\r\n }\r\n else {\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n //$scope.$watch('$ctrl.params', function (newVal, prevVal) {\r\n // if (newVal !== undefined && !angular.equals(newVal, prevVal)) {\r\n // //console.info('DEBUG: changes.params' + changes.params);\r\n // ctrl.params = newVal;\r\n // if (ctrl.$$paramsValid()) {\r\n // ctrl.$$toPage(1, true);\r\n // }\r\n // else if (ctrl.onError) {\r\n // ctrl.onError({ message: 'Required parameter is missing.' })\r\n // }\r\n // }\r\n //}, true);\r\n //ctrl.$onChanges = function (changes) {\r\n // if (changes.params && !angular.equals(changes.params.currentValue, changes.params.previousValue)) {\r\n // //console.info('DEBUG: changes.params' + changes.params);\r\n // if (ctrl.$$paramsValid()) {\r\n // ctrl.$$toPage(1, true);\r\n // }\r\n // else if (ctrl.onError) {\r\n // ctrl.onError({ message: 'Required parameter is missing.' })\r\n // }\r\n // }\r\n //}\r\n\r\n ctrl.$postLink = function () {\r\n ctrl.$isInfinite = false;\r\n ctrl.scrollTarget = angular.element('[pagination-scroll]');\r\n if (!ctrl.scrollTarget.length) {\r\n ctrl.scrollTarget = angular.element('body,html');\r\n }\r\n if (ctrl.$isInfinite) {\r\n ctrl.$scroller.on('scroll.pagination', function () {\r\n var boundingBox = $element[0].getBoundingClientRect();\r\n if (ctrl.$scroller.height() >= 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 (params) {\r\n params = params || ctrl.params;\r\n if (!ctrl.requiredParams)\r\n return true;\r\n if (!params) {\r\n return false;\r\n }\r\n var requirements = ctrl.requiredParams.replace(' ', '').split(',');\r\n for (var i = 0; i < requirements.length; i++) {\r\n var target = params[requirements[i]];\r\n if (target === undefined || target === null)\r\n return false;\r\n }\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, params) {\r\n page = page || 1;\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 ctrl.refreshing = true;\r\n var stickPoint = ctrl.stickyManager ? ctrl.stickyManager.getStickPoint(1) : 0;\r\n var top = $element[0].getBoundingClientRect().top;\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 params = angular.copy(params || ctrl.params);\r\n params.pageSize = ctrl.take;\r\n params.page = page;\r\n ctrl.$resource(params).then(function (data) {\r\n deferred.resolve(data);\r\n }).catch(function (error) {\r\n deferred.reject(error);\r\n })\r\n /*ctrl.$resource.getCamel(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 (response) {\r\n var data = response.data;\r\n if (refresh !== undefined && refresh) {\r\n ctrl.items = data.items;\r\n ctrl.$lastCheck = 0;\r\n }\r\n else {\r\n ctrl.items = ctrl.items || [];\r\n for (var i = 0; i < data.items.length; i++)\r\n ctrl.items.push(data.items[i]);\r\n }\r\n\r\n ctrl.page = page;\r\n ctrl.count = data.count;\r\n ctrl.list = data.list;\r\n ctrl.labels = data.labels;\r\n ctrl.pageLimit = data.totalPages;\r\n ctrl.finished = ctrl.page === data.totalPages;\r\n ctrl.initialized = true;\r\n ctrl.empty = ctrl.items.length === 0;\r\n ctrl.loading = false;\r\n ctrl.refreshing = false;\r\n\r\n for (var i = 0; i < ctrl._injectedItems.length; i++) {\r\n var item = ctrl._injectedItems[i];\r\n if (ctrl.items.length >= item.index) {\r\n if (!ctrl.items[item.index] || !ctrl.items[item.index]._isInjected) {\r\n ctrl.items.splice(item.index, 0, item);\r\n }\r\n }\r\n else if (ctrl.finished) {\r\n ctrl.items.push(item);\r\n }\r\n }\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 pageSize: ctrl.take,\r\n newItems: data.items,\r\n items: ctrl.items,\r\n count: ctrl.count,\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};","export default function LazyElementComponent(module) {\r\n angular.module(module || 'app')\r\n .component('lazyElement', {\r\n bindings: {\r\n markup: '@'\r\n },\r\n controller: LazyElementController\r\n });\r\n\r\n LazyElementController.$inject = ['$scope', '$element'];\r\n function LazyElementController($scope, $element) {\r\n var vm = this;\r\n vm.$onInit = function () {\r\n vm._clearListener = $scope.$on('loadLazyElement', function (event, data) {\r\n vm._load(data);\r\n });\r\n };\r\n\r\n vm._load = function (data) {\r\n $element.html(vm.markup);\r\n $element.addClass('loaded');\r\n vm._clearListener();\r\n $scope.$emit('lazyElementLoaded', data);\r\n }\r\n }\r\n};","export default function CompileComponent(module) {\r\n angular.module(module || 'app')\r\n .component('compile', {\r\n bindings: {\r\n 'content': '<',\r\n 'ready': ' -1;\r\n for (var i = 0; i < keys.length; i++) {\r\n var key = keys[i];\r\n if ((key === 'height' || key === 'width') && cropName[key] > input[key]) {\r\n continue;\r\n }\r\n url += (!hasQueryString && i === 0 ? '?' : '&') + key + '=' + cropName[key];\r\n }\r\n return url;\r\n }\r\n if (!crops) {\r\n if (!url)\r\n return input;\r\n return url;\r\n }\r\n for (var i = 0; i < crops.length; i++) {\r\n var crop = crops[i];\r\n var _cropName = crop.name || crop.Name;\r\n if (_cropName === cropName)\r\n return crop.url || crop.Url;\r\n }\r\n return url;\r\n }\r\n }\r\n};","export default function StripParagraphsFilter(module) {\r\n angular.module(module || 'app')\r\n .filter('stripParagraphs', stripParagraphs)\r\n\r\n function stripParagraphs() {\r\n return function (value) {\r\n if (!value) {\r\n return value;\r\n }\r\n return value.replaceAll('

', '').replaceAll('

', '');\r\n }\r\n }\r\n}","export default function FitTextDirective(module) {\r\n angular.module(module || 'app')\r\n .directive('fitText', fitText);\r\n\r\n var id = 0;\r\n fitText.$inject = ['$window', '$timeout'];\r\n function fitText($window, $timeout) {\r\n var directive = {\r\n restrict: 'A',\r\n scope: {\r\n container: '@?',\r\n minWidth: '=',\r\n maxWidth: '=',\r\n minSize: '=',\r\n maxSize: '=?',\r\n maxHeight: '=?'\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 $timeout(function () {\r\n var container = $scope.container ? $element.closest($scope.container) : $element;\r\n var currentSize = parseInt($element.css('font-size'));\r\n $element.css({\r\n fontSize: '',\r\n width: ''\r\n });\r\n var containerWidth = container.width();\r\n var elementWidth = $element.width();\r\n if (containerWidth <= elementWidth) {\r\n $scope.$maxSize = $scope.maxSize || parseInt($element.css('font-size'));\r\n if (elementWidth > 0) {\r\n var finalSize;\r\n if ($scope.container) {\r\n var size = containerWidth / elementWidth * $scope.$maxSize;\r\n finalSize = Math.max(size, $scope.minSize);\r\n }\r\n else {\r\n if (containerWidth <= $scope.minWidth) {\r\n finalSize = $scope.minSize;\r\n }\r\n else if (elementWidth <= $scope.maxWidth) {\r\n var widthDiff = $scope.maxWidth - $scope.minWidth;\r\n var sizeDiff = $scope.$maxSize - $scope.minSize;\r\n finalSize = sizeDiff * ((width - $scope.minWidth) / widthDiff) + $scope.minSize;\r\n }\r\n else {\r\n var newSize = $scope.maxSize * ($scope.maxWidth / elementWidth);\r\n finalSize = Math.max(newSize, $scope.minSize);\r\n }\r\n }\r\n if ($scope.maxHeight && finalSize > $scope.minSize) {\r\n var elementHeight = $element.height();\r\n if (elementHeight > $scope.maxHeight) {\r\n newSize = $scope.maxSize * ($scope.maxHeight / elementHeight);\r\n finalSize = Math.max(newSize, $scope.minSize);\r\n }\r\n }\r\n $element.css('font-size', finalSize);\r\n if (finalSize !== currentSize) {\r\n $scope.$emit('sizeChange.fitText', {\r\n size: finalSize\r\n });\r\n }\r\n }\r\n }\r\n });\r\n }\r\n sizeText();\r\n var win = angular.element($window)\r\n .on(`resize.fitText${id}`, sizeText);\r\n $scope.$on('carouselV2.ready', sizeText);\r\n }\r\n }\r\n};","export default function AttrsDirective(module) {\r\n angular.module(module || 'app')\r\n .directive('attrs', attrs);\r\n\r\n var id = 0;\r\n attrs.$inject = ['$parse'];\r\n function attrs($parse) {\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) {\r\n var attrs = $parse($attrs.attrs)($scope);\r\n if (attrs) {\r\n for (const [key, value] of Object.entries(attrs)) {\r\n $element[0].setAttribute(key, value);\r\n }\r\n }\r\n }\r\n }\r\n};","export default function ArrayFilter(module) {\r\n angular.module(module || 'app')\r\n .filter('arrayFilter', arrayFilter);\r\n\r\n function arrayFilter() {\r\n return function (array, filters, select) {\r\n if (!array) {\r\n return array;\r\n }\r\n var result = [];\r\n if (filters) {\r\n for (var i = 0; i < array.length; i++) {\r\n var keys = Object.keys(filters);\r\n var entry = array[i];\r\n for (var j = 0; j < keys.length; j++) {\r\n var key = keys[j];\r\n var value = entry[key];\r\n if (filters[key].indexOf(value) > -1) {\r\n result.push(entry);\r\n }\r\n }\r\n }\r\n }\r\n if (select) {\r\n var newResult = [];\r\n for (var i = 0; i < result.length; i++) {\r\n newResult.push(result[i][select]);\r\n }\r\n result = newResult;\r\n }\r\n return result;\r\n }\r\n }\r\n}","export default function ReviewsController(module) {\r\n angular.module(module)\r\n .controller('ReviewsController', ReviewsController);\r\n\r\n ReviewsController.$inject = ['$http', '$attrs', '$element', '$timeout'];\r\n function ReviewsController($http, $attrs, $element, $timeout) {\r\n var vm = this;\r\n vm.$onInit = () => {\r\n var target = $attrs.reviewSource;\r\n if (target) {\r\n $http.get('/api/reviews/', {\r\n params: {\r\n source: target\r\n },\r\n cache: true\r\n })\r\n .then(response => {\r\n vm.data = response.data;\r\n $timeout(() => {\r\n $element.find('.reviews > div').css('display', '');\r\n })\r\n })\r\n .catch(response => {\r\n vm.error = true;\r\n $timeout(() => {\r\n $element.find('.reviews .error').css('display', '');\r\n })\r\n });\r\n }\r\n }\r\n }\r\n}","export default function StarsComponent(module) {\r\n angular.module(module)\r\n .component('stars', {\r\n bindings: {\r\n fill: '<',\r\n count: '<'\r\n },\r\n controllerAs: 'vm',\r\n controller: StarsController\r\n });\r\n\r\n var id = 1;\r\n\r\n StarsController.$inject = ['$element'];\r\n function StarsController($element) {\r\n var vm = this;\r\n var svgns = 'http://www.w3.org/2000/svg';\r\n vm.$onInit = () => {\r\n vm._id = id++;\r\n if (vm.fill && vm.count) {\r\n $element[0].setAttribute('title', vm.fill + ' out of ' + vm.count + ' stars');\r\n var pos = vm.fill;\r\n for (var i = 0; i < vm.count; i++) {\r\n var fill = '100%';\r\n if (pos < 0) {\r\n fill = '0%';\r\n }\r\n else if (pos < 1) {\r\n fill = ((pos % 1) * 100) + '%';\r\n }\r\n vm._createStar(fill, i);\r\n pos--;\r\n }\r\n }\r\n }\r\n\r\n vm._createStar = (fill, index) => {\r\n var svg = document.createElementNS(svgns, 'svg');\r\n var defs = document.createElementNS(svgns, 'defs');\r\n var gradient = document.createElementNS(svgns, 'linearGradient');\r\n var path = document.createElementNS(svgns, 'path');\r\n var start = document.createElementNS(svgns, 'stop');\r\n var end = document.createElementNS(svgns, 'stop');\r\n\r\n svg.setAttribute('viewBox', '0 0 329.942 329.942')\r\n gradient.id = 'fill-' + vm._id + '-' + index;\r\n path.setAttribute('fill', 'url(#fill-' + vm._id + '-' + index + ')');\r\n path.setAttribute('d', `M329.208,126.666c-1.765-5.431-6.459-9.389-12.109-10.209l-95.822-13.922l-42.854-86.837\r\n\t c-2.527-5.12-7.742-8.362-13.451-8.362c-5.71,0-10.925,3.242-13.451,8.362l-42.851,86.836l-95.825,13.922\r\n\t c-5.65,0.821-10.345,4.779-12.109,10.209c-1.764,5.431-0.293,11.392,3.796,15.377l69.339,67.582L57.496,305.07\r\n\t c-0.965,5.628,1.348,11.315,5.967,14.671c2.613,1.899,5.708,2.865,8.818,2.865c2.387,0,4.784-0.569,6.979-1.723l85.711-45.059\r\n\t l85.71,45.059c2.208,1.161,4.626,1.714,7.021,1.723c8.275-0.012,14.979-6.723,14.979-15c0-1.152-0.13-2.275-0.376-3.352\r\n\t l-16.233-94.629l69.339-67.583C329.501,138.057,330.972,132.096,329.208,126.666z`);\r\n start.setAttribute('offset', fill);\r\n start.setAttribute('stop-color', '#ECBC2F');\r\n end.setAttribute('offset', fill);\r\n end.setAttribute('stop-color', '#ACADB0');\r\n\r\n svg.appendChild(defs);\r\n defs.appendChild(gradient);\r\n gradient.appendChild(start);\r\n gradient.appendChild(end);\r\n svg.appendChild(path);\r\n $element[0].appendChild(svg);\r\n }\r\n }\r\n}","export default function DataOpenDirective(module) {\r\n angular.module(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};","export default function ModalLoaderDirective(module) {\r\n angular.module(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 controllerAs: 'ml'\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 (angular.element('#' + modalName).length) {\r\n if (ctrl.loadedModals.indexOf(modalName) === -1) {\r\n ctrl.loadedModals.push(modalName);\r\n }\r\n }\r\n else 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/modals/get/' + ctrl.rootId + '/', {\r\n params: {\r\n modals: ctrl._modalQueue\r\n }\r\n })\r\n .then(function (response) {\r\n var body = angular.element('body');\r\n var items = response.data;\r\n for (var i = 0; i < items.length; i++) {\r\n var modal = angular.element(items[i].markup);\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\r\n return directive;\r\n }\r\n};","export default function VideoEnableJsFilter(moduleName) {\r\n angular.module(moduleName || '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(\"(function () { if (!document.getElementById('vimeo-script')) { var s = document.createElement('script'); s.id = 'vimeo-script'; s.type = 'text/javascript'; s.async = true; s.onload=window.vimeoPlayerReady; s.src = 'https://player.vimeo.com/api/player.js'; var x = document.getElementsByTagName('script')[0]; x.parentNode.insertBefore(s, x); } })();\";\r\n case \"Wistia, Inc.\":\r\n return markup.replace(\"class=\\\"wistia_embed\", \"id=\\\"\" + id + \"\\\" class=\\\"wistia_embed\");\r\n }\r\n return markup;\r\n };\r\n }\r\n};","/**\r\n * @ngdoc directive\r\n * @module app\r\n * @name app:videoManager\r\n * @scope\r\n * @restrict E\r\n * @description\r\n * Sizes videos to ensure they fit on screen and wires up modal event handling.\r\n * @param {boolean=} fitToScreen Forces the video to fill the viewport. Even if this is false, the video's height will be restricted to ensure the video isn't taller than the viewport.\r\n * @param {string=} provider The name of the video service the video part of. Used to determine how the video events should be wired up.\r\n * @param {string=} videoId Unique id used to identify the video.\r\n */\r\nexport default function VideoManagerDirective(moduleName) {\r\n angular.module(moduleName || 'app')\r\n .directive('videoManager', videoManager);\r\n\r\n var id = 0;\r\n videoManager.$inject = ['$window', '$timeout', 'videoProviders'];\r\n function videoManager($window, $timeout, videoProviders) {\r\n var directive = {\r\n restrict: 'A',\r\n require: '?^^stickyManager',\r\n scope: true,\r\n controller: controller,\r\n bindToController: {\r\n fitToScreen: ' headerSize && boundingRect.top <= $window.innerHeight) {\r\n vm._provider.play();\r\n }\r\n else {\r\n vm._provider.pause();\r\n }\r\n }\r\n };\r\n\r\n vm._loadVideo = function () {\r\n var deferred = $q.defer();\r\n if (vm._loaded) {\r\n deferred.resolve();\r\n }\r\n else {\r\n vm._loadState = 'started';\r\n var clearLoader = $scope.$on('lazyElementLoaded', function (event, videoId) {\r\n if (videoId === vm.videoId) {\r\n clearLoader();\r\n vm._provider.init('player-' + vm.videoId, vm.loop).then(function () {\r\n vm.configure();\r\n vm._loaded = true;\r\n vm._loadState = 'finished';\r\n deferred.resolve();\r\n });\r\n }\r\n });\r\n $scope.$broadcast('loadLazyElement', vm.videoId);\r\n }\r\n return deferred.promise;\r\n };\r\n\r\n vm.playVideo = function () {\r\n if (vm._loadState !== 'started') {\r\n vm._loadVideo()\r\n .then(function () {\r\n vm._provider.play();\r\n });\r\n }\r\n };\r\n }\r\n\r\n return directive;\r\n }\r\n\r\n};","/**\r\n * @ngdoc directive\r\n * @module app\r\n * @name app:videoManager\r\n * @scope\r\n * @restrict E\r\n * @description\r\n * Factory used to create video provider instances. Used to generalize video event handling so that the same methods can be used to control multiple video services. All providers must have the following\r\n * - init: Initializes the video controls, where the id is the id on the player element.\r\n * - play: Plays the video.\r\n * - pause: Pauses the video.\r\n * - stop: Stops the video (for services that don't directly support this, the video should be paused and time should be set back to the start).\r\n * There are also a couple optional settings.\r\n * - callback: Name of the callback function that is triggered when the video service javascript api is ready.\r\n * - scripts: Scripts needed to enable javascript control of the video.\r\n */\r\nexport default function VideoProvidersFactory(moduleName) {\r\n angular.module(moduleName || 'app')\r\n .factory('videoProviders', videoProviders);\r\n\r\n videoProviders.$inject = ['$window', '$q'];\r\n function videoProviders($window, $q) {\r\n var queue = {};\r\n var providerPromises = {};\r\n var providers = {\r\n YouTube: {\r\n callback: 'onYouTubeIframeAPIReady',\r\n scripts: [\r\n 'https://www.youtube.com/iframe_api'\r\n ],\r\n init: function (id, loop) {\r\n var deferred = $q.defer();\r\n var self = this;\r\n self.loop = loop;\r\n providerPromises['YouTube'].then(function () {\r\n self.player = new YT.Player(id, {\r\n events: {\r\n 'onReady': function () {\r\n self.ready = true;\r\n deferred.resolve();\r\n },\r\n onStateChange: function (event) {\r\n if (self.loop && event.data === YT.PlayerState.ENDED) {\r\n self.play();\r\n }\r\n }\r\n }\r\n });\r\n });\r\n return deferred.promise;\r\n },\r\n play: function () {\r\n this.player.playVideo();\r\n },\r\n pause: function () {\r\n this.player.pauseVideo();\r\n },\r\n stop: function () {\r\n this.player.stopVideo();\r\n }\r\n },\r\n Vimeo: {\r\n callback: 'vimeoPlayerReady',\r\n init: function (id) {\r\n var deferred = $q.defer();\r\n var self = this;\r\n providerPromises['Vimeo'].then(function () {\r\n var iframe = angular.element('#' + id);\r\n if (!iframe.is('iframe')) {\r\n iframe = iframe.find('iframe');\r\n }\r\n self.player = new Vimeo.Player(iframe[0]);\r\n self.player.on('loaded', function () {\r\n self.ready = true;\r\n deferred.resolve();\r\n });\r\n });\r\n return deferred.promise;\r\n },\r\n play: function () {\r\n this.player.play();\r\n },\r\n pause: function () {\r\n this.player.pause();\r\n },\r\n stop: function () {\r\n this.player.pause();\r\n this.player.setCurrentTime(0);\r\n }\r\n },\r\n 'Wistia, Inc.': {\r\n scripts: [\r\n '//fast.wistia.com/assets/external/E-v1.js'\r\n ],\r\n init: function (id) {\r\n var deferred = $q.defer();\r\n var self = this;\r\n var vid = angular.element('#' + id);\r\n var classes = vid.attr('class');\r\n var idExtractor = /wistia_async_(\\w+)/;\r\n var videoId = idExtractor.exec(classes)[1];\r\n $window._wq = $window._wq || [];\r\n _wq.push({\r\n id: videoId,\r\n onEmbedded: function (video) {\r\n self.ready = true;\r\n self.player = video;\r\n deferred.resolve();\r\n }\r\n });\r\n return deferred.promise;\r\n },\r\n play: function () {\r\n this.player.play();\r\n },\r\n pause: function () {\r\n this.player.pause();\r\n },\r\n stop: function () {\r\n this.player.pause();\r\n this.player.time(0);\r\n }\r\n }\r\n };\r\n\r\n return {\r\n /**\r\n * @ngdoc method\r\n * @name app.videoProviders#get\r\n * @description\r\n * Creates an instance of the video provider and loads any required scripts.\r\n * @param {string} provider Name of the video service to enable javascript controls for.\r\n * @returns {object} Service that can used to control the video.\r\n */\r\n get: function (provider) {\r\n if (!providers[provider]) {\r\n return null;\r\n }\r\n var prov = providers[provider];\r\n if (!providerPromises[provider]) {\r\n var deferred = $q.defer();\r\n if (prov.callback) {\r\n $window[prov.callback] = function () {\r\n deferred.resolve();\r\n };\r\n if (prov.scripts) {\r\n var firstScriptTag = document.getElementsByTagName('script')[0];\r\n for (var i = 0; i < prov.scripts.length; i++) {\r\n var tag = document.createElement('script');\r\n document.defer = true;\r\n tag.src = prov.scripts[i];\r\n firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);\r\n }\r\n }\r\n }\r\n else {\r\n deferred.resolve();\r\n }\r\n providerPromises[provider] = deferred.promise;\r\n }\r\n return angular.copy(providers[provider]);\r\n }\r\n }\r\n }\r\n};","import StickyComponent from './sticky.component.js';\r\nimport StickyContainerDirective from './sticky-container.directive.js';\r\nimport StickyManagerDirective from './sticky-manager.directive.js';\r\nexport default function Sticky(module) {\r\n StickyManagerDirective(module);\r\n StickyContainerDirective(module);\r\n StickyComponent(module);\r\n};","\r\nexport default function StickyManagerDirective(module) {\r\n angular.module(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 ctrl._header = document.querySelector('#header');\r\n };\r\n\r\n ctrl.stickPoint = 0;\r\n ctrl.getStickPoint = function (id) {\r\n var offset = ctrl._header.clientHeight;\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};","export default function StickyContainerDirective(module) {\r\n angular.module(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};","/**\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\nexport default function StickyComponent(module) {\r\n angular.module(module || 'app')\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 var position = $element.css('position');\r\n ($window.secondaryStylesReady || ctrl._stylesReady).then(function () {\r\n ctrl.$sticker = $element.find('>.sticker');\r\n ctrl.$content = ctrl.$sticker.find('> .content');\r\n ctrl._height = ctrl.$content.outerHeight();\r\n ctrl.$spacer = $element.find('>.spacer');\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', ctrl.$$asyncUpdateSticky);\r\n ctrl.$$updateSticky();\r\n $scope.$on('updateSticky', ctrl.$$updateSticky)\r\n if (ctrl.onInit) {\r\n $timeout(function () {\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 var display = $element.css('display');\r\n if (display !== 'inline' && display !== 'none') {\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 var isReleased = ctrl.released;\r\n ctrl.released = ctrl.$$isReleased();\r\n if (!isReleased && ctrl.released && ctrl.onRelease) {\r\n ctrl.onRelease({\r\n element: $element\r\n });\r\n }\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 if (ctrl.sticking && ctrl.onStick) {\r\n ctrl.onStick({\r\n element: $element\r\n });\r\n }\r\n \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 //if ($('#header').hasClass('alternate')) {\r\n // ctrl._height = 0;\r\n // $('#header').find('.spacer').css('height', '0');\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 ctrl._height = ctrl.$content.outerHeight();\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};","import CarouselComponent from './carousel.component';\r\nimport CarouselNavComponent from './carousel-nav.component';\r\nimport CarouselSyncComponent from './carousel-sync.component';\r\nimport CarouselResource from './carousel-resource.factory';\r\nimport CarouselController from './carousel.controller';\r\n\r\nexport default function Carousel(module) {\r\n CarouselComponent(module);\r\n CarouselNavComponent(module);\r\n CarouselSyncComponent(module);\r\n CarouselResource(module);\r\n CarouselController(module);\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\nexport default function CarouselNavComponent(module) {\r\n\tangular.module(module || 'app')\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};","/**\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\nexport default function CarouselSyncComponent(module) {\r\n angular.module(module || 'app')\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};","export default function CarouselResource(module) {\r\n angular.module(module || 'app')\r\n .factory('carouselResource', carouselResource);\r\n\r\n carouselResource.$inject = ['$http'];\r\n function carouselResource($http) {\r\n return {\r\n slides: function (params) {\r\n return $http.get('/api/carousel/', {\r\n params: params\r\n });\r\n }\r\n };\r\n }\r\n};","export default function CarouselController(module) {\r\n angular.module(module || 'app').controller('CarouselController', CarouselController);\r\n CarouselController.$inject = ['$scope', '$element', '$window'];\r\n\r\n function CarouselController($scope, $element, $window) {\r\n var ctrl = this;\r\n\r\n ctrl.blog = {\r\n spacing: { small: 16, medium: 58, large: 58 },\r\n slideWidth: 1,\r\n slideStyles: function (indexDiff, slideCount) {\r\n return {};\r\n }\r\n };\r\n ctrl.videos = {\r\n spacing: { small: 16, medium: 58, large: 58 },\r\n slideWidth: 1,\r\n slideStyles: function (indexDiff, slideCount) {\r\n var opacity = ((indexDiff < 0 ? indexDiff : (indexDiff - slideCount + 1)) * .5);\r\n return {\r\n pointerEvents: indexDiff === 0 ? '' : 'none',\r\n opacity: indexDiff < 0 ? 1 + opacity : 1 - opacity\r\n };\r\n }\r\n };\r\n ctrl.products = {\r\n spacing: { small: 16, medium: 58, large: 58 },\r\n slideWidth: 1,\r\n slideStyles: function (indexDiff, slideCount) {\r\n var opacity = ((indexDiff < 0 ? indexDiff : (indexDiff - slideCount + 1)) * .5);\r\n return {\r\n //pointerEvents: indexDiff >= 0 && indexDiff <= slideCount - 1 ? '' : 'none',\r\n opacity: indexDiff < 0 ? 1 + opacity : 1 - opacity\r\n };\r\n }\r\n };\r\n ctrl.reviews = {\r\n spacing: { small: 16, medium: 92, large: 92 },\r\n slideWidth: 1,\r\n slideStyles: function (indexDiff, slideCount) {\r\n var opacity = ((indexDiff < 0 ? indexDiff : (indexDiff - slideCount + 1)) * .5);\r\n return {\r\n pointerEvents: indexDiff === 0 ? '' : 'none',\r\n opacity: indexDiff < 0 ? 1 + opacity : 1 - opacity\r\n };\r\n }\r\n };\r\n ctrl.images = {\r\n spacing: { small: 16, medium: 92, large: 92 },\r\n slideWidth: 1,\r\n slideStyles: function (indexDiff, slideCount) {\r\n var opacity = ((indexDiff < 0 ? indexDiff : (indexDiff - slideCount + 1)) * .5);\r\n return {\r\n pointerEvents: indexDiff === 0 ? '' : 'none',\r\n opacity: indexDiff < 0 ? 1 + opacity : 1 - opacity\r\n };\r\n }\r\n };\r\n ctrl.caseStudies = {\r\n spacing: { small: 16, medium: 32, large: 48 },\r\n slideWidth: 1,\r\n slideStyles: function (indexDiff, slideCount) {\r\n var opacity = ((indexDiff < 0 ? indexDiff : (indexDiff - slideCount + 1)) * .5);\r\n return {\r\n opacity: indexDiff < 0 ? 1 + opacity : 1 - opacity\r\n };\r\n }\r\n }\r\n ctrl.services = {\r\n spacing: { small: 16, medium: 32, large: 48 },\r\n slideWidth: 1,\r\n slideStyles: function (indexDiff, slideCount) {\r\n var opacity = ((indexDiff < 0 ? indexDiff : (indexDiff - slideCount + 1)) * .5);\r\n return {\r\n opacity: indexDiff < 0 ? 1 + opacity : 1 - opacity\r\n };\r\n }\r\n }\r\n }\r\n};","export default function MultiCheckbox(module) {\r\n angular.module(module)\r\n .component('multiCheckbox', {\r\n bindings: {\r\n allLabel: '@?',\r\n options: '<',\r\n modelAsString: '\r\n \r\n \r\n \r\n
\r\n \r\n \r\n
\r\n `,\r\n controller: multiCheckboxController,\r\n controllerAs: 'vm'\r\n });\r\n var id = 1;\r\n multiCheckboxController.$inject = ['$element', '$scope', '$compile'];\r\n function multiCheckboxController($element, $scope, $compile) {\r\n var vm = this;\r\n\r\n vm.$onInit = () => {\r\n vm._id = id++;\r\n $scope.$on('clear', vm.clear);\r\n vm.ngModel.$viewChangeListeners.push(vm.updateOptionsStatus);\r\n }\r\n\r\n vm.$onChanges = changes => {\r\n if (changes.options && changes.options.currentValue) {\r\n vm.updateOptionsStatus();\r\n }\r\n }\r\n\r\n vm.clear = () => {\r\n vm.updateOptionsStatus(true);\r\n vm.updateModel();\r\n }\r\n\r\n vm.updateOptionsStatus = (clear) => {\r\n vm.selections = clear ? [] : vm.ngModel.$viewValue || [];\r\n if (vm.options) {\r\n var stringifiedSelections = [];\r\n vm.selections.forEach(selection => {\r\n stringifiedSelections.push(Array.isArray(selection) ? JSON.stringify(selection) : selection);\r\n })\r\n vm.options.forEach(option => {\r\n option.active = stringifiedSelections.indexOf(Array.isArray(option.value) ? JSON.stringify(option.value) : option.value) > -1;\r\n });\r\n }\r\n }\r\n\r\n vm.updateValue = value => {\r\n var stringifiedSelections = [];\r\n vm.selections.forEach(selection => {\r\n stringifiedSelections.push(Array.isArray(selection) ? JSON.stringify(selection) : selection);\r\n })\r\n var index = stringifiedSelections.indexOf(Array.isArray(value) ? JSON.stringify(value) : value);\r\n if (index === -1) {\r\n vm.selections.push(value);\r\n }\r\n else {\r\n vm.selections.splice(index, 1);\r\n }\r\n vm.updateModel();\r\n }\r\n\r\n vm.updateModel = () => {\r\n var model = vm.modelAsString ? vm.ngModel.$setViewValue(vm.selections.join(',')) : vm.selections;\r\n if (vm.ngModel) {\r\n vm.ngModel.$setViewValue(model);\r\n }\r\n if (vm.onChange) {\r\n vm.onChange({\r\n value: model\r\n });\r\n }\r\n }\r\n }\r\n}","import UmbracoFormsValidation from './umbraco-forms-validation';\r\nimport UmbracoFormsController from './umbraco-forms.controller';\r\nexport default function UmbracoForms(module) {\r\n UmbracoFormsValidation();\r\n UmbracoFormsController(module);\r\n};","export default function UmbracoFormsController(module) {\r\n angular.module(module || 'app')\r\n .controller('UmbracoFormsController', UmbracoFormsController);\r\n\r\n UmbracoFormsController.$inject = ['$window', '$scope', '$element', '$attrs', '$http', '$compile'];\r\n function UmbracoFormsController($window, $scope, $element, $attrs, $http, $compile) {\r\n var ctrl = this;\r\n ctrl.$onInit = function () {\r\n //if (!$rootScope.umbracoForms) {\r\n // geolocation.getLocation('status,continentCode,countryCode,region,timezone', ctrl._apiKey)\r\n // .then(function (userData) {\r\n // $rootScope.umbracoForms = {\r\n // region: userData.region,\r\n // countryCode: userData.countryCode,\r\n // timezone: userData.timezone\r\n // };\r\n // });\r\n //}\r\n };\r\n\r\n ctrl.goBack = () => {\r\n ctrl._goBack = true;\r\n }\r\n\r\n ctrl.submitForm = function ($event, isMultiStep, continueInModal) {\r\n $event.preventDefault();\r\n\r\n if (!ctrl.submitting) {\r\n ctrl.submitting = true;\r\n postForm(isMultiStep, continueInModal);\r\n }\r\n };\r\n\r\n function postForm(isMultiStep, continueInModal) {\r\n var valid = false;\r\n if (!ctrl._goBack) {\r\n $element.validate();\r\n valid = $element.valid();\r\n if (!valid) {\r\n ctrl.submitting = false;\r\n }\r\n }\r\n\r\n if (ctrl._goBack || valid) {\r\n var values = $element.serializeArray();\r\n var data = new FormData();\r\n var jsonData = {};\r\n var jsonCheck = /^[\\{\\[]/\r\n values.forEach(function (item, index) {\r\n data.append(item.name, item.value);\r\n if (jsonData[item.name] === undefined) { // New\r\n jsonData[item.name] = item.value ? (jsonCheck.test(item.value) ? JSON.parse(item.value) : item.value) : '';\r\n } else { // Existing\r\n if (!jsonData[item.name].push) {\r\n jsonData[item.name] = [jsonData[item.name]];\r\n }\r\n jsonData[item.name].push(item.value || '');\r\n }\r\n });\r\n\r\n if (ctrl._goBack) {\r\n data.append('__prev', $element[0].querySelector('[name=\"__prev\"]').innerText);\r\n }\r\n\r\n $.post({\r\n method: 'POST',\r\n url: location.pathname,\r\n data: data,\r\n processData: false,\r\n contentType: false,\r\n success: function (response) {\r\n var html = document.createElement('html');\r\n html.innerHTML = response;\r\n var container = $element.parent();\r\n var id = container.attr('id').replace('umbraco_form_', '');\r\n var form = html.querySelector('#' + $element.parent().attr('id') + '> form');\r\n var continueMessage = angular.element('#continue_prompt_' + id);\r\n if (!form) {\r\n var popup = $('#form_popup_' + id);\r\n popup.foundation('open');\r\n var pageForms = Array.from(document.querySelectorAll('#umbraco_form_' + id + ' form'));\r\n if (continueMessage.length) {\r\n continueMessage.css('display', 'none');\r\n }\r\n pageForms.forEach(pageForm => {\r\n pageForm.reset();\r\n });\r\n if ($window.umbracoFormsData && $window.umbracoFormsData[id]) {\r\n delete $window.umbracoFormsData[id];\r\n }\r\n }\r\n else if (isMultiStep) {\r\n if (!$window.umbracoFormsData) {\r\n $window.umbracoFormsData = {};\r\n }\r\n var formData = $window.umbracoFormsData && $window.umbracoFormsData[id] ? $window.umbracoFormsData[id] : {};\r\n formData = {\r\n ...formData,\r\n ...jsonData\r\n };\r\n $window.umbracoFormsData[id] = ctrl.formData = formData;\r\n if (continueInModal) {\r\n var modal = $('#form_step_' + id);\r\n var modalForm;\r\n var isClosed = modal.css('display') === 'none';\r\n if (isClosed) {\r\n var formContainer = modal.find('.form-container');\r\n formContainer = modal.find('.form-container');\r\n formContainer.html(form.parentNode.parentNode.innerHTML);\r\n modalForm = formContainer.find('form');\r\n $compile(formContainer.contents())($scope.$parent);\r\n if (!modal._initialized) {\r\n modal.on('closed.zf.reveal', () => {\r\n if (continueMessage.length && $window.umbracoFormsData[id]) {\r\n continueMessage.css('display', '');\r\n }\r\n });\r\n modal._initialized = true;\r\n }\r\n }\r\n else {\r\n modalForm = modal.find('form');\r\n modalForm.html(form.innerHTML);\r\n $compile(modalForm.contents())($scope);\r\n }\r\n modalForm.removeData(\"validator\").removeData(\"unobtrusiveValidation\");\r\n $.validator.unobtrusive.parse(modalForm);\r\n if (isClosed) {\r\n modal.foundation('open');\r\n }\r\n }\r\n else {\r\n $element.html(form.innerHTML);\r\n $compile($element.contents())($scope);\r\n $element.removeData(\"validator\").removeData(\"unobtrusiveValidation\");\r\n $.validator.unobtrusive.parse($element);\r\n }\r\n }\r\n $scope.$evalAsync(function () {\r\n ctrl.submitted = true;\r\n ctrl.submitting = false;\r\n });\r\n },\r\n error: function () {\r\n $scope.$evalAsync(function () {\r\n ctrl.submitting = false;\r\n });\r\n }\r\n\r\n });\r\n }\r\n ctrl._goBack = false;\r\n }\r\n\r\n ctrl.verifyCaptcha = function (token) {\r\n var verifyCaptchaResult =\r\n $http.get('/api/recaptcha/verify/', {\r\n params: { token: token }\r\n })\r\n .then(function (response) {\r\n return response.data;\r\n })\r\n .catch(function (response) {\r\n console.log(response);\r\n return false;\r\n });\r\n return verifyCaptchaResult;\r\n };\r\n }\r\n};","export default function FeedResource(module) {\r\n angular.module(module || 'app')\r\n .factory('feedResource', feedResource);\r\n\r\n /**\r\n * @ngdoc function\r\n * @name feedResource\r\n * @description\r\n * Collection of api routes used for feeds.\r\n * @requires $resource\r\n * */\r\n feedResource.$inject = ['$http'];\r\n function feedResource($http) {\r\n return {\r\n list: function (params) {\r\n return $http.get('/api/feed/', {\r\n params: params\r\n });\r\n },\r\n calibrateFilters: (ids, pageId, filters, allowedContentTypes, deepSearch, culture, searchTerm) => {\r\n return $http.get('/api/feed/filters/', {\r\n params: {\r\n ids: ids,\r\n pageId: pageId,\r\n filters: filters,\r\n allowedContentTypes: allowedContentTypes,\r\n deepSearch: deepSearch,\r\n culture: culture,\r\n searchTerm: searchTerm\r\n }\r\n })\r\n }\r\n };\r\n }\r\n};","export default function FeedGridController(module) {\r\n /**\r\n * @ngdoc controller\r\n * @name FeedGridController\r\n * @description\r\n * Collects information used to filter the feed and sets up configuration for modal carousel.\r\n * */\r\n angular.module(module || 'app')\r\n .controller('FeedGridController', FeedGridController);\r\n\r\n FeedGridController.$inject = ['$scope', '$attrs', '$window', '$timeout', '$q', 'feedResource'];\r\n function FeedGridController($scope, $attrs, $window, $timeout, $q, feedResource) {\r\n var vm = this;\r\n vm.$onInit = function () {\r\n vm.params = JSON.parse($attrs.parameters);\r\n vm.defaultState = JSON.parse($attrs.defaultState);\r\n vm.initCategories = [];\r\n vm._filtersData = JSON.parse($attrs.filters);\r\n vm.categories = [];\r\n vm._filtersData.forEach(filter => {\r\n vm.categories.push([]);\r\n });\r\n var hasHistory = $window.history.state;\r\n if ($attrs.initCategory) {\r\n vm.categories = JSON.parse($attrs.initCategory);\r\n }\r\n else if ($window.history && $attrs.preserveFilters === 'true') {\r\n $window.addEventListener('beforeunload', event => {\r\n var state = angular.copy(vm.params);\r\n if (state.categories) {\r\n state.categoriesRaw = state.categories.map(item => {\r\n return Array.isArray(item.tags) ? item.tags : Object.values(item.tags);\r\n });\r\n }\r\n $window.history.replaceState(state, document.querySelector('title').innerText);\r\n });\r\n if (hasHistory) {\r\n vm.params = angular.copy($window.history.state);\r\n if ($window.history.state.categoriesRaw) {\r\n vm.categories = $window.history.state.categoriesRaw;\r\n delete vm.params.categoriesRaw;\r\n }\r\n }\r\n }\r\n vm.page = vm.params.page;\r\n vm.searchTerm = vm.params.searchTerm;\r\n vm.sortType = vm.params.sortType;\r\n vm.location = vm.params.location;\r\n vm.filters = [];\r\n\r\n vm._calibrateFilters();\r\n }\r\n vm.openModal = function ($event, index, id) {\r\n $event.preventDefault();\r\n $scope.$root.lockScroll = true;\r\n if (vm.carousel) {\r\n vm.carousel.goToSlide(index, false);\r\n }\r\n this.modalOpen = true;\r\n $scope.$broadcast('playVideo', id + '-' + index);\r\n $timeout(function () {\r\n $scope.$broadcast('feedModalOpened', index);\r\n })\r\n };\r\n\r\n vm.searchByText = (field) => {\r\n vm.params = angular.copy(vm.params);\r\n vm.params[field] = vm[field];\r\n vm.closeFilters();\r\n }\r\n\r\n vm.playVideo = function (index) {\r\n $scope.$broadcast('playVideo', vm._contentTypeAlias + '-' + index);\r\n }\r\n\r\n vm.pauseVideo = function (previousIndex) {\r\n $scope.$broadcast('pauseVideo', vm._contentTypeAlias + '-' + previousIndex);\r\n }\r\n\r\n vm.closeModal = function () {\r\n this.modalOpen = false;\r\n $scope.$root.lockScroll = false;\r\n $scope.$broadcast('closeVideos');\r\n $scope.$broadcast('feedModalClosed');\r\n };\r\n\r\n vm.blockClose = function (event) {\r\n event.stopPropagation();\r\n };\r\n\r\n vm.registerCarousel = function (carousel) {\r\n vm.carousel = carousel;\r\n };\r\n\r\n vm.updateSlides = function (slides, page) {\r\n if (slides && slides.length) {\r\n vm._contentTypeAlias = slides[0].contentTypeAlias;\r\n }\r\n if (page) {\r\n vm.page = page;\r\n }\r\n vm._resetCheck();\r\n vm.modalSlides = angular.copy(slides);\r\n };\r\n\r\n vm.updateHash = function (slide) {\r\n if (slide) {\r\n $window.location.hash = slide.urlName;\r\n }\r\n };\r\n\r\n vm.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 vm.updateCategories = () => {\r\n if (vm._categoriesCalibrated) {\r\n var categories = [];\r\n vm.categories.forEach((category, i) => {\r\n categories.push({\r\n tags: typeof(category) === 'string' ? [category] : angular.copy(category),\r\n orLogic: vm.filters[i].orLogic\r\n });\r\n });\r\n vm.params = angular.copy(vm.params);\r\n vm.params.categories = categories.length ? categories : null;\r\n vm.page = 1;\r\n }\r\n }\r\n\r\n vm.checkCaps = function () {\r\n $scope.$broadcast('checkCaps');\r\n };\r\n\r\n vm._calibrateFilters = () => {\r\n var calibrationPromises = [];\r\n vm._filtersData.forEach(filters => {\r\n calibrationPromises.push(feedResource.calibrateFilters(vm.params.ids, vm.params.pageId, filters.tags, vm.params.allowedContentTypes, vm.params.deepSearch, vm.params.culture, vm.params.searchTerm));\r\n });\r\n calibrationPromises.forEach((promise, i) => {\r\n promise.then(function (result) {\r\n var filters = result.data;\r\n filters.forEach(filter => {\r\n filter.value = filter.key.replaceAll('-', '');\r\n filter.label = filter.name;\r\n\r\n });\r\n vm.filters[this] = {\r\n tags: filters,\r\n orLogic: vm._filtersData[this].orLogic\r\n };\r\n }.bind(i));\r\n });\r\n\r\n $q.all(calibrationPromises)\r\n .then(() => {\r\n vm._categoriesCalibrated = true;\r\n vm._resetCheck();\r\n });\r\n }\r\n\r\n vm.updateSort = () => {\r\n vm.params = angular.copy(vm.params);\r\n vm.params.sortType = vm.sortType;\r\n vm._resetCheck();\r\n };\r\n\r\n vm.openFilters = () => {\r\n vm.filtersOpen = true;\r\n };\r\n\r\n vm.closeFilters = () => {\r\n vm.filtersOpen = false;\r\n }\r\n\r\n vm.reset = () => {\r\n var defaultData = JSON.parse(JSON.stringify(vm.defaultState));\r\n if (vm.params.location) {\r\n defaultData.location = vm.params.location;\r\n }\r\n defaultData.categories = vm.categories.length ? vm.categories : null;\r\n vm.params.page = vm.page;\r\n vm.page = defaultData.page;\r\n vm.searchTerm = defaultData.searchTerm;\r\n vm.sortType = defaultData.sortType;\r\n if (vm.filters && vm.filters.length) {\r\n var categories = []\r\n vm.filters.forEach((filter, i) => {\r\n filter.tags.forEach(tag => {\r\n tag.active = false;\r\n });\r\n categories.push({\r\n tags: [],\r\n orLogic: filter.orLogic\r\n });\r\n if (vm.categories[i].length) {\r\n vm.categories[i].splice(0, vm.categories[i].length);\r\n }\r\n });\r\n defaultData.categories = categories;\r\n }\r\n vm.params = defaultData;\r\n vm.resetable = false;\r\n }\r\n\r\n vm._resetCheck = () => {\r\n vm.resetable = vm.page > 1 || JSON.stringify(vm.defaultState) !== JSON.stringify(vm.params);\r\n }\r\n\r\n vm.clearSearchTerm = () => {\r\n // check every categories, if all blank call reset instead, if not just clear search term and don't reset\r\n var allBlank = true;\r\n if (vm.categories.length) {\r\n vm.categories.forEach((category) => {\r\n if (category.length) {\r\n allBlank = false;\r\n return;\r\n }\r\n })\r\n }\r\n\r\n if (allBlank) {\r\n vm.reset();\r\n } else {\r\n vm.searchTerm = null;\r\n vm.searchByText('searchTerm');\r\n vm.resetable = true;\r\n }\r\n }\r\n }\r\n};","export default function FeedResource(module) {\r\n angular.module(module || 'app')\r\n .factory('searchResource', searchResource);\r\n\r\n /**\r\n * @ngdoc function\r\n * @name feedResource\r\n * @description\r\n * Collection of api routes used for feeds.\r\n * @requires $resourcesearchResource\r\n * */\r\n searchResource.$inject = ['$http'];\r\n function searchResource($http) {\r\n return {\r\n list: function (params) {\r\n return $http.get('/api/search/', {\r\n params: params\r\n });\r\n }\r\n };\r\n }\r\n};","export default function SearchController(module) {\r\n /**\r\n * @ngdoc controller\r\n * @name FeedGridController\r\n * @description\r\n * Collects information used to filter the feed and sets up configuration for modal carousel.\r\n * */\r\n angular.module(module || 'app')\r\n .controller('SearchController', SearchController);\r\n\r\n SearchController.$inject = ['$scope', '$attrs', '$window', '$timeout', '$q', 'feedResource', 'productResource'];\r\n function SearchController($scope, $attrs, $window, $timeout, $q, feedResource, productResource) {\r\n var vm = this;\r\n vm.$onInit = function () {\r\n vm.params = JSON.parse($attrs.parameters);\r\n vm.labelOverides = JSON.parse($attrs.labelOverrides);\r\n var hasHistory = $window.history.state;\r\n if ($window.history) {\r\n $window.addEventListener('beforeunload', event => {\r\n var state = angular.copy(vm.params);\r\n if (state.categories) {\r\n state.categoriesRaw = state.categories.map(item => item.tags);\r\n }\r\n state.page = vm.page;\r\n $window.history.replaceState(state, document.querySelector('title').innerText);\r\n });\r\n if (hasHistory) {\r\n vm.params = angular.copy($window.history.state);\r\n }\r\n }\r\n vm.pageTypes = angular.copy(vm.params.pageTypes || []);\r\n vm.page = vm.params.page;\r\n vm.searchTerm = vm.params.searchTerm;\r\n vm.sortType = vm.params.sortType;\r\n vm._filtersData = JSON.parse($attrs.filters);\r\n vm.filters = [];\r\n vm.initCategories = JSON.parse($attrs.categories);\r\n vm._calibrateFilters();\r\n vm.includeDiscontinued = vm.params.includeDiscontinued === '1';\r\n vm.products = [];\r\n vm.product = vm.params.product;\r\n if ($attrs.customerId) {\r\n var deferred = $q.defer();\r\n vm.cludoReady = deferred.promise;\r\n $window.loadScript('https://customer.cludo.com/scripts/bundles/analytics/1.0.3/cludo-statistics.app.js', () => {\r\n CludoSearch.initialize($attrs.customerId, $attrs.engineId, true);\r\n deferred.resolve();\r\n });\r\n }\r\n vm._videoPopup = $('#video-popup');\r\n vm._videoPopup.on('closed.zf.reveal', () => {\r\n vm.setIframeUrl('');\r\n });\r\n\r\n if ($attrs.withProducts === '1') {\r\n vm._getProducts(true);\r\n }\r\n }\r\n\r\n //Video modal start\r\n vm.openVideoModal = (element, src, item) => {\r\n if (element.currentTarget.className == \"open-video\") {\r\n element.preventDefault();\r\n if (!src.includes('embed') && src.includes('youtu')) {\r\n var videoId = vm.getVideoEmbedUrl(src);\r\n var videoUrl = 'https://www.youtube.com/embed/' + videoId + '?autoplay=1';\r\n vm.setIframeUrl(videoUrl);\r\n }\r\n else {\r\n vm.setIframeUrl(src);\r\n }\r\n\r\n vm._videoPopup.foundation('open');\r\n } else {\r\n console.log('item', item);\r\n var href = element.currentTarget.href;\r\n var hostUrl = $window.location.origin;\r\n var modal = $(\"#leave-message\");\r\n if (!href.includes(hostUrl)) {\r\n element.preventDefault();\r\n element.stopImmediatePropagation();\r\n\r\n modal.find(\"a[target='_blank']\").attr(\"href\", href);\r\n var spanTag = \"\" + href + \"\";\r\n if (modal.html().includes(\"{url}\")) {\r\n modal.html(modal.html().replace(/{url}/g, spanTag));\r\n }\r\n else {\r\n modal.find(\".external-url\").text(href);\r\n }\r\n modal.foundation('open');\r\n } else if (item.type.toLowerCase() === 'documents' || href.contains('.htm') || href.contains('.html')) {\r\n element.preventDefault();\r\n element.stopImmediatePropagation();\r\n window.open(href, '_blank');\r\n }\r\n }\r\n }\r\n\r\n vm.setIframeUrl = (src) => {\r\n document.getElementById('video-iframe').innerHTML = '';\r\n }\r\n\r\n vm.getVideoEmbedUrl = (url) => {\r\n const regExp = /^.*(youtu.be\\/|v\\/|u\\/\\w\\/|embed\\/|watch\\?v=|&v=)([^#&?]*).*/;\r\n const match = url?.match(regExp);\r\n return (match && match[2].length === 11)\r\n ? match[2]\r\n : null;\r\n }\r\n //Video modal end\r\n\r\n vm._getProducts = (initLoad) => {\r\n let brand = '';\r\n let isDiscontinued = false;\r\n if (vm.params.categories && vm.params.categories.length && vm.params.categories[0].tags && vm.params.categories[0].tags.length) {\r\n brand = vm.params.categories[0].tags[0];\r\n }\r\n\r\n if (!initLoad) {\r\n vm.product = null;\r\n vm.params.product = null;\r\n }\r\n productResource.list({\r\n brand: brand,\r\n isDiscontinued: vm.params.includeDiscontinued === true || vm.params.includeDiscontinued == '1',\r\n searchTerm: vm.params.searchTerm\r\n }).then((res) => {\r\n vm.products = res.data ?? [];\r\n });\r\n }\r\n\r\n vm.searchByText = () => {\r\n vm.params = angular.copy(vm.params);\r\n vm.page = 1;\r\n vm.params.page = 1;\r\n vm.params.searchTerm = vm.searchTerm;\r\n vm._getProducts();\r\n vm._calibrateFilters();\r\n }\r\n\r\n vm.updateProduct = () => {\r\n vm.params = angular.copy(vm.params);\r\n //vm.params.categories = null;\r\n vm.params.product = vm.product;\r\n /*for (var i = 0; i < vm.categories.length; i++) {\r\n vm.categories[i] = null;\r\n }\r\n vm.params.categories = null;*/\r\n vm.page = 1;\r\n vm.params.page = 1;\r\n }\r\n\r\n vm.updateDiscontinued = () => {\r\n vm.params = angular.copy(vm.params);\r\n vm.params.includeDiscontinued = vm.includeDiscontinued ? \"1\" : \"0\";\r\n vm.page = 1;\r\n vm.params.page = 1;\r\n vm._getProducts();\r\n }\r\n\r\n vm.updateCategories = (index) => {\r\n if (vm._categoriesCalibrated) {\r\n var categories = [];\r\n vm.categories.forEach((category, i) => {\r\n categories.push({\r\n tags: typeof (category) === 'string' ? [category] : angular.copy(category),\r\n orLogic: vm.filters[i].orLogic\r\n });\r\n });\r\n vm.params = angular.copy(vm.params);\r\n /*vm.product = null;\r\n vm.params.product = null;*/\r\n vm.params.categories = categories.length ? categories : null;\r\n vm.page = 1;\r\n vm._getProducts();\r\n }\r\n }\r\n\r\n vm.syncPage = (page, items) => {\r\n vm.page = page;\r\n if (vm.cludoReady) {\r\n vm.cludoReady.then(() => {\r\n var queryLog = CludoSearch.trackQuery(\r\n vm.searchTerm,\r\n vm.searchTerm + '-' + new Date().getTime(),\r\n items.length,\r\n page,\r\n $attrs.referer\r\n );\r\n CludoSearch.trackClicks(queryLog, '.widget-search .search-result');\r\n });\r\n }\r\n }\r\n\r\n vm.updatePageTypes = () => {\r\n vm.params = angular.copy(vm.params);\r\n vm.page = 1;\r\n vm.params.page = 1;\r\n vm.params.pageTypes = angular.copy(vm.pageTypes);\r\n }\r\n\r\n vm.updateSort = () => {\r\n vm.params = angular.copy(vm.params);\r\n vm.params.sortType = vm.sortType;\r\n vm.page = 1;\r\n vm.params.page = 1;\r\n };\r\n\r\n vm.openFilters = () => {\r\n vm.filtersOpen = true;\r\n };\r\n\r\n vm.closeFilters = () => {\r\n vm.filtersOpen = false;\r\n }\r\n\r\n vm._calibrateFilters = () => {\r\n vm.categories = [];\r\n var sourceIds = $attrs.sourceId ? [$attrs.sourceId] : [];\r\n var calibrationPromises = [];\r\n vm._filtersData.forEach(filters => {\r\n calibrationPromises.push(feedResource.calibrateFilters(sourceIds, 0, filters.tags, null, null, vm.params.culture, vm.params.searchTerm));\r\n });\r\n calibrationPromises.forEach((promise, i) => {\r\n promise.then(function (result) {\r\n var filters = result.data;\r\n var matches = [];\r\n filters.forEach(filter => {\r\n filter.value = filter.key.replaceAll('-', '');\r\n filter.label = filter.name;\r\n if (vm.initCategories.length) {\r\n if (vm.initCategories.indexOf(filter.value) > -1) {\r\n matches.push(filter.value);\r\n }\r\n }\r\n });\r\n vm.filters[this] = {\r\n tags: filters,\r\n orLogic: vm._filtersData[this].orLogic\r\n };\r\n vm.categories[this] = matches[0];\r\n }.bind(i));\r\n });\r\n\r\n $q.all(calibrationPromises)\r\n .then(() => {\r\n vm._categoriesCalibrated = true;\r\n });\r\n }\r\n }\r\n};","export default function LocationSearchComponent(module) {\r\n angular.module(module)\r\n .component('locationSearch', {\r\n bindings: {\r\n placeholder: '@',\r\n countries: '\r\n \r\n `,\r\n controller: LocationSearchController,\r\n controllerAs: 'vm'\r\n });\r\n\r\n LocationSearchController.$inject = ['$scope', '$element', 'helper'];\r\n function LocationSearchController($scope, $element, helper) {\r\n var vm = this;\r\n\r\n vm.$onInit = function () {\r\n vm._input = $element[0].querySelector('input');\r\n vm._wrapListeners();\r\n vm._input.addEventListener('focus', vm.resetModel);\r\n\r\n vm._scriptReady\r\n .then(() => {\r\n vm._autocomplete = new google.maps.places.Autocomplete(vm._input, {\r\n fields: ['formatted_address', 'geometry'],\r\n componentRestrictions: { country: vm.countries }\r\n });\r\n vm._autocomplete.addListener(\"place_changed\", () => {\r\n var place = vm._autocomplete.getPlace();\r\n $scope.$evalAsync(() => {\r\n vm.model = {\r\n latitude: place.geometry.location.lat(),\r\n longitude: place.geometry.location.lng()\r\n };\r\n vm.address = place.formatted_address;\r\n vm.updateModel();\r\n if (vm._delayedSubmit) {\r\n vm._delayedSubmit = false;\r\n $scope.$emit('triggerSubmit');\r\n }\r\n });\r\n });\r\n });\r\n };\r\n\r\n vm.$onChanges = changes => {\r\n if (changes.model.isFirstChange()) {\r\n vm._scriptReady = helper.loadGoogleScripts(vm.apiKey);\r\n }\r\n if (changes.model.currentValue) {\r\n if (!vm.address && changes.model.currentValue.latitude && changes.model.currentValue.longitude) {\r\n vm._scriptReady.then(() => {\r\n var geocoder = new google.maps.Geocoder();\r\n geocoder.geocode({\r\n location: {\r\n lat: vm.model.latitude,\r\n lng: vm.model.longitude\r\n }\r\n })\r\n .then(response => {\r\n $scope.$evalAsync(() => {\r\n vm.address = response.results[0].formatted_address;\r\n });\r\n });\r\n })\r\n }\r\n }\r\n }\r\n\r\n vm._wrapListeners = () => {\r\n var _addEventListener = vm._input.addEventListener;\r\n vm._input.addEventListener = (type, listener) => {\r\n const _listener = listener;\r\n switch (type) {\r\n case 'keydown':\r\n listener = (event) => {\r\n /* Simulate a 'down arrow' keypress if no address has been selected */\r\n const suggestionSelected = document.getElementsByClassName('pac-item-selected').length;\r\n if (event.key === 'Enter' && !suggestionSelected) {\r\n const e = new KeyboardEvent('keydown', {\r\n key: 'ArrowDown',\r\n code: 'ArrowDown',\r\n keyCode: 40,\r\n });\r\n event.preventDefault();\r\n vm._delayedSubmit = true;\r\n _listener.apply(vm._input, [e])\r\n }\r\n _listener.apply(vm._input, [event])\r\n }\r\n break;\r\n case 'blur':\r\n listener = (event) => {\r\n const suggestionSelected = document.getElementsByClassName('pac-item-selected').length;\r\n if (!suggestionSelected) {\r\n event.preventDefault();\r\n vm._delayedSubmit = false;\r\n google.maps.event.trigger(vm._input, 'keydown', {\r\n key: 'ArrowDown',\r\n code: 'ArrowDown',\r\n keyCode: 40,\r\n stopPropagation: () => { },\r\n preventDefault: () => { }\r\n });\r\n }\r\n _listener.apply(vm._input, [event])\r\n }\r\n break;\r\n }\r\n _addEventListener.apply(vm._input, [type, listener])\r\n }\r\n }\r\n\r\n vm.updateModel = () => {\r\n vm.ngModel.$setViewValue(vm.model);\r\n if (vm.onChange) {\r\n vm.onChange({\r\n coordinates: vm.model\r\n });\r\n }\r\n };\r\n\r\n vm.resetModel = () => {\r\n if (vm.model) {\r\n $scope.$evalAsync(() => {\r\n vm.model = undefined;\r\n delete vm.address;\r\n vm.updateModel();\r\n });\r\n }\r\n }\r\n }\r\n}","export default function CheckboxDropdownComponent(module) {\r\n angular.module(module)\r\n .component('checkboxDropdown', {\r\n bindings: {\r\n options: '<',\r\n placeholder: '@',\r\n modelAsString: '\r\n {{vm.selections.length ? vm.text : vm.placeholder}}\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n
\r\n clear\r\n
\r\n `,\r\n controller: checkboxDropdownController,\r\n controllerAs: 'vm'\r\n });\r\n var id = 1;\r\n checkboxDropdownController.$inject = ['$element', '$scope', '$compile'];\r\n function checkboxDropdownController($element, $scope, $compile) {\r\n var vm = this;\r\n\r\n vm.$onInit = () => {\r\n vm._id = id++;\r\n if (vm.placeholder) {\r\n $element[0].addEventListener('mouseleave', vm.close);\r\n }\r\n $scope.$on('clear', vm.clear);\r\n vm.ngModel.$viewChangeListeners.push(vm.updateOptionsStatus);\r\n }\r\n\r\n vm.$onChanges = changes => {\r\n if (changes.options && changes.options.currentValue) {\r\n vm._disabled = changes.options.currentValue && !changes.options.currentValue.length;\r\n if (vm._disabled) {\r\n $element[0].setAttribute('disabled', 'disabled');\r\n }\r\n else {\r\n $element[0].removeAttribute('disabled');\r\n }\r\n vm.updateOptionsStatus();\r\n }\r\n }\r\n\r\n vm.clear = () => {\r\n vm.updateOptionsStatus(true);\r\n vm.updateModel();\r\n }\r\n\r\n vm.updateOptionsStatus = (clear) => {\r\n vm.selections = clear ? [] : vm.ngModel.$viewValue || [];\r\n if (vm.options) {\r\n var selectionItems = [];\r\n vm.options.forEach(option => {\r\n var selectionIndex = vm.selections.indexOf(option.value);\r\n if (selectionIndex > -1) {\r\n option.active = true;\r\n selectionItems[selectionIndex] = option;\r\n }\r\n option.active = vm.selections.indexOf(option.value) > -1;\r\n });\r\n if (selectionItems.length) {\r\n var text = '';\r\n selectionItems.forEach((option, i) => {\r\n if (i > 0) {\r\n text += ', ';\r\n }\r\n text += option.label;\r\n });\r\n vm.text = text;\r\n }\r\n else {\r\n vm.text = vm.placeholder;\r\n }\r\n }\r\n else {\r\n vm.text = vm.placeholder;\r\n }\r\n }\r\n\r\n vm.toggle = () => {\r\n if (!vm._disabled) {\r\n vm.dropdownOpen = !vm.dropdownOpen;\r\n if (Foundation.MediaQuery.current === 'small' && vm.placeholder) {\r\n if (vm.dropdownOpen) {\r\n if (!vm._externalOptions) {\r\n vm._externalOptions = document.createElement('div');\r\n vm._externalOptions.innerHTML = `\r\n
\r\n {{vm.text}}\r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n `;\r\n vm._externalOptions.id = 'checkbox-dropdown-options-' + vm._id;\r\n vm._externalOptions.classList.add('checkbox-dropdown-options');\r\n document.body.append(vm._externalOptions);\r\n $compile(vm._externalOptions)($scope);\r\n }\r\n vm._externalOptions.style.display = 'block';\r\n }\r\n else {\r\n vm._externalOptions.style.display = 'none';\r\n }\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n vm.close = () => {\r\n if (!vm._externalOptions) {\r\n $scope.$evalAsync(() => {\r\n vm.dropdownOpen = false;\r\n });\r\n }\r\n }\r\n\r\n vm.closeExternal = () => {\r\n vm.dropdownOpen = false;\r\n vm._externalOptions.style.display = 'none';\r\n }\r\n\r\n vm.updateValue = option => {\r\n var index = vm.selections.indexOf(option.value);\r\n if (index === -1) {\r\n vm.selections.push(option.value);\r\n if (vm.selections.length === 1) {\r\n vm.text = option.label;\r\n }\r\n else {\r\n vm.text += ', ' + option.label;\r\n }\r\n }\r\n else {\r\n vm.selections.splice(index, 1);\r\n if (!vm.selections.length) {\r\n vm.text = vm.placeholder;\r\n }\r\n else {\r\n var textParts = vm.text.split(', ');\r\n textParts.splice(index, 1);\r\n vm.text = textParts.join(', ');\r\n }\r\n }\r\n vm.updateModel();\r\n }\r\n\r\n vm.updateModel = () => {\r\n if (vm.modelAsString) {\r\n vm.ngModel.$setViewValue(vm.selections.join(','));\r\n }\r\n else {\r\n vm.ngModel.$setViewValue(vm.selections);\r\n }\r\n if (vm.onChange) {\r\n vm.onChange({\r\n selections: vm.selections\r\n });\r\n }\r\n }\r\n }\r\n}","export default function GoogleMapComponent(module) {\r\n angular.module(module)\r\n .component('googleMap', {\r\n bindings: {\r\n apiKey: '@',\r\n position: '<',\r\n items: '<',\r\n mapStyle: ' {\r\n vm._apiReady\r\n .then(() => {\r\n if (vm.initPromise) {\r\n vm.initPromise.then(vm._initMap);\r\n }\r\n else {\r\n vm._initMap();\r\n }\r\n })\r\n }\r\n\r\n vm.$onChanges = changes => {\r\n if (!vm._apiReady) {\r\n vm._mapPromise = $q.defer();\r\n vm._mapReady = vm._mapPromise.promise;\r\n vm._apiReady = helper.loadGoogleScripts(vm.apiKey);\r\n }\r\n vm._apiReady\r\n .then(() => {\r\n return vm._mapReady;\r\n })\r\n .then(() => {\r\n if (changes.position && changes.position.currentValue) {\r\n if (!vm._initPosition) {\r\n vm._initPosition = changes.position.currentValue;\r\n }\r\n vm._updatePosition();\r\n }\r\n if (changes.mapStyle && changes.mapStyle.currentValue) {\r\n vm._updateStyle();\r\n }\r\n if (changes.items && changes.items.currentValue) {\r\n vm._createMarkers();\r\n }\r\n });\r\n }\r\n\r\n vm._initMap = () => {\r\n vm._map = new google.maps.Map($element[0], {\r\n zoom: 12,\r\n mapTypeControl: false,\r\n streetViewControl: false\r\n });\r\n vm._addLocationControl();\r\n if (vm.position) {\r\n vm._mapPromise.resolve();\r\n }\r\n vm._mapPromise.resolve();\r\n }\r\n\r\n vm._addLocationControl = () => {\r\n var controlDiv = document.createElement('div');\r\n\r\n var firstChild = document.createElement('button');\r\n firstChild.style.backgroundColor = '#fff';\r\n firstChild.style.border = 'none';\r\n firstChild.style.outline = 'none';\r\n firstChild.style.width = '40px';\r\n firstChild.style.height = '40px';\r\n firstChild.style.borderRadius = '2px';\r\n firstChild.style.boxShadow = '0 1px 4px rgba(0,0,0,0.3)';\r\n firstChild.style.cursor = 'pointer';\r\n firstChild.style.marginRight = '10px';\r\n firstChild.style.padding = '0';\r\n firstChild.title = 'Your Location';\r\n controlDiv.appendChild(firstChild);\r\n\r\n var secondChild = document.createElement('div');\r\n secondChild.style.margin = '7px';\r\n secondChild.style.width = '26px';\r\n secondChild.style.height = '26px';\r\n secondChild.style.backgroundImage = 'url(https://maps.gstatic.com/tactile/mylocation/mylocation-sprite-2x.png)';\r\n secondChild.style.backgroundSize = '260px 26px';\r\n secondChild.style.backgroundPosition = '-234px 0';\r\n secondChild.style.backgroundRepeat = 'no-repeat';\r\n firstChild.appendChild(secondChild);\r\n\r\n google.maps.event.addListener(vm._map, 'center_changed', function () {\r\n secondChild.style['background-position'] = '-52px 0';\r\n });\r\n\r\n firstChild.addEventListener('click', function () {\r\n vm._map.setCenter(vm._initPosition);\r\n secondChild.style['background-position'] = '-234px 0';\r\n });\r\n\r\n controlDiv.index = 1;\r\n vm._map.controls[google.maps.ControlPosition.RIGHT_BOTTOM].push(controlDiv);\r\n }\r\n\r\n vm._updateStyle = () => {\r\n vm._map.setOptions({\r\n styles: vm.mapStyle\r\n });\r\n }\r\n\r\n vm._updatePosition = () => {\r\n vm._map.setCenter(vm.position);\r\n }\r\n\r\n vm._convertPosition = position => {\r\n return {\r\n lat: position.latitude,\r\n lng: position.longitude\r\n }\r\n }\r\n\r\n vm._createMarkers = () => {\r\n vm._clearMarkers();\r\n if (vm.items && vm.items.length) {\r\n var bounds = new google.maps.LatLngBounds();\r\n vm.items.forEach(item => {\r\n var marker = new google.maps.Marker({\r\n position: vm._getValue(item, vm.mappings.position),\r\n map: vm._map,\r\n label: {\r\n text: vm._getValue(item, vm.mappings.number) + '',\r\n fontWeight: '700',\r\n fontFamily: 'Barlow, sans-serif',\r\n fontSize: '1rem'\r\n },\r\n title: vm._getValue(item, vm.mappings.title),\r\n icon: {\r\n path: google.maps.SymbolPath.CIRCLE,\r\n scale: 16,\r\n fillColor: '#ECBC2F',\r\n strokeWeight: 0.4,\r\n fillOpacity: 1\r\n }\r\n });\r\n if (vm.onMarkerClick) {\r\n marker.addListener('click', () => {\r\n vm.onMarkerClick({\r\n item: item\r\n });\r\n });\r\n }\r\n bounds.extend(marker.getPosition());\r\n vm._markers.push(marker);\r\n });\r\n vm._map.setCenter(bounds.getCenter());\r\n if (vm.items.length < 2) {\r\n vm._map.setZoom(12);\r\n }\r\n else {\r\n vm._map.fitBounds(bounds);\r\n }\r\n }\r\n }\r\n\r\n vm._getValue = (item, key) => {\r\n var keys = key.split('.');\r\n var val = item;\r\n keys.forEach(piece => {\r\n val = val[piece];\r\n });\r\n return val;\r\n }\r\n\r\n vm._clearMarkers = () => {\r\n if (vm._markers) {\r\n vm._markers.forEach(marker => {\r\n marker.setMap(null);\r\n });\r\n }\r\n vm._markers = [];\r\n }\r\n }\r\n}","export default function DealerSearchController(module) {\r\n angular.module(module)\r\n .controller('DealerSearchController', DealerSearchController);\r\n\r\n DealerSearchController.$inject = ['$scope', '$attrs', '$q', '$timeout', '$window'];\r\n function DealerSearchController($scope, $attrs, $q, $timeout, $window) {\r\n var vm = this;\r\n\r\n vm.$onInit = () => {\r\n vm.mapStyle = [\r\n {\r\n \"elementType\": \"geometry\",\r\n \"stylers\": [\r\n {\r\n \"color\": \"#212121\"\r\n }\r\n ]\r\n },\r\n {\r\n \"elementType\": \"labels.text.fill\",\r\n \"stylers\": [\r\n {\r\n \"color\": \"#ffffff\"\r\n }\r\n ]\r\n },\r\n {\r\n \"elementType\": \"labels.text.stroke\",\r\n \"stylers\": [\r\n {\r\n \"color\": \"#212121\"\r\n }\r\n ]\r\n },\r\n {\r\n \"featureType\": \"administrative.neighborhood\",\r\n \"elementType\": \"labels.text.fill\",\r\n \"stylers\": [\r\n {\r\n \"color\": \"#4e4e4e\"\r\n }\r\n ]\r\n },\r\n {\r\n \"featureType\": \"administrative.neighborhood\",\r\n \"elementType\": \"labels.text.stroke\",\r\n \"stylers\": [\r\n {\r\n \"color\": \"#212121\"\r\n }\r\n ]\r\n },\r\n {\r\n \"featureType\": \"poi\",\r\n \"elementType\": \"labels.icon\",\r\n \"stylers\": [\r\n {\r\n \"visibility\": \"off\"\r\n }\r\n ]\r\n },\r\n {\r\n \"featureType\": \"poi\",\r\n \"elementType\": \"labels.text.fill\",\r\n \"stylers\": [\r\n {\r\n \"visibility\": \"off\"\r\n }\r\n ]\r\n },\r\n {\r\n \"featureType\": \"road\",\r\n \"elementType\": \"geometry\",\r\n \"stylers\": [\r\n {\r\n \"color\": \"#3c3c3c\"\r\n }\r\n ]\r\n },\r\n {\r\n \"featureType\": \"road\",\r\n \"elementType\": \"labels.icon\",\r\n \"stylers\": [\r\n {\r\n \"visibility\": \"off\"\r\n }\r\n ]\r\n },\r\n {\r\n \"featureType\": \"road.highway\",\r\n \"elementType\": \"geometry\",\r\n \"stylers\": [\r\n {\r\n \"color\": \"#4e4e4e\"\r\n }\r\n ]\r\n },\r\n {\r\n \"featureType\": \"water\",\r\n \"elementType\": \"geometry\",\r\n \"stylers\": [\r\n {\r\n \"color\": \"#000000\"\r\n }\r\n ]\r\n },\r\n {\r\n \"featureType\": \"water\",\r\n \"elementType\": \"labels.text.fill\",\r\n \"stylers\": [\r\n {\r\n \"color\": \"#3c3c3c\"\r\n }\r\n ]\r\n },\r\n {\r\n \"featureType\": \"water\",\r\n \"elementType\": \"labels.text.stroke\",\r\n \"stylers\": [\r\n {\r\n \"color\": \"#17263c\"\r\n }\r\n ]\r\n }\r\n ];\r\n\r\n vm.mapMappings = {\r\n position: 'properties._location',\r\n title: 'name',\r\n number: 'number'\r\n }\r\n\r\n vm._createStickyPromise();\r\n\r\n vm.params = JSON.parse($attrs.parameters);\r\n\r\n var hasHistory = $window.history.state;\r\n if ($window.history) {\r\n $window.addEventListener('beforeunload', event => {\r\n var state = angular.copy(vm.params);\r\n if (state.categories) {\r\n state.categoriesRaw = state.categories.map(item => item.tags);\r\n }\r\n state.page = vm.page;\r\n $window.history.replaceState(state, document.querySelector('title').innerText);\r\n });\r\n if (hasHistory) {\r\n vm.params = angular.copy($window.history.state);\r\n }\r\n }\r\n var locationReady = $q.defer();\r\n vm._locationReadyPromise = locationReady.promise;\r\n var notDefault = false;\r\n if (vm.params.location) {\r\n notDefault = !vm.params.location.isDefault || (hasHistory && $window.history.state.location);\r\n vm.location = {\r\n lat: vm.params.location.latitude,\r\n lng: vm.params.location.longitude\r\n }\r\n delete vm.params.location;\r\n }\r\n if (vm.location && notDefault) {\r\n locationReady.resolve();\r\n vm.params.location = {\r\n latitude: vm.location.lat,\r\n longitude: vm.location.lng\r\n }\r\n vm.updateFilters();\r\n }\r\n else {\r\n navigator.geolocation.getCurrentPosition(position => {\r\n vm.location = {\r\n lat: position.coords.latitude,\r\n lng: position.coords.longitude\r\n };\r\n vm.params.location = {\r\n latitude: vm.location.lat,\r\n longitude: vm.location.lng\r\n };\r\n locationReady.resolve();\r\n vm.updateFilters();\r\n }, () => {\r\n vm.params.location = {\r\n latitude: vm.location.lat,\r\n longitude: vm.location.lng\r\n };\r\n locationReady.resolve();\r\n vm.updateFilters();\r\n });\r\n }\r\n $scope.$on('triggerSubmit', vm.updateFilters);\r\n }\r\n\r\n vm.updateFilters = () => {\r\n if (JSON.stringify(vm.params) !== vm._previousParams) {\r\n vm.submitting = true;\r\n vm.paginationParams = angular.copy(vm.params);\r\n vm.closeFilters();\r\n vm._previousParams = JSON.stringify(vm.params);\r\n }\r\n }\r\n\r\n vm.updateMap = (items, page, pageSize) => {\r\n vm.submitting = false;\r\n vm.page = page;\r\n if (vm.params.location && vm.location.lat !== vm.params.location.latitude && vm.location.lng !== vm.params.location.longitude) {\r\n vm.location = {\r\n lat: vm.params.location.latitude,\r\n lng: vm.params.location.longitude\r\n }\r\n }\r\n vm.searchResults = angular.copy(items);\r\n vm.searchResults.forEach((item, i) => {\r\n item.properties._location = {\r\n lat: item.properties.location.coordinates.latitude,\r\n lng: item.properties.location.coordinates.longitude\r\n };\r\n item.number = (i + 1) + ((page - 1) * pageSize);\r\n });\r\n if (items.length === 0) {\r\n angular.element('#dealer-search-alert').foundation('open');\r\n }\r\n $timeout(() => {\r\n $scope.$broadcast('updateSticky');\r\n });\r\n }\r\n\r\n vm.goToLocation = item => {\r\n if (vm._previousLocation) {\r\n var previous = document.querySelector('#' + vm._previousLocation);\r\n previous.classList.remove('active');\r\n }\r\n location.hash = 'location-' + item.id;\r\n var target = document.querySelector(location.hash);\r\n target.classList.add('active');\r\n }\r\n\r\n vm._createStickyPromise = () => {\r\n vm._stickyPromise = $q.defer();\r\n vm.stickyReady = vm._stickyPromise.promise;\r\n }\r\n\r\n vm.initMap = () => {\r\n vm._locationReadyPromise\r\n .then(() => {\r\n vm._stickyPromise.resolve();\r\n });\r\n }\r\n\r\n vm.openFilters = () => {\r\n vm.filtersOpen = true;\r\n };\r\n\r\n vm.closeFilters = () => {\r\n vm.filtersOpen = false;\r\n }\r\n }\r\n}","export default function ProductSelectorComponent(module) {\r\n angular.module(module)\r\n .component('productSelector', {\r\n bindings: {\r\n datepickerPlaceholder: '@',\r\n productPickerPlaceholder: '@',\r\n serialNumbersPlaceholder: '@',\r\n selectionsLabel: '@',\r\n addButtonText: '@',\r\n clearButtonText: '@',\r\n onChange: '&?'\r\n },\r\n require: {\r\n ngModel: '?ngModel'\r\n },\r\n template: `\r\n
\r\n\t\t
\r\n \r\n
\r\n {{vm.errors.purchaseDate}}\r\n\t\t\t \r\n {{vm.errors.product}}\r\n\t\t\t \r\n {{vm.errors.serialNumbers}}\r\n\t\t {{vm.addButtonText}}\r\n\t\t
\r\n\t\t
\r\n\t\t\t
{{vm.selectionsLabel}}
\r\n\t\t\t
    \r\n
  • \r\n {{selection.serialNumbers.join(', ')}} ({{selection.name}})\r\n
  • \r\n
\r\n\t\t {{vm.clearButtonText}}\r\n\t\t
\r\n\t
\r\n `,\r\n controller: productSelectorController,\r\n controllerAs: 'vm'\r\n });\r\n var id = 1;\r\n productSelectorController.$inject = ['$http', '$timeout', '$filter', '$element', '$window', '$scope'];\r\n function productSelectorController($http, $timeout, $filter, $element, $window, $scope) {\r\n var vm = this;\r\n\r\n vm.$onInit = () => {\r\n vm._id = id++;\r\n vm.today = new Date();\r\n vm.ngModel.$viewChangeListeners.push(vm.updateViewModel);\r\n vm.options = {};\r\n $http.get('/api/formextensions/products/', {\r\n cache: true\r\n })\r\n .then((response) => {\r\n vm.products = response.data;\r\n });\r\n $timeout(vm.updateViewModel);\r\n if ($window.Pikaday) {\r\n vm._initDatePicker();\r\n }\r\n else {\r\n $window.loadScript('/App_Plugins/UmbracoForms/Assets/moment/min/moment-with-locales.min.js', () => {\r\n $window.loadScript('/App_Plugins/UmbracoForms/Assets/pikaday/pikaday.js', () => {\r\n vm._initDatePicker();\r\n });\r\n });\r\n }\r\n }\r\n\r\n vm.$onDestroy = () => {\r\n if (vm.datePicker) {\r\n vm.datePicker.destroy();\r\n }\r\n }\r\n\r\n vm.$onChanges = changes => {\r\n if (changes.options && changes.options.currentValue) {\r\n vm.updateViewModel();\r\n }\r\n }\r\n\r\n vm._initDatePicker = () => {\r\n var element = $element[0];\r\n var datePickerContainer = element.querySelector('.datepicker-container');\r\n vm.datePicker = new Pikaday({\r\n field: element.querySelector('.datepicker'),\r\n container: datePickerContainer ? datePickerContainer : undefined,\r\n yearRange: $window.umbracoFormsLocale.datePickerYearRange,\r\n i18n: $window.umbracoFormsLocale.locales,\r\n format: \"MM/D/YYYY\",\r\n onSelect: function (date) {\r\n $scope.$evalAsync(() => {\r\n vm.options.purchaseDate = $filter('date')(date, 'yyyy-MM-dd');\r\n vm.updateErrorStatus();\r\n });\r\n },\r\n minDate: new Date('1753-01-01T00:00:00'), //Min value of datetime in SQL Server CE\r\n maxDate: new Date(vm.today.getFullYear(), vm.today.getMonth(), vm.today.getDate()),\r\n setDefaultDate: false\r\n })\r\n }\r\n\r\n vm.clear = () => {\r\n vm.updateViewModel(true);\r\n vm.updateModel();\r\n }\r\n\r\n vm.updateViewModel = (clear) => {\r\n if (clear || !vm.ngModel.$viewValue) {\r\n vm.selections = [];\r\n }\r\n else {\r\n if (typeof (vm.ngModel.$viewValue) === 'string') {\r\n vm.selections = JSON.parse(vm.ngModel.$viewValue);\r\n }\r\n else {\r\n vm.selections = angular.copy(vm.ngModel.$viewValue);\r\n }\r\n }\r\n }\r\n\r\n vm.updateErrorStatus = () => {\r\n if (vm.checkErrors) {\r\n vm.isValid();\r\n }\r\n }\r\n\r\n vm.isValid = () => {\r\n vm.errors = {};\r\n if (!vm.options.purchaseDate) {\r\n vm.errors.purchaseDate = 'A purchase date must be set.';\r\n }\r\n if (!vm.options.product) {\r\n vm.errors.product = 'A product must be selected.';\r\n }\r\n if (!vm.options.serialNumbers) {\r\n vm.errors.serialNumbers = 'A serial number must be entered.'\r\n }\r\n else if (!vm.options.serialNumbers.match(/^((\\d+(,\\s*|\\n)?)+|n\\/a)+$/gmi)) {\r\n vm.errors.serialNumbers = 'Serial numbers must be numbers or \"n/a\" separated by newlines or commas.'\r\n }\r\n return Object.keys(vm.errors).length === 0;\r\n }\r\n\r\n vm.addSelection = () => {\r\n if (vm.isValid()) {\r\n if (!vm.selections) {\r\n vm.selections = [];\r\n }\r\n vm.selections.push({\r\n purchaseDate: vm.options.purchaseDate,\r\n name: vm.options.product,\r\n serialNumbers: vm.options.serialNumbers.split(/\\s*(\\n|,)+\\s*/).filter(text => !text.match(/(\\s|,)+/))\r\n });\r\n vm.updateModel();\r\n vm.checkErrors = false;\r\n vm.options = {};\r\n vm.datePicker.setDate(null);\r\n }\r\n else {\r\n vm.checkErrors = true;\r\n }\r\n }\r\n\r\n vm.updateModel = () => {\r\n if (vm.ngModel) {\r\n if (vm.selections.length) {\r\n vm.ngModel.$setViewValue(angular.copy(vm.selections));\r\n }\r\n else {\r\n vm.ngModel.$setViewValue(null);\r\n }\r\n }\r\n if (vm.onChange) {\r\n vm.onChange({\r\n value: angular.copy(vm.selections)\r\n });\r\n }\r\n }\r\n }\r\n}","export default function DistributorSelectorComponent(module) {\r\n angular.module(module)\r\n .component('distributorSelector', {\r\n bindings: {\r\n distributorSelectorPlaceholder: '@',\r\n customDistributorPrompt: '@',\r\n namePlaceholder: '@',\r\n cityPlaceholder: '@',\r\n statePlaceholder: '@',\r\n onChange: '&?'\r\n },\r\n require: {\r\n ngModel: '?ngModel'\r\n },\r\n template: `\r\n \r\n \r\n The name of the distributor is required.\r\n \r\n The city is a required field.\r\n \r\n Please select a state from the dropdown.\r\n `,\r\n controller: distributorSelectorController,\r\n controllerAs: 'vm'\r\n });\r\n var id = 1;\r\n distributorSelectorController.$inject = ['$http', '$timeout', '$element'];\r\n function distributorSelectorController($http, $timeout, $element) {\r\n var vm = this;\r\n\r\n vm.$onInit = () => {\r\n vm._id = id++;\r\n vm.ngModel.$viewChangeListeners.push(vm.updateViewModel);\r\n vm.changed = {};\r\n vm.locked = true;\r\n $http.get('/api/formextensions/states/', {\r\n cache: true\r\n })\r\n .then((response) => {\r\n vm.states = response.data;\r\n });\r\n $timeout(vm.updateViewModel);\r\n }\r\n\r\n vm.$onChanges = changes => {\r\n if (changes.options) {\r\n vm.updateViewModel();\r\n }\r\n }\r\n\r\n vm.clear = () => {\r\n vm.updateViewModel(true);\r\n vm.updateModel();\r\n }\r\n\r\n vm.updateData = () => {\r\n vm.isCustom = vm.distributor === 'custom';\r\n if (!vm.distributor || vm.isCustom) {\r\n vm.model = {};\r\n }\r\n else {\r\n vm.model = angular.copy(vm.distributor);\r\n }\r\n if (vm.isCustom) {\r\n vm.changed = {};\r\n vm.locked = false;\r\n $timeout(() => {\r\n $element[0].querySelector('input').focus();\r\n });\r\n }\r\n else {\r\n vm.locked = true;\r\n }\r\n vm.updateModel();\r\n }\r\n\r\n vm.updateViewModel = (clear) => {\r\n if (clear) {\r\n vm.model = {};\r\n delete vm.distributor;\r\n }\r\n else {\r\n if (typeof (vm.ngModel.$viewValue) === 'string') {\r\n vm.model = vm.ngModel.$viewValue ? JSON.parse(vm.ngModel.$viewValue) : {};\r\n }\r\n else {\r\n vm.model = angular.copy(vm.ngModel.$viewValue);\r\n }\r\n\r\n $http.get('/api/formextensions/distributors/', {\r\n cache: true\r\n })\r\n .then((response) => {\r\n vm.distributors = response.data;\r\n if (vm.model) {\r\n var name = vm.model.name;\r\n if (name) {\r\n for (var i = 0; i < vm.distributors.length; i++) {\r\n var distributor = vm.distributors[i];\r\n if (distributor.name === name) {\r\n vm.distributor = distributor;\r\n break;\r\n }\r\n }\r\n if (!vm.distributor) {\r\n vm.distributor = 'custom';\r\n }\r\n }\r\n }\r\n });\r\n }\r\n }\r\n\r\n vm.inputChanged = key => {\r\n if (!vm.locked) {\r\n if (vm.changed[key]) {\r\n vm.updateModel();\r\n }\r\n else {\r\n vm.changed[key] = true;\r\n }\r\n }\r\n }\r\n\r\n vm.updateModel = () => {\r\n if (vm.ngModel) {\r\n if (JSON.stringify(vm.model) === '{}') {\r\n vm.ngModel.$setViewValue(undefined);\r\n }\r\n else {\r\n vm.ngModel.$setViewValue(angular.copy(vm.model));\r\n }\r\n }\r\n if (vm.onChange) {\r\n vm.onChange({\r\n value: angular.copy(vm.model)\r\n });\r\n }\r\n }\r\n }\r\n}","export default function FeedResource(module) {\r\n angular.module(module || 'app')\r\n .factory('productResource', productResource);\r\n\r\n /**\r\n * @ngdoc function\r\n * @name productResource\r\n * @description\r\n * Collection of api routes used for products.\r\n * @requires $resource\r\n * */\r\n productResource.$inject = ['$http'];\r\n function productResource($http) {\r\n return {\r\n list: function (params) {\r\n return $http.get('/api/products/', {\r\n params: params\r\n });\r\n }\r\n };\r\n }\r\n};","import Header from './shared/header';\r\nimport App from '../angular/app';\r\nimport ProductsByCategory from './widgets/products-by-category';\r\nimport Revealer from './shared/revealer';\r\nimport Zoomer from './shared/zoomer';\r\nimport Brands from './widgets/brands';\r\nimport Services from './widgets/services';\r\nimport SearchClearer from './shared/searchclearer';\r\nHeader();\r\nApp();\r\nvar productsByCategory = new ProductsByCategory('.widget-products-by-category');\r\nproductsByCategory.init();\r\nvar revealers = Array.from(document.querySelectorAll('.revealer'));\r\nrevealers.forEach(revealer => {\r\n var item = new Revealer(revealer);\r\n item.init();\r\n});\r\n\r\n// external redirect\r\n$(document).on(\"click\", \"a[target='_blank']:not(.leave-website),.external\", function (e) {\r\n var href = e.currentTarget.href;\r\n var hostUrl = window.location.origin;\r\n var modal = $(\"#leave-message\");\r\n if (!href.includes(hostUrl) && modal.find($(e.currentTarget)).length == 0) {\r\n e.preventDefault();\r\n modal.find(\"a[target='_blank']\").attr(\"href\", href);\r\n var spanTag = \"\" + href + \"\";\r\n if (modal.html().includes(\"{url}\")) {\r\n modal.html(modal.html().replace(/{url}/g, spanTag));\r\n }\r\n else {\r\n modal.find(\".external-url\").text(href);\r\n }\r\n modal.foundation('open');\r\n }\r\n});\r\n\r\n/*window.externalModalHandler = function(e, href) {\r\n var hostUrl = window.location.origin;\r\n var modal = $(\"#leave-message\");\r\n if (!href.includes(hostUrl) && modal.find($(e.currentTarget)).length == 0) {\r\n e.preventDefault();\r\n modal.find(\"a[target='_blank']\").attr(\"href\", href);\r\n var spanTag = \"\" + href + \"\";\r\n if (modal.html().includes(\"{url}\")) {\r\n modal.html(modal.html().replace(/{url}/g, spanTag));\r\n }\r\n else {\r\n modal.find(\".external-url\").text(href);\r\n }\r\n modal.foundation('open');\r\n } else {\r\n var newTab = window.open(href, '_blank');\r\n newTab.focus();\r\n }\r\n}*/\r\n\r\n// SearchClearer \r\nvar SearchClearers = Array.from(document.querySelectorAll('.clear-search'));\r\nSearchClearers.forEach(searcher => {\r\n var item = new SearchClearer(searcher);\r\n item.init();\r\n});\r\nvar productIntro = document.querySelector('.widget-intro.variant-product');\r\nif (productIntro) {\r\n var zoomer = new Zoomer({\r\n trigger: productIntro.querySelector('.zoomer'),\r\n aligner: productIntro.querySelector('.product-info'),\r\n images: productIntro.querySelectorAll('.product-image img')\r\n });\r\n zoomer.init();\r\n}\r\nvar brands = Array.from(document.querySelectorAll('.widget-brands.layout-brands'));\r\nbrands.forEach(brand => {\r\n var item = new Brands(brand);\r\n item.init();\r\n})\r\nvar services = Array.from(document.querySelectorAll('.widget-services'));\r\nservices.forEach(service => {\r\n var item = new Services(service);\r\n item.init();\r\n})\r\n\r\n$(document).foundation();\r\n\r\n// Document Search products filter\r\n$(function () {\r\n let $products = $(\"#filter-products-dd\");\r\n if ($products.length > 0) {\r\n $(\"#document-search-discontinued\").on(\"change\", function () {\r\n let checked = $(this).is(\":checked\");\r\n if (checked) {\r\n $products.children().filter(\"[data-discontined='True']\").show();\r\n } else {\r\n $products.children().filter(\"[data-discontined='True']\").hide();\r\n }\r\n }).trigger(\"change\");\r\n }\r\n});"],"names":["Shifter","element","this","document","querySelector","container","level","activeLayers","testNode","backLink","addEventListener","back","bind","toStartLink","backToStart","Array","from","querySelectorAll","forEach","link","event","preventDefault","loadNext","getAttribute","backToLevel","_locked","animate","id","target","classList","add","push","isForward","styles","getComputedStyle","style","display","offset","parseInt","marginLeft","clientWidth","self","tl","gsap","timeline","onComplete","length","pop","remove","addLabel","to","x","autoAlpha","pointerEvents","duration","fromTo","set","clearProps","UmbracoFormsValidation","listen","umbracoFormsCollection","init","formsCollection","undefined","window","aspnetValidation","required","value","params","type","toLowerCase","allCheckboxesOfThisName","form","name","i","checked","Boolean","wrapProviderWithIgnorerBehaviour","provider","offsetParent","validationService","ValidationService","addProvider","pattern","RegExp","test","key","providers","bootstrap","handlePreviousClicked","elements","previousButtonElements","getElementsByClassName","jQuery","$","validator","setDefaults","ignore","unobtrusive","adapters","addBool","addMethod","regex","attr","val","match","configureUmbracoFormsValidation","initCollection","e","formItem","JSON","parse","decodeURI","forms","dependencyCheck","UmbracoFormsConditions","fieldSetConditions","fieldConditions","recordValues","watch","formEl","Umbraco","Sys","body","errorElement","createElement","className","color","backgroundColor","padding","margin","errorMessage","hasValidationFramework","innerHTML","insertBefore","childNodes","fieldsetConditions","values","populateFieldValues","page","formValues","dataTypes","selectFields","field","replace","innerText","textareaFields","checkboxFields","inputFields","matches","operators","Is","expected","dataType","toUpperCase","split","filter","o","IsNot","unexpected","matchingUnexpected","GreaterThen","limit","LessThen","StartsWith","criteria","indexOf","EndsWith","Contains","datepickerfields","hiddenDatePickerField","substr","getElementById","run","changeablefields","fsId","fieldId","cachedResults","evaluateRule","rule","dependencyIsVisible","isVisible","func","operator","evaluateRuleInstance","condition","success","show","actionType","cachedResult","any","logicType","all","fieldsetVisibilities","hasHiddenFieldset","rules","fieldsetId","Error","evaluateCondition","evaluateConditionVisibility","handleCondition","shouldShow","hasOwnProperty","closest","Element","prototype","msMatchesSelector","selector","el","parentElement","readyState","documentElement","doScroll","_coreInitted","_toArray","_getUnit","_first","_ticker","_time1","_getCache","_getGSAP","_lookup","_getID","_getByTarget","_onTick","time","pt","g","t","p","v1","t1","v2","t2","_next","_types","deg","rad","Math","PI","_initCore","utils","toArray","getUnit","core","getCache","ticker","PropTracker","property","next","_gsap","get","rCap","_prev","VelocityTracker","_props","register","_proto","skipRecentTick","dif","rotationCap","console","warn","parseFloat","round","getAll","result","props","isTracking","prev","kill","shallow","track","targets","properties","types","tracker","j","targs","a","untrack","getVelocity","getByTarget","registerPlugin","_parseEase","_power3","_config","PropTween","_checkPointRatio","_clamp","_processingVars","_getTracker","_isNumber","_isObject","_isFunction","_isArray","isArray","_emptyFunc","_bigNum","_extend","obj","defaults","exclude","_deepClone","v","copy","_getClosest","n","max","min","radius","dist","absDif","sqrt","_parseEnd","curProp","end","adjustedEnd","endVar","isNaN","calculated","unitFactor","_getNumOrDefault","vars","defaultValue","_calculateChange","velocity","_calculateDuration","start","abs","_reservedProps","resistance","checkpoint","preventOvershoot","linkedProps","_processLinkedProps","getVal","curVelocity","curDuration","linkedPropNames","parseEase","clamp","config","unitFactors","totalTime","progress","totalProgress","InertiaPlugin","version","tween","index","curVal","unit","change1","change2","cache","dur","durIsObj","overshoot","maxDuration","minDuration","overshootTolerance","recordEnd","curClippedDuration","clippedDuration","inertiaVars","inertia","_calculateTweenDuration","_pt","u","c1","c2","render","ratio","data","_time","_dur","s","d","ProductsByCategory","NodeList","containers","groups","group","CategoryGroup","controls","tabs","summaries","backgrounds","carouselContainers","carousels","_items","tab","switchCategory","prevButton","_shiftLeft","nextButton","_shiftRight","_findViewpointIndexes","_updateNavigationVisibility","contains","_handleResize","parent","parentNode","children","activeItems","_getAnimationElements","targetItems","TimelineLite","background","itemsContainer","summary","carousel","button","items","label","visibleItems","zIndex","staggerTo","staggerFrom","showControls","carouselContainer","allItems","docWidth","node","rect","getBoundingClientRect","left","width","right","_shift","direction","shift","oldShift","currentCarousel","containerEdge","list","leftShiftMax","leftEdge","newOffset","rightEdge","TweenLite","found","lastFound","Revealer","trigger","reveal","startHeight","clientHeight","item","height","Zoomer","options","images","image","aligner","imageSizes","_createElements","enabled","toggle","enable","zoomPanel","overlays","overlayMarkers","appendChild","revealZoomedView","overlay","hideZoomedView","_positionZoom","overlayMarker","disable","removeEventListener","pos","alignRect","source","src","queryPoint","substring","imageSize","_getImage","then","zoomedSize","backgroundImage","_updateOverlay","url","Promise","resolve","reject","Image","onload","dimensions","onerror","error","marker","_getRatio","y","requestAnimationFrame","edgeLimit","center","offsetX","offsetY","overlayRect","pageX","pageY","transform","backgroundPosition","Brands","_rightAligned","triggers","targetContainer","tabBackgrounds","targetId","modal","modalContainer","_triggerSwitch","_filterTargets","_setHeight","_currentTrigger","_currentTab","_switchBrand","isLarge","Foundation","MediaQuery","atLeast","delay","foundation","text","hiddens","hidden","info","maxHeight","notHidden","targetClass","currentHidden","Services","tiles","tile","hiddenBlock","marginBottom","_timeline","play","icon","marginTop","reverse","header","shifter","SearchClearer","input","crossButton","submitButton","scopeValue","lastPropertyName","searchclearer","clearText","pageLoad","click","includes","attributes","parts","scope","$apply","focus","reset","moduleName","module","$locationProvider","html5Mode","requireBase","rewriteLinks","angular","$inject","separator","JoinFilter","trustAsMarkup","$sce","trustAs","TrustAsMarkupFilter","toNumArray","ToNumArrayFilter","factory","helper","googleApiPromise","scripts","$window","$rootScope","$q","$timeout","getMediaQueries","getMediaQuery","getLoadingIndicator","getCurrentMediaQuery","current","queries","keys","Object","getResponsiveValue","_reInit","large","medium","small","alert","title","$evalAsync","loadScript","loadGoogleScripts","apiKey","deferred","defer","promise","remainingScripts","_initGoogleApi","script","css","mediaQueries","pieces","size","matchMedia","nextPieces","query","scriptFound","async","HelperFactory","directive","imageSource","$parse","priority","restrict","$scope","$element","$attrs","directiveId","settings","win","cancelListener","$on","checkPosition","placeholder","placeholderImage","find","positioned","setSource","removeClass","onloadCallback","addClass","position","top","outerHeight","$emit","is","scroller","off","bottom","after","append","previousSize","on","getUrl","retina","$observe","ImageSourceDirective","queryController","$injector","$transclude","ctrl","$onInit","clone","$onChanges","changes","method","currentValue","take","pageSize","service","servicePieces","serviceContainer","$resource","$$paramsValid","loading","results","onChange","requiredParams","requirements","component","bindings","transclude","template","controller","QueryComponent","paginationController","$scroller","scrollContainer","$container","$service","rows","pageLimit","ceil","onError","message","$$initialized","onInit","_transcluded","_injectedItems","injectedItems","reservedIndexes","markup","html","_isInjected","_paramsChanged","previousValue","$$toPage","newValue","oldValue","newKeys","oldKeys","stringify","$postLink","$isInfinite","scrollTarget","boundingBox","nextPage","$onDestroy","updateParam","getParam","param","prevPage","refresh","finished","clearParam","skip","$promise","empty","initialized","refreshing","stickPoint","stickyManager","getStickPoint","stop","scrollTop","slice","response","$lastCheck","count","labels","totalPages","splice","newItems","disableScroll","onFound","require","PaginationComponent","LazyElementController","vm","_clearListener","_load","LazyElementComponent","CompileController","$compile","content","ready","contents","$parent","CompileComponent","cropName","Url","crops","Crops","hasQueryString","crop","Name","GetCropUrlFilter","replaceAll","StripParagraphsFilter","fitText","minWidth","maxWidth","minSize","maxSize","sizeText","currentSize","fontSize","containerWidth","elementWidth","$maxSize","finalSize","widthDiff","newSize","elementHeight","FitTextDirective","attrs","entries","setAttribute","AttrsDirective","array","filters","select","entry","newResult","ArrayFilter","Utility","ReviewsController","$http","reviewSource","fill","controllerAs","StarsController","svgns","_id","_createStar","svg","createElementNS","defs","gradient","path","StarsComponent","dataOpen","modalLoader","bindToController","load","DataOpenDirective","loadedModals","_modalQueue","rootId","modalName","cancel","_requestTimer","modals","Reveal","bindUmbracoFormHandling","innerModals","innerModal","log","videoEnableJs","location","origin","VideoEnableJsFilter","videoManager","videoProviders","fitToScreen","videoId","autoplay","loop","_styleName","instanceId","_clearSlideWatch","_provider","$index","pause","_win","configure","playVideo","$event","headerSize","boundingRect","innerHeight","_loadVideo","_loaded","_loadState","clearLoader","$broadcast","VideoManagerDirective","providerPromises","YouTube","callback","player","YT","Player","events","onStateChange","PlayerState","ENDED","pauseVideo","stopVideo","Vimeo","iframe","setCurrentTime","classes","exec","_wq","onEmbedded","video","prov","firstScriptTag","getElementsByTagName","tag","VideoProvidersFactory","stickies","_header","released","sticking","registerSticky","registration","prioritize","unshift","StickyManagerDirective","getBottom","scrollToTop","StickyContainerDirective","onStick","onRelease","stickyContainer","stickyController","$id","_stylesReady","_stylesReadyCheck","secondaryStylesReady","$sticker","$content","_height","$spacer","$scrollTarget","$$asyncUpdateSticky","$$updateSticky","forceUpdate","isReleased","$$isReleased","newSticky","$$isSticky","$$updateStyling","elementOffset","StickyComponent","Sticky","parentCarousel","carouselSync","paginator","slides","slideCount","auto","autoInterval","startSlide","route","routeTarget","onSlideChange","onEdge","circular","modifiers","CarouselController","ids","slideContent","spacing","slideWidth","slideStyles","indexDiff","_setSlideCount","_dragDisabled","_slideCount","registerCarousel","goToSlide","concat","prevDisabled","nextDisabled","_angle","slideElements","_slider","_updateWidth","_draggable","Draggable","create","_dragger","lockAxis","edgeResistance","dragResistance","throwResistance","throwProps","zIndexBoost","onThrowUpdate","_updatePositions","onThrowComplete","_nextAutoStep","snap","endValue","_updateIndex","_slideSpacing","floor","onDragStart","_autoRunner","onDragEnd","onDrag","$destroyed","_slides","previousPosition","_resize","_slideScale","positionDraggable","targetIndex","half","isSlideable","indexPos","newIndex","previousIndex","slide","slideOffset","angle","_test","baseStyles","newStyles","handleChildEdgeHit","nextSlide","prevSlide","lockAnimation","updateCarousels","updateSlides","maxIndex","onUpdate","update","CarouselComponent","carouselNavController","carouselIndex","CarouselNavComponent","$carousels","CarouselSyncComponent","carouselResource","CarouselResource","blog","videos","opacity","products","reviews","caseStudies","services","Carousel","allLabel","modelAsString","ngModel","multiCheckboxController","clear","$viewChangeListeners","updateOptionsStatus","updateModel","selections","$viewValue","stringifiedSelections","selection","option","active","updateValue","model","$setViewValue","join","MultiCheckbox","UmbracoFormsController","goBack","_goBack","submitForm","isMultiStep","continueInModal","submitting","valid","validate","serializeArray","FormData","jsonData","jsonCheck","post","pathname","processData","contentType","continueMessage","umbracoFormsData","formData","modalForm","isClosed","formContainer","_initialized","removeData","pageForms","pageForm","submitted","postForm","verifyCaptcha","token","feedResource","calibrateFilters","pageId","allowedContentTypes","deepSearch","culture","searchTerm","FeedResource","FeedGridController","parameters","defaultState","initCategories","_filtersData","categories","hasHistory","history","state","initCategory","preserveFilters","categoriesRaw","map","tags","replaceState","sortType","_calibrateFilters","openModal","$root","lockScroll","modalOpen","searchByText","closeFilters","_contentTypeAlias","closeModal","blockClose","stopPropagation","contentTypeAlias","_resetCheck","modalSlides","updateHash","hash","urlName","syncAnimations","wow","sync","updateCategories","_categoriesCalibrated","category","orLogic","checkCaps","calibrationPromises","updateSort","openFilters","filtersOpen","defaultData","resetable","clearSearchTerm","allBlank","searchResource","SearchResource","SearchController","productResource","labelOverides","labelOverrides","pageTypes","includeDiscontinued","product","customerId","cludoReady","CludoSearch","initialize","engineId","_videoPopup","setIframeUrl","withProducts","_getProducts","openVideoModal","currentTarget","videoUrl","getVideoEmbedUrl","href","hostUrl","stopImmediatePropagation","open","spanTag","initLoad","brand","isDiscontinued","res","updateProduct","updateDiscontinued","syncPage","queryLog","trackQuery","Date","getTime","referer","trackClicks","updatePageTypes","sourceIds","sourceId","LocationSearchController","_input","_wrapListeners","resetModel","_scriptReady","_autocomplete","google","maps","places","Autocomplete","fields","componentRestrictions","country","countries","addListener","place","getPlace","latitude","geometry","lat","longitude","lng","address","formatted_address","_delayedSubmit","isFirstChange","Geocoder","geocode","_addEventListener","listener","_listener","suggestionSelected","KeyboardEvent","code","keyCode","apply","coordinates","LocationSearchComponent","checkboxDropdownController","close","_disabled","removeAttribute","selectionItems","selectionIndex","dropdownOpen","_externalOptions","closeExternal","textParts","CheckboxDropdownComponent","GoogleMapController","_apiReady","initPromise","_initMap","_mapPromise","_mapReady","_initPosition","_updatePosition","mapStyle","_updateStyle","_createMarkers","_map","Map","zoom","mapTypeControl","streetViewControl","_addLocationControl","controlDiv","firstChild","border","outline","borderRadius","boxShadow","cursor","marginRight","secondChild","backgroundSize","backgroundRepeat","setCenter","ControlPosition","RIGHT_BOTTOM","setOptions","_convertPosition","_clearMarkers","bounds","LatLngBounds","Marker","_getValue","mappings","number","fontWeight","fontFamily","SymbolPath","CIRCLE","scale","fillColor","strokeWeight","fillOpacity","onMarkerClick","extend","getPosition","_markers","getCenter","setZoom","fitBounds","piece","setMap","GoogleMapComponent","DealerSearchController","mapMappings","_createStickyPromise","locationReady","_locationReadyPromise","notDefault","isDefault","updateFilters","navigator","geolocation","getCurrentPosition","coords","_previousParams","paginationParams","updateMap","searchResults","_location","goToLocation","_previousLocation","_stickyPromise","stickyReady","initMap","datepickerPlaceholder","productPickerPlaceholder","serialNumbersPlaceholder","selectionsLabel","addButtonText","clearButtonText","productSelectorController","$filter","today","updateViewModel","Pikaday","_initDatePicker","datePicker","destroy","datePickerContainer","yearRange","umbracoFormsLocale","datePickerYearRange","i18n","locales","format","onSelect","date","purchaseDate","updateErrorStatus","minDate","maxDate","getFullYear","getMonth","getDate","setDefaultDate","checkErrors","isValid","errors","serialNumbers","addSelection","setDate","ProductSelectorComponent","distributorSelectorPlaceholder","customDistributorPrompt","namePlaceholder","cityPlaceholder","statePlaceholder","distributorSelectorController","changed","locked","states","updateData","isCustom","distributor","distributors","inputChanged","DistributorSelectorComponent","ProductResource","App","revealer","searcher","productIntro","$products","hide"],"sourceRoot":""}