{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/app/lib/util.js","webpack:///./src/responsive.plain-javascript/polyfills/promise.js","webpack:///./src/responsive.plain-javascript/utils/validation.js","webpack:///./src/responsive.plain-javascript/utils/field.js","webpack:///./src/app/widgets/widget.base.js","webpack:///./src/app/lib/domComponent.js","webpack:///./src/app/lib/const.js","webpack:///./src/app/services/body.js","webpack:///./src/app/lib/ajax.js","webpack:///./src/app/services/image-caption.js","webpack:///./node_modules/pug-runtime/index.js","webpack:///./src/app/services/nav.js","webpack:///./src/app/widgets/rich-text/rich-text.widget.js","webpack:///./src/app/widgets/dual-pane-graphical-callout-list/dual-pane-graphical-callout-list.widget.js","webpack:///./src/app/forms/validation.js","webpack:///./src/app/widgets/search-results/search-result.template.pug","webpack:///./src/app/widgets/search-results/search-results.widget.js","webpack:///./src/app/widgets/blog/blog-callout.template.pug","webpack:///./src/app/widgets/blog/blog-gallery.widget.js","webpack:///./src/app/lib/dom.js","webpack:///./src/app/widgets/careers-accordion/careers-accordion.widget.js","webpack:///./node_modules/hammerjs/hammer.js","webpack:///./src/app/services/carousel.js","webpack:///./src/app/widgets/hero-carousel/hero-carousel.widget.js","webpack:///./src/app/widgets/hero/hero.widget.js","webpack:///./src/app/components/modal/bio-modal.js","webpack:///./src/app/components/promo-banner/promo-banner.js","webpack:///./src/app/components/modal/modal.js","webpack:///./src/app/header/header.js","webpack:///./src/app/lib/polyfills.js","webpack:///./src/responsive.plain-javascript/utils/ajax.js","webpack:///./src/responsive.plain-javascript/steps/render-field.js","webpack:///./src/responsive.plain-javascript/steps/render-cell.js","webpack:///./src/responsive.plain-javascript/steps/render-row.js","webpack:///./src/responsive.plain-javascript/utils/map-fields-by-id.js","webpack:///./src/responsive.plain-javascript/steps/render-form.js","webpack:///./src/responsive.plain-javascript/steps/render-forms.js","webpack:///./src/responsive.plain-javascript/steps/get-form-data.js","webpack:///./src/responsive.plain-javascript/validators/required.js","webpack:///./src/responsive.plain-javascript/validators/regex.js","webpack:///./src/responsive.plain-javascript/steps/get-field-validators.js","webpack:///./src/responsive.plain-javascript/fields/plain-textarea.js","webpack:///./src/responsive.plain-javascript/fields/plain-checkbox.js","webpack:///./src/responsive.plain-javascript/fields/plain-rich-text.js","webpack:///./src/responsive.plain-javascript/fields/plain-button.js","webpack:///./src/responsive.plain-javascript/lib/promiscuous-browser-shim-full.js","webpack:///./src/responsive.plain-javascript/utils/add-classes.js","webpack:///./src/responsive.plain-javascript/fields/plain-text.js","webpack:///./src/responsive.plain-javascript/steps/get-field-renderers.js","webpack:///./src/responsive.plain-javascript/plain-index.js","webpack:///./src/app/components/formulate/brite-verify-validation.js","webpack:///./node_modules/promiscuous/promiscuous-browser-full.js","webpack:///./src/app/index.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","mq","breakpoint","direction","arguments","length","undefined","_const","mqMap","push","query","window","matchMedia","matches","debounce","fn","interval","slide","context","_this","this","_arguments","timeout","clearTimeout","setTimeout","apply","debounceWithSlide","debounceWithoutSlide","debounce2","func","wait","immediate","args","callNow","createEvent","event","document","initEvent","each","nodeList","cb","click","elem","evt","MouseEvent","bubbles","cancelable","view","dispatchEvent","getUrlParamByName","parameterName","result","tmp","location","search","substr","split","forEach","item","decodeURIComponent","scrollTo","element","to","duration","start","scrollTop","change","currentTime","animateScroll","val","Math","easeInOutQuad","getVerticalOffset","getBoundingClientRect","top","pageYOffset","capitalizeFirstLetter","string","charAt","toUpperCase","slice","getIndex","previousElementSibling","getUrlParams","vars","href","replace","querify","obj","entries","map","_ref","_ref2","_slicedToArray","join","isDev","origin","indexOf","b","FormulatePromise","Promise","ValidationUtilities","checkValidity","validator","validityFnName","then","success","message","data","configuration","isValueSet","prepareValidators","validationData","fieldValidators","validationOptions","preparedValidators","validationType","addValidationMessages","containerElement","messages","priorListElement","parentNode","removeChild","listElement","itemElement","createElement","classList","add","appendChild","createTextNode","aggregateValidations","validationPromises","all","results","failures","x","checkTextValidity","fieldRenderer","validators","checkValidityCommon","checkBoolValidity","validationResults","validationListElement","remove","idCount","Field","initializeFieldPrototype","fieldPrototype","setData","options","alias","id","rawDataByAlias","append","initializeField","fieldData","useWrapper","fieldElement","wrapperElement","labelElement","fieldId","nodeName","type","setAttribute","label","cssClasses","usePlaceholder","useLabel","prefix","toString","generateId","wrapper","validations","WidgetBase","el","_classCallCheck","_possibleConstructorReturn","__proto__","getPrototypeOf","DomComponent","querySelectorAll","selector","xs","sm","md","lg","xl","navDesktop","widgetSpacing","default","durationSlow","navDesktopMQ","mobileNavHeight","bodyService","lock","body","contains","unlock","islocked","STATUS_SUCCESS","METHOD_POST","SendRequest","url","self","state","request","XMLHttpRequest","resolve","reject","onreadystatechange","handleStateChange","status","open","send","readyState","text","responseText","rootElm","images","_util","image","alt","paragraph","style","fontStyle","className","innerHTML","insertBefore","nextSibling","pug_has_own_property","pug_classes","escaping","Array","isArray","classString","padding","escapeEnabled","pug_escape","pug_classes_array","pug_classes_object","pug_style","out","pug_attr","escaped","terse","toJSON","JSON","stringify","merge","pug_merge","a","attrs","valA","concat","valB","classes","attr","pug_match_html","_html","html","regexResult","exec","lastIndex","escape","index","charCodeAt","substring","rethrow","pug_rethrow","err","filename","lineno","str","Error","readFileSync","ex","lines","max","end","min","line","curr","path","navHeight","items","console","log","navItem","sectionName","dataset","navSection","textContent","trim","offset","addEventListener","e","scrollToTarget","pad","scrollEl","scrollingElement","documentElement","RichTextWidget","imgCaptionService","_imageCaption2","loaded","DualPaneWidget","ValidationComponent","requiredInputSelector","errorMessageMap","validate","preventDefault","_this2","valid","input","removeErrorMessage","createErrorMessage","required","getAttribute","div","innerText","parentElement","pug","locals","pug_interp","pug_html","locals_for_with","displayUrl","link","summary","Url","Title","SearchResultsWidget","api","params","allowedParams","defaultParams","term","skip","take","noResults","querySelector","resultList","loader","loadMore","loadMoreHandler","getInitialParams","getContent","clear","queryString","_ajax2","res","parse","render","catch","error","grid","_searchResultTemplate2","children","count","supplied","initial","param","assign","header","tags","BlogGalleryWidget","activeClass","filters","filter","filterHandler","tag","activeFilter","_blogCalloutTemplate2","totalCount","_dom","CareersAccordion","toggles","toggle","firstElementChild","content","nextElementSibling","icon","previousActiveContent","previousActiveIcon","previousActiveHeader","__WEBPACK_AMD_DEFINE_RESULT__","exportName","VENDOR_PREFIXES","TEST_ELEMENT","TYPE_FUNCTION","round","abs","now","Date","setTimeoutContext","bindFn","invokeArrayArg","arg","iterator","deprecate","method","deprecationMessage","stack","warn","target","TypeError","output","source","nextKey","extend","dest","src","keys","inherit","child","base","properties","childP","baseP","constructor","_super","boolOrFn","ifUndefined","val1","val2","addEventListeners","types","handler","splitStr","removeEventListeners","removeEventListener","hasParent","node","parent","inStr","find","inArray","findByKey","toArray","uniqueArray","sort","values","prefixed","prop","camelProp","_uniqueId","getWindowForElement","doc","ownerDocument","defaultView","parentWindow","SUPPORT_TOUCH","SUPPORT_POINTER_EVENTS","SUPPORT_ONLY_TOUCH","test","navigator","userAgent","COMPUTE_INTERVAL","INPUT_START","INPUT_MOVE","INPUT_END","INPUT_CANCEL","DIRECTION_NONE","DIRECTION_LEFT","DIRECTION_RIGHT","DIRECTION_UP","DIRECTION_DOWN","DIRECTION_HORIZONTAL","DIRECTION_VERTICAL","DIRECTION_ALL","PROPS_XY","PROPS_CLIENT_XY","Input","manager","callback","inputTarget","domHandler","ev","enable","init","inputHandler","eventType","pointersLen","pointers","changedPointersLen","changedPointers","isFirst","isFinal","session","pointersLength","firstInput","simpleCloneInputData","firstMultiple","offsetCenter","center","getCenter","timeStamp","deltaTime","angle","getAngle","distance","getDistance","offsetDelta","prevDelta","prevInput","deltaX","y","deltaY","computeDeltaXY","offsetDirection","getDirection","overallVelocity","getVelocity","overallVelocityX","overallVelocityY","scale","getScale","rotation","getRotation","maxPointers","velocity","velocityX","velocityY","last","lastInterval","v","computeIntervalInputData","srcEvent","computeInputData","emit","recognize","clientX","clientY","p1","p2","props","sqrt","atan2","PI","evEl","evTarget","evWin","destroy","MOUSE_INPUT_MAP","mousedown","mousemove","mouseup","MOUSE_ELEMENT_EVENTS","MOUSE_WINDOW_EVENTS","MouseInput","pressed","button","which","pointerType","POINTER_INPUT_MAP","pointerdown","pointermove","pointerup","pointercancel","pointerout","IE10_POINTER_TYPE_ENUM","2","3","4","5","POINTER_ELEMENT_EVENTS","POINTER_WINDOW_EVENTS","PointerEventInput","store","pointerEvents","MSPointerEvent","PointerEvent","removePointer","eventTypeNormalized","toLowerCase","isTouch","storeIndex","pointerId","splice","SINGLE_TOUCH_INPUT_MAP","touchstart","touchmove","touchend","touchcancel","SINGLE_TOUCH_TARGET_EVENTS","SINGLE_TOUCH_WINDOW_EVENTS","SingleTouchInput","started","touches","changed","changedTouches","TOUCH_INPUT_MAP","TOUCH_TARGET_EVENTS","TouchInput","targetIds","allTouches","identifier","targetTouches","changedTargetTouches","touch","DEDUP_TIMEOUT","DEDUP_DISTANCE","TouchMouseInput","mouse","primaryTouch","lastTouches","setLastTouch","eventData","lastTouch","lts","inputEvent","inputData","isMouse","sourceCapabilities","firesTouchEvents","dx","dy","PREFIXED_TOUCH_ACTION","NATIVE_TOUCH_ACTION","TOUCH_ACTION_AUTO","TOUCH_ACTION_MANIPULATION","TOUCH_ACTION_NONE","TOUCH_ACTION_PAN_X","TOUCH_ACTION_PAN_Y","TOUCH_ACTION_MAP","touchMap","cssSupports","CSS","supports","getTouchActionProps","TouchAction","set","compute","actions","update","touchAction","recognizers","recognizer","getTouchAction","hasPanX","hasPanY","cleanTouchActions","preventDefaults","prevented","hasNone","isTapPointer","isTapMovement","isTapTouchTime","preventSrc","STATE_POSSIBLE","STATE_BEGAN","STATE_CHANGED","STATE_ENDED","STATE_RECOGNIZED","STATE_CANCELLED","Recognizer","defaults","simultaneous","requireFail","stateStr","directionStr","getRecognizerByNameIfManager","otherRecognizer","AttrRecognizer","PanRecognizer","pX","pY","PinchRecognizer","PressRecognizer","_timer","_input","RotateRecognizer","SwipeRecognizer","TapRecognizer","pTime","pCenter","Hammer","preset","Manager","recognizeWith","dropRecognizeWith","requireFailure","dropRequireFailure","hasRequireFailures","canRecognizeWith","additionalEvent","tryEmit","canEmit","inputDataClone","reset","process","attrTest","optionPointers","isRecognized","isValid","threshold","directionTest","hasMoved","inOut","time","validPointers","validMovement","validTime","taps","posThreshold","validTouchTime","failTimeout","validInterval","validMultiTap","tapCount","VERSION","domEvents","inputClass","cssProps","userSelect","touchSelect","touchCallout","contentZooming","userDrag","tapHighlightColor","handlers","oldCssProps","createInputInstance","toggleCssProps","stop","force","stopped","curRecognizer","existing","on","events","off","gestureEvent","gesture","triggerDomEvent","STATE_FAILED","Tap","Pan","Swipe","Pinch","Rotate","Press","_hammerjs","Carousel","autoPlayDelay","autoPlayIntervalId","numOfSlides","areClonesUsed","dots","cloneSlides","cacheDOM","eventListeners","slides","displayCarousel","displayControls","touchControls","startAutoPlay","slidesContainer","slide1Clone","cloneNode","slide2Clone","controls","prevButton","nextButton","dotsContainer","prevSlide","nextSlide","stopAutoPlay","displayDots","goToSlide","display","_loop","btn","mc","_hammerjs2","swipe","sensitivity","dot","newCurrent","newPrev","newNext","removeAllClasses","updateDots","_this3","setInterval","clearInterval","HeroCarouselWidget","visibleClass","buttonClass","navBp","carousel","_carousel2","nav","navContainer","promo","initPromo","navService","_nav2","createNavButtons","setNavOffset","checkNavOffset","promoSpacer","promoHeight","offsetHeight","promoTimeout","height","closePromo","openPromo","navOffset","visibleButton","navIconHandler","navHandler","activeNavButton","stopPropagation","HeroWidget","ModalComponent","closeButton","modalTriggers","modalContents","videoModalContent","modalBox","videoModalTriggers","video","modalBg","popup","closeModalHandler","trigger","prepareVideo","videoId","openModal","bioModalTarget","bioModalContent","_body2","PromoBannerComponent","closeHandler","modalTarget","modalContent","HeaderComponent","searchActive","submenuNameSelector","submenuImageSelector","submenuNavSelector","submenuNavItemSelector","submenuDefaults","mobileMenuToggle","mobileMenu","searchInput","searchTrigger","searchCloseTrigger","searchForm","onsubmit","hijackFormSubmit","searchHandler","closeSearch","toggleMobileMenu","checkForEnter","keyCode","performSearch","focus","encodeURIComponent","Element","CharacterData","DocumentType","configurable","writable","ownProps","resArray","varArgs","nextSource","payload","fieldRenderers","renderer","fieldType","columnCount","cellElement","rowElement","fields","fieldMap","field","formData","formElement","rows","fieldsData","j","k","cells","cell","renderedFields","renderedField","columns","getElement","attachSubmitHandler","form","fieldPromises","validationResult","payloadKey","dataByAlias","FormData","sendPayloadToServer","handleInvalidFields","eventName","CustomEvent","detail","initCustomEvent","forms","formId","placeholderElement","formContainer","randomId","getElementById","RequiredValidator","validateText","validateBool","validateTextArray","validateFile","RegexValidator","regex","RegExp","pattern","textValue","extraValidators","validatorMap","RenderText","RenderCheckbox","checked","FieldUtility","RichText","RenderButton","is","_typeof","pendingHandler","resolved","rejected","queue","q","1","0","reason","transferState","Resolved","Rejected","finalize","promise","transform","ResolvedPromise","promises","race","extraFields","renderers","BriteVerifyValidator","components","_header2","_hero2","_heroCarousel2","_blogGallery2","_searchResults2","_modal2","_promoBanner2","_bioModal2","_careersAccordion2","_dualPaneGraphicalCalloutList2","_richText2","apiMap","maxTouchPoints","msMaxTouchPoints","cmp","cmpArr","cmpName","cmpsOnPage","getEntryElements","cmpInstance","initComponent","DEVELOPMENT","cssLoaded","appInit"],"mappings":"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","file":"main.min.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 54);\n","import {mqMap} from './const';\r\n\r\nexport function mq(breakpoint, direction = 'min-width') {\r\n if(mqMap.hasOwnProperty(breakpoint)) {\r\n breakpoint = mqMap[breakpoint] + 'px';\r\n }\r\n\r\n // if we pass in two breaks, do the inbetwen thingy\r\n if(mqMap.hasOwnProperty(direction)) {\r\n breakpoint = [breakpoint];\r\n\r\n breakpoint.push(mqMap[direction] + 'px');\r\n }\r\n let query;\r\n if(typeof breakpoint === 'string') {\r\n query = `(${direction}: ${breakpoint})`;\r\n }else{\r\n query = `(min-width: ${breakpoint[0]}) and (max-width: ${breakpoint[1]})`;\r\n }\r\n\r\n return window.matchMedia(query).matches;\r\n}\r\n\r\n/**\r\n * Debounces a function to minimize the number of times it gets called over a given time interval.\r\n * @param fn The function to bounce.\r\n * @param interval The number of milliseconds to debounce.\r\n * @param slide {boolean} The \"slide\" option will cause the function execution to slide further into\r\n * the future each time the function is called. Defaults to true. When false, the function\r\n * will execute within the timeout regardless of prior calls.\r\n * @returns {Function} The function that is debounced.\r\n */\r\nexport function debounce(fn, interval, slide) {\r\n\r\n // Set default.\r\n slide = typeof(slide) === 'undefined'\r\n ? true\r\n : slide;\r\n\r\n // Which sort of debounce should be executed?\r\n if (slide) {\r\n return debounceWithSlide(fn, interval, this);\r\n } else {\r\n return debounceWithoutSlide(fn, interval, this);\r\n }\r\n\r\n}\r\n\r\nfunction debounceWithSlide(fn, interval, context) {\r\n let timeout;\r\n return () => {\r\n clearTimeout(timeout);\r\n timeout = setTimeout(fn.apply.bind(fn, this, arguments), interval);\r\n };\r\n}\r\n\r\nfunction debounceWithoutSlide(fn, interval, context) {\r\n let timeout = null;\r\n return () => {\r\n if (timeout) {\r\n return;\r\n }\r\n timeout = setTimeout(function () {\r\n if (timeout) {\r\n clearTimeout(timeout);\r\n timeout = null;\r\n }\r\n fn.apply.bind(fn, context, arguments)();\r\n }, interval);\r\n };\r\n}\r\n\r\n/**\r\n * Added because the above debounce did not provide correct context\r\n *\r\n * @export\r\n * @param {*} func\r\n * @param {*} wait\r\n * @param {*} immediate\r\n * @returns\r\n */\r\nexport function debounce2(func, wait, immediate) {\r\n\tvar timeout;\r\n\treturn function() {\r\n\t\tvar context = this, args = arguments;\r\n\t\tvar later = function() {\r\n\t\t\ttimeout = null;\r\n\t\t\tif (!immediate) func.apply(context, args);\r\n\t\t};\r\n\t\tvar callNow = immediate && !timeout;\r\n\t\tclearTimeout(timeout);\r\n\t\ttimeout = setTimeout(later, wait);\r\n\t\tif (callNow) func.apply(context, args);\r\n\t};\r\n};\r\n\r\n/**\r\n * Creates a custom event, extra steps for IE support\r\n *\r\n * @export\r\n * @param {string} name\r\n */\r\nexport function createEvent(name) {\r\n const event = document.createEvent('Event');\r\n\r\n event.initEvent(name, true, true);\r\n return event;\r\n}\r\n\r\nexport function each(nodeList, cb) {\r\n if(!nodeList.length) {\r\n return;\r\n }\r\n for (let i = 0; i < nodeList.length; i++) {\r\n cb(nodeList[i], i);\r\n }\r\n}\r\n\r\n/**\r\n * Simulate a click event.\r\n * @public\r\n * @param {Element} elem the element to simulate a click on\r\n */\r\nexport function click(elem) {\r\n\t// Create our event (with options)\r\n\tvar evt = new MouseEvent('click', {\r\n\t\tbubbles: true,\r\n\t\tcancelable: true,\r\n\t\tview: window\r\n\t});\r\n\t// If cancelled, don't dispatch our event\r\n\tvar canceled = !elem.dispatchEvent(evt);\r\n};\r\n\r\nexport function getUrlParamByName(parameterName) {\r\n var result = null,\r\n tmp = [];\r\n location.search\r\n .substr(1)\r\n .split(\"&\")\r\n .forEach(function (item) {\r\n tmp = item.split(\"=\");\r\n if (tmp[0] === parameterName) result = decodeURIComponent(tmp[1]);\r\n });\r\n return result;\r\n}\r\n\r\n\r\nexport function scrollTo(element, to, duration) {\r\n var start = element.scrollTop,\r\n change = to - start,\r\n currentTime = 0,\r\n increment = 20;\r\n\r\n var animateScroll = function(){\r\n currentTime += increment;\r\n var val = Math.easeInOutQuad(currentTime, start, change, duration);\r\n element.scrollTop = val;\r\n if(currentTime < duration) {\r\n setTimeout(animateScroll, increment);\r\n }\r\n };\r\n animateScroll();\r\n}\r\n\r\nexport function getVerticalOffset(element) {\r\n return element.getBoundingClientRect().top + window.pageYOffset;\r\n}\r\n\r\n//t = current time\r\n//b = start value\r\n//c = change in value\r\n//d = duration\r\nMath.easeInOutQuad = function (t, b, c, d) {\r\n t /= d/2;\r\n if (t < 1) return c/2*t*t + b;\r\n t--;\r\n return -c/2 * (t*(t-2) - 1) + b;\r\n};\r\n\r\n// you guessed it, capitalizes a strings first letter\r\nexport function capitalizeFirstLetter(string) {\r\n return string.charAt(0).toUpperCase() + string.slice(1);\r\n}\r\n\r\nexport function getIndex(elem){\r\n var i= 0;\r\n while((elem=elem.previousElementSibling)!=null) ++i;\r\n return i;\r\n}\r\n\r\nexport function getUrlParams() {\r\n var vars = {};\r\n var parts = window.location.href.replace(/[?&]+([^=&]+)=([^&]*)/gi, function(m,key,value) {\r\n vars[key] = value;\r\n });\r\n return vars;\r\n}\r\n\r\nexport function querify(obj) {\r\n return Object.entries(obj).map(([key, val]) => `${key}=${val}`).join('&');\r\n}\r\n\r\nexport function isDev() {\r\n return window.location.origin.indexOf('localhost') > -1;\r\n}","// Variables.\r\nlet FormulatePromise;\r\n\r\n// Get either the promise polyfill or the native promise.\r\nif (typeof Promise === \"undefined\") {\r\n FormulatePromise = require(\"../lib/promiscuous-browser-shim-full\");\r\n} else {\r\n FormulatePromise = Promise;\r\n}\r\n\r\n// Export the promise function (either native or the polyfill).\r\nmodule.exports = FormulatePromise;","/**\r\n * A collection of validation utility functions.\r\n * @constructor\r\n */\r\nfunction ValidationUtilities() {\r\n}\r\n\r\n/**\r\n * Is the specified value set to something that is not null or undefined?\r\n * @param value {*} The value.\r\n * @returns {boolean} True, if the value is set to something; otherwise, false.\r\n */\r\nValidationUtilities.isValueSet = function (value) {\r\n return value !== null && value !== undefined && typeof(value) !== \"undefined\";\r\n};\r\n\r\n/**\r\n * Prepares the validators by passing configuration to their constructors.\r\n * @param validationData The data to pass to the validators.\r\n * @param fieldValidators The associative array of the field validating functions.\r\n * @returns {*} An array of prepared validators.\r\n */\r\nValidationUtilities.prepareValidators = function (validationData, fieldValidators) {\r\n\r\n // Validate input.\r\n if (!validationData || !fieldValidators) {\r\n return [];\r\n }\r\n\r\n // Variables.\r\n let i, validationOptions, validator, key, preparedValidators;\r\n\r\n // Process the validation data to prepare the validators.\r\n preparedValidators = [];\r\n for(i = 0; i < validationData.length; i++) {\r\n validationOptions = validationData[i];\r\n key = validationOptions.validationType;\r\n validator = fieldValidators[key];\r\n preparedValidators.push({\r\n validator: new validator(validationOptions.configuration),\r\n data: validationOptions\r\n });\r\n }\r\n\r\n // Return the prepared validators.\r\n return preparedValidators;\r\n\r\n};\r\n\r\n/**\r\n * Adds inline validation messages to a container.\r\n * @param containerElement {HTMLElement} The container to add the inline validation messages to.\r\n * @param messages {string[]} The validation messages to add.\r\n * @param priorListElement {HTMLUListElement} The list element returned the last time this\r\n * function was called.\r\n * @returns {HTMLUListElement} The list element containing the validation messages.\r\n */\r\nValidationUtilities.addValidationMessages = function (containerElement, messages, priorListElement) {\r\n\r\n // If there are no messages, remove the prior list element and return early.\r\n if (!messages || messages.length === 0) {\r\n if (priorListElement) {\r\n priorListElement.parentNode.removeChild(priorListElement);\r\n }\r\n return null;\r\n }\r\n\r\n // Variables.\r\n let i, listElement, message, itemElement;\r\n\r\n // Create the list element that contains the messages.\r\n listElement = document.createElement(\"ul\");\r\n listElement.classList.add(\"formulate__inline-validation-summary\");\r\n\r\n // Add the messages to the list element.\r\n for (i = 0; i < messages.length; i++) {\r\n message = messages[i];\r\n itemElement = document.createElement(\"li\");\r\n itemElement.classList.add(\"formulate__inline-validation-summary__error\");\r\n itemElement.appendChild(document.createTextNode(message));\r\n listElement.appendChild(itemElement);\r\n }\r\n\r\n // Remove the prior list element.\r\n if (priorListElement) {\r\n priorListElement.parentNode.removeChild(priorListElement);\r\n }\r\n\r\n // Add the new list element to the container.\r\n containerElement.appendChild(listElement);\r\n\r\n // Return the new list element (expected to be passed in on the subsequent call as the\r\n // prior list element).\r\n return listElement;\r\n\r\n};\r\n\r\n/**\r\n * Aggregates validation results into a single validation result.\r\n * @param validationPromises {Promise[]} An array of promises that will resolve to a validation result.\r\n * @returns {Promise} A promise that will resolve to the aggregate validation result.\r\n */\r\nValidationUtilities.aggregateValidations = function (validationPromises) {\r\n\r\n // Variables.\r\n let Promise = require(\"../polyfills/promise\");\r\n\r\n // Return a promise that resolves to the result of all of the validations.\r\n return Promise.all(validationPromises)\r\n .then(function (results) {\r\n\r\n // Variables.\r\n let i, result, success, failures;\r\n\r\n // Extract all the failures from the validation results.\r\n failures = [];\r\n for (i = 0; i < results.length; i++) {\r\n result = results[i];\r\n if (!result.success) {\r\n failures.push(result);\r\n }\r\n }\r\n\r\n // Success if there are no failures.\r\n success = failures.length === 0;\r\n if (success) {\r\n\r\n // Success.\r\n return {\r\n success: true\r\n }\r\n\r\n } else {\r\n\r\n // Failure. Return validation messages for the failures.\r\n return {\r\n success: false,\r\n messages: failures.map(function (x) {\r\n return x.message;\r\n })\r\n };\r\n\r\n }\r\n\r\n });\r\n\r\n};\r\n\r\n/**\r\n * Checks the validity of a text-based field, adding inline validation messages if there are\r\n * any validations that fail.\r\n * @param fieldRenderer The instance of the Formulate field renderer.\r\n * @param validators The prepared validator functions.\r\n * @param value The value to check the validity of.\r\n * @param containerElement The container element to add validation messages to.\r\n * @returns {Promise[]} An array of promises that resolve to validation results.\r\n */\r\nValidationUtilities.checkTextValidity = function (fieldRenderer, validators, value, containerElement) {\r\n return ValidationUtilities.checkValidityCommon(fieldRenderer, validators, value, containerElement, \"validateText\");\r\n};\r\n\r\n/**\r\n * Checks the validity of a boolean-based field, adding inline validation messages if there are\r\n * any validations that fail.\r\n * @param fieldRenderer The instance of the Formulate field renderer.\r\n * @param validators The prepared validator functions.\r\n * @param value The value to check the validity of.\r\n * @param containerElement The container element to add validation messages to.\r\n * @returns {Promise[]} An array of promises that resolve to validation results.\r\n */\r\nValidationUtilities.checkBoolValidity = function (fieldRenderer, validators, value, containerElement) {\r\n return ValidationUtilities.checkValidityCommon(fieldRenderer, validators, value, containerElement, \"validateBool\");\r\n};\r\n\r\n/**\r\n * Checks the validity of a field, adding inline validation messages if there are any validations that fail.\r\n * @param fieldRenderer The instance of the Formulate field renderer.\r\n * @param validators The prepared validator functions.\r\n * @param value The value to check the validity of.\r\n * @param containerElement The container element to add validation messages to.\r\n * @param validityFnName The name of the validity function (e.g., \"validateText\").\r\n * @returns {Promise[]} An array of promises that resolve to validation results.\r\n */\r\nValidationUtilities.checkValidityCommon = function (fieldRenderer, validators, value, containerElement, validityFnName) {\r\n\r\n // Variables.\r\n let i, validator, validationResults;\r\n\r\n // Check each validator for the validity of the value in this field.\r\n validationResults = [];\r\n for (i = 0; i < validators.length; i++) {\r\n validator = validators[i];\r\n validationResults.push(checkValidity(validator, value, validityFnName));\r\n }\r\n\r\n // Add inline validation messages.\r\n ValidationUtilities.aggregateValidations(validationResults)\r\n .then(function (result) {\r\n\r\n // Add inline validation messages.\r\n fieldRenderer.validationListElement = ValidationUtilities.addValidationMessages(\r\n containerElement, result.messages, fieldRenderer.validationListElement);\r\n\r\n // Add or remove validation error CSS class.\r\n if (result.success) {\r\n containerElement.classList.remove(\"formulate__field--validation-error\");\r\n } else {\r\n containerElement.classList.add(\"formulate__field--validation-error\");\r\n }\r\n\r\n });\r\n\r\n // Return the validation results.\r\n return validationResults;\r\n\r\n};\r\n\r\n/**\r\n * Validates the specified value against the specified validator.\r\n * @param validator The validator.\r\n * @param value The value to validate.\r\n * @param validityFnName The name of the validity function (e.g., \"validateText\").\r\n * @returns {Promise} A promise that will resolve to the validation result.\r\n */\r\nfunction checkValidity(validator, value, validityFnName) {\r\n return validator.validator[validityFnName](value)\r\n .then(function (result) {\r\n if (result) {\r\n\r\n // Success.\r\n return {\r\n success: true\r\n };\r\n\r\n } else {\r\n\r\n // Failure. Return validation message.\r\n return {\r\n success: false,\r\n message: validator.data.configuration.message\r\n };\r\n\r\n }\r\n });\r\n}\r\n\r\n// Export the validation utility functions.\r\nmodule.exports = ValidationUtilities;","// Variables.\r\nlet idCount = 0;\r\n\r\n/**\r\n * Utility functions for working with form fields.\r\n * @constructor\r\n */\r\nfunction Field() {\r\n}\r\n\r\n/**\r\n * Initializes a field renderer prototype to ensure it has all the necessary functions.\r\n * @param fieldPrototype The prototype for the field renderer.\r\n */\r\nField.initializeFieldPrototype = function (fieldPrototype) {\r\n\r\n // Use a fallback for setData?\r\n if (!fieldPrototype.setData) {\r\n fieldPrototype.setData = function () {};\r\n }\r\n\r\n // Use a fallback for checkValidity?\r\n if (!fieldPrototype.checkValidity) {\r\n fieldPrototype.checkValidity = function () {\r\n return [];\r\n };\r\n }\r\n\r\n};\r\n\r\n/**\r\n * Adds the data for a field to the specified instance of either FormData or an object.\r\n * @param data The FormData or object to set the field data on.\r\n * @param value The value to set.\r\n * @param options {{rawDataByAlias: boolean}} Optional. The options for setting the data.\r\n * @param alias The field alias.\r\n * @param id The field ID.\r\n */\r\nField.setData = function (data, value, options, alias, id) {\r\n\r\n // Adjust options.\r\n options = options || {};\r\n options.rawDataByAlias = options.rawDataByAlias || false;\r\n\r\n // Set data.\r\n if (options.rawDataByAlias && alias) {\r\n data[alias] = value;\r\n } else {\r\n data.append(id, value);\r\n }\r\n\r\n};\r\n\r\n/**\r\n * Initializes a field renderer.\r\n * @param fieldRenderer The field renderer to initialize.\r\n * @param fieldData The field data that should be used to render the field.\r\n * @param fieldValidators The associative array of the field validating functions.\r\n * @param options {{type: string, usePlaceholder: boolean, useLabel: boolean, useWrapper: boolean, cssClasses: string[], nodeName: string}}\r\n * The options to use when constructing the field.\r\n */\r\nField.initializeField = function (fieldRenderer, fieldData, fieldValidators, options) {\r\n\r\n // Variables.\r\n let fieldElement, wrapperElement, labelElement, useWrapper, fieldId;\r\n\r\n // Create element.\r\n fieldElement = document.createElement(options.nodeName || \"input\");\r\n if (options.type) {\r\n fieldElement.type = options.type;\r\n }\r\n\r\n // Set aria label.\r\n fieldElement.setAttribute(\"aria-label\", fieldData.label);\r\n\r\n // Create wrapper element, or just use the field element as the wrapper.\r\n useWrapper = options.useWrapper !== false;\r\n wrapperElement = useWrapper\r\n ? document.createElement(\"div\")\r\n : fieldElement;\r\n\r\n // Attach CSS classes.\r\n if (options.cssClasses) {\r\n require(\"./add-classes\")(wrapperElement, options.cssClasses);\r\n }\r\n\r\n // Add placeholder?\r\n if (options.usePlaceholder !== false) {\r\n fieldElement.setAttribute(\"placeholder\", fieldData.label);\r\n }\r\n\r\n // Create label element?\r\n if (options.useLabel !== false) {\r\n fieldId = generateId(\"formulate-field-\");\r\n fieldElement.setAttribute(\"id\", fieldId);\r\n labelElement = document.createElement(\"label\");\r\n labelElement.setAttribute(\"for\", fieldId);\r\n labelElement.appendChild(document.createTextNode(fieldData.label));\r\n wrapperElement.appendChild(labelElement);\r\n }\r\n\r\n // Add element to wrapper?\r\n if (useWrapper) {\r\n wrapperElement.appendChild(fieldElement);\r\n }\r\n\r\n // Retain DOM elements and field properties.\r\n if (useWrapper) {\r\n fieldRenderer.wrapper = wrapperElement;\r\n }\r\n fieldRenderer.element = fieldElement;\r\n fieldRenderer.id = fieldData.id;\r\n fieldRenderer.alias = fieldData.alias;\r\n\r\n // Prepare the validators and retain them for later use.\r\n fieldRenderer.validators = require(\"./validation\").prepareValidators(fieldData.validations, fieldValidators);\r\n\r\n};\r\n\r\n/**\r\n * Generates a unique ID for an HTML element.\r\n * @param prefix {string} The prefix to use for the ID.\r\n * @returns {string} The unique ID.\r\n */\r\nfunction generateId(prefix) {\r\n idCount++;\r\n return prefix + idCount.toString();\r\n}\r\n\r\n// Export the form field utility functions.\r\nmodule.exports = Field;","import DomComponent from '../lib/domComponent';\r\n\r\nexport default class WidgetBase extends DomComponent {\r\n\r\n constructor(el) {\r\n super(el);\r\n }\r\n\r\n}","export default class DomComponent {\r\n el;\r\n\r\n constructor(el) {\r\n if(el) {\r\n this.el = el;\r\n this.el.classList.add('js');\r\n }\r\n }\r\n\r\n loaded() {\r\n this.el.classList.add('js-loaded');\r\n }\r\n\r\n static getEntryElements() {\r\n return document.querySelectorAll(this.selector);\r\n }\r\n}","export const mqMap = {\r\n xs: 480,\r\n sm: 768,\r\n md: 980,\r\n lg: 1280,\r\n xl: 1690,\r\n navDesktop: 1690,\r\n};\r\n\r\nexport const widgetSpacing = {\r\n default: 40,\r\n md: 60,\r\n}\r\n\r\nexport const duration = 300;\r\nexport const durationSlow = 600;\r\nexport const navDesktopMQ = 'navDesktop';\r\nexport const mobileNavHeight = 60;","const bodyService = {\r\n\r\n lock: function() {\r\n if(!document.body.classList.contains('lock')) {\r\n document.body.classList.add('lock');\r\n }\r\n },\r\n\r\n unlock: function() {\r\n document.body.classList.remove('lock');\r\n },\r\n\r\n islocked: function(){\r\n return document.body.classList.contains('lock');\r\n }\r\n}\r\n\r\nexport default bodyService;","// A readyState of 4 indicates the request has completed: https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/readyState\r\nconst STATE_DONE = 4;\r\n\r\n// An HTTP response code of 200 indicates success.\r\nconst STATUS_SUCCESS = 200;\r\n\r\n// HTTP request method to get data from the server: https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/GET\r\nconst METHOD_POST = \"GET\";\r\n\r\n/**\r\n * Gets data from the server with AJAX.\r\n * @param url {string} The URL to get the data from.\r\n * @returns {Promise} A promise that resolves once the request is complete.\r\n * @constructor\r\n */\r\nfunction SendRequest(url) {\r\n\r\n // Variables.\r\n let self = this, state;\r\n\r\n // Instance variables.\r\n this.request = new XMLHttpRequest();\r\n\r\n // Return a promise that will resolve once the AJAX request has returned from the server.\r\n return new Promise(function (resolve, reject) {\r\n\r\n // Initiate the AJAX request.\r\n self.request.onreadystatechange = function () {\r\n state = self.handleStateChange();\r\n if (state && state.status === STATUS_SUCCESS) {\r\n resolve(state);\r\n } else if (state && state.status !== STATUS_SUCCESS) {\r\n reject(state);\r\n }\r\n };\r\n self.request.open(METHOD_POST, url, true);\r\n self.request.timeout = 3000; \r\n self.request.send();\r\n });\r\n\r\n}\r\n\r\n/**\r\n * Called whenever the state changes for the AJAX call.\r\n * @returns {{} | null} The result of the state change, or null if it's an irrelevant state change.\r\n */\r\nSendRequest.prototype.handleStateChange = function () {\r\n\r\n // Is the request done?\r\n if (this.request.readyState === STATE_DONE) {\r\n\r\n // Was the request successful?\r\n if (this.request.status === STATUS_SUCCESS){\r\n\r\n // Success.\r\n return {\r\n status: STATUS_SUCCESS,\r\n text: this.request.responseText\r\n };\r\n\r\n } else {\r\n\r\n // Error.\r\n return {\r\n status: this.request.status\r\n };\r\n\r\n }\r\n\r\n }\r\n\r\n // Not a state change we care about.\r\n return null;\r\n\r\n};\r\n\r\n// Export the function that sends an AJAX request.\r\nexport default SendRequest;","import {each} from '../lib/util';\r\n\r\nexport default function ImageCaptionService(rootElm) {\r\n const images = rootElm.querySelectorAll('img');\r\n \r\n each(images, (image) =>{\r\n if(image.alt.length > 0){\r\n const paragraph = document.createElement('p');\r\n paragraph.style.fontStyle = \"italic\";\r\n paragraph.className = \"image-caption-text\";\r\n paragraph.innerHTML = image.alt;\r\n image.parentNode.insertBefore(paragraph, image.nextSibling);\r\n }\r\n });\r\n}\r\n","'use strict';\n\nvar pug_has_own_property = Object.prototype.hasOwnProperty;\n\n/**\n * Merge two attribute objects giving precedence\n * to values in object `b`. Classes are special-cased\n * allowing for arrays and merging/joining appropriately\n * resulting in a string.\n *\n * @param {Object} a\n * @param {Object} b\n * @return {Object} a\n * @api private\n */\n\nexports.merge = pug_merge;\nfunction pug_merge(a, b) {\n if (arguments.length === 1) {\n var attrs = a[0];\n for (var i = 1; i < a.length; i++) {\n attrs = pug_merge(attrs, a[i]);\n }\n return attrs;\n }\n\n for (var key in b) {\n if (key === 'class') {\n var valA = a[key] || [];\n a[key] = (Array.isArray(valA) ? valA : [valA]).concat(b[key] || []);\n } else if (key === 'style') {\n var valA = pug_style(a[key]);\n valA = valA && valA[valA.length - 1] !== ';' ? valA + ';' : valA;\n var valB = pug_style(b[key]);\n valB = valB && valB[valB.length - 1] !== ';' ? valB + ';' : valB;\n a[key] = valA + valB;\n } else {\n a[key] = b[key];\n }\n }\n\n return a;\n};\n\n/**\n * Process array, object, or string as a string of classes delimited by a space.\n *\n * If `val` is an array, all members of it and its subarrays are counted as\n * classes. If `escaping` is an array, then whether or not the item in `val` is\n * escaped depends on the corresponding item in `escaping`. If `escaping` is\n * not an array, no escaping is done.\n *\n * If `val` is an object, all the keys whose value is truthy are counted as\n * classes. No escaping is done.\n *\n * If `val` is a string, it is counted as a class. No escaping is done.\n *\n * @param {(Array.|Object.|string)} val\n * @param {?Array.} escaping\n * @return {String}\n */\nexports.classes = pug_classes;\nfunction pug_classes_array(val, escaping) {\n var classString = '', className, padding = '', escapeEnabled = Array.isArray(escaping);\n for (var i = 0; i < val.length; i++) {\n className = pug_classes(val[i]);\n if (!className) continue;\n escapeEnabled && escaping[i] && (className = pug_escape(className));\n classString = classString + padding + className;\n padding = ' ';\n }\n return classString;\n}\nfunction pug_classes_object(val) {\n var classString = '', padding = '';\n for (var key in val) {\n if (key && val[key] && pug_has_own_property.call(val, key)) {\n classString = classString + padding + key;\n padding = ' ';\n }\n }\n return classString;\n}\nfunction pug_classes(val, escaping) {\n if (Array.isArray(val)) {\n return pug_classes_array(val, escaping);\n } else if (val && typeof val === 'object') {\n return pug_classes_object(val);\n } else {\n return val || '';\n }\n}\n\n/**\n * Convert object or string to a string of CSS styles delimited by a semicolon.\n *\n * @param {(Object.|string)} val\n * @return {String}\n */\n\nexports.style = pug_style;\nfunction pug_style(val) {\n if (!val) return '';\n if (typeof val === 'object') {\n var out = '';\n for (var style in val) {\n /* istanbul ignore else */\n if (pug_has_own_property.call(val, style)) {\n out = out + style + ':' + val[style] + ';';\n }\n }\n return out;\n } else {\n return val + '';\n }\n};\n\n/**\n * Render the given attribute.\n *\n * @param {String} key\n * @param {String} val\n * @param {Boolean} escaped\n * @param {Boolean} terse\n * @return {String}\n */\nexports.attr = pug_attr;\nfunction pug_attr(key, val, escaped, terse) {\n if (val === false || val == null || !val && (key === 'class' || key === 'style')) {\n return '';\n }\n if (val === true) {\n return ' ' + (terse ? key : key + '=\"' + key + '\"');\n }\n if (typeof val.toJSON === 'function') {\n val = val.toJSON();\n }\n if (typeof val !== 'string') {\n val = JSON.stringify(val);\n if (!escaped && val.indexOf('\"') !== -1) {\n return ' ' + key + '=\\'' + val.replace(/'/g, ''') + '\\'';\n }\n }\n if (escaped) val = pug_escape(val);\n return ' ' + key + '=\"' + val + '\"';\n};\n\n/**\n * Render the given attributes object.\n *\n * @param {Object} obj\n * @param {Object} terse whether to use HTML5 terse boolean attributes\n * @return {String}\n */\nexports.attrs = pug_attrs;\nfunction pug_attrs(obj, terse){\n var attrs = '';\n\n for (var key in obj) {\n if (pug_has_own_property.call(obj, key)) {\n var val = obj[key];\n\n if ('class' === key) {\n val = pug_classes(val);\n attrs = pug_attr(key, val, false, terse) + attrs;\n continue;\n }\n if ('style' === key) {\n val = pug_style(val);\n }\n attrs += pug_attr(key, val, false, terse);\n }\n }\n\n return attrs;\n};\n\n/**\n * Escape the given string of `html`.\n *\n * @param {String} html\n * @return {String}\n * @api private\n */\n\nvar pug_match_html = /[\"&<>]/;\nexports.escape = pug_escape;\nfunction pug_escape(_html){\n var html = '' + _html;\n var regexResult = pug_match_html.exec(html);\n if (!regexResult) return _html;\n\n var result = '';\n var i, lastIndex, escape;\n for (i = regexResult.index, lastIndex = 0; i < html.length; i++) {\n switch (html.charCodeAt(i)) {\n case 34: escape = '"'; break;\n case 38: escape = '&'; break;\n case 60: escape = '<'; break;\n case 62: escape = '>'; break;\n default: continue;\n }\n if (lastIndex !== i) result += html.substring(lastIndex, i);\n lastIndex = i + 1;\n result += escape;\n }\n if (lastIndex !== i) return result + html.substring(lastIndex, i);\n else return result;\n};\n\n/**\n * Re-throw the given `err` in context to the\n * the pug in `filename` at the given `lineno`.\n *\n * @param {Error} err\n * @param {String} filename\n * @param {String} lineno\n * @param {String} str original source\n * @api private\n */\n\nexports.rethrow = pug_rethrow;\nfunction pug_rethrow(err, filename, lineno, str){\n if (!(err instanceof Error)) throw err;\n if ((typeof window != 'undefined' || !filename) && !str) {\n err.message += ' on line ' + lineno;\n throw err;\n }\n try {\n str = str || require('fs').readFileSync(filename, 'utf8')\n } catch (ex) {\n pug_rethrow(err, null, lineno)\n }\n var context = 3\n , lines = str.split('\\n')\n , start = Math.max(lineno - context, 0)\n , end = Math.min(lines.length, lineno + context);\n\n // Error context\n var context = lines.slice(start, end).map(function(line, i){\n var curr = i + start + 1;\n return (curr == lineno ? ' > ' : ' ')\n + curr\n + '| '\n + line;\n }).join('\\n');\n\n // Alter exception message\n err.path = filename;\n err.message = (filename || 'Pug') + ':' + lineno\n + '\\n' + context + '\\n\\n' + err.message;\n throw err;\n};\n","import { scrollTo, getVerticalOffset, each } from \"../lib/util\";\r\nimport { durationSlow } from \"../lib/const\";\r\n\r\nexport default NavService;\r\n\r\nfunction NavService(navHeight) {\r\n let items = [];\r\n\r\n console.log(navHeight);\r\n \r\n each( document.querySelectorAll('[data-nav-section]'), (navItem, index) => {\r\n const sectionName = navItem.dataset.navSection;\r\n const notAllowed = ['', 'data-nav-section'];\r\n const label = notAllowed.indexOf(sectionName) === -1\r\n ? sectionName \r\n : navItem.textContent.trim();\r\n\r\n items.push({\r\n label: label,\r\n index: index,\r\n offset: getVerticalOffset(navItem),\r\n el: navItem\r\n });\r\n });\r\n\r\n // on resize we set the a offset\r\n window.addEventListener('resize', (e) => {\r\n items.forEach((item) => {\r\n item.offset = getVerticalOffset(item.el);\r\n });\r\n })\r\n\r\n return {\r\n scrollToTarget : function(index, pad) {\r\n const scrollEl = document.scrollingElement || document.documentElement;\r\n pad = typeof pad !== 'undefined' ? pad : 0;\r\n\r\n return scrollTo(scrollEl, items[index].offset - navHeight - pad, durationSlow);\r\n },\r\n items: items\r\n }\r\n}","import WidgetBase from '../widget.base';\r\nimport ImageCaptionService from '../../services/image-caption';\r\n\r\n\r\nexport default class RichTextWidget extends WidgetBase {\r\n static selector = '[data-js-rich-text]';\r\n\r\n \r\n constructor(el){\r\n super(el); \r\n if(!el){\r\n return false;\r\n }\r\n\r\n this.imgCaptionService = new ImageCaptionService(el);\r\n\r\n \r\n\r\n setTimeout(() => {\r\n this.loaded();\r\n })\r\n }\r\n}","import WidgetBase from '../widget.base';\r\nimport ImageCaptionService from '../../services/image-caption';\r\n\r\n\r\nexport default class DualPaneWidget extends WidgetBase {\r\n static selector = '[data-js-dual-pgcl]';\r\n\r\n \r\n constructor(el){\r\n super(el); \r\n if(!el){\r\n return false;\r\n }\r\n\r\n this.imgCaptionService = new ImageCaptionService(el);\r\n\r\n \r\n\r\n setTimeout(() => {\r\n this.loaded();\r\n })\r\n }\r\n}","import DomComponent from '../lib/domComponent';\r\nimport { each, mq } from '../lib/util';\r\n\r\nexport default class ValidationComponent extends DomComponent {\r\n static selector = '[data-js-validate]';\r\n\r\n requiredInputSelector = '[data-required]'\r\n errorMessageMap = {};\r\n\r\n constructor(el) {\r\n super(el);\r\n\r\n this.el.addEventListener('submit', (e) => {\r\n const valid = this.validate();\r\n\r\n if(!valid) {\r\n e.preventDefault();\r\n };\r\n })\r\n }\r\n\r\n validate() {\r\n let valid = true;\r\n each(this.el.querySelectorAll(this.requiredInputSelector), (input) => {\r\n if(!input.value) {\r\n valid = false;\r\n this.createErrorMessage(input);\r\n }else{\r\n this.removeErrorMessage(input);\r\n }\r\n });\r\n\r\n return valid; \r\n }\r\n\r\n createErrorMessage(input) {\r\n if(!input.classList.contains('validation-error')) {\r\n const name = input.dataset.required ? input.dataset.required : input.getAttribute('name');\r\n input.classList.add('validation-error')\r\n\r\n let div = document.createElement('div');\r\n div.classList.add('validation-error-message');\r\n div.innerText = `Please enter a valid ${name}`;\r\n\r\n input.parentElement.appendChild(div);\r\n\r\n this.errorMessageMap[name] = div;\r\n }\r\n }\r\n\r\n removeErrorMessage(input) {\r\n if(input.classList.contains('validation-error')) {\r\n const name = input.dataset.required ? input.dataset.required : input.getAttribute('name');\r\n input.classList.remove('validation-error');\r\n\r\n this.errorMessageMap[name].remove();\r\n delete this.errorMessageMap[name];\r\n }\r\n }\r\n}\r\n","var pug = require(\"!../../../../node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (displayUrl, link, summary) {pug_html = pug_html + \"\\u003Cdiv class=\\\"search-results__card\\\"\\u003E\\u003Ca\" + (pug.attr(\"href\", link.Url, true, true)) + \"\\u003E\\u003Ch4 class=\\\"search-results__title\\\"\\u003E\" + (pug.escape(null == (pug_interp = link.Title) ? \"\" : pug_interp)) + \"\\u003C\\u002Fh4\\u003E\\u003C\\u002Fa\\u003E\\u003Cdiv class=\\\"search-results__link\\\"\\u003E\\u003Ca\" + (pug.attr(\"href\", link.Url, true, true)) + \"\\u003E\" + (pug.escape(null == (pug_interp = displayUrl.value) ? \"\" : pug_interp)) + \"\\u003C\\u002Fa\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"search-results__summary\\\"\\u003E\\u003Cp\\u003E\" + (pug.escape(null == (pug_interp = summary.value) ? \"\" : pug_interp)) + \"\\u003C\\u002Fp\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";}.call(this,\"displayUrl\" in locals_for_with?locals_for_with.displayUrl:typeof displayUrl!==\"undefined\"?displayUrl:undefined,\"link\" in locals_for_with?locals_for_with.link:typeof link!==\"undefined\"?link:undefined,\"summary\" in locals_for_with?locals_for_with.summary:typeof summary!==\"undefined\"?summary:undefined));;return pug_html;};\nmodule.exports = template;","import WidgetBase from '../widget.base';\r\nimport {each, isDev, getUrlParams, querify} from '../../lib/util';\r\nimport SendRequest from '../../lib/ajax';\r\nimport resultTemplate from './search-result.template.pug';\r\n// import * as mockData from './mock-data';\r\n\r\n\r\nexport default class SearchResultsWidget extends WidgetBase {\r\n static selector = '[data-js-search-results]';\r\n api = 'umbraco/rhythm/searchapi/search';\r\n data;\r\n loader;\r\n noResults;\r\n params = {};\r\n resultList;\r\n allowedParams = ['term', 'skip', 'take', 'search'];\r\n loadMore;\r\n defaultParams = {\r\n term: \"lorem\",\r\n skip: 0,\r\n take: 5,\r\n };\r\n\r\n constructor(el){\r\n super(el); \r\n if(!el){\r\n return false;\r\n }\r\n \r\n this.noResults = this.el.querySelector('[data-js-no-results]');\r\n this.resultList = this.el.querySelector('[data-js-result-list]');\r\n this.loader = this.el.querySelector('[data-js-loader]');\r\n this.loadMore = this.el.querySelector('[data-more]');\r\n this.loadMore.addEventListener('click', this.loadMoreHandler.bind(this));\r\n\r\n this.getInitialParams();\r\n this.getContent();\r\n\r\n setTimeout(() => {\r\n this.loaded();\r\n })\r\n }\r\n\r\n getContent(clear) {\r\n const queryString = querify(this.params);\r\n let url = this.api + '?' + queryString;\r\n if(isDev()) {\r\n url = 'http://dev.anchorum.com/' + url;\r\n }\r\n\r\n // const res = mockData;\r\n // const data = JSON.parse(res.text);\r\n // this.data = data;\r\n // this.render(data.items, clear);\r\n return new SendRequest(url)\r\n .then((res) => {\r\n if(res && res.hasOwnProperty('text')) {\r\n // res = mockData.mock;\r\n const data = JSON.parse(res.text);\r\n this.data = data;\r\n this.render(data.items, clear);\r\n }\r\n })\r\n .catch((err) => {\r\n if(err) {\r\n console.error(err);\r\n }\r\n });\r\n }\r\n\r\n\r\n\r\n clear() {\r\n this.grid.innerHTML = '';\r\n }\r\n\r\n render(items, clear) {\r\n let html = this.resultList.innerHTML;\r\n each(items, (item) => {\r\n html += resultTemplate(item);\r\n });\r\n // items.forEach((item) => {\r\n // html += resultTemplate(item);\r\n // });\r\n if(items.length == 0){\r\n this.noResults.classList.remove('hidden');\r\n } else {\r\n this.noResults.classList.add('hidden');\r\n }\r\n \r\n this.loader.classList.add('hidden');\r\n this.resultList.innerHTML = html;\r\n\r\n if(this.resultList.children.length >= this.data.count) {\r\n this.loadMore.classList.add('hidden');\r\n }else{\r\n this.loadMore.classList.remove('hidden');\r\n }\r\n }\r\n\r\n loadMoreHandler() {\r\n this.params.skip = this.params.skip + this.params.take;\r\n this.getContent();\r\n }\r\n\r\n getInitialParams() {\r\n const supplied = getUrlParams();\r\n let initial = {};\r\n\r\n this.allowedParams.forEach((param) => {\r\n if(supplied.hasOwnProperty(param)) {\r\n initial[param] = supplied[param];\r\n }\r\n });\r\n this.params = Object.assign(this.defaultParams, initial);\r\n }\r\n}","var pug = require(\"!../../../../node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (header, link, summary, tags) {pug_html = pug_html + \"\\u003Cdiv class=\\\"blog-gallery__grid__column\\\"\\u003E\\u003Cdiv class=\\\"blog-callout\\\"\\u003E\\u003Cdiv class=\\\"blog-callout__tag\\\"\\u003E\" + (pug.escape(null == (pug_interp = tags[0]['Title']) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"blog-callout__content\\\"\\u003E\\u003Ch2 class=\\\"blog-callout__title\\\"\\u003E\" + (null == (pug_interp = header) ? \"\" : pug_interp) + \"\\u003C\\u002Fh2\\u003E\\u003Cp class=\\\"blog-callout__summary\\\"\\u003E\" + (null == (pug_interp = summary) ? \"\" : pug_interp) + \"\\u003C\\u002Fp\\u003E\\u003Ca\" + (\" class=\\\"blog-callout__button\\\"\"+pug.attr(\"href\", link, true, true)) + \"\\u003ERead More\\u003C\\u002Fa\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";}.call(this,\"header\" in locals_for_with?locals_for_with.header:typeof header!==\"undefined\"?header:undefined,\"link\" in locals_for_with?locals_for_with.link:typeof link!==\"undefined\"?link:undefined,\"summary\" in locals_for_with?locals_for_with.summary:typeof summary!==\"undefined\"?summary:undefined,\"tags\" in locals_for_with?locals_for_with.tags:typeof tags!==\"undefined\"?tags:undefined));;return pug_html;};\nmodule.exports = template;","import WidgetBase from '../widget.base';\r\nimport {each, isDev, getUrlParams, querify} from '../../lib/util';\r\nimport SendRequest from '../../lib/ajax';\r\nimport calloutTemplate from './blog-callout.template.pug';\r\n\r\nexport default class BlogGalleryWidget extends WidgetBase {\r\n static selector = '[data-js-blog]';\r\n api = 'umbraco/rhythm/blogapi/filter';\r\n data;\r\n params = {};\r\n activeFilter;\r\n activeClass = \"active\";\r\n allowedParams = ['term', 'skip', 'take', 'tag'];\r\n defaultParams = {\r\n take: 8,\r\n skip: 0\r\n };\r\n\r\n constructor(el){\r\n super(el); \r\n if(!el){\r\n return false;\r\n }\r\n\r\n this.grid = this.el.querySelector('[data-grid]');\r\n this.filters = this.el.querySelectorAll('[data-filter]');\r\n this.loadMore = this.el.querySelector('[data-more]');\r\n\r\n this.loadMore.addEventListener('click', this.loadMoreHandler.bind(this));\r\n each(this.filters, (filter) => {\r\n filter.addEventListener('click', this.filterHandler.bind(this, filter));\r\n })\r\n\r\n this.getInitialParams();\r\n this.getContent();\r\n\r\n setTimeout(() => {\r\n this.loaded();\r\n })\r\n }\r\n\r\n getContent(clear) {\r\n const queryString = querify(this.params);\r\n let url = this.api + '?' + queryString;\r\n if(isDev()) {\r\n url = 'http://dev.anchorum.com/' + url;\r\n }\r\n\r\n return new SendRequest(url)\r\n .then((res) => {\r\n if(res && res.hasOwnProperty('text')) {\r\n const data = JSON.parse(res.text);\r\n this.data = data;\r\n this.render(data.items, clear);\r\n }\r\n })\r\n .catch((err) => {\r\n if(err) {\r\n console.error(err);\r\n }\r\n })\r\n }\r\n\r\n filterHandler(filter) {\r\n const tag = filter.dataset.filter;\r\n if(this.params.tag && this.params.tag === tag) {\r\n return false;\r\n }\r\n\r\n // set active clases\r\n if(this.activeFilter) {\r\n this.activeFilter.classList.remove(this.activeClass)\r\n }\r\n this.activeFilter = filter;\r\n this.activeFilter.classList.add(this.activeClass);\r\n\r\n this.getInitialParams();\r\n this.params.tag = tag;\r\n this.getContent(true);\r\n }\r\n\r\n clear() {\r\n this.grid.innerHTML = '';\r\n }\r\n\r\n render(items, clear) {\r\n let html = clear ? '' : this.grid.innerHTML;\r\n items.forEach((item) => {\r\n html += calloutTemplate(item);\r\n });\r\n\r\n this.grid.innerHTML = html;\r\n\r\n if(this.grid.children.length >= this.data.totalCount) {\r\n this.loadMore.classList.add('hidden');\r\n }else{\r\n this.loadMore.classList.remove('hidden');\r\n }\r\n }\r\n\r\n loadMoreHandler() {\r\n this.params.skip = this.params.skip + this.params.take;\r\n this.getContent();\r\n }\r\n\r\n getInitialParams() {\r\n const supplied = getUrlParams();\r\n let initial = {};\r\n\r\n this.allowedParams.forEach((param) => {\r\n if(supplied.hasOwnProperty(param)) {\r\n initial[param] = supplied[param];\r\n }\r\n });\r\n\r\n this.params = Object.assign(this.defaultParams, initial);\r\n }\r\n}","export function each(nodeList, cb) {\r\n for (let i = 0; i < nodeList.length; i++) {\r\n cb(nodeList[i], i);\r\n }\r\n}","\r\nimport {each} from '../../lib/dom';\r\nimport WidgetBase from '../widget.base';\r\n\r\nexport default class CareersAccordion extends WidgetBase {\r\n static selector = '[data-js-careers-acc]';\r\n previousActiveContent;\r\n previousActiveIcon;\r\n previousActiveHeader;\r\n el;\r\n\r\n constructor(el) {\r\n if(!el) {\r\n return false\r\n }\r\n\r\n \r\n\r\n super(el);\r\n\r\n this.toggles = this.el.querySelectorAll('[data-accordion-toggle]');\r\n\r\n each(this.toggles, (toggle) => {\r\n const header = toggle.firstElementChild;\r\n const content = header.nextElementSibling;\r\n const icon = toggle.querySelector('[data-accordion-icon]');\r\n \r\n toggle.addEventListener('click', () => {\r\n if(header.classList.contains('active')) {\r\n header.classList.remove('active');\r\n content.classList.remove('active');\r\n icon.classList.remove('active');\r\n }else{\r\n if(this.previousActiveContent){\r\n this.previousActiveContent.classList.remove('active');\r\n }\r\n if(this.previousActiveIcon){\r\n this.previousActiveIcon.classList.remove('active');\r\n }\r\n if(this.previousActiveHeader){\r\n this.previousActiveHeader.classList.remove('active');\r\n }\r\n header.classList.add('active');\r\n content.classList.add('active');\r\n icon.classList.add('active');\r\n\r\n this.previousActiveContent = content;\r\n this.previousActiveHeader = header;\r\n this.previousActiveIcon = icon;\r\n }\r\n })\r\n \r\n });\r\n\r\n setTimeout(() => {\r\n this.loaded();\r\n })\r\n\r\n }\r\n} ","/*! Hammer.JS - v2.0.7 - 2016-04-22\n * http://hammerjs.github.io/\n *\n * Copyright (c) 2016 Jorik Tangelder;\n * Licensed under the MIT license */\n(function(window, document, exportName, undefined) {\n 'use strict';\n\nvar VENDOR_PREFIXES = ['', 'webkit', 'Moz', 'MS', 'ms', 'o'];\nvar TEST_ELEMENT = document.createElement('div');\n\nvar TYPE_FUNCTION = 'function';\n\nvar round = Math.round;\nvar abs = Math.abs;\nvar now = Date.now;\n\n/**\n * set a timeout with a given scope\n * @param {Function} fn\n * @param {Number} timeout\n * @param {Object} context\n * @returns {number}\n */\nfunction setTimeoutContext(fn, timeout, context) {\n return setTimeout(bindFn(fn, context), timeout);\n}\n\n/**\n * if the argument is an array, we want to execute the fn on each entry\n * if it aint an array we don't want to do a thing.\n * this is used by all the methods that accept a single and array argument.\n * @param {*|Array} arg\n * @param {String} fn\n * @param {Object} [context]\n * @returns {Boolean}\n */\nfunction invokeArrayArg(arg, fn, context) {\n if (Array.isArray(arg)) {\n each(arg, context[fn], context);\n return true;\n }\n return false;\n}\n\n/**\n * walk objects and arrays\n * @param {Object} obj\n * @param {Function} iterator\n * @param {Object} context\n */\nfunction each(obj, iterator, context) {\n var i;\n\n if (!obj) {\n return;\n }\n\n if (obj.forEach) {\n obj.forEach(iterator, context);\n } else if (obj.length !== undefined) {\n i = 0;\n while (i < obj.length) {\n iterator.call(context, obj[i], i, obj);\n i++;\n }\n } else {\n for (i in obj) {\n obj.hasOwnProperty(i) && iterator.call(context, obj[i], i, obj);\n }\n }\n}\n\n/**\n * wrap a method with a deprecation warning and stack trace\n * @param {Function} method\n * @param {String} name\n * @param {String} message\n * @returns {Function} A new function wrapping the supplied method.\n */\nfunction deprecate(method, name, message) {\n var deprecationMessage = 'DEPRECATED METHOD: ' + name + '\\n' + message + ' AT \\n';\n return function() {\n var e = new Error('get-stack-trace');\n var stack = e && e.stack ? e.stack.replace(/^[^\\(]+?[\\n$]/gm, '')\n .replace(/^\\s+at\\s+/gm, '')\n .replace(/^Object.\\s*\\(/gm, '{anonymous}()@') : 'Unknown Stack Trace';\n\n var log = window.console && (window.console.warn || window.console.log);\n if (log) {\n log.call(window.console, deprecationMessage, stack);\n }\n return method.apply(this, arguments);\n };\n}\n\n/**\n * extend object.\n * means that properties in dest will be overwritten by the ones in src.\n * @param {Object} target\n * @param {...Object} objects_to_assign\n * @returns {Object} target\n */\nvar assign;\nif (typeof Object.assign !== 'function') {\n assign = function assign(target) {\n if (target === undefined || target === null) {\n throw new TypeError('Cannot convert undefined or null to object');\n }\n\n var output = Object(target);\n for (var index = 1; index < arguments.length; index++) {\n var source = arguments[index];\n if (source !== undefined && source !== null) {\n for (var nextKey in source) {\n if (source.hasOwnProperty(nextKey)) {\n output[nextKey] = source[nextKey];\n }\n }\n }\n }\n return output;\n };\n} else {\n assign = Object.assign;\n}\n\n/**\n * extend object.\n * means that properties in dest will be overwritten by the ones in src.\n * @param {Object} dest\n * @param {Object} src\n * @param {Boolean} [merge=false]\n * @returns {Object} dest\n */\nvar extend = deprecate(function extend(dest, src, merge) {\n var keys = Object.keys(src);\n var i = 0;\n while (i < keys.length) {\n if (!merge || (merge && dest[keys[i]] === undefined)) {\n dest[keys[i]] = src[keys[i]];\n }\n i++;\n }\n return dest;\n}, 'extend', 'Use `assign`.');\n\n/**\n * merge the values from src in the dest.\n * means that properties that exist in dest will not be overwritten by src\n * @param {Object} dest\n * @param {Object} src\n * @returns {Object} dest\n */\nvar merge = deprecate(function merge(dest, src) {\n return extend(dest, src, true);\n}, 'merge', 'Use `assign`.');\n\n/**\n * simple class inheritance\n * @param {Function} child\n * @param {Function} base\n * @param {Object} [properties]\n */\nfunction inherit(child, base, properties) {\n var baseP = base.prototype,\n childP;\n\n childP = child.prototype = Object.create(baseP);\n childP.constructor = child;\n childP._super = baseP;\n\n if (properties) {\n assign(childP, properties);\n }\n}\n\n/**\n * simple function bind\n * @param {Function} fn\n * @param {Object} context\n * @returns {Function}\n */\nfunction bindFn(fn, context) {\n return function boundFn() {\n return fn.apply(context, arguments);\n };\n}\n\n/**\n * let a boolean value also be a function that must return a boolean\n * this first item in args will be used as the context\n * @param {Boolean|Function} val\n * @param {Array} [args]\n * @returns {Boolean}\n */\nfunction boolOrFn(val, args) {\n if (typeof val == TYPE_FUNCTION) {\n return val.apply(args ? args[0] || undefined : undefined, args);\n }\n return val;\n}\n\n/**\n * use the val2 when val1 is undefined\n * @param {*} val1\n * @param {*} val2\n * @returns {*}\n */\nfunction ifUndefined(val1, val2) {\n return (val1 === undefined) ? val2 : val1;\n}\n\n/**\n * addEventListener with multiple events at once\n * @param {EventTarget} target\n * @param {String} types\n * @param {Function} handler\n */\nfunction addEventListeners(target, types, handler) {\n each(splitStr(types), function(type) {\n target.addEventListener(type, handler, false);\n });\n}\n\n/**\n * removeEventListener with multiple events at once\n * @param {EventTarget} target\n * @param {String} types\n * @param {Function} handler\n */\nfunction removeEventListeners(target, types, handler) {\n each(splitStr(types), function(type) {\n target.removeEventListener(type, handler, false);\n });\n}\n\n/**\n * find if a node is in the given parent\n * @method hasParent\n * @param {HTMLElement} node\n * @param {HTMLElement} parent\n * @return {Boolean} found\n */\nfunction hasParent(node, parent) {\n while (node) {\n if (node == parent) {\n return true;\n }\n node = node.parentNode;\n }\n return false;\n}\n\n/**\n * small indexOf wrapper\n * @param {String} str\n * @param {String} find\n * @returns {Boolean} found\n */\nfunction inStr(str, find) {\n return str.indexOf(find) > -1;\n}\n\n/**\n * split string on whitespace\n * @param {String} str\n * @returns {Array} words\n */\nfunction splitStr(str) {\n return str.trim().split(/\\s+/g);\n}\n\n/**\n * find if a array contains the object using indexOf or a simple polyFill\n * @param {Array} src\n * @param {String} find\n * @param {String} [findByKey]\n * @return {Boolean|Number} false when not found, or the index\n */\nfunction inArray(src, find, findByKey) {\n if (src.indexOf && !findByKey) {\n return src.indexOf(find);\n } else {\n var i = 0;\n while (i < src.length) {\n if ((findByKey && src[i][findByKey] == find) || (!findByKey && src[i] === find)) {\n return i;\n }\n i++;\n }\n return -1;\n }\n}\n\n/**\n * convert array-like objects to real arrays\n * @param {Object} obj\n * @returns {Array}\n */\nfunction toArray(obj) {\n return Array.prototype.slice.call(obj, 0);\n}\n\n/**\n * unique array with objects based on a key (like 'id') or just by the array's value\n * @param {Array} src [{id:1},{id:2},{id:1}]\n * @param {String} [key]\n * @param {Boolean} [sort=False]\n * @returns {Array} [{id:1},{id:2}]\n */\nfunction uniqueArray(src, key, sort) {\n var results = [];\n var values = [];\n var i = 0;\n\n while (i < src.length) {\n var val = key ? src[i][key] : src[i];\n if (inArray(values, val) < 0) {\n results.push(src[i]);\n }\n values[i] = val;\n i++;\n }\n\n if (sort) {\n if (!key) {\n results = results.sort();\n } else {\n results = results.sort(function sortUniqueArray(a, b) {\n return a[key] > b[key];\n });\n }\n }\n\n return results;\n}\n\n/**\n * get the prefixed property\n * @param {Object} obj\n * @param {String} property\n * @returns {String|Undefined} prefixed\n */\nfunction prefixed(obj, property) {\n var prefix, prop;\n var camelProp = property[0].toUpperCase() + property.slice(1);\n\n var i = 0;\n while (i < VENDOR_PREFIXES.length) {\n prefix = VENDOR_PREFIXES[i];\n prop = (prefix) ? prefix + camelProp : property;\n\n if (prop in obj) {\n return prop;\n }\n i++;\n }\n return undefined;\n}\n\n/**\n * get a unique id\n * @returns {number} uniqueId\n */\nvar _uniqueId = 1;\nfunction uniqueId() {\n return _uniqueId++;\n}\n\n/**\n * get the window object of an element\n * @param {HTMLElement} element\n * @returns {DocumentView|Window}\n */\nfunction getWindowForElement(element) {\n var doc = element.ownerDocument || element;\n return (doc.defaultView || doc.parentWindow || window);\n}\n\nvar MOBILE_REGEX = /mobile|tablet|ip(ad|hone|od)|android/i;\n\nvar SUPPORT_TOUCH = ('ontouchstart' in window);\nvar SUPPORT_POINTER_EVENTS = prefixed(window, 'PointerEvent') !== undefined;\nvar SUPPORT_ONLY_TOUCH = SUPPORT_TOUCH && MOBILE_REGEX.test(navigator.userAgent);\n\nvar INPUT_TYPE_TOUCH = 'touch';\nvar INPUT_TYPE_PEN = 'pen';\nvar INPUT_TYPE_MOUSE = 'mouse';\nvar INPUT_TYPE_KINECT = 'kinect';\n\nvar COMPUTE_INTERVAL = 25;\n\nvar INPUT_START = 1;\nvar INPUT_MOVE = 2;\nvar INPUT_END = 4;\nvar INPUT_CANCEL = 8;\n\nvar DIRECTION_NONE = 1;\nvar DIRECTION_LEFT = 2;\nvar DIRECTION_RIGHT = 4;\nvar DIRECTION_UP = 8;\nvar DIRECTION_DOWN = 16;\n\nvar DIRECTION_HORIZONTAL = DIRECTION_LEFT | DIRECTION_RIGHT;\nvar DIRECTION_VERTICAL = DIRECTION_UP | DIRECTION_DOWN;\nvar DIRECTION_ALL = DIRECTION_HORIZONTAL | DIRECTION_VERTICAL;\n\nvar PROPS_XY = ['x', 'y'];\nvar PROPS_CLIENT_XY = ['clientX', 'clientY'];\n\n/**\n * create new input type manager\n * @param {Manager} manager\n * @param {Function} callback\n * @returns {Input}\n * @constructor\n */\nfunction Input(manager, callback) {\n var self = this;\n this.manager = manager;\n this.callback = callback;\n this.element = manager.element;\n this.target = manager.options.inputTarget;\n\n // smaller wrapper around the handler, for the scope and the enabled state of the manager,\n // so when disabled the input events are completely bypassed.\n this.domHandler = function(ev) {\n if (boolOrFn(manager.options.enable, [manager])) {\n self.handler(ev);\n }\n };\n\n this.init();\n\n}\n\nInput.prototype = {\n /**\n * should handle the inputEvent data and trigger the callback\n * @virtual\n */\n handler: function() { },\n\n /**\n * bind the events\n */\n init: function() {\n this.evEl && addEventListeners(this.element, this.evEl, this.domHandler);\n this.evTarget && addEventListeners(this.target, this.evTarget, this.domHandler);\n this.evWin && addEventListeners(getWindowForElement(this.element), this.evWin, this.domHandler);\n },\n\n /**\n * unbind the events\n */\n destroy: function() {\n this.evEl && removeEventListeners(this.element, this.evEl, this.domHandler);\n this.evTarget && removeEventListeners(this.target, this.evTarget, this.domHandler);\n this.evWin && removeEventListeners(getWindowForElement(this.element), this.evWin, this.domHandler);\n }\n};\n\n/**\n * create new input type manager\n * called by the Manager constructor\n * @param {Hammer} manager\n * @returns {Input}\n */\nfunction createInputInstance(manager) {\n var Type;\n var inputClass = manager.options.inputClass;\n\n if (inputClass) {\n Type = inputClass;\n } else if (SUPPORT_POINTER_EVENTS) {\n Type = PointerEventInput;\n } else if (SUPPORT_ONLY_TOUCH) {\n Type = TouchInput;\n } else if (!SUPPORT_TOUCH) {\n Type = MouseInput;\n } else {\n Type = TouchMouseInput;\n }\n return new (Type)(manager, inputHandler);\n}\n\n/**\n * handle input events\n * @param {Manager} manager\n * @param {String} eventType\n * @param {Object} input\n */\nfunction inputHandler(manager, eventType, input) {\n var pointersLen = input.pointers.length;\n var changedPointersLen = input.changedPointers.length;\n var isFirst = (eventType & INPUT_START && (pointersLen - changedPointersLen === 0));\n var isFinal = (eventType & (INPUT_END | INPUT_CANCEL) && (pointersLen - changedPointersLen === 0));\n\n input.isFirst = !!isFirst;\n input.isFinal = !!isFinal;\n\n if (isFirst) {\n manager.session = {};\n }\n\n // source event is the normalized value of the domEvents\n // like 'touchstart, mouseup, pointerdown'\n input.eventType = eventType;\n\n // compute scale, rotation etc\n computeInputData(manager, input);\n\n // emit secret event\n manager.emit('hammer.input', input);\n\n manager.recognize(input);\n manager.session.prevInput = input;\n}\n\n/**\n * extend the data with some usable properties like scale, rotate, velocity etc\n * @param {Object} manager\n * @param {Object} input\n */\nfunction computeInputData(manager, input) {\n var session = manager.session;\n var pointers = input.pointers;\n var pointersLength = pointers.length;\n\n // store the first input to calculate the distance and direction\n if (!session.firstInput) {\n session.firstInput = simpleCloneInputData(input);\n }\n\n // to compute scale and rotation we need to store the multiple touches\n if (pointersLength > 1 && !session.firstMultiple) {\n session.firstMultiple = simpleCloneInputData(input);\n } else if (pointersLength === 1) {\n session.firstMultiple = false;\n }\n\n var firstInput = session.firstInput;\n var firstMultiple = session.firstMultiple;\n var offsetCenter = firstMultiple ? firstMultiple.center : firstInput.center;\n\n var center = input.center = getCenter(pointers);\n input.timeStamp = now();\n input.deltaTime = input.timeStamp - firstInput.timeStamp;\n\n input.angle = getAngle(offsetCenter, center);\n input.distance = getDistance(offsetCenter, center);\n\n computeDeltaXY(session, input);\n input.offsetDirection = getDirection(input.deltaX, input.deltaY);\n\n var overallVelocity = getVelocity(input.deltaTime, input.deltaX, input.deltaY);\n input.overallVelocityX = overallVelocity.x;\n input.overallVelocityY = overallVelocity.y;\n input.overallVelocity = (abs(overallVelocity.x) > abs(overallVelocity.y)) ? overallVelocity.x : overallVelocity.y;\n\n input.scale = firstMultiple ? getScale(firstMultiple.pointers, pointers) : 1;\n input.rotation = firstMultiple ? getRotation(firstMultiple.pointers, pointers) : 0;\n\n input.maxPointers = !session.prevInput ? input.pointers.length : ((input.pointers.length >\n session.prevInput.maxPointers) ? input.pointers.length : session.prevInput.maxPointers);\n\n computeIntervalInputData(session, input);\n\n // find the correct target\n var target = manager.element;\n if (hasParent(input.srcEvent.target, target)) {\n target = input.srcEvent.target;\n }\n input.target = target;\n}\n\nfunction computeDeltaXY(session, input) {\n var center = input.center;\n var offset = session.offsetDelta || {};\n var prevDelta = session.prevDelta || {};\n var prevInput = session.prevInput || {};\n\n if (input.eventType === INPUT_START || prevInput.eventType === INPUT_END) {\n prevDelta = session.prevDelta = {\n x: prevInput.deltaX || 0,\n y: prevInput.deltaY || 0\n };\n\n offset = session.offsetDelta = {\n x: center.x,\n y: center.y\n };\n }\n\n input.deltaX = prevDelta.x + (center.x - offset.x);\n input.deltaY = prevDelta.y + (center.y - offset.y);\n}\n\n/**\n * velocity is calculated every x ms\n * @param {Object} session\n * @param {Object} input\n */\nfunction computeIntervalInputData(session, input) {\n var last = session.lastInterval || input,\n deltaTime = input.timeStamp - last.timeStamp,\n velocity, velocityX, velocityY, direction;\n\n if (input.eventType != INPUT_CANCEL && (deltaTime > COMPUTE_INTERVAL || last.velocity === undefined)) {\n var deltaX = input.deltaX - last.deltaX;\n var deltaY = input.deltaY - last.deltaY;\n\n var v = getVelocity(deltaTime, deltaX, deltaY);\n velocityX = v.x;\n velocityY = v.y;\n velocity = (abs(v.x) > abs(v.y)) ? v.x : v.y;\n direction = getDirection(deltaX, deltaY);\n\n session.lastInterval = input;\n } else {\n // use latest velocity info if it doesn't overtake a minimum period\n velocity = last.velocity;\n velocityX = last.velocityX;\n velocityY = last.velocityY;\n direction = last.direction;\n }\n\n input.velocity = velocity;\n input.velocityX = velocityX;\n input.velocityY = velocityY;\n input.direction = direction;\n}\n\n/**\n * create a simple clone from the input used for storage of firstInput and firstMultiple\n * @param {Object} input\n * @returns {Object} clonedInputData\n */\nfunction simpleCloneInputData(input) {\n // make a simple copy of the pointers because we will get a reference if we don't\n // we only need clientXY for the calculations\n var pointers = [];\n var i = 0;\n while (i < input.pointers.length) {\n pointers[i] = {\n clientX: round(input.pointers[i].clientX),\n clientY: round(input.pointers[i].clientY)\n };\n i++;\n }\n\n return {\n timeStamp: now(),\n pointers: pointers,\n center: getCenter(pointers),\n deltaX: input.deltaX,\n deltaY: input.deltaY\n };\n}\n\n/**\n * get the center of all the pointers\n * @param {Array} pointers\n * @return {Object} center contains `x` and `y` properties\n */\nfunction getCenter(pointers) {\n var pointersLength = pointers.length;\n\n // no need to loop when only one touch\n if (pointersLength === 1) {\n return {\n x: round(pointers[0].clientX),\n y: round(pointers[0].clientY)\n };\n }\n\n var x = 0, y = 0, i = 0;\n while (i < pointersLength) {\n x += pointers[i].clientX;\n y += pointers[i].clientY;\n i++;\n }\n\n return {\n x: round(x / pointersLength),\n y: round(y / pointersLength)\n };\n}\n\n/**\n * calculate the velocity between two points. unit is in px per ms.\n * @param {Number} deltaTime\n * @param {Number} x\n * @param {Number} y\n * @return {Object} velocity `x` and `y`\n */\nfunction getVelocity(deltaTime, x, y) {\n return {\n x: x / deltaTime || 0,\n y: y / deltaTime || 0\n };\n}\n\n/**\n * get the direction between two points\n * @param {Number} x\n * @param {Number} y\n * @return {Number} direction\n */\nfunction getDirection(x, y) {\n if (x === y) {\n return DIRECTION_NONE;\n }\n\n if (abs(x) >= abs(y)) {\n return x < 0 ? DIRECTION_LEFT : DIRECTION_RIGHT;\n }\n return y < 0 ? DIRECTION_UP : DIRECTION_DOWN;\n}\n\n/**\n * calculate the absolute distance between two points\n * @param {Object} p1 {x, y}\n * @param {Object} p2 {x, y}\n * @param {Array} [props] containing x and y keys\n * @return {Number} distance\n */\nfunction getDistance(p1, p2, props) {\n if (!props) {\n props = PROPS_XY;\n }\n var x = p2[props[0]] - p1[props[0]],\n y = p2[props[1]] - p1[props[1]];\n\n return Math.sqrt((x * x) + (y * y));\n}\n\n/**\n * calculate the angle between two coordinates\n * @param {Object} p1\n * @param {Object} p2\n * @param {Array} [props] containing x and y keys\n * @return {Number} angle\n */\nfunction getAngle(p1, p2, props) {\n if (!props) {\n props = PROPS_XY;\n }\n var x = p2[props[0]] - p1[props[0]],\n y = p2[props[1]] - p1[props[1]];\n return Math.atan2(y, x) * 180 / Math.PI;\n}\n\n/**\n * calculate the rotation degrees between two pointersets\n * @param {Array} start array of pointers\n * @param {Array} end array of pointers\n * @return {Number} rotation\n */\nfunction getRotation(start, end) {\n return getAngle(end[1], end[0], PROPS_CLIENT_XY) + getAngle(start[1], start[0], PROPS_CLIENT_XY);\n}\n\n/**\n * calculate the scale factor between two pointersets\n * no scale is 1, and goes down to 0 when pinched together, and bigger when pinched out\n * @param {Array} start array of pointers\n * @param {Array} end array of pointers\n * @return {Number} scale\n */\nfunction getScale(start, end) {\n return getDistance(end[0], end[1], PROPS_CLIENT_XY) / getDistance(start[0], start[1], PROPS_CLIENT_XY);\n}\n\nvar MOUSE_INPUT_MAP = {\n mousedown: INPUT_START,\n mousemove: INPUT_MOVE,\n mouseup: INPUT_END\n};\n\nvar MOUSE_ELEMENT_EVENTS = 'mousedown';\nvar MOUSE_WINDOW_EVENTS = 'mousemove mouseup';\n\n/**\n * Mouse events input\n * @constructor\n * @extends Input\n */\nfunction MouseInput() {\n this.evEl = MOUSE_ELEMENT_EVENTS;\n this.evWin = MOUSE_WINDOW_EVENTS;\n\n this.pressed = false; // mousedown state\n\n Input.apply(this, arguments);\n}\n\ninherit(MouseInput, Input, {\n /**\n * handle mouse events\n * @param {Object} ev\n */\n handler: function MEhandler(ev) {\n var eventType = MOUSE_INPUT_MAP[ev.type];\n\n // on start we want to have the left mouse button down\n if (eventType & INPUT_START && ev.button === 0) {\n this.pressed = true;\n }\n\n if (eventType & INPUT_MOVE && ev.which !== 1) {\n eventType = INPUT_END;\n }\n\n // mouse must be down\n if (!this.pressed) {\n return;\n }\n\n if (eventType & INPUT_END) {\n this.pressed = false;\n }\n\n this.callback(this.manager, eventType, {\n pointers: [ev],\n changedPointers: [ev],\n pointerType: INPUT_TYPE_MOUSE,\n srcEvent: ev\n });\n }\n});\n\nvar POINTER_INPUT_MAP = {\n pointerdown: INPUT_START,\n pointermove: INPUT_MOVE,\n pointerup: INPUT_END,\n pointercancel: INPUT_CANCEL,\n pointerout: INPUT_CANCEL\n};\n\n// in IE10 the pointer types is defined as an enum\nvar IE10_POINTER_TYPE_ENUM = {\n 2: INPUT_TYPE_TOUCH,\n 3: INPUT_TYPE_PEN,\n 4: INPUT_TYPE_MOUSE,\n 5: INPUT_TYPE_KINECT // see https://twitter.com/jacobrossi/status/480596438489890816\n};\n\nvar POINTER_ELEMENT_EVENTS = 'pointerdown';\nvar POINTER_WINDOW_EVENTS = 'pointermove pointerup pointercancel';\n\n// IE10 has prefixed support, and case-sensitive\nif (window.MSPointerEvent && !window.PointerEvent) {\n POINTER_ELEMENT_EVENTS = 'MSPointerDown';\n POINTER_WINDOW_EVENTS = 'MSPointerMove MSPointerUp MSPointerCancel';\n}\n\n/**\n * Pointer events input\n * @constructor\n * @extends Input\n */\nfunction PointerEventInput() {\n this.evEl = POINTER_ELEMENT_EVENTS;\n this.evWin = POINTER_WINDOW_EVENTS;\n\n Input.apply(this, arguments);\n\n this.store = (this.manager.session.pointerEvents = []);\n}\n\ninherit(PointerEventInput, Input, {\n /**\n * handle mouse events\n * @param {Object} ev\n */\n handler: function PEhandler(ev) {\n var store = this.store;\n var removePointer = false;\n\n var eventTypeNormalized = ev.type.toLowerCase().replace('ms', '');\n var eventType = POINTER_INPUT_MAP[eventTypeNormalized];\n var pointerType = IE10_POINTER_TYPE_ENUM[ev.pointerType] || ev.pointerType;\n\n var isTouch = (pointerType == INPUT_TYPE_TOUCH);\n\n // get index of the event in the store\n var storeIndex = inArray(store, ev.pointerId, 'pointerId');\n\n // start and mouse must be down\n if (eventType & INPUT_START && (ev.button === 0 || isTouch)) {\n if (storeIndex < 0) {\n store.push(ev);\n storeIndex = store.length - 1;\n }\n } else if (eventType & (INPUT_END | INPUT_CANCEL)) {\n removePointer = true;\n }\n\n // it not found, so the pointer hasn't been down (so it's probably a hover)\n if (storeIndex < 0) {\n return;\n }\n\n // update the event in the store\n store[storeIndex] = ev;\n\n this.callback(this.manager, eventType, {\n pointers: store,\n changedPointers: [ev],\n pointerType: pointerType,\n srcEvent: ev\n });\n\n if (removePointer) {\n // remove from the store\n store.splice(storeIndex, 1);\n }\n }\n});\n\nvar SINGLE_TOUCH_INPUT_MAP = {\n touchstart: INPUT_START,\n touchmove: INPUT_MOVE,\n touchend: INPUT_END,\n touchcancel: INPUT_CANCEL\n};\n\nvar SINGLE_TOUCH_TARGET_EVENTS = 'touchstart';\nvar SINGLE_TOUCH_WINDOW_EVENTS = 'touchstart touchmove touchend touchcancel';\n\n/**\n * Touch events input\n * @constructor\n * @extends Input\n */\nfunction SingleTouchInput() {\n this.evTarget = SINGLE_TOUCH_TARGET_EVENTS;\n this.evWin = SINGLE_TOUCH_WINDOW_EVENTS;\n this.started = false;\n\n Input.apply(this, arguments);\n}\n\ninherit(SingleTouchInput, Input, {\n handler: function TEhandler(ev) {\n var type = SINGLE_TOUCH_INPUT_MAP[ev.type];\n\n // should we handle the touch events?\n if (type === INPUT_START) {\n this.started = true;\n }\n\n if (!this.started) {\n return;\n }\n\n var touches = normalizeSingleTouches.call(this, ev, type);\n\n // when done, reset the started state\n if (type & (INPUT_END | INPUT_CANCEL) && touches[0].length - touches[1].length === 0) {\n this.started = false;\n }\n\n this.callback(this.manager, type, {\n pointers: touches[0],\n changedPointers: touches[1],\n pointerType: INPUT_TYPE_TOUCH,\n srcEvent: ev\n });\n }\n});\n\n/**\n * @this {TouchInput}\n * @param {Object} ev\n * @param {Number} type flag\n * @returns {undefined|Array} [all, changed]\n */\nfunction normalizeSingleTouches(ev, type) {\n var all = toArray(ev.touches);\n var changed = toArray(ev.changedTouches);\n\n if (type & (INPUT_END | INPUT_CANCEL)) {\n all = uniqueArray(all.concat(changed), 'identifier', true);\n }\n\n return [all, changed];\n}\n\nvar TOUCH_INPUT_MAP = {\n touchstart: INPUT_START,\n touchmove: INPUT_MOVE,\n touchend: INPUT_END,\n touchcancel: INPUT_CANCEL\n};\n\nvar TOUCH_TARGET_EVENTS = 'touchstart touchmove touchend touchcancel';\n\n/**\n * Multi-user touch events input\n * @constructor\n * @extends Input\n */\nfunction TouchInput() {\n this.evTarget = TOUCH_TARGET_EVENTS;\n this.targetIds = {};\n\n Input.apply(this, arguments);\n}\n\ninherit(TouchInput, Input, {\n handler: function MTEhandler(ev) {\n var type = TOUCH_INPUT_MAP[ev.type];\n var touches = getTouches.call(this, ev, type);\n if (!touches) {\n return;\n }\n\n this.callback(this.manager, type, {\n pointers: touches[0],\n changedPointers: touches[1],\n pointerType: INPUT_TYPE_TOUCH,\n srcEvent: ev\n });\n }\n});\n\n/**\n * @this {TouchInput}\n * @param {Object} ev\n * @param {Number} type flag\n * @returns {undefined|Array} [all, changed]\n */\nfunction getTouches(ev, type) {\n var allTouches = toArray(ev.touches);\n var targetIds = this.targetIds;\n\n // when there is only one touch, the process can be simplified\n if (type & (INPUT_START | INPUT_MOVE) && allTouches.length === 1) {\n targetIds[allTouches[0].identifier] = true;\n return [allTouches, allTouches];\n }\n\n var i,\n targetTouches,\n changedTouches = toArray(ev.changedTouches),\n changedTargetTouches = [],\n target = this.target;\n\n // get target touches from touches\n targetTouches = allTouches.filter(function(touch) {\n return hasParent(touch.target, target);\n });\n\n // collect touches\n if (type === INPUT_START) {\n i = 0;\n while (i < targetTouches.length) {\n targetIds[targetTouches[i].identifier] = true;\n i++;\n }\n }\n\n // filter changed touches to only contain touches that exist in the collected target ids\n i = 0;\n while (i < changedTouches.length) {\n if (targetIds[changedTouches[i].identifier]) {\n changedTargetTouches.push(changedTouches[i]);\n }\n\n // cleanup removed touches\n if (type & (INPUT_END | INPUT_CANCEL)) {\n delete targetIds[changedTouches[i].identifier];\n }\n i++;\n }\n\n if (!changedTargetTouches.length) {\n return;\n }\n\n return [\n // merge targetTouches with changedTargetTouches so it contains ALL touches, including 'end' and 'cancel'\n uniqueArray(targetTouches.concat(changedTargetTouches), 'identifier', true),\n changedTargetTouches\n ];\n}\n\n/**\n * Combined touch and mouse input\n *\n * Touch has a higher priority then mouse, and while touching no mouse events are allowed.\n * This because touch devices also emit mouse events while doing a touch.\n *\n * @constructor\n * @extends Input\n */\n\nvar DEDUP_TIMEOUT = 2500;\nvar DEDUP_DISTANCE = 25;\n\nfunction TouchMouseInput() {\n Input.apply(this, arguments);\n\n var handler = bindFn(this.handler, this);\n this.touch = new TouchInput(this.manager, handler);\n this.mouse = new MouseInput(this.manager, handler);\n\n this.primaryTouch = null;\n this.lastTouches = [];\n}\n\ninherit(TouchMouseInput, Input, {\n /**\n * handle mouse and touch events\n * @param {Hammer} manager\n * @param {String} inputEvent\n * @param {Object} inputData\n */\n handler: function TMEhandler(manager, inputEvent, inputData) {\n var isTouch = (inputData.pointerType == INPUT_TYPE_TOUCH),\n isMouse = (inputData.pointerType == INPUT_TYPE_MOUSE);\n\n if (isMouse && inputData.sourceCapabilities && inputData.sourceCapabilities.firesTouchEvents) {\n return;\n }\n\n // when we're in a touch event, record touches to de-dupe synthetic mouse event\n if (isTouch) {\n recordTouches.call(this, inputEvent, inputData);\n } else if (isMouse && isSyntheticEvent.call(this, inputData)) {\n return;\n }\n\n this.callback(manager, inputEvent, inputData);\n },\n\n /**\n * remove the event listeners\n */\n destroy: function destroy() {\n this.touch.destroy();\n this.mouse.destroy();\n }\n});\n\nfunction recordTouches(eventType, eventData) {\n if (eventType & INPUT_START) {\n this.primaryTouch = eventData.changedPointers[0].identifier;\n setLastTouch.call(this, eventData);\n } else if (eventType & (INPUT_END | INPUT_CANCEL)) {\n setLastTouch.call(this, eventData);\n }\n}\n\nfunction setLastTouch(eventData) {\n var touch = eventData.changedPointers[0];\n\n if (touch.identifier === this.primaryTouch) {\n var lastTouch = {x: touch.clientX, y: touch.clientY};\n this.lastTouches.push(lastTouch);\n var lts = this.lastTouches;\n var removeLastTouch = function() {\n var i = lts.indexOf(lastTouch);\n if (i > -1) {\n lts.splice(i, 1);\n }\n };\n setTimeout(removeLastTouch, DEDUP_TIMEOUT);\n }\n}\n\nfunction isSyntheticEvent(eventData) {\n var x = eventData.srcEvent.clientX, y = eventData.srcEvent.clientY;\n for (var i = 0; i < this.lastTouches.length; i++) {\n var t = this.lastTouches[i];\n var dx = Math.abs(x - t.x), dy = Math.abs(y - t.y);\n if (dx <= DEDUP_DISTANCE && dy <= DEDUP_DISTANCE) {\n return true;\n }\n }\n return false;\n}\n\nvar PREFIXED_TOUCH_ACTION = prefixed(TEST_ELEMENT.style, 'touchAction');\nvar NATIVE_TOUCH_ACTION = PREFIXED_TOUCH_ACTION !== undefined;\n\n// magical touchAction value\nvar TOUCH_ACTION_COMPUTE = 'compute';\nvar TOUCH_ACTION_AUTO = 'auto';\nvar TOUCH_ACTION_MANIPULATION = 'manipulation'; // not implemented\nvar TOUCH_ACTION_NONE = 'none';\nvar TOUCH_ACTION_PAN_X = 'pan-x';\nvar TOUCH_ACTION_PAN_Y = 'pan-y';\nvar TOUCH_ACTION_MAP = getTouchActionProps();\n\n/**\n * Touch Action\n * sets the touchAction property or uses the js alternative\n * @param {Manager} manager\n * @param {String} value\n * @constructor\n */\nfunction TouchAction(manager, value) {\n this.manager = manager;\n this.set(value);\n}\n\nTouchAction.prototype = {\n /**\n * set the touchAction value on the element or enable the polyfill\n * @param {String} value\n */\n set: function(value) {\n // find out the touch-action by the event handlers\n if (value == TOUCH_ACTION_COMPUTE) {\n value = this.compute();\n }\n\n if (NATIVE_TOUCH_ACTION && this.manager.element.style && TOUCH_ACTION_MAP[value]) {\n this.manager.element.style[PREFIXED_TOUCH_ACTION] = value;\n }\n this.actions = value.toLowerCase().trim();\n },\n\n /**\n * just re-set the touchAction value\n */\n update: function() {\n this.set(this.manager.options.touchAction);\n },\n\n /**\n * compute the value for the touchAction property based on the recognizer's settings\n * @returns {String} value\n */\n compute: function() {\n var actions = [];\n each(this.manager.recognizers, function(recognizer) {\n if (boolOrFn(recognizer.options.enable, [recognizer])) {\n actions = actions.concat(recognizer.getTouchAction());\n }\n });\n return cleanTouchActions(actions.join(' '));\n },\n\n /**\n * this method is called on each input cycle and provides the preventing of the browser behavior\n * @param {Object} input\n */\n preventDefaults: function(input) {\n var srcEvent = input.srcEvent;\n var direction = input.offsetDirection;\n\n // if the touch action did prevented once this session\n if (this.manager.session.prevented) {\n srcEvent.preventDefault();\n return;\n }\n\n var actions = this.actions;\n var hasNone = inStr(actions, TOUCH_ACTION_NONE) && !TOUCH_ACTION_MAP[TOUCH_ACTION_NONE];\n var hasPanY = inStr(actions, TOUCH_ACTION_PAN_Y) && !TOUCH_ACTION_MAP[TOUCH_ACTION_PAN_Y];\n var hasPanX = inStr(actions, TOUCH_ACTION_PAN_X) && !TOUCH_ACTION_MAP[TOUCH_ACTION_PAN_X];\n\n if (hasNone) {\n //do not prevent defaults if this is a tap gesture\n\n var isTapPointer = input.pointers.length === 1;\n var isTapMovement = input.distance < 2;\n var isTapTouchTime = input.deltaTime < 250;\n\n if (isTapPointer && isTapMovement && isTapTouchTime) {\n return;\n }\n }\n\n if (hasPanX && hasPanY) {\n // `pan-x pan-y` means browser handles all scrolling/panning, do not prevent\n return;\n }\n\n if (hasNone ||\n (hasPanY && direction & DIRECTION_HORIZONTAL) ||\n (hasPanX && direction & DIRECTION_VERTICAL)) {\n return this.preventSrc(srcEvent);\n }\n },\n\n /**\n * call preventDefault to prevent the browser's default behavior (scrolling in most cases)\n * @param {Object} srcEvent\n */\n preventSrc: function(srcEvent) {\n this.manager.session.prevented = true;\n srcEvent.preventDefault();\n }\n};\n\n/**\n * when the touchActions are collected they are not a valid value, so we need to clean things up. *\n * @param {String} actions\n * @returns {*}\n */\nfunction cleanTouchActions(actions) {\n // none\n if (inStr(actions, TOUCH_ACTION_NONE)) {\n return TOUCH_ACTION_NONE;\n }\n\n var hasPanX = inStr(actions, TOUCH_ACTION_PAN_X);\n var hasPanY = inStr(actions, TOUCH_ACTION_PAN_Y);\n\n // if both pan-x and pan-y are set (different recognizers\n // for different directions, e.g. horizontal pan but vertical swipe?)\n // we need none (as otherwise with pan-x pan-y combined none of these\n // recognizers will work, since the browser would handle all panning\n if (hasPanX && hasPanY) {\n return TOUCH_ACTION_NONE;\n }\n\n // pan-x OR pan-y\n if (hasPanX || hasPanY) {\n return hasPanX ? TOUCH_ACTION_PAN_X : TOUCH_ACTION_PAN_Y;\n }\n\n // manipulation\n if (inStr(actions, TOUCH_ACTION_MANIPULATION)) {\n return TOUCH_ACTION_MANIPULATION;\n }\n\n return TOUCH_ACTION_AUTO;\n}\n\nfunction getTouchActionProps() {\n if (!NATIVE_TOUCH_ACTION) {\n return false;\n }\n var touchMap = {};\n var cssSupports = window.CSS && window.CSS.supports;\n ['auto', 'manipulation', 'pan-y', 'pan-x', 'pan-x pan-y', 'none'].forEach(function(val) {\n\n // If css.supports is not supported but there is native touch-action assume it supports\n // all values. This is the case for IE 10 and 11.\n touchMap[val] = cssSupports ? window.CSS.supports('touch-action', val) : true;\n });\n return touchMap;\n}\n\n/**\n * Recognizer flow explained; *\n * All recognizers have the initial state of POSSIBLE when a input session starts.\n * The definition of a input session is from the first input until the last input, with all it's movement in it. *\n * Example session for mouse-input: mousedown -> mousemove -> mouseup\n *\n * On each recognizing cycle (see Manager.recognize) the .recognize() method is executed\n * which determines with state it should be.\n *\n * If the recognizer has the state FAILED, CANCELLED or RECOGNIZED (equals ENDED), it is reset to\n * POSSIBLE to give it another change on the next cycle.\n *\n * Possible\n * |\n * +-----+---------------+\n * | |\n * +-----+-----+ |\n * | | |\n * Failed Cancelled |\n * +-------+------+\n * | |\n * Recognized Began\n * |\n * Changed\n * |\n * Ended/Recognized\n */\nvar STATE_POSSIBLE = 1;\nvar STATE_BEGAN = 2;\nvar STATE_CHANGED = 4;\nvar STATE_ENDED = 8;\nvar STATE_RECOGNIZED = STATE_ENDED;\nvar STATE_CANCELLED = 16;\nvar STATE_FAILED = 32;\n\n/**\n * Recognizer\n * Every recognizer needs to extend from this class.\n * @constructor\n * @param {Object} options\n */\nfunction Recognizer(options) {\n this.options = assign({}, this.defaults, options || {});\n\n this.id = uniqueId();\n\n this.manager = null;\n\n // default is enable true\n this.options.enable = ifUndefined(this.options.enable, true);\n\n this.state = STATE_POSSIBLE;\n\n this.simultaneous = {};\n this.requireFail = [];\n}\n\nRecognizer.prototype = {\n /**\n * @virtual\n * @type {Object}\n */\n defaults: {},\n\n /**\n * set options\n * @param {Object} options\n * @return {Recognizer}\n */\n set: function(options) {\n assign(this.options, options);\n\n // also update the touchAction, in case something changed about the directions/enabled state\n this.manager && this.manager.touchAction.update();\n return this;\n },\n\n /**\n * recognize simultaneous with an other recognizer.\n * @param {Recognizer} otherRecognizer\n * @returns {Recognizer} this\n */\n recognizeWith: function(otherRecognizer) {\n if (invokeArrayArg(otherRecognizer, 'recognizeWith', this)) {\n return this;\n }\n\n var simultaneous = this.simultaneous;\n otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n if (!simultaneous[otherRecognizer.id]) {\n simultaneous[otherRecognizer.id] = otherRecognizer;\n otherRecognizer.recognizeWith(this);\n }\n return this;\n },\n\n /**\n * drop the simultaneous link. it doesnt remove the link on the other recognizer.\n * @param {Recognizer} otherRecognizer\n * @returns {Recognizer} this\n */\n dropRecognizeWith: function(otherRecognizer) {\n if (invokeArrayArg(otherRecognizer, 'dropRecognizeWith', this)) {\n return this;\n }\n\n otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n delete this.simultaneous[otherRecognizer.id];\n return this;\n },\n\n /**\n * recognizer can only run when an other is failing\n * @param {Recognizer} otherRecognizer\n * @returns {Recognizer} this\n */\n requireFailure: function(otherRecognizer) {\n if (invokeArrayArg(otherRecognizer, 'requireFailure', this)) {\n return this;\n }\n\n var requireFail = this.requireFail;\n otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n if (inArray(requireFail, otherRecognizer) === -1) {\n requireFail.push(otherRecognizer);\n otherRecognizer.requireFailure(this);\n }\n return this;\n },\n\n /**\n * drop the requireFailure link. it does not remove the link on the other recognizer.\n * @param {Recognizer} otherRecognizer\n * @returns {Recognizer} this\n */\n dropRequireFailure: function(otherRecognizer) {\n if (invokeArrayArg(otherRecognizer, 'dropRequireFailure', this)) {\n return this;\n }\n\n otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n var index = inArray(this.requireFail, otherRecognizer);\n if (index > -1) {\n this.requireFail.splice(index, 1);\n }\n return this;\n },\n\n /**\n * has require failures boolean\n * @returns {boolean}\n */\n hasRequireFailures: function() {\n return this.requireFail.length > 0;\n },\n\n /**\n * if the recognizer can recognize simultaneous with an other recognizer\n * @param {Recognizer} otherRecognizer\n * @returns {Boolean}\n */\n canRecognizeWith: function(otherRecognizer) {\n return !!this.simultaneous[otherRecognizer.id];\n },\n\n /**\n * You should use `tryEmit` instead of `emit` directly to check\n * that all the needed recognizers has failed before emitting.\n * @param {Object} input\n */\n emit: function(input) {\n var self = this;\n var state = this.state;\n\n function emit(event) {\n self.manager.emit(event, input);\n }\n\n // 'panstart' and 'panmove'\n if (state < STATE_ENDED) {\n emit(self.options.event + stateStr(state));\n }\n\n emit(self.options.event); // simple 'eventName' events\n\n if (input.additionalEvent) { // additional event(panleft, panright, pinchin, pinchout...)\n emit(input.additionalEvent);\n }\n\n // panend and pancancel\n if (state >= STATE_ENDED) {\n emit(self.options.event + stateStr(state));\n }\n },\n\n /**\n * Check that all the require failure recognizers has failed,\n * if true, it emits a gesture event,\n * otherwise, setup the state to FAILED.\n * @param {Object} input\n */\n tryEmit: function(input) {\n if (this.canEmit()) {\n return this.emit(input);\n }\n // it's failing anyway\n this.state = STATE_FAILED;\n },\n\n /**\n * can we emit?\n * @returns {boolean}\n */\n canEmit: function() {\n var i = 0;\n while (i < this.requireFail.length) {\n if (!(this.requireFail[i].state & (STATE_FAILED | STATE_POSSIBLE))) {\n return false;\n }\n i++;\n }\n return true;\n },\n\n /**\n * update the recognizer\n * @param {Object} inputData\n */\n recognize: function(inputData) {\n // make a new copy of the inputData\n // so we can change the inputData without messing up the other recognizers\n var inputDataClone = assign({}, inputData);\n\n // is is enabled and allow recognizing?\n if (!boolOrFn(this.options.enable, [this, inputDataClone])) {\n this.reset();\n this.state = STATE_FAILED;\n return;\n }\n\n // reset when we've reached the end\n if (this.state & (STATE_RECOGNIZED | STATE_CANCELLED | STATE_FAILED)) {\n this.state = STATE_POSSIBLE;\n }\n\n this.state = this.process(inputDataClone);\n\n // the recognizer has recognized a gesture\n // so trigger an event\n if (this.state & (STATE_BEGAN | STATE_CHANGED | STATE_ENDED | STATE_CANCELLED)) {\n this.tryEmit(inputDataClone);\n }\n },\n\n /**\n * return the state of the recognizer\n * the actual recognizing happens in this method\n * @virtual\n * @param {Object} inputData\n * @returns {Const} STATE\n */\n process: function(inputData) { }, // jshint ignore:line\n\n /**\n * return the preferred touch-action\n * @virtual\n * @returns {Array}\n */\n getTouchAction: function() { },\n\n /**\n * called when the gesture isn't allowed to recognize\n * like when another is being recognized or it is disabled\n * @virtual\n */\n reset: function() { }\n};\n\n/**\n * get a usable string, used as event postfix\n * @param {Const} state\n * @returns {String} state\n */\nfunction stateStr(state) {\n if (state & STATE_CANCELLED) {\n return 'cancel';\n } else if (state & STATE_ENDED) {\n return 'end';\n } else if (state & STATE_CHANGED) {\n return 'move';\n } else if (state & STATE_BEGAN) {\n return 'start';\n }\n return '';\n}\n\n/**\n * direction cons to string\n * @param {Const} direction\n * @returns {String}\n */\nfunction directionStr(direction) {\n if (direction == DIRECTION_DOWN) {\n return 'down';\n } else if (direction == DIRECTION_UP) {\n return 'up';\n } else if (direction == DIRECTION_LEFT) {\n return 'left';\n } else if (direction == DIRECTION_RIGHT) {\n return 'right';\n }\n return '';\n}\n\n/**\n * get a recognizer by name if it is bound to a manager\n * @param {Recognizer|String} otherRecognizer\n * @param {Recognizer} recognizer\n * @returns {Recognizer}\n */\nfunction getRecognizerByNameIfManager(otherRecognizer, recognizer) {\n var manager = recognizer.manager;\n if (manager) {\n return manager.get(otherRecognizer);\n }\n return otherRecognizer;\n}\n\n/**\n * This recognizer is just used as a base for the simple attribute recognizers.\n * @constructor\n * @extends Recognizer\n */\nfunction AttrRecognizer() {\n Recognizer.apply(this, arguments);\n}\n\ninherit(AttrRecognizer, Recognizer, {\n /**\n * @namespace\n * @memberof AttrRecognizer\n */\n defaults: {\n /**\n * @type {Number}\n * @default 1\n */\n pointers: 1\n },\n\n /**\n * Used to check if it the recognizer receives valid input, like input.distance > 10.\n * @memberof AttrRecognizer\n * @param {Object} input\n * @returns {Boolean} recognized\n */\n attrTest: function(input) {\n var optionPointers = this.options.pointers;\n return optionPointers === 0 || input.pointers.length === optionPointers;\n },\n\n /**\n * Process the input and return the state for the recognizer\n * @memberof AttrRecognizer\n * @param {Object} input\n * @returns {*} State\n */\n process: function(input) {\n var state = this.state;\n var eventType = input.eventType;\n\n var isRecognized = state & (STATE_BEGAN | STATE_CHANGED);\n var isValid = this.attrTest(input);\n\n // on cancel input and we've recognized before, return STATE_CANCELLED\n if (isRecognized && (eventType & INPUT_CANCEL || !isValid)) {\n return state | STATE_CANCELLED;\n } else if (isRecognized || isValid) {\n if (eventType & INPUT_END) {\n return state | STATE_ENDED;\n } else if (!(state & STATE_BEGAN)) {\n return STATE_BEGAN;\n }\n return state | STATE_CHANGED;\n }\n return STATE_FAILED;\n }\n});\n\n/**\n * Pan\n * Recognized when the pointer is down and moved in the allowed direction.\n * @constructor\n * @extends AttrRecognizer\n */\nfunction PanRecognizer() {\n AttrRecognizer.apply(this, arguments);\n\n this.pX = null;\n this.pY = null;\n}\n\ninherit(PanRecognizer, AttrRecognizer, {\n /**\n * @namespace\n * @memberof PanRecognizer\n */\n defaults: {\n event: 'pan',\n threshold: 10,\n pointers: 1,\n direction: DIRECTION_ALL\n },\n\n getTouchAction: function() {\n var direction = this.options.direction;\n var actions = [];\n if (direction & DIRECTION_HORIZONTAL) {\n actions.push(TOUCH_ACTION_PAN_Y);\n }\n if (direction & DIRECTION_VERTICAL) {\n actions.push(TOUCH_ACTION_PAN_X);\n }\n return actions;\n },\n\n directionTest: function(input) {\n var options = this.options;\n var hasMoved = true;\n var distance = input.distance;\n var direction = input.direction;\n var x = input.deltaX;\n var y = input.deltaY;\n\n // lock to axis?\n if (!(direction & options.direction)) {\n if (options.direction & DIRECTION_HORIZONTAL) {\n direction = (x === 0) ? DIRECTION_NONE : (x < 0) ? DIRECTION_LEFT : DIRECTION_RIGHT;\n hasMoved = x != this.pX;\n distance = Math.abs(input.deltaX);\n } else {\n direction = (y === 0) ? DIRECTION_NONE : (y < 0) ? DIRECTION_UP : DIRECTION_DOWN;\n hasMoved = y != this.pY;\n distance = Math.abs(input.deltaY);\n }\n }\n input.direction = direction;\n return hasMoved && distance > options.threshold && direction & options.direction;\n },\n\n attrTest: function(input) {\n return AttrRecognizer.prototype.attrTest.call(this, input) &&\n (this.state & STATE_BEGAN || (!(this.state & STATE_BEGAN) && this.directionTest(input)));\n },\n\n emit: function(input) {\n\n this.pX = input.deltaX;\n this.pY = input.deltaY;\n\n var direction = directionStr(input.direction);\n\n if (direction) {\n input.additionalEvent = this.options.event + direction;\n }\n this._super.emit.call(this, input);\n }\n});\n\n/**\n * Pinch\n * Recognized when two or more pointers are moving toward (zoom-in) or away from each other (zoom-out).\n * @constructor\n * @extends AttrRecognizer\n */\nfunction PinchRecognizer() {\n AttrRecognizer.apply(this, arguments);\n}\n\ninherit(PinchRecognizer, AttrRecognizer, {\n /**\n * @namespace\n * @memberof PinchRecognizer\n */\n defaults: {\n event: 'pinch',\n threshold: 0,\n pointers: 2\n },\n\n getTouchAction: function() {\n return [TOUCH_ACTION_NONE];\n },\n\n attrTest: function(input) {\n return this._super.attrTest.call(this, input) &&\n (Math.abs(input.scale - 1) > this.options.threshold || this.state & STATE_BEGAN);\n },\n\n emit: function(input) {\n if (input.scale !== 1) {\n var inOut = input.scale < 1 ? 'in' : 'out';\n input.additionalEvent = this.options.event + inOut;\n }\n this._super.emit.call(this, input);\n }\n});\n\n/**\n * Press\n * Recognized when the pointer is down for x ms without any movement.\n * @constructor\n * @extends Recognizer\n */\nfunction PressRecognizer() {\n Recognizer.apply(this, arguments);\n\n this._timer = null;\n this._input = null;\n}\n\ninherit(PressRecognizer, Recognizer, {\n /**\n * @namespace\n * @memberof PressRecognizer\n */\n defaults: {\n event: 'press',\n pointers: 1,\n time: 251, // minimal time of the pointer to be pressed\n threshold: 9 // a minimal movement is ok, but keep it low\n },\n\n getTouchAction: function() {\n return [TOUCH_ACTION_AUTO];\n },\n\n process: function(input) {\n var options = this.options;\n var validPointers = input.pointers.length === options.pointers;\n var validMovement = input.distance < options.threshold;\n var validTime = input.deltaTime > options.time;\n\n this._input = input;\n\n // we only allow little movement\n // and we've reached an end event, so a tap is possible\n if (!validMovement || !validPointers || (input.eventType & (INPUT_END | INPUT_CANCEL) && !validTime)) {\n this.reset();\n } else if (input.eventType & INPUT_START) {\n this.reset();\n this._timer = setTimeoutContext(function() {\n this.state = STATE_RECOGNIZED;\n this.tryEmit();\n }, options.time, this);\n } else if (input.eventType & INPUT_END) {\n return STATE_RECOGNIZED;\n }\n return STATE_FAILED;\n },\n\n reset: function() {\n clearTimeout(this._timer);\n },\n\n emit: function(input) {\n if (this.state !== STATE_RECOGNIZED) {\n return;\n }\n\n if (input && (input.eventType & INPUT_END)) {\n this.manager.emit(this.options.event + 'up', input);\n } else {\n this._input.timeStamp = now();\n this.manager.emit(this.options.event, this._input);\n }\n }\n});\n\n/**\n * Rotate\n * Recognized when two or more pointer are moving in a circular motion.\n * @constructor\n * @extends AttrRecognizer\n */\nfunction RotateRecognizer() {\n AttrRecognizer.apply(this, arguments);\n}\n\ninherit(RotateRecognizer, AttrRecognizer, {\n /**\n * @namespace\n * @memberof RotateRecognizer\n */\n defaults: {\n event: 'rotate',\n threshold: 0,\n pointers: 2\n },\n\n getTouchAction: function() {\n return [TOUCH_ACTION_NONE];\n },\n\n attrTest: function(input) {\n return this._super.attrTest.call(this, input) &&\n (Math.abs(input.rotation) > this.options.threshold || this.state & STATE_BEGAN);\n }\n});\n\n/**\n * Swipe\n * Recognized when the pointer is moving fast (velocity), with enough distance in the allowed direction.\n * @constructor\n * @extends AttrRecognizer\n */\nfunction SwipeRecognizer() {\n AttrRecognizer.apply(this, arguments);\n}\n\ninherit(SwipeRecognizer, AttrRecognizer, {\n /**\n * @namespace\n * @memberof SwipeRecognizer\n */\n defaults: {\n event: 'swipe',\n threshold: 10,\n velocity: 0.3,\n direction: DIRECTION_HORIZONTAL | DIRECTION_VERTICAL,\n pointers: 1\n },\n\n getTouchAction: function() {\n return PanRecognizer.prototype.getTouchAction.call(this);\n },\n\n attrTest: function(input) {\n var direction = this.options.direction;\n var velocity;\n\n if (direction & (DIRECTION_HORIZONTAL | DIRECTION_VERTICAL)) {\n velocity = input.overallVelocity;\n } else if (direction & DIRECTION_HORIZONTAL) {\n velocity = input.overallVelocityX;\n } else if (direction & DIRECTION_VERTICAL) {\n velocity = input.overallVelocityY;\n }\n\n return this._super.attrTest.call(this, input) &&\n direction & input.offsetDirection &&\n input.distance > this.options.threshold &&\n input.maxPointers == this.options.pointers &&\n abs(velocity) > this.options.velocity && input.eventType & INPUT_END;\n },\n\n emit: function(input) {\n var direction = directionStr(input.offsetDirection);\n if (direction) {\n this.manager.emit(this.options.event + direction, input);\n }\n\n this.manager.emit(this.options.event, input);\n }\n});\n\n/**\n * A tap is ecognized when the pointer is doing a small tap/click. Multiple taps are recognized if they occur\n * between the given interval and position. The delay option can be used to recognize multi-taps without firing\n * a single tap.\n *\n * The eventData from the emitted event contains the property `tapCount`, which contains the amount of\n * multi-taps being recognized.\n * @constructor\n * @extends Recognizer\n */\nfunction TapRecognizer() {\n Recognizer.apply(this, arguments);\n\n // previous time and center,\n // used for tap counting\n this.pTime = false;\n this.pCenter = false;\n\n this._timer = null;\n this._input = null;\n this.count = 0;\n}\n\ninherit(TapRecognizer, Recognizer, {\n /**\n * @namespace\n * @memberof PinchRecognizer\n */\n defaults: {\n event: 'tap',\n pointers: 1,\n taps: 1,\n interval: 300, // max time between the multi-tap taps\n time: 250, // max time of the pointer to be down (like finger on the screen)\n threshold: 9, // a minimal movement is ok, but keep it low\n posThreshold: 10 // a multi-tap can be a bit off the initial position\n },\n\n getTouchAction: function() {\n return [TOUCH_ACTION_MANIPULATION];\n },\n\n process: function(input) {\n var options = this.options;\n\n var validPointers = input.pointers.length === options.pointers;\n var validMovement = input.distance < options.threshold;\n var validTouchTime = input.deltaTime < options.time;\n\n this.reset();\n\n if ((input.eventType & INPUT_START) && (this.count === 0)) {\n return this.failTimeout();\n }\n\n // we only allow little movement\n // and we've reached an end event, so a tap is possible\n if (validMovement && validTouchTime && validPointers) {\n if (input.eventType != INPUT_END) {\n return this.failTimeout();\n }\n\n var validInterval = this.pTime ? (input.timeStamp - this.pTime < options.interval) : true;\n var validMultiTap = !this.pCenter || getDistance(this.pCenter, input.center) < options.posThreshold;\n\n this.pTime = input.timeStamp;\n this.pCenter = input.center;\n\n if (!validMultiTap || !validInterval) {\n this.count = 1;\n } else {\n this.count += 1;\n }\n\n this._input = input;\n\n // if tap count matches we have recognized it,\n // else it has began recognizing...\n var tapCount = this.count % options.taps;\n if (tapCount === 0) {\n // no failing requirements, immediately trigger the tap event\n // or wait as long as the multitap interval to trigger\n if (!this.hasRequireFailures()) {\n return STATE_RECOGNIZED;\n } else {\n this._timer = setTimeoutContext(function() {\n this.state = STATE_RECOGNIZED;\n this.tryEmit();\n }, options.interval, this);\n return STATE_BEGAN;\n }\n }\n }\n return STATE_FAILED;\n },\n\n failTimeout: function() {\n this._timer = setTimeoutContext(function() {\n this.state = STATE_FAILED;\n }, this.options.interval, this);\n return STATE_FAILED;\n },\n\n reset: function() {\n clearTimeout(this._timer);\n },\n\n emit: function() {\n if (this.state == STATE_RECOGNIZED) {\n this._input.tapCount = this.count;\n this.manager.emit(this.options.event, this._input);\n }\n }\n});\n\n/**\n * Simple way to create a manager with a default set of recognizers.\n * @param {HTMLElement} element\n * @param {Object} [options]\n * @constructor\n */\nfunction Hammer(element, options) {\n options = options || {};\n options.recognizers = ifUndefined(options.recognizers, Hammer.defaults.preset);\n return new Manager(element, options);\n}\n\n/**\n * @const {string}\n */\nHammer.VERSION = '2.0.7';\n\n/**\n * default settings\n * @namespace\n */\nHammer.defaults = {\n /**\n * set if DOM events are being triggered.\n * But this is slower and unused by simple implementations, so disabled by default.\n * @type {Boolean}\n * @default false\n */\n domEvents: false,\n\n /**\n * The value for the touchAction property/fallback.\n * When set to `compute` it will magically set the correct value based on the added recognizers.\n * @type {String}\n * @default compute\n */\n touchAction: TOUCH_ACTION_COMPUTE,\n\n /**\n * @type {Boolean}\n * @default true\n */\n enable: true,\n\n /**\n * EXPERIMENTAL FEATURE -- can be removed/changed\n * Change the parent input target element.\n * If Null, then it is being set the to main element.\n * @type {Null|EventTarget}\n * @default null\n */\n inputTarget: null,\n\n /**\n * force an input class\n * @type {Null|Function}\n * @default null\n */\n inputClass: null,\n\n /**\n * Default recognizer setup when calling `Hammer()`\n * When creating a new Manager these will be skipped.\n * @type {Array}\n */\n preset: [\n // RecognizerClass, options, [recognizeWith, ...], [requireFailure, ...]\n [RotateRecognizer, {enable: false}],\n [PinchRecognizer, {enable: false}, ['rotate']],\n [SwipeRecognizer, {direction: DIRECTION_HORIZONTAL}],\n [PanRecognizer, {direction: DIRECTION_HORIZONTAL}, ['swipe']],\n [TapRecognizer],\n [TapRecognizer, {event: 'doubletap', taps: 2}, ['tap']],\n [PressRecognizer]\n ],\n\n /**\n * Some CSS properties can be used to improve the working of Hammer.\n * Add them to this method and they will be set when creating a new Manager.\n * @namespace\n */\n cssProps: {\n /**\n * Disables text selection to improve the dragging gesture. Mainly for desktop browsers.\n * @type {String}\n * @default 'none'\n */\n userSelect: 'none',\n\n /**\n * Disable the Windows Phone grippers when pressing an element.\n * @type {String}\n * @default 'none'\n */\n touchSelect: 'none',\n\n /**\n * Disables the default callout shown when you touch and hold a touch target.\n * On iOS, when you touch and hold a touch target such as a link, Safari displays\n * a callout containing information about the link. This property allows you to disable that callout.\n * @type {String}\n * @default 'none'\n */\n touchCallout: 'none',\n\n /**\n * Specifies whether zooming is enabled. Used by IE10>\n * @type {String}\n * @default 'none'\n */\n contentZooming: 'none',\n\n /**\n * Specifies that an entire element should be draggable instead of its contents. Mainly for desktop browsers.\n * @type {String}\n * @default 'none'\n */\n userDrag: 'none',\n\n /**\n * Overrides the highlight color shown when the user taps a link or a JavaScript\n * clickable element in iOS. This property obeys the alpha value, if specified.\n * @type {String}\n * @default 'rgba(0,0,0,0)'\n */\n tapHighlightColor: 'rgba(0,0,0,0)'\n }\n};\n\nvar STOP = 1;\nvar FORCED_STOP = 2;\n\n/**\n * Manager\n * @param {HTMLElement} element\n * @param {Object} [options]\n * @constructor\n */\nfunction Manager(element, options) {\n this.options = assign({}, Hammer.defaults, options || {});\n\n this.options.inputTarget = this.options.inputTarget || element;\n\n this.handlers = {};\n this.session = {};\n this.recognizers = [];\n this.oldCssProps = {};\n\n this.element = element;\n this.input = createInputInstance(this);\n this.touchAction = new TouchAction(this, this.options.touchAction);\n\n toggleCssProps(this, true);\n\n each(this.options.recognizers, function(item) {\n var recognizer = this.add(new (item[0])(item[1]));\n item[2] && recognizer.recognizeWith(item[2]);\n item[3] && recognizer.requireFailure(item[3]);\n }, this);\n}\n\nManager.prototype = {\n /**\n * set options\n * @param {Object} options\n * @returns {Manager}\n */\n set: function(options) {\n assign(this.options, options);\n\n // Options that need a little more setup\n if (options.touchAction) {\n this.touchAction.update();\n }\n if (options.inputTarget) {\n // Clean up existing event listeners and reinitialize\n this.input.destroy();\n this.input.target = options.inputTarget;\n this.input.init();\n }\n return this;\n },\n\n /**\n * stop recognizing for this session.\n * This session will be discarded, when a new [input]start event is fired.\n * When forced, the recognizer cycle is stopped immediately.\n * @param {Boolean} [force]\n */\n stop: function(force) {\n this.session.stopped = force ? FORCED_STOP : STOP;\n },\n\n /**\n * run the recognizers!\n * called by the inputHandler function on every movement of the pointers (touches)\n * it walks through all the recognizers and tries to detect the gesture that is being made\n * @param {Object} inputData\n */\n recognize: function(inputData) {\n var session = this.session;\n if (session.stopped) {\n return;\n }\n\n // run the touch-action polyfill\n this.touchAction.preventDefaults(inputData);\n\n var recognizer;\n var recognizers = this.recognizers;\n\n // this holds the recognizer that is being recognized.\n // so the recognizer's state needs to be BEGAN, CHANGED, ENDED or RECOGNIZED\n // if no recognizer is detecting a thing, it is set to `null`\n var curRecognizer = session.curRecognizer;\n\n // reset when the last recognizer is recognized\n // or when we're in a new session\n if (!curRecognizer || (curRecognizer && curRecognizer.state & STATE_RECOGNIZED)) {\n curRecognizer = session.curRecognizer = null;\n }\n\n var i = 0;\n while (i < recognizers.length) {\n recognizer = recognizers[i];\n\n // find out if we are allowed try to recognize the input for this one.\n // 1. allow if the session is NOT forced stopped (see the .stop() method)\n // 2. allow if we still haven't recognized a gesture in this session, or the this recognizer is the one\n // that is being recognized.\n // 3. allow if the recognizer is allowed to run simultaneous with the current recognized recognizer.\n // this can be setup with the `recognizeWith()` method on the recognizer.\n if (session.stopped !== FORCED_STOP && ( // 1\n !curRecognizer || recognizer == curRecognizer || // 2\n recognizer.canRecognizeWith(curRecognizer))) { // 3\n recognizer.recognize(inputData);\n } else {\n recognizer.reset();\n }\n\n // if the recognizer has been recognizing the input as a valid gesture, we want to store this one as the\n // current active recognizer. but only if we don't already have an active recognizer\n if (!curRecognizer && recognizer.state & (STATE_BEGAN | STATE_CHANGED | STATE_ENDED)) {\n curRecognizer = session.curRecognizer = recognizer;\n }\n i++;\n }\n },\n\n /**\n * get a recognizer by its event name.\n * @param {Recognizer|String} recognizer\n * @returns {Recognizer|Null}\n */\n get: function(recognizer) {\n if (recognizer instanceof Recognizer) {\n return recognizer;\n }\n\n var recognizers = this.recognizers;\n for (var i = 0; i < recognizers.length; i++) {\n if (recognizers[i].options.event == recognizer) {\n return recognizers[i];\n }\n }\n return null;\n },\n\n /**\n * add a recognizer to the manager\n * existing recognizers with the same event name will be removed\n * @param {Recognizer} recognizer\n * @returns {Recognizer|Manager}\n */\n add: function(recognizer) {\n if (invokeArrayArg(recognizer, 'add', this)) {\n return this;\n }\n\n // remove existing\n var existing = this.get(recognizer.options.event);\n if (existing) {\n this.remove(existing);\n }\n\n this.recognizers.push(recognizer);\n recognizer.manager = this;\n\n this.touchAction.update();\n return recognizer;\n },\n\n /**\n * remove a recognizer by name or instance\n * @param {Recognizer|String} recognizer\n * @returns {Manager}\n */\n remove: function(recognizer) {\n if (invokeArrayArg(recognizer, 'remove', this)) {\n return this;\n }\n\n recognizer = this.get(recognizer);\n\n // let's make sure this recognizer exists\n if (recognizer) {\n var recognizers = this.recognizers;\n var index = inArray(recognizers, recognizer);\n\n if (index !== -1) {\n recognizers.splice(index, 1);\n this.touchAction.update();\n }\n }\n\n return this;\n },\n\n /**\n * bind event\n * @param {String} events\n * @param {Function} handler\n * @returns {EventEmitter} this\n */\n on: function(events, handler) {\n if (events === undefined) {\n return;\n }\n if (handler === undefined) {\n return;\n }\n\n var handlers = this.handlers;\n each(splitStr(events), function(event) {\n handlers[event] = handlers[event] || [];\n handlers[event].push(handler);\n });\n return this;\n },\n\n /**\n * unbind event, leave emit blank to remove all handlers\n * @param {String} events\n * @param {Function} [handler]\n * @returns {EventEmitter} this\n */\n off: function(events, handler) {\n if (events === undefined) {\n return;\n }\n\n var handlers = this.handlers;\n each(splitStr(events), function(event) {\n if (!handler) {\n delete handlers[event];\n } else {\n handlers[event] && handlers[event].splice(inArray(handlers[event], handler), 1);\n }\n });\n return this;\n },\n\n /**\n * emit event to the listeners\n * @param {String} event\n * @param {Object} data\n */\n emit: function(event, data) {\n // we also want to trigger dom events\n if (this.options.domEvents) {\n triggerDomEvent(event, data);\n }\n\n // no handlers, so skip it all\n var handlers = this.handlers[event] && this.handlers[event].slice();\n if (!handlers || !handlers.length) {\n return;\n }\n\n data.type = event;\n data.preventDefault = function() {\n data.srcEvent.preventDefault();\n };\n\n var i = 0;\n while (i < handlers.length) {\n handlers[i](data);\n i++;\n }\n },\n\n /**\n * destroy the manager and unbinds all events\n * it doesn't unbind dom events, that is the user own responsibility\n */\n destroy: function() {\n this.element && toggleCssProps(this, false);\n\n this.handlers = {};\n this.session = {};\n this.input.destroy();\n this.element = null;\n }\n};\n\n/**\n * add/remove the css properties as defined in manager.options.cssProps\n * @param {Manager} manager\n * @param {Boolean} add\n */\nfunction toggleCssProps(manager, add) {\n var element = manager.element;\n if (!element.style) {\n return;\n }\n var prop;\n each(manager.options.cssProps, function(value, name) {\n prop = prefixed(element.style, name);\n if (add) {\n manager.oldCssProps[prop] = element.style[prop];\n element.style[prop] = value;\n } else {\n element.style[prop] = manager.oldCssProps[prop] || '';\n }\n });\n if (!add) {\n manager.oldCssProps = {};\n }\n}\n\n/**\n * trigger dom event\n * @param {String} event\n * @param {Object} data\n */\nfunction triggerDomEvent(event, data) {\n var gestureEvent = document.createEvent('Event');\n gestureEvent.initEvent(event, true, true);\n gestureEvent.gesture = data;\n data.target.dispatchEvent(gestureEvent);\n}\n\nassign(Hammer, {\n INPUT_START: INPUT_START,\n INPUT_MOVE: INPUT_MOVE,\n INPUT_END: INPUT_END,\n INPUT_CANCEL: INPUT_CANCEL,\n\n STATE_POSSIBLE: STATE_POSSIBLE,\n STATE_BEGAN: STATE_BEGAN,\n STATE_CHANGED: STATE_CHANGED,\n STATE_ENDED: STATE_ENDED,\n STATE_RECOGNIZED: STATE_RECOGNIZED,\n STATE_CANCELLED: STATE_CANCELLED,\n STATE_FAILED: STATE_FAILED,\n\n DIRECTION_NONE: DIRECTION_NONE,\n DIRECTION_LEFT: DIRECTION_LEFT,\n DIRECTION_RIGHT: DIRECTION_RIGHT,\n DIRECTION_UP: DIRECTION_UP,\n DIRECTION_DOWN: DIRECTION_DOWN,\n DIRECTION_HORIZONTAL: DIRECTION_HORIZONTAL,\n DIRECTION_VERTICAL: DIRECTION_VERTICAL,\n DIRECTION_ALL: DIRECTION_ALL,\n\n Manager: Manager,\n Input: Input,\n TouchAction: TouchAction,\n\n TouchInput: TouchInput,\n MouseInput: MouseInput,\n PointerEventInput: PointerEventInput,\n TouchMouseInput: TouchMouseInput,\n SingleTouchInput: SingleTouchInput,\n\n Recognizer: Recognizer,\n AttrRecognizer: AttrRecognizer,\n Tap: TapRecognizer,\n Pan: PanRecognizer,\n Swipe: SwipeRecognizer,\n Pinch: PinchRecognizer,\n Rotate: RotateRecognizer,\n Press: PressRecognizer,\n\n on: addEventListeners,\n off: removeEventListeners,\n each: each,\n merge: merge,\n extend: extend,\n assign: assign,\n inherit: inherit,\n bindFn: bindFn,\n prefixed: prefixed\n});\n\n// this prevents errors when Hammer is loaded in the presence of an AMD\n// style loader but by script tag, not by the loader.\nvar freeGlobal = (typeof window !== 'undefined' ? window : (typeof self !== 'undefined' ? self : {})); // jshint ignore:line\nfreeGlobal.Hammer = Hammer;\n\nif (typeof define === 'function' && define.amd) {\n define(function() {\n return Hammer;\n });\n} else if (typeof module != 'undefined' && module.exports) {\n module.exports = Hammer;\n} else {\n window[exportName] = Hammer;\n}\n\n})(window, document, 'Hammer');\n","import Hammer, { DIRECTION_HORIZONTAL } from 'hammerjs';\r\nimport { each } from '../lib/util';\r\nimport DomComponent from '../lib/domComponent';\r\n\r\nexport default class Carousel {\r\n // The current index number\r\n index = 0;\r\n\r\n // Auto play delay in milleseconds;\r\n autoPlayDelay = 5000;\r\n\r\n // Auto play interval ID\r\n autoPlayIntervalId = '';\r\n\r\n // The total number of slides\r\n numOfSlides = 0;\r\n\r\n // Are clones used\r\n areClonesUsed = false;\r\n\r\n // List of dots\r\n dots = [];\r\n\r\n constructor(el){\r\n this.el = el;\r\n this.init();\r\n }\r\n\r\n /**\r\n * Initialize the Carousel\r\n */\r\n init() {\r\n // Clone slides if needed\r\n this.cloneSlides();\r\n // Cache the DOM\r\n this.cacheDOM();\r\n // Event listeners\r\n this.eventListeners();\r\n // Get the number of slides\r\n this.numOfSlides = this.slides.length;\r\n // Display the carousel\r\n this.displayCarousel();\r\n // Display the controls\r\n this.displayControls();\r\n // Add touch controls\r\n this.touchControls();\r\n // Start auto play \r\n this.startAutoPlay();\r\n }\r\n\r\n /**\r\n * Close slides when there are only 2 slides in the carousel\r\n */\r\n cloneSlides() {\r\n // The slides container\r\n this.slidesContainer = this.el.querySelector('[data-slides-container]');\r\n\r\n // Check to see if there are only 2 slides in the carousel\r\n if (this.slidesContainer.children.length === 2) {\r\n // Clone the first slide\r\n const slide1Clone = this.slidesContainer.children[0].cloneNode(true);\r\n // Clone the second slide\r\n const slide2Clone = this.slidesContainer.children[1].cloneNode(true);\r\n // Append the first cloned slide\r\n this.slidesContainer.appendChild(slide1Clone);\r\n // Append the second cloned slide\r\n this.slidesContainer.appendChild(slide2Clone);\r\n // Set the areClonesUsed flag to true\r\n this.areClonesUsed = true;\r\n }\r\n }\r\n\r\n /**\r\n * Cache the DOM elements\r\n */\r\n cacheDOM() {\r\n // The list of slide\r\n this.slides = this.el.querySelectorAll('[data-slide]');\r\n // The controls container\r\n this.controls = this.el.querySelector('[data-controls]');\r\n // The previous button\r\n this.prevButton = this.el.querySelector('[data-prev-btn]');\r\n // The next button\r\n this.nextButton = this.el.querySelector('[data-next-btn]');\r\n // The dots container\r\n this.dotsContainer = this.el.querySelector('[data-dots]');\r\n }\r\n\r\n /**\r\n * Event listeners\r\n */\r\n eventListeners() {\r\n // Previous button event listener\r\n this.prevButton.addEventListener('click', this.prevSlide.bind(this));\r\n // Next button event listener\r\n this.nextButton.addEventListener('click', this.nextSlide.bind(this));\r\n\r\n // Auto play event listeners\r\n this.el.addEventListener(\"mouseenter\", this.stopAutoPlay.bind(this)); \r\n this.el.addEventListener(\"mouseleave\", this.startAutoPlay.bind(this));\r\n }\r\n\r\n /**\r\n * Display the carousel or just a single slide\r\n */\r\n displayCarousel() {\r\n // Check to see if there is only 1 slide\r\n if (this.numOfSlides === 1) {\r\n // Display the only slide\r\n this.slides[0].classList.add('current');\r\n }\r\n // Use the regular carousel if there are at least 3 slides\r\n else if (this.numOfSlides > 2) {\r\n // Display the dots\r\n this.displayDots();\r\n // Display the first slide\r\n this.goToSlide(0);\r\n }\r\n }\r\n\r\n /**\r\n * Display the Controls. ie. The previous and next buttons and the slide counter\r\n */\r\n displayControls() {\r\n // Check to see if the are more than 1 side\r\n if (this.numOfSlides === 1) {\r\n // If only 1 slide, then remove the controls\r\n this.controls.style.display = 'none';\r\n }\r\n }\r\n\r\n /**\r\n * Display the Dots\r\n */\r\n displayDots() {\r\n const numOfSlides = this.areClonesUsed ? 2 : this.numOfSlides;\r\n\r\n for (let i = 0; i < numOfSlides; i++) {\r\n const btn = document.createElement('BUTTON');\r\n btn.setAttribute('type', 'button');\r\n btn.setAttribute('aria-label', `go to slide number ${i + 1}`)\r\n if (i === 0) {\r\n btn.classList.add('active');\r\n }\r\n btn.addEventListener('click', () => {\r\n this.goToSlide(i);\r\n });\r\n this.dotsContainer.appendChild(btn);\r\n this.dots.push(btn);\r\n }\r\n }\r\n\r\n /**\r\n * Add touch controls to the carousel\r\n */\r\n touchControls() {\r\n const mc = new Hammer.Manager(this.slidesContainer);\r\n const swipe = new Hammer.Swipe({ direction: DIRECTION_HORIZONTAL });\r\n mc.add(swipe);\r\n mc.sensitivity = 25;\r\n // Show the Next Slide\r\n mc.on('swipeleft', () => {\r\n this.stopAutoPlay();\r\n this.nextSlide();\r\n this.startAutoPlay();\r\n });\r\n // Show the Previous Slide\r\n mc.on('swiperight', () => {\r\n this.stopAutoPlay();\r\n this.prevSlide();\r\n this.startAutoPlay();\r\n });\r\n }\r\n\r\n /**\r\n * Remove all the classes from the slides\r\n */\r\n removeAllClasses() {\r\n // Loop though all the slides\r\n each(this.slides, (slide) => {\r\n // Remove the current class\r\n slide.classList.remove('current');\r\n // Remove the next class\r\n slide.classList.remove('next');\r\n // Remove the prev class\r\n slide.classList.remove('prev');\r\n // Remove the in-transition class\r\n slide.classList.remove('in-transition');\r\n });\r\n }\r\n\r\n /**\r\n * Update the dots\r\n */\r\n updateDots() {\r\n this.dots.forEach(dot => {\r\n dot.classList.remove('active');\r\n });\r\n if (this.areClonesUsed) {\r\n this.dots[this.index % 2].classList.add('active');\r\n } else {\r\n this.dots[this.index].classList.add('active');\r\n }\r\n }\r\n\r\n /**\r\n * Go to the given index\r\n *\r\n * @param {int} newCurrent The new index of the carousel\r\n */\r\n goToSlide(newCurrent) {\r\n // Update the new next index\r\n const newPrev = (newCurrent - 1 < 0) ? this.numOfSlides - 1 : newCurrent - 1;\r\n // Update the new previous index\r\n const newNext = (newCurrent + 1 === this.numOfSlides) ? 0 : newCurrent + 1;\r\n // Remove all the classes added to the slides\r\n this.removeAllClasses();\r\n // Add the current class to the new current slide\r\n this.slides[newCurrent].classList.add('current');\r\n // Add the next class to the new next slide\r\n this.slides[newNext].classList.add('next');\r\n // Add the prev class to the new previous slide\r\n this.slides[newPrev].classList.add('prev');\r\n // Add the in-transition class to the current slide so it can transition out of view\r\n this.slides[this.index].classList.add('in-transition');\r\n // Update the current index\r\n this.index = newCurrent;\r\n // Update dots\r\n this.updateDots();\r\n }\r\n\r\n /**\r\n * Go to the previous slide\r\n */\r\n prevSlide() {\r\n // Get the previous slide index\r\n const prevSlide = (this.index - 1 < 0) ? this.numOfSlides - 1 : this.index - 1;\r\n // Go to the previous slide\r\n this.goToSlide(prevSlide);\r\n }\r\n\r\n /**\r\n * Go to the next slide\r\n */\r\n nextSlide() {\r\n // Get the next slide index\r\n const nextSlide = (this.index + 1 === this.numOfSlides) ? 0 : this.index + 1;\r\n // Go to the next slide\r\n this.goToSlide(nextSlide);\r\n }\r\n\r\n /**\r\n * Start auto play to next slide.\r\n */\r\n startAutoPlay() {\r\n // Clear any existing auto play intervals\r\n this.stopAutoPlay();\r\n\r\n this.autoPlayIntervalId = setInterval(() => this.nextSlide(), this.autoPlayDelay);\r\n }\r\n \r\n /**\r\n * Stop auto play to next slide.\r\n */\r\n stopAutoPlay() {\r\n if (this.autoPlayIntervalId)\r\n {\r\n clearInterval(this.autoPlayIntervalId);\r\n }\r\n }\r\n}","import WidgetBase from '../widget.base';\r\nimport NavService from '../../services/nav';\r\nimport Carousel from '../../services/carousel';\r\nimport { mq, getVerticalOffset } from '../../lib/util';\r\n\r\nexport default class HeroCarouselWidget extends WidgetBase {\r\n static selector = '[data-js-hero-carousel]';\r\n activeClass = 'active';\r\n visibleClass = 'visible';\r\n buttonClass = 'hero__nav__button';\r\n activeNavButton;\r\n navOffset;\r\n navHeight = 80;\r\n navBp = 'md';\r\n\r\n constructor(el){\r\n super(el);\r\n if(!el){\r\n return false;\r\n }\r\n\r\n this.carousel = new Carousel(el);\r\n\r\n\r\n this.nav = this.el.querySelector('[data-hero-nav]');\r\n this.navContainer = this.el.querySelector('[data-hero-nav-container]');\r\n\r\n this.promo = this.el.querySelector('[data-promo]');\r\n\r\n if(this.promo) {\r\n this.initPromo();\r\n }\r\n\r\n if(this.nav && this.navContainer) {\r\n setTimeout(function() {\r\n this.navService = new NavService(this.navHeight);\r\n\r\n if(this.navService.items.length) {\r\n this.createNavButtons();\r\n this.setNavOffset();\r\n window.addEventListener('resize', this.setNavOffset.bind(this));\r\n window.addEventListener('scroll', this.checkNavOffset.bind(this));\r\n }\r\n }.bind(this));\r\n }\r\n\r\n setTimeout(() => {\r\n this.loaded();\r\n })\r\n }\r\n \r\n initPromo() {\r\n this.promoSpacer = this.el.querySelector('[data-promo-spacer]');\r\n this.promoHeight = this.promo.offsetHeight;\r\n\r\n let promoTimeout = false;\r\n\r\n window.addEventListener('resize', (e) => {\r\n if(promoTimeout) {\r\n clearTimeout(promoTimeout);\r\n }else{\r\n this.promoSpacer.classList.add('resize');\r\n }\r\n\r\n this.promoHeight = this.promo.offsetHeight;\r\n\r\n promoTimeout = setTimeout(() => {\r\n this.promoSpacer.classList.remove('resize');\r\n promoTimeout = false;\r\n }, 200);\r\n\r\n if(this.promo.classList.contains('active')) {\r\n this.promoSpacer.style.height = `${this.promoHeight}px`;\r\n }\r\n });\r\n\r\n const closeButton = this.promo.querySelector('[data-promo-close]');\r\n closeButton.addEventListener('click', this.closePromo.bind(this));\r\n\r\n setTimeout(() => {\r\n this.openPromo();\r\n }, 500)\r\n }\r\n\r\n closePromo() {\r\n this.promoSpacer.style.height = 0;\r\n this.promo.classList.remove('active');\r\n }\r\n\r\n openPromo() {\r\n this.promoSpacer.style.height = `${this.promoHeight}px`;\r\n this.promo.classList.add('active');\r\n }\r\n\r\n checkNavOffset() {\r\n if(window.pageYOffset >= this.navOffset) {\r\n this.navContainer.classList.add('sticky');\r\n }else{\r\n this.navContainer.classList.remove('sticky');\r\n }\r\n }\r\n\r\n setNavOffset() {\r\n this.navOffset = getVerticalOffset(this.navContainer);\r\n this.checkNavOffset();\r\n }\r\n\r\n createNavButtons() {\r\n let visibleButton;\r\n\r\n this.navService.items.forEach((item, index) => {\r\n const button = document.createElement('div');\r\n button.innerText = item.label;\r\n button.classList.add(this.buttonClass);\r\n\r\n const icon = document.createElement('i');\r\n button.appendChild(icon);\r\n icon.addEventListener('click', (e) => {\r\n this.navIconHandler(e);\r\n })\r\n\r\n if(index === 0 || item.offset <= window.pageYOffset + this.navHeight) {\r\n visibleButton = button;\r\n }\r\n\r\n button.addEventListener('click', (e) => {\r\n this.navHandler(e, index, button);\r\n });\r\n\r\n this.nav.appendChild(button);\r\n });\r\n\r\n visibleButton.classList.add(this.visibleClass);\r\n this.activeNavButton = visibleButton;\r\n }\r\n\r\n navIconHandler(event) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n if(this.nav.classList.contains(this.activeClass)) {\r\n this.nav.classList.remove(this.activeClass);\r\n }else{\r\n this.nav.classList.add(this.activeClass);\r\n }\r\n }\r\n\r\n navHandler(event, index, button) {\r\n event.preventDefault();\r\n let pad = 0;\r\n\r\n if( mq(this.navBp) ) {\r\n //desktop logic\r\n if(button.classList.contains('active')) {\r\n return;\r\n }\r\n }else{\r\n //mobile logic (open/close dropdown)\r\n if(!this.nav.classList.contains(this.activeClass)) {\r\n this.nav.classList.add(this.activeClass);\r\n return;\r\n }else{\r\n if(this.activeNavButton) {\r\n this.activeNavButton.classList.remove(this.visibleClass);\r\n }\r\n\r\n button.classList.add(this.visibleClass);\r\n this.nav.classList.remove(this.activeClass);\r\n }\r\n }\r\n\r\n // shared logic (change active classes and scroll to target)\r\n if(this.activeNavButton) {\r\n this.activeNavButton.classList.remove(this.activeClass);\r\n }\r\n\r\n this.activeNavButton = button;\r\n this.activeNavButton.classList.add('active');\r\n this.navService.scrollToTarget(index);\r\n\r\n }\r\n}","import WidgetBase from '../widget.base';\r\nimport NavService from '../../services/nav';\r\nimport { mq, getVerticalOffset } from '../../lib/util';\r\n\r\nexport default class HeroWidget extends WidgetBase {\r\n static selector = '[data-js-hero]';\r\n activeClass = 'active';\r\n visibleClass = 'visible';\r\n buttonClass = 'hero__nav__button';\r\n activeNavButton;\r\n navOffset;\r\n navHeight = 80;\r\n navBp = 'md';\r\n\r\n constructor(el){\r\n super(el);\r\n if(!el){\r\n return false;\r\n }\r\n\r\n this.nav = this.el.querySelector('[data-hero-nav]');\r\n this.navContainer = this.el.querySelector('[data-hero-nav-container]');\r\n\r\n this.promo = this.el.querySelector('[data-promo]');\r\n\r\n if(this.promo) {\r\n this.initPromo();\r\n }\r\n\r\n if(this.nav && this.navContainer) {\r\n setTimeout(function() {\r\n this.navService = new NavService(this.navHeight);\r\n\r\n if(this.navService.items.length) {\r\n this.createNavButtons();\r\n this.setNavOffset();\r\n window.addEventListener('resize', this.setNavOffset.bind(this));\r\n window.addEventListener('scroll', this.checkNavOffset.bind(this));\r\n }\r\n }.bind(this));\r\n }\r\n\r\n setTimeout(() => {\r\n this.loaded();\r\n })\r\n }\r\n\r\n initPromo() {\r\n this.promoSpacer = this.el.querySelector('[data-promo-spacer]');\r\n this.promoHeight = this.promo.offsetHeight;\r\n\r\n let promoTimeout = false;\r\n\r\n window.addEventListener('resize', (e) => {\r\n if(promoTimeout) {\r\n clearTimeout(promoTimeout);\r\n }else{\r\n this.promoSpacer.classList.add('resize');\r\n }\r\n\r\n this.promoHeight = this.promo.offsetHeight;\r\n\r\n promoTimeout = setTimeout(() => {\r\n this.promoSpacer.classList.remove('resize');\r\n promoTimeout = false;\r\n }, 200);\r\n\r\n if(this.promo.classList.contains('active')) {\r\n this.promoSpacer.style.height = `${this.promoHeight}px`;\r\n }\r\n });\r\n\r\n const closeButton = this.promo.querySelector('[data-promo-close]');\r\n closeButton.addEventListener('click', this.closePromo.bind(this));\r\n\r\n setTimeout(() => {\r\n this.openPromo();\r\n }, 500)\r\n }\r\n\r\n closePromo() {\r\n this.promoSpacer.style.height = 0;\r\n this.promo.classList.remove('active');\r\n }\r\n\r\n openPromo() {\r\n this.promoSpacer.style.height = `${this.promoHeight}px`;\r\n this.promo.classList.add('active');\r\n }\r\n\r\n checkNavOffset() {\r\n if(window.pageYOffset >= this.navOffset) {\r\n this.navContainer.classList.add('sticky');\r\n }else{\r\n this.navContainer.classList.remove('sticky');\r\n }\r\n }\r\n\r\n setNavOffset() {\r\n this.navOffset = getVerticalOffset(this.navContainer);\r\n this.checkNavOffset();\r\n }\r\n\r\n createNavButtons() {\r\n let visibleButton;\r\n\r\n this.navService.items.forEach((item, index) => {\r\n const button = document.createElement('div');\r\n button.innerText = item.label;\r\n button.classList.add(this.buttonClass);\r\n\r\n const icon = document.createElement('i');\r\n button.appendChild(icon);\r\n icon.addEventListener('click', (e) => {\r\n this.navIconHandler(e);\r\n })\r\n\r\n if(index === 0 || item.offset <= window.pageYOffset + this.navHeight) {\r\n visibleButton = button;\r\n }\r\n\r\n button.addEventListener('click', (e) => {\r\n this.navHandler(e, index, button);\r\n });\r\n\r\n this.nav.appendChild(button);\r\n });\r\n\r\n visibleButton.classList.add(this.visibleClass);\r\n this.activeNavButton = visibleButton;\r\n }\r\n\r\n navIconHandler(event) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n if(this.nav.classList.contains(this.activeClass)) {\r\n this.nav.classList.remove(this.activeClass);\r\n }else{\r\n this.nav.classList.add(this.activeClass);\r\n }\r\n }\r\n\r\n navHandler(event, index, button) {\r\n event.preventDefault();\r\n let pad = 0;\r\n\r\n if( mq(this.navBp) ) {\r\n //desktop logic\r\n if(button.classList.contains('active')) {\r\n return;\r\n }\r\n }else{\r\n //mobile logic (open/close dropdown)\r\n if(!this.nav.classList.contains(this.activeClass)) {\r\n this.nav.classList.add(this.activeClass);\r\n return;\r\n }else{\r\n if(this.activeNavButton) {\r\n this.activeNavButton.classList.remove(this.visibleClass);\r\n }\r\n\r\n button.classList.add(this.visibleClass);\r\n this.nav.classList.remove(this.activeClass);\r\n }\r\n }\r\n\r\n // shared logic (change active classes and scroll to target)\r\n if(this.activeNavButton) {\r\n this.activeNavButton.classList.remove(this.activeClass);\r\n }\r\n\r\n this.activeNavButton = button;\r\n this.activeNavButton.classList.add('active');\r\n this.navService.scrollToTarget(index);\r\n\r\n }\r\n}","import DomComponent from '../../lib/domComponent';\r\nimport body from '../../services/body';\r\nimport { each } from '../../lib/util';\r\nimport { duration } from '../../lib/const';\r\n\r\nexport default class ModalComponent extends DomComponent {\r\n static selector = '[data-js-bio-modal]';\r\n\r\n constructor(el) {\r\n super(el);\r\n\r\n if(!this.el) {\r\n return false;\r\n }\r\n\r\n \r\n this.closeButton = this.el.querySelector('[data-close]');\r\n this.modalTriggers = this.el.querySelectorAll('[data-bio-modal-target]');\r\n this.modalContents = this.el.querySelectorAll('[data-bio-modal-content]');\r\n this.videoModalContent = this.el.querySelector('[data-bio-modal-content=\"video-modal\"]');\r\n this.modalBox = this.el.querySelector('[data-bio-modal-box]');\r\n this.videoModalTriggers = this.el.querySelectorAll('[data-bio-video-id]');\r\n this.video = this.el.querySelector('[data-bio-modal-video]');\r\n this.modalBg = this.el.querySelector('.modal__bg');\r\n this.popup = this.el.querySelector('[data-js-bio-modal-popup]');\r\n this.closeButton.addEventListener('click', this.closeModalHandler.bind(this));\r\n \r\n \r\n each(this.videoModalTriggers, (trigger) => {\r\n trigger.addEventListener('click', (e) => {\r\n e.preventDefault();\r\n this.prepareVideo(trigger.dataset.videoId);\r\n this.openModal(this.videoModalContent);\r\n })\r\n })\r\n\r\n // triggers that open modal\r\n each(this.modalTriggers, (trigger) => {\r\n trigger.addEventListener('click', (e) => {\r\n e.preventDefault();\r\n\r\n const target = trigger.dataset.bioModalTarget;\r\n each(this.modalContents, (content) => {\r\n if(target === content.dataset.bioModalContent) {\r\n this.openModal(content);\r\n }\r\n });\r\n })\r\n });\r\n\r\n if(this.modalBg){\r\n this.modalBg.addEventListener('click', (e) => {\r\n this.closeModalHandler();\r\n });\r\n }\r\n\r\n setTimeout(() => {\r\n this.loaded();\r\n })\r\n }\r\n\r\n closeModalHandler() {\r\n this.popup.classList.remove('open');\r\n body.unlock();\r\n \r\n setTimeout(() => {\r\n each(this.modalContents, (content) => {content.style.display = 'none'});\r\n // this.video.removeAttribute('src');\r\n // this.el.classList.remove('modal--video');\r\n }, duration);\r\n\r\n if(this.video){\r\n this.video.setAttribute('src', '');\r\n }\r\n }\r\n\r\n\r\n \r\n\r\n\r\n prepareVideo(videoId) {\r\n this.video.setAttribute('src', `https://www.youtube.com/embed/${videoId}`);\r\n this.popup.classList.add('modal--video');\r\n }\r\n \r\n openModal(node) {\r\n if(body.islocked()){\r\n return;\r\n }\r\n node.style.display = '';\r\n this.popup.classList.add('open');\r\n body.lock();\r\n }\r\n}","import DomComponent from '../../lib/domComponent';\r\n\r\nexport default class PromoBannerComponent extends DomComponent {\r\n static selector = '.hero__promo-message--standalone[data-promo]';\r\n\r\n constructor(el) {\r\n super(el);\r\n\r\n if(!this.el) {\r\n return false;\r\n }\r\n \r\n this.closeButton = this.el.querySelector('[data-promo-close]');\r\n this.closeButton.addEventListener('click', this.closeHandler.bind(this));\r\n setTimeout(() => {\r\n this.loaded();\r\n })\r\n }\r\n\r\n closeHandler() {\r\n this.el.remove();\r\n }\r\n}","import DomComponent from '../../lib/domComponent';\r\nimport body from '../../services/body';\r\nimport { each } from '../../lib/util';\r\nimport { duration } from '../../lib/const';\r\n\r\nexport default class ModalComponent extends DomComponent {\r\n static selector = '[data-js-modal]';\r\n\r\n constructor(el) {\r\n super(el);\r\n\r\n if(!this.el) {\r\n return false;\r\n }\r\n\r\n \r\n this.closeButton = this.el.querySelector('[data-close]');\r\n this.modalTriggers = document.querySelectorAll('[data-modal-target]');\r\n this.modalContents = this.el.querySelectorAll('[data-modal-content]');\r\n this.videoModalContent = this.el.querySelector('[data-modal-content=\"video-modal\"]');\r\n this.modalBox = this.el.querySelector('[data-modal-box]');\r\n this.videoModalTriggers = document.querySelectorAll('[data-video-id]');\r\n this.video = document.querySelector('[data-modal-video]');\r\n this.modalBg = this.el.querySelector('.modal__bg');\r\n \r\n this.closeButton.addEventListener('click', this.closeModalHandler.bind(this));\r\n \r\n \r\n each(this.videoModalTriggers, (trigger) => {\r\n trigger.addEventListener('click', (e) => {\r\n e.preventDefault();\r\n this.prepareVideo(trigger.dataset.videoId);\r\n this.openModal(this.videoModalContent);\r\n })\r\n })\r\n\r\n // triggers that open modal\r\n each(this.modalTriggers, (trigger) => {\r\n trigger.addEventListener('click', (e) => {\r\n e.preventDefault();\r\n\r\n const target = trigger.dataset.modalTarget;\r\n each(this.modalContents, (content) => {\r\n if(target === content.dataset.modalContent) {\r\n this.openModal(content);\r\n }\r\n });\r\n })\r\n });\r\n\r\n if(this.modalBg){\r\n this.modalBg.addEventListener('click', (e) => {\r\n this.closeModalHandler();\r\n });\r\n }\r\n\r\n setTimeout(() => {\r\n this.loaded();\r\n })\r\n }\r\n\r\n closeModalHandler() {\r\n this.el.classList.remove('open');\r\n body.unlock();\r\n \r\n setTimeout(() => {\r\n each(this.modalContents, (content) => {content.style.display = 'none'});\r\n // this.video.removeAttribute('src');\r\n // this.el.classList.remove('modal--video');\r\n }, duration);\r\n\r\n if(this.video){\r\n this.video.setAttribute('src', '');\r\n }\r\n }\r\n\r\n\r\n \r\n\r\n\r\n prepareVideo(videoId) {\r\n this.video.setAttribute('src', `https://www.youtube.com/embed/${videoId}?rel=0`);\r\n this.el.classList.add('modal--video');\r\n }\r\n \r\n openModal(node) {\r\n if(body.islocked()){\r\n return;\r\n }\r\n node.style.display = '';\r\n this.el.classList.add('open');\r\n body.lock();\r\n }\r\n}","import bodyService from '../services/body';\r\nimport DomComponent from '../lib/domComponent';\r\n\r\nexport default class HeaderComponent extends DomComponent {\r\n static selector = '[data-js-header]';\r\n el;\r\n \r\n searchActive = false;\r\n activeClass = 'active';\r\n \r\n submenuNameSelector = '[data-name-placeholder]';\r\n submenuImageSelector = '[data-submenu-image]';\r\n submenuNavSelector = '[data-submenu-nav]';\r\n submenuNavItemSelector = '[data-submenu-nav-item]';\r\n submenuDefaults = {};\r\n \r\n\r\n constructor(el) {\r\n // return false\r\n super(el);\r\n this.mobileMenuToggle = this.el.querySelector('[data-mobile-menu-toggle]');\r\n this.mobileMenu = this.el.querySelector('[data-mobile-menu]');\r\n this.search = this.el.querySelector('[data-search]');\r\n this.searchInput = this.el.querySelector('[data-search-input]');\r\n this.searchTrigger = this.el.querySelector('[data-search-trigger]');\r\n this.searchCloseTrigger = this.el.querySelector('[data-close-search]');\r\n this.searchForm = this.el.querySelector('form');\r\n // attach events\r\n\r\n this.searchForm.onsubmit = this.hijackFormSubmit.bind(this);\r\n this.searchTrigger.addEventListener('click', this.searchHandler.bind(this));\r\n this.searchCloseTrigger.addEventListener('click', this.closeSearch.bind(this));\r\n this.mobileMenuToggle.addEventListener('click', this.toggleMobileMenu.bind(this));\r\n\r\n this.searchInput.addEventListener('keyup', this.checkForEnter.bind(this));\r\n\r\n setTimeout(() => {\r\n this.loaded();\r\n });\r\n }\r\n\r\n hijackFormSubmit(e){\r\n e.preventDefault();\r\n this.searchActive = true;\r\n const input = this.searchForm.querySelector('input').value;\r\n this.searchInput.value = input;\r\n this.searchHandler();\r\n return false;\r\n }\r\n\r\n checkForEnter(e){\r\n if(e.keyCode === 13){\r\n this.searchHandler();\r\n }\r\n }\r\n\r\n searchHandler() {\r\n if(this.searchActive) {\r\n this.performSearch();\r\n }else{\r\n this.searchActive = true;\r\n this.search.classList.add(this.activeClass);\r\n this.searchInput.focus();\r\n }\r\n }\r\n\r\n performSearch(){\r\n if(this.searchInput.value.length){\r\n const search = this.searchInput.value;\r\n const params = \"&take=5&skip=0\";\r\n const queryString = `?term=${encodeURIComponent(search)}${params}`\r\n window.location = \"/search\"+queryString;\r\n }\r\n }\r\n\r\n\r\n closeSearch() {\r\n this.searchActive = false;\r\n this.search.classList.remove(this.activeClass);\r\n }\r\n\r\n toggleMobileMenu() {\r\n if(!this.mobileMenuToggle.classList.contains('active')) {\r\n // open menu\r\n this.mobileMenuToggle.classList.add('active');\r\n this.mobileMenu.classList.add('active');\r\n bodyService.lock();\r\n\r\n }else{\r\n // close menu\r\n this.mobileMenuToggle.classList.remove('active');\r\n this.mobileMenu.classList.remove('active');\r\n bodyService.unlock();\r\n }\r\n }\r\n} ","// from:https://github.com/jserz/js_piece/blob/master/DOM/ChildNode/remove()/remove().md\r\n(function (arr) {\r\n arr.forEach(function (item) {\r\n if (item.hasOwnProperty('remove')) {\r\n return;\r\n }\r\n Object.defineProperty(item, 'remove', {\r\n configurable: true,\r\n enumerable: true,\r\n writable: true,\r\n value: function remove() {\r\n if (this.parentNode !== null)\r\n this.parentNode.removeChild(this);\r\n }\r\n });\r\n });\r\n })([Element.prototype, CharacterData.prototype, DocumentType.prototype]);\r\n\r\n (function(){\r\n if (!Object.entries)\r\n Object.entries = function( obj ){\r\n var ownProps = Object.keys( obj ),\r\n i = ownProps.length,\r\n resArray = new Array(i); // preallocate the Array\r\n while (i--)\r\n resArray[i] = [ownProps[i], obj[ownProps[i]]];\r\n \r\n return resArray;\r\n };\r\n })();\r\n\r\n (function(){\r\n if (typeof Object.assign != 'function') {\r\n // Must be writable: true, enumerable: false, configurable: true\r\n Object.defineProperty(Object, \"assign\", {\r\n value: function assign(target, varArgs) { // .length of function is 2\r\n 'use strict';\r\n if (target == null) { // TypeError if undefined or null\r\n throw new TypeError('Cannot convert undefined or null to object');\r\n }\r\n \r\n var to = Object(target);\r\n \r\n for (var index = 1; index < arguments.length; index++) {\r\n var nextSource = arguments[index];\r\n \r\n if (nextSource != null) { // Skip over if undefined or null\r\n for (var nextKey in nextSource) {\r\n // Avoid bugs when hasOwnProperty is shadowed\r\n if (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) {\r\n to[nextKey] = nextSource[nextKey];\r\n }\r\n }\r\n }\r\n }\r\n return to;\r\n },\r\n writable: true,\r\n configurable: true\r\n });\r\n }\r\n })();","// A readyState of 4 indicates the request has completed: https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/readyState\r\nconst STATE_DONE = 4;\r\n\r\n// An HTTP response code of 200 indicates success.\r\nconst STATUS_SUCCESS = 200;\r\n\r\n// HTTP request method to post data to the server: https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/POST\r\nconst METHOD_POST = \"POST\";\r\n\r\n/**\r\n * Posts a form to the server with AJAX.\r\n * @param url {string} The URL to post the form to.\r\n * @param payload {FormData} The form data to send with the request.\r\n * @returns {Promise} A promise that resolves once the request is complete.\r\n * @constructor\r\n */\r\nfunction SendRequest(url, payload) {\r\n\r\n // Variables.\r\n let self = this, Promise = require(\"../polyfills/promise\"), state;\r\n\r\n // Instance variables.\r\n this.request = new XMLHttpRequest();\r\n\r\n // Return a promise that will resolve once the AJAX request has returned from the server.\r\n return new Promise(function (resolve, reject) {\r\n\r\n // Initiate the AJAX request.\r\n self.request.onreadystatechange = function () {\r\n state = self.handleStateChange();\r\n if (state && state.status === STATUS_SUCCESS) {\r\n resolve(state);\r\n } else if (state && state.status !== STATUS_SUCCESS) {\r\n reject(state);\r\n }\r\n };\r\n self.request.open(METHOD_POST, url, true);\r\n self.request.send(payload);\r\n\r\n });\r\n\r\n}\r\n\r\n/**\r\n * Called whenever the state changes for the AJAX call.\r\n * @returns {{} | null} The result of the state change, or null if it's an irrelevant state change.\r\n */\r\nSendRequest.prototype.handleStateChange = function () {\r\n\r\n // Is the request done?\r\n if (this.request.readyState === STATE_DONE) {\r\n\r\n // Was the request successful?\r\n if (this.request.status === STATUS_SUCCESS){\r\n\r\n // Success.\r\n return {\r\n status: STATUS_SUCCESS,\r\n text: this.request.responseText\r\n };\r\n\r\n } else {\r\n\r\n // Error.\r\n return {\r\n status: this.request.status\r\n };\r\n\r\n }\r\n\r\n }\r\n\r\n // Not a state change we care about.\r\n return null;\r\n\r\n};\r\n\r\n// Export the function that sends an AJAX request.\r\nmodule.exports = SendRequest;","/**\r\n * Renders a formulate Field.\r\n * @param fieldData The data for the form field to render.\r\n * @param fieldRenderers The associative array of field rendering functions.\r\n * @param fieldValidators The associative array of the field validating functions.\r\n * @returns {HTMLInputElement} The DOM element created by the field renderer.\r\n */\r\nfunction renderField(fieldData, fieldRenderers, fieldValidators) {\r\n\r\n // Variables.\r\n let renderer, cssClasses, renderResult;\r\n\r\n // Get the field rendering function for the current field type.\r\n renderer = fieldRenderers[fieldData.fieldType];\r\n\r\n // Create CSS classes to be attached to the DOM element.\r\n cssClasses = [];\r\n cssClasses.push(\"formulate__field\");\r\n cssClasses.push(\"formulate__field--\" + fieldData.fieldType);\r\n\r\n // Render the field.\r\n renderResult = new renderer(fieldData, fieldValidators, cssClasses);\r\n\r\n // Return the rendered field (an object that has information about the rendered field).\r\n return renderResult;\r\n\r\n}\r\n\r\n// Export the function that renders a field.\r\nmodule.exports = renderField;","/**\r\n * Renders a cell within a row of a Formulate form.\r\n * @param columnCount The number of columns this cell spans.\r\n * @returns {HTMLDivElement} The DOM element for the cell.\r\n */\r\nfunction renderCell(columnCount) {\r\n\r\n // Variables.\r\n let cellElement;\r\n\r\n // Create the element.\r\n cellElement = document.createElement(\"div\");\r\n\r\n // Add CSS classes to element.\r\n cellElement.classList.add(\"formulate__cell\");\r\n cellElement.classList.add(\"formulate__cell--\" + columnCount.toString() + \"-columns\");\r\n\r\n // Return the DOM element for the cell.\r\n return cellElement;\r\n\r\n}\r\n\r\n// Export the function that renders a cell.\r\nmodule.exports = renderCell;","/**\r\n * Renders a row in a Formulate form.\r\n * @returns {HTMLDivElement} The DOM element for the row.\r\n */\r\nfunction renderRow() {\r\n\r\n // Variables.\r\n let rowElement;\r\n\r\n // Create the DOM element for the row.\r\n rowElement = document.createElement(\"div\");\r\n\r\n // Add a CSS class to the DOM element.\r\n rowElement.classList.add(\"formulate__row\");\r\n\r\n // Return the DOM element for the row.\r\n return rowElement;\r\n\r\n}\r\n\r\n// Export the function that renders a row.\r\nmodule.exports = renderRow;","/**\r\n * Maps an array of Formulate fields into an associative array, with the field\r\n * ID as the key and the field as the value.\r\n * @param fields The array of fields to map.\r\n * @returns {{}} The associative array of fields.\r\n */\r\nfunction mapFields(fields) {\r\n\r\n // Variables.\r\n let i, fieldMap, field, fieldId;\r\n\r\n // Process each field.\r\n fieldMap = {};\r\n for (i = 0; i < fields.length; i++) {\r\n\r\n // Store the field in the associative array.\r\n field = fields[i];\r\n fieldId = field.id;\r\n fieldMap[fieldId] = field;\r\n\r\n }\r\n\r\n // Return the associative array of fields.\r\n return fieldMap;\r\n\r\n}\r\n\r\n// Export the function that maps fields.\r\nmodule.exports = mapFields;","/**\r\n * Renders a Formulate form.\r\n * @param formData The data to render a form for.\r\n * @param formElement The DOM element to insert elements into.\r\n * @param fieldRenderers The associative array of field rendering functions.\r\n * @param fieldValidators The associative array of the field validating functions.\r\n */\r\nfunction renderForm(formData, formElement, fieldRenderers, fieldValidators) {\r\n\r\n // Variables.\r\n let i, j, k, row, rows, rowElement, cells, cell, fields, fieldId,\r\n columnCount, cellElement, fieldElement, fieldsData, fieldMap,\r\n field, renderedFields, renderedField;\r\n\r\n // Map fields to an associative array for quick lookups.\r\n fieldsData = formData.data.fields;\r\n fieldMap = require(\"../utils/map-fields-by-id\")(fieldsData);\r\n\r\n // Process each row in the form.\r\n rows = formData.data.rows;\r\n renderedFields = [];\r\n for(i = 0; i < rows.length; i++) {\r\n\r\n // Create the row.\r\n row = rows[i];\r\n cells = row.cells;\r\n rowElement = require(\"./render-row\")();\r\n formElement.appendChild(rowElement);\r\n\r\n // Process each cell in this row.\r\n for (j = 0; j < cells.length; j++) {\r\n\r\n // Create the cell.\r\n cell = cells[j];\r\n fields = cell.fields;\r\n columnCount = cell.columns;\r\n cellElement = require(\"./render-cell\")(columnCount);\r\n rowElement.appendChild(cellElement);\r\n\r\n // Process each field in this cell.\r\n for (k = 0; k < fields.length; k++) {\r\n\r\n // Create the field.\r\n fieldId = fields[k].id;\r\n field = fieldMap[fieldId];\r\n renderedField = require(\"./render-field\")(field, fieldRenderers, fieldValidators);\r\n renderedFields.push(renderedField);\r\n fieldElement = renderedField.getElement();\r\n cellElement.appendChild(fieldElement);\r\n\r\n }\r\n\r\n }\r\n\r\n }\r\n\r\n // Return the rendered fields.\r\n return renderedFields;\r\n\r\n}\r\n\r\n// Export the function that renders a form.\r\nmodule.exports = renderForm;","/**\r\n * Renders the Formulate forms, inserting them into the appropriate place\r\n * in the DOM.\r\n * @param forms The data for the forms to render.\r\n * @param fieldRenderers The associative array of the field rendering functions.\r\n * @param fieldValidators The associative array of the field validating functions.\r\n */\r\nfunction renderForms(forms, fieldRenderers, fieldValidators) {\r\n\r\n // Variables.\r\n let i, form, formId, placeholderElement, formElement, formContainer, fields;\r\n\r\n // Process each form.\r\n for (i = 0; i < forms.length; i++) {\r\n\r\n // Variables.\r\n form = forms[i];\r\n\r\n // Create the form DOM element.\r\n formElement = document.createElement(\"form\");\r\n\r\n // Add CSS class to DOM element.\r\n formElement.classList.add(\"formulate__form\");\r\n\r\n // Render the contents of the form.\r\n fields = require(\"./render-form\")(form, formElement, fieldRenderers, fieldValidators);\r\n\r\n // Get the placeholder element to insert the form before.\r\n formId = \"formulate-form-\" + form.data.randomId;\r\n placeholderElement = document.getElementById(formId);\r\n\r\n // Insert the form before the placeholder, and remove the placeholder.\r\n formContainer = placeholderElement.parentNode;\r\n formContainer.insertBefore(formElement, placeholderElement);\r\n formContainer.removeChild(placeholderElement);\r\n\r\n // Handle submits.\r\n attachSubmitHandler(formElement, fields, form.data.payload, form.data.url);\r\n\r\n }\r\n\r\n}\r\n\r\n/**\r\n * Attaches the function that handles the submit event.\r\n * @param form {HTMLFormElement} The HTML form DOM element.\r\n * @param fields {Array} The fields in this form.\r\n * @param payload {Object} The additional data to send with the submission.\r\n * @param url {string} The URL to send the submission to.\r\n */\r\nfunction attachSubmitHandler(form, fields, payload, url) {\r\n\r\n // Variables.\r\n let i, data, payloadKey;\r\n\r\n // Listen for submit events.\r\n form.addEventListener(\"submit\", function (e) {\r\n\r\n // Cancel submit (since we'll be doing it with AJAX instead).\r\n e.preventDefault();\r\n\r\n // First, ensure all fields are valid.\r\n checkValidity(form, fields)\r\n .then(function (validationResult) {\r\n if (validationResult.success) {\r\n\r\n // Populate submission with initial payload.\r\n sendPayloadToServer(form, fields, payload, url);\r\n\r\n } else {\r\n\r\n // Validation failed.\r\n handleInvalidFields(validationResult.messages, form);\r\n\r\n }\r\n });\r\n\r\n }, true);\r\n\r\n}\r\n\r\n/**\r\n * Handles invalid fields by dispatching an event with the validation errors.\r\n * @param messages The messages for the validation errors.\r\n * @param form The form.\r\n */\r\nfunction handleInvalidFields(messages, form) {\r\n dispatchEvent(\"formulate: submit: validation errors\", form, {\r\n messages: messages\r\n });\r\n}\r\n\r\n/**\r\n * Checks the form for validation errors.\r\n * @param form The form.\r\n * @param fields The fields in the form.\r\n * @returns {*} A promise that will resolve to the result of the validations.\r\n */\r\nfunction checkValidity(form, fields) {\r\n\r\n // Variables.\r\n let i, field, validationPromises = [], fieldPromises;\r\n\r\n // Start validating each field.\r\n for(i = 0; i < fields.length; i++) {\r\n field = fields[i];\r\n fieldPromises = field.checkValidity();\r\n validationPromises = validationPromises.concat(fieldPromises);\r\n }\r\n\r\n // Finalize the validation of the fields.\r\n return require(\"../utils/validation\").aggregateValidations(validationPromises);\r\n\r\n}\r\n\r\n/**\r\n * Sends the payload for the form to the server.\r\n * @param form The form element.\r\n * @param fields The fields for the form.\r\n * @param payload The data to send to the server.\r\n * @param url The URL to send the data to.\r\n */\r\nfunction sendPayloadToServer(form, fields, payload, url) {\r\n\r\n // Variables.\r\n let i, data, payloadKey, dataByAlias = {};\r\n\r\n // Populate submission with initial payload.\r\n data = new FormData();\r\n for(payloadKey in payload) {\r\n if (payload.hasOwnProperty(payloadKey)) {\r\n data.append(payloadKey, payload[payloadKey]);\r\n }\r\n }\r\n\r\n // Populate submission with data from fields.\r\n for (i = 0; i < fields.length; i++) {\r\n fields[i].setData(data);\r\n fields[i].setData(dataByAlias, {\r\n rawDataByAlias: true\r\n });\r\n }\r\n\r\n // Send data as AJAX submission.\r\n new (require(\"../utils/ajax\"))(url, data).then(function() {\r\n\r\n // Dispatch success event.\r\n dispatchEvent(\"formulate form: submit: success\", form, {\r\n dataByAlias: dataByAlias\r\n });\r\n\r\n }).catch(function() {\r\n\r\n // Dispatch failure event.\r\n dispatchEvent(\"formulate form: submit: failure\", form);\r\n\r\n });\r\n\r\n}\r\n\r\n/**\r\n * Dispatches the specified event.\r\n * @param eventName The event to dispatch.\r\n * @param form The form element to dispatch the element on.\r\n * @param data The data to send with the event.\r\n */\r\nfunction dispatchEvent(eventName, form, data) {\r\n let event;\r\n if (typeof window.CustomEvent === \"function\") {\r\n\r\n // Typical implementation for CustomEvent.\r\n event = new CustomEvent(eventName, {\r\n bubbles: true,\r\n detail: data\r\n });\r\n form.dispatchEvent(event);\r\n\r\n } else {\r\n\r\n // IE11 implementation for CustomEvent.\r\n event = document.createEvent(\"CustomEvent\");\r\n event.initCustomEvent(eventName, true, false, data);\r\n form.dispatchEvent(event);\r\n\r\n }\r\n}\r\n\r\n// Export the function that renders forms.\r\nmodule.exports = renderForms;","/**\r\n * Returns the data for all Formulate forms from the window object.\r\n * @returns {Array} The forms.\r\n */\r\nfunction getFormData() {\r\n\r\n // Variables.\r\n let key, forms;\r\n\r\n // Get the forms from the window object.\r\n key = \"formulate-plain-js-forms\";\r\n forms = window[key] || [];\r\n\r\n // Reset the windows object in case subsequent forms are added later.\r\n window[key] = [];\r\n\r\n // Return the data for the forms.\r\n return forms;\r\n\r\n}\r\n\r\n// Export the function that gets the form data.\r\nmodule.exports = getFormData;","/**\r\n * Validates a field to ensure its value is set.\r\n * @constructor\r\n */\r\nfunction RequiredValidator() {\r\n}\r\n\r\n/**\r\n * Validates the the specified text is set (i.e., not null/empty).\r\n * @param value {string} The text value to validate.\r\n * @returns {Promise} A promise that resolves to true, if the text is valid; otherwise, false.\r\n */\r\nRequiredValidator.prototype.validateText = function (value) {\r\n return new (require(\"../polyfills/promise\"))(function (resolve) {\r\n let isValueSet = require(\"../utils/validation\").isValueSet,\r\n valid = isValueSet(value) && value.hasOwnProperty(\"length\") && value.length > 0;\r\n resolve(valid);\r\n });\r\n};\r\n\r\n/**\r\n * Validates the the specified boolean is true.\r\n * @param value {boolean} The boolean value to validate.\r\n * @returns {Promise} A promise that resolves to true, if the boolean is true; otherwise, false.\r\n */\r\nRequiredValidator.prototype.validateBool = function (value) {\r\n return new (require(\"../polyfills/promise\"))(function (resolve) {\r\n resolve(value === true);\r\n });\r\n};\r\n\r\n/**\r\n * Validates that the specified array of text values are all set and that the array is not null/empty.\r\n * @param value {string[]} The array of text values.\r\n * @returns {Promise} A promise that resolves to true, if the array of text values is valid; otherwise, false.\r\n */\r\nRequiredValidator.prototype.validateTextArray = function (value) {\r\n return new (require(\"../polyfills/promise\"))(function (resolve) {\r\n\r\n // Variables.\r\n let i, item,\r\n isValueSet = require(\"../utils/validation\").isValueSet;\r\n\r\n // Check if the value is a valid array.\r\n if (!isValueSet(value) || !Array.isArray(value)) {\r\n resolve(false);\r\n return;\r\n }\r\n\r\n // Check if the array has at least one value.\r\n if (value.length === 0) {\r\n resolve(false);\r\n return;\r\n }\r\n\r\n // Check if each value in the array is set to some valid text.\r\n for (i = 0; i < value.length; i++) {\r\n item = value[i];\r\n if (!this.validateText(item)) {\r\n resolve(false);\r\n return;\r\n }\r\n }\r\n\r\n // All tests passed. Array value is valid.\r\n resolve(true);\r\n\r\n });\r\n};\r\n\r\n/**\r\n * Validates that the specified file has been selected.\r\n * @param value {*} The file value.\r\n * @returns {Promise} A promise that resolves to true, if the file is selected; otherwise, false.\r\n */\r\nRequiredValidator.prototype.validateFile = function (value) {\r\n return new (require(\"../polyfills/promise\"))(function (resolve) {\r\n //TODO: ...\r\n resolve(true);\r\n });\r\n};\r\n\r\n// Export the field validator configuration.\r\nmodule.exports = {\r\n key: \"required\",\r\n validator: RequiredValidator\r\n};","/**\r\n * Validates a field to ensure its value matches a regular expression.\r\n * @param configuration The configuration for this regex validator.\r\n * @constructor\r\n */\r\nfunction RegexValidator(configuration) {\r\n this.regex = new RegExp(configuration.pattern);\r\n}\r\n\r\n/**\r\n * Validates the the specified text matches the regex.\r\n * @param value {string} The text value to validate.\r\n * @returns {Promise} A promise that resolves to true, if the text is valid; otherwise, false.\r\n */\r\nRegexValidator.prototype.validateText = function (value) {\r\n let self = this;\r\n return new (require(\"../polyfills/promise\"))(function (resolve) {\r\n let isValueSet = require(\"../utils/validation\").isValueSet;\r\n if (!isValueSet(value)) {\r\n value = \"\";\r\n }\r\n resolve(self.regex.test(value));\r\n });\r\n};\r\n\r\n/**\r\n * Validates the the specified boolean matches the regex.\r\n * @param value {boolean} The boolean value to validate.\r\n * @returns {Promise} A promise that resolves to true, if the boolean matches the regex; otherwise, false.\r\n */\r\nRegexValidator.prototype.validateBool = function (value) {\r\n let self = this,\r\n textValue = value === true\r\n ? \"true\"\r\n : \"false\";\r\n return new (require(\"../polyfills/promise\"))(function (resolve) {\r\n resolve(self.regex.test(textValue));\r\n });\r\n};\r\n\r\n/**\r\n * Validates that the specified array of text values all match the regex and that the array is not null/empty.\r\n * @param value {string[]} The array of text values.\r\n * @returns {Promise} A promise that resolves to true, if the array of text values is valid; otherwise, false.\r\n */\r\nRegexValidator.prototype.validateTextArray = function (value) {\r\n return new (require(\"../polyfills/promise\"))(function (resolve) {\r\n\r\n // Variables.\r\n let i, item,\r\n isValueSet = require(\"../utils/validation\").isValueSet;\r\n\r\n // Check if the value is a valid array.\r\n if (!isValueSet(value) || !Array.isArray(value)) {\r\n resolve(false);\r\n return;\r\n }\r\n\r\n // Check if the array has at least one value.\r\n if (value.length === 0) {\r\n resolve(false);\r\n return;\r\n }\r\n\r\n // Check if each value in the array matches the regex.\r\n for (i = 0; i < value.length; i++) {\r\n item = value[i];\r\n if (!this.validateText(item)) {\r\n resolve(false);\r\n return;\r\n }\r\n }\r\n\r\n // All tests passed. Array value is valid.\r\n resolve(true);\r\n\r\n });\r\n};\r\n\r\n/**\r\n * Validates that the specified filename matches the regex.\r\n * @param value {*} The file value.\r\n * @returns {Promise} A promise that resolves to true, if the file is selected; otherwise, false.\r\n */\r\nRegexValidator.prototype.validateFile = function (value) {\r\n return new (require(\"../polyfills/promise\"))(function (resolve) {\r\n //TODO: ...\r\n resolve(true);\r\n });\r\n};\r\n\r\n// Export the field validator configuration.\r\nmodule.exports = {\r\n key: \"regex\",\r\n validator: RegexValidator\r\n};","/**\r\n * Returns the field validators in an associative array with the keys being the\r\n * type of field validator (e.g., \"regex\" or \"required\") and the value being the\r\n * function that validates the field.\r\n * @returns {{}} The associative array of field validators.\r\n */\r\nfunction getFieldValidators() {\r\n\r\n // Variables.\r\n let i, validators, extraValidators, field, fieldKey, validatorMap;\r\n\r\n // Get the field validators.\r\n validators = [\r\n require(\"../validators/regex\"),\r\n require(\"../validators/required\")\r\n ];\r\n extraValidators = window[\"formulate-plain-js-validators\"] || [];\r\n validators = validators.concat(extraValidators);\r\n\r\n // Store the field validators to an associative array.\r\n validatorMap = {};\r\n for (i = 0; i < validators.length; i++) {\r\n field = validators[i];\r\n fieldKey = field.key;\r\n validatorMap[fieldKey] = field.validator;\r\n }\r\n\r\n // Return the associative array of field validators.\r\n return validatorMap;\r\n\r\n}\r\n\r\n// Export the function that gets the field validators.\r\nmodule.exports = getFieldValidators;","/**\r\n * Renders a textarea field.\r\n * @param fieldData The field data that should be used to render the textarea field.\r\n * @param fieldValidators The associative array of the field validating functions.\r\n * @param cssClasses The CSS classes to attach to the element.\r\n * @constructor\r\n */\r\nfunction RenderText(fieldData, fieldValidators, cssClasses) {\r\n require(\"../utils/field\").initializeField(this, fieldData, fieldValidators, {\r\n nodeName: \"textarea\",\r\n cssClasses: cssClasses\r\n });\r\n}\r\n\r\n/**\r\n * Returns the DOM element for the textarea field.\r\n * @returns {HTMLDivElement} The DOM element for the textarea field.\r\n */\r\nRenderText.prototype.getElement = function () {\r\n return this.wrapper;\r\n};\r\n\r\n/**\r\n * Adds the data for this field on the specified FormData instance.\r\n * @param data {FormData} The FormData instance to set the field data on.\r\n * @param options {{rawDataByAlias: boolean}} Optional. The options for setting the data.\r\n */\r\nRenderText.prototype.setData = function (data, options) {\r\n require(\"../utils/field\").setData(data, this.element.value, options, this.alias, this.id);\r\n};\r\n\r\n/**\r\n * Checks the validity of the value in this field (adding inline validation messages if necessary).\r\n * @returns {Promise[]} An array of promises that resolve to validation results.\r\n */\r\nRenderText.prototype.checkValidity = function () {\r\n return require(\"../utils/validation\")\r\n .checkTextValidity(this, this.validators, this.element.value, this.wrapper);\r\n};\r\n\r\n// Export the field renderer configuration.\r\nmodule.exports = {\r\n key: \"textarea\",\r\n renderer: RenderText\r\n};","/**\r\n * Renders a checkbox field.\r\n * @param fieldData The field data that should be used to render the checkbox field.\r\n * @param fieldValidators The associative array of the field validating functions.\r\n * @param cssClasses The CSS classes to attach to the element.\r\n * @constructor\r\n */\r\nfunction RenderCheckbox(fieldData, fieldValidators, cssClasses) {\r\n require(\"../utils/field\").initializeField(this, fieldData, fieldValidators, {\r\n type: \"checkbox\",\r\n cssClasses: cssClasses,\r\n usePlaceholder: false\r\n });\r\n}\r\n\r\n/**\r\n * Returns the DOM element for the checkbox field.\r\n * @returns {HTMLDivElement} The DOM element for the checkbox field.\r\n */\r\nRenderCheckbox.prototype.getElement = function () {\r\n return this.wrapper;\r\n};\r\n\r\n/**\r\n * Adds the data for this field on the specified FormData instance.\r\n * @param data {FormData} The FormData instance to set the field data on.\r\n * @param options {{rawDataByAlias: boolean}} Optional. The options for setting the data.\r\n */\r\nRenderCheckbox.prototype.setData = function (data, options) {\r\n require(\"../utils/field\").setData(data, this.element.checked, options, this.alias, this.id);\r\n};\r\n\r\n/**\r\n * Checks the validity of the value in this field (adding inline validation messages if necessary).\r\n * @returns {Promise[]} An array of promises that resolve to validation results.\r\n */\r\nRenderCheckbox.prototype.checkValidity = function () {\r\n return require(\"../utils/validation\")\r\n .checkBoolValidity(this, this.validators, this.element.checked, this.wrapper);\r\n};\r\n\r\n// Export the field renderer configuration.\r\nmodule.exports = {\r\n key: \"checkbox\",\r\n renderer: RenderCheckbox\r\n};","// Dependencies.\r\nlet FieldUtility = require(\"../utils/field\");\r\n\r\n/**\r\n * Renders rich text.\r\n * @param fieldData The field data that should be used to render the rich text.\r\n * @param fieldValidators The associative array of the field validating functions.\r\n * @param cssClasses The CSS classes to attach to the element.\r\n * @constructor\r\n */\r\nfunction RichText(fieldData, fieldValidators, cssClasses) {\r\n\r\n // Initialize field.\r\n FieldUtility.initializeField(this, fieldData, fieldValidators, {\r\n nodeName: \"div\",\r\n cssClasses: cssClasses,\r\n usePlaceholder: false,\r\n useLabel: false,\r\n useWrapper: false\r\n });\r\n\r\n // Add text to element.\r\n this.element.innerHTML = fieldData.configuration.text;\r\n\r\n}\r\n\r\n/**\r\n * Returns the DOM element for the rich text.\r\n * @returns {HTMLButtonElement} The DOM element for the rich text.\r\n */\r\nRichText.prototype.getElement = function () {\r\n return this.element;\r\n};\r\n\r\n/**\r\n * Ensure the prototype has the necessary functions.\r\n */\r\nFieldUtility.initializeFieldPrototype(RichText.prototype);\r\n\r\n// Export the field renderer configuration.\r\nmodule.exports = {\r\n key: \"rich-text\",\r\n renderer: RichText\r\n};","// Dependencies.\r\nlet FieldUtility = require(\"../utils/field\");\r\n\r\n/**\r\n * Renders a submit button.\r\n * @param fieldData The field data that should be used to render the button.\r\n * @param fieldValidators The associative array of the field validating functions.\r\n * @param cssClasses The CSS classes to attach to the element.\r\n * @constructor\r\n */\r\nfunction RenderButton(fieldData, fieldValidators, cssClasses) {\r\n\r\n // Initialize field.\r\n FieldUtility.initializeField(this, fieldData, fieldValidators, {\r\n nodeName: \"button\",\r\n type: \"submit\",\r\n cssClasses: cssClasses,\r\n usePlaceholder: false,\r\n useLabel: false\r\n });\r\n\r\n // Add text to button.\r\n this.element.appendChild(document.createTextNode(fieldData.label));\r\n\r\n}\r\n\r\n/**\r\n * Returns the DOM element for the button.\r\n * @returns {HTMLDivElement} The DOM element for the button.\r\n */\r\nRenderButton.prototype.getElement = function () {\r\n return this.wrapper;\r\n};\r\n\r\n/**\r\n * Ensure the prototype has the necessary functions.\r\n */\r\nFieldUtility.initializeFieldPrototype(RenderButton.prototype);\r\n\r\n// Export the field renderer configuration.\r\nmodule.exports = {\r\n key: \"button\",\r\n renderer: RenderButton\r\n};","/**@license MIT-promiscuous-©Ruben Verborgh*/\r\n(function (func, obj) {\r\n // Type checking utility function\r\n function is(type, item) { return (typeof item)[0] == type; }\r\n\r\n // Creates a promise, calling callback(resolve, reject), ignoring other parameters.\r\n function Promise(callback, handler) {\r\n // The `handler` variable points to the function that will\r\n // 1) handle a .then(resolved, rejected) call\r\n // 2) handle a resolve or reject call (if the first argument === `is`)\r\n // Before 2), `handler` holds a queue of callbacks.\r\n // After 2), `handler` is a finalized .then handler.\r\n handler = function pendingHandler(resolved, rejected, value, queue, then, i) {\r\n queue = pendingHandler.q;\r\n\r\n // Case 1) handle a .then(resolved, rejected) call\r\n if (resolved != is) {\r\n return Promise(function (resolve, reject) {\r\n queue.push({ p: this, r: resolve, j: reject, 1: resolved, 0: rejected });\r\n });\r\n }\r\n\r\n // Case 2) handle a resolve or reject call\r\n // (`resolved` === `is` acts as a sentinel)\r\n // The actual function signature is\r\n // .re[ject|solve](, success, value)\r\n\r\n // Check if the value is a promise and try to obtain its `then` method\r\n if (value && (is(func, value) | is(obj, value))) {\r\n try { then = value.then; }\r\n catch (reason) { rejected = 0; value = reason; }\r\n }\r\n // If the value is a promise, take over its state\r\n if (is(func, then)) {\r\n try { then.call(value, transferState(1), rejected = transferState(0)); }\r\n catch (reason) { rejected(reason); }\r\n }\r\n // The value is not a promise; handle resolve/reject\r\n else {\r\n // Replace this handler with a finalized resolved/rejected handler\r\n handler = function (Resolved, Rejected) {\r\n // If the Resolved or Rejected parameter is not a function,\r\n // return the original promise (now stored in the `callback` variable)\r\n if (!is(func, (Resolved = rejected ? Resolved : Rejected)))\r\n return callback;\r\n // Otherwise, return a finalized promise, transforming the value with the function\r\n return Promise(function (resolve, reject) { finalize(this, resolve, reject, value, Resolved); });\r\n };\r\n // Resolve/reject pending callbacks\r\n i = 0;\r\n while (i < queue.length) {\r\n then = queue[i++];\r\n // If no callback, just resolve/reject the promise\r\n if (!is(func, resolved = then[rejected]))\r\n (rejected ? then.r : then.j)(value);\r\n // Otherwise, resolve/reject the promise with the result of the callback\r\n else\r\n finalize(then.p, then.r, then.j, value, resolved);\r\n }\r\n }\r\n // Returns a function that transfers the state of the promise\r\n function transferState(resolved) {\r\n return function (value) { then && (then = 0, pendingHandler(is, resolved, value)); };\r\n }\r\n };\r\n // The queue of pending callbacks; garbage-collected when handler is resolved/rejected\r\n handler.q = [];\r\n\r\n // Create and return the promise (reusing the callback variable)\r\n callback.call(callback = { then: function (resolved, rejected) { return handler(resolved, rejected); },\r\n \"catch\": function (rejected) { return handler(0, rejected); } },\r\n function (value) { handler(is, 1, value); },\r\n function (reason) { handler(is, 0, reason); });\r\n return callback;\r\n }\r\n\r\n // Finalizes the promise by resolving/rejecting it with the transformed value\r\n function finalize(promise, resolve, reject, value, transform) {\r\n setTimeout(function () {\r\n try {\r\n // Transform the value through and check whether it's a promise\r\n value = transform(value);\r\n transform = value && (is(obj, value) | is(func, value)) && value.then;\r\n // Return the result if it's not a promise\r\n if (!is(func, transform))\r\n resolve(value);\r\n // If it's a promise, make sure it's not circular\r\n else if (value == promise)\r\n reject(TypeError());\r\n // Take over the promise's state\r\n else\r\n transform.call(value, resolve, reject);\r\n }\r\n catch (error) { reject(error); }\r\n });\r\n }\r\n\r\n // Export the main module\r\n module.exports = Promise;\r\n\r\n // Creates a resolved promise\r\n Promise.resolve = ResolvedPromise;\r\n function ResolvedPromise(value) { return Promise(function (resolve) { resolve(value); }); }\r\n\r\n // Creates a rejected promise\r\n Promise.reject = function (reason) { return Promise(function (resolve, reject) { reject(reason); }); };\r\n\r\n // Transforms an array of promises into a promise for an array\r\n Promise.all = function (promises) {\r\n return Promise(function (resolve, reject, count, values) {\r\n // Array of collected values\r\n values = [];\r\n // Resolve immediately if there are no promises\r\n count = promises.length || resolve(values);\r\n // Transform all elements (`map` is shorter than `forEach`)\r\n promises.map(function (promise, index) {\r\n ResolvedPromise(promise).then(\r\n // Store the value and resolve if it was the last\r\n function (value) {\r\n values[index] = value;\r\n --count || resolve(values);\r\n },\r\n // Reject if one element fails\r\n reject);\r\n });\r\n });\r\n };\r\n\r\n // Returns a promise that resolves or rejects as soon as one promise in the array does\r\n Promise.race = function (promises) {\r\n return Promise(function (resolve, reject) {\r\n // Register to all promises in the array\r\n promises.map(function (promise) {\r\n ResolvedPromise(promise).then(resolve, reject);\r\n });\r\n });\r\n };\r\n})('f', 'o');\r\n","/**\r\n * Adds CSS classes to a DOM element\r\n * @param element The DOM element to add classes to.\r\n * @param cssClasses The CSS classes to add to the element.\r\n */\r\nfunction addClasses(element, cssClasses) {\r\n\r\n // Variables.\r\n let i;\r\n\r\n // Add each CSS class to the element.\r\n for (i = 0; i < cssClasses.length; i++) {\r\n element.classList.add(cssClasses[i]);\r\n }\r\n\r\n}\r\n\r\n// Export the function that adds CSS classes to an element.\r\nmodule.exports = addClasses;","/**\r\n * Renders a text field.\r\n * @param fieldData The field data that should be used to render the text field.\r\n * @param fieldValidators The associative array of the field validating functions.\r\n * @param cssClasses The CSS classes to attach to the element.\r\n * @constructor\r\n */\r\nfunction RenderText(fieldData, fieldValidators, cssClasses) {\r\n require(\"../utils/field\").initializeField(this, fieldData, fieldValidators, {\r\n type: \"text\",\r\n cssClasses: cssClasses\r\n });\r\n}\r\n\r\n/**\r\n * Returns the DOM element for the text field.\r\n * @returns {HTMLDivElement} The DOM element for the text field.\r\n */\r\nRenderText.prototype.getElement = function () {\r\n return this.wrapper;\r\n};\r\n\r\n/**\r\n * Adds the data for this field on the specified FormData instance.\r\n * @param data {FormData} The FormData instance to set the field data on.\r\n * @param options {{rawDataByAlias: boolean}} Optional. The options for setting the data.\r\n */\r\nRenderText.prototype.setData = function (data, options) {\r\n require(\"../utils/field\").setData(data, this.element.value, options, this.alias, this.id);\r\n};\r\n\r\n/**\r\n * Checks the validity of the value in this field (adding inline validation messages if necessary).\r\n * @returns {Promise[]} An array of promises that resolve to validation results.\r\n */\r\nRenderText.prototype.checkValidity = function () {\r\n return require(\"../utils/validation\")\r\n .checkTextValidity(this, this.validators, this.element.value, this.wrapper);\r\n};\r\n\r\n// Export the field renderer configuration.\r\nmodule.exports = {\r\n key: \"text\",\r\n renderer: RenderText\r\n};","/**\r\n * Returns the field renderers in an associative array with the keys being the\r\n * type of field renderer (e.g., \"text\" or \"button\") and the value being the\r\n * function that renders the field.\r\n * @returns {{}} The associative array of field renderers.\r\n */\r\nfunction getFieldRenderers() {\r\n\r\n // Variables.\r\n let i, fields, extraFields, field, fieldKey, fieldMap;\r\n\r\n // Get the field renderers.\r\n fields = [\r\n require(\"../fields/plain-text\"),\r\n require(\"../fields/plain-button\"),\r\n require(\"../fields/plain-rich-text\"),\r\n require(\"../fields/plain-checkbox\"),\r\n require(\"../fields/plain-textarea\")\r\n ];\r\n extraFields = window[\"formulate-plain-js-fields\"] || [];\r\n fields = fields.concat(extraFields);\r\n\r\n // Store the field renderers to an associative array.\r\n fieldMap = {};\r\n for (i = 0; i < fields.length; i++) {\r\n field = fields[i];\r\n fieldKey = field.key;\r\n fieldMap[fieldKey] = field.renderer;\r\n }\r\n\r\n // Return the associative array of field renderers.\r\n return fieldMap;\r\n\r\n}\r\n\r\n// Export the function that gets the field renderers.\r\nmodule.exports = getFieldRenderers;","// Variables.\r\nlet forms, renderers, validators;\r\n\r\n// Get field renderers.\r\nrenderers = require(\"./steps/get-field-renderers\")();\r\n\r\n// Get field validators.\r\nvalidators = require(\"./steps/get-field-validators\")();\r\n\r\n// Get form data.\r\nforms = require(\"./steps/get-form-data\")();\r\n\r\n// Render the forms.\r\nrequire(\"./steps/render-forms\")(forms, renderers, validators);","// Dependencies.\r\nimport SendRequest from \"../../lib/ajax\";\r\n\r\n// Ensure validators have been initialized.\r\nlet key = \"formulate-plain-js-validators\";\r\nwindow[key] = window[key] || [];\r\n\r\n/**\r\n * Validates a field to ensure its value is a valid email address.\r\n * @constructor\r\n */\r\nfunction BriteVerifyValidator() {\r\n}\r\n\r\n/**\r\n * Validates the the specified text is a valid email address.\r\n * @param value {string} The text value to validate.\r\n * @returns {Promise} A promise that resolves to true, if the text is valid; otherwise, false.\r\n */\r\nBriteVerifyValidator.prototype.validateText = function (value) {\r\n return new Promise(function (resolve) {\r\n let encodedEmail = encodeURIComponent(value),\r\n url = \"/umbraco/rhythm/briteverifyapi/verify?email=\" + encodedEmail;\r\n new SendRequest(url)\r\n .then(function (result) {\r\n let success = result.text === \"true\";\r\n resolve(success);\r\n });\r\n });\r\n};\r\n\r\n// Does nothing. Only here to satisfy the contract.\r\nBriteVerifyValidator.prototype.validateTextArray = function (value) {\r\n return new Promise(function (resolve) {\r\n\r\n // Fake it, as we don't care about validating text arrays.\r\n resolve(true);\r\n\r\n });\r\n};\r\n\r\n// Does nothing. Only here to satisfy the contract.\r\nBriteVerifyValidator.prototype.validateFile = function (value) {\r\n return new Promise(function (resolve) {\r\n\r\n // Fake it, as we don't care about validating files.\r\n resolve(true);\r\n\r\n });\r\n};\r\n\r\n// Store the field validator configuration so Formulate will pick it up.\r\nwindow[key].push({\r\n key: \"ValidationBriteVerify\",\r\n validator: BriteVerifyValidator\r\n});","/**@license MIT-promiscuous-©Ruben Verborgh*/\n(function (func, obj) {\n // Type checking utility function\n function is(type, item) { return (typeof item)[0] == type; }\n\n // Creates a promise, calling callback(resolve, reject), ignoring other parameters.\n function Promise(callback, handler) {\n // The `handler` variable points to the function that will\n // 1) handle a .then(resolved, rejected) call\n // 2) handle a resolve or reject call (if the first argument === `is`)\n // Before 2), `handler` holds a queue of callbacks.\n // After 2), `handler` is a finalized .then handler.\n handler = function pendingHandler(resolved, rejected, value, queue, then, i) {\n queue = pendingHandler.q;\n\n // Case 1) handle a .then(resolved, rejected) call\n if (resolved != is) {\n return Promise(function (resolve, reject) {\n queue.push({ p: this, r: resolve, j: reject, 1: resolved, 0: rejected });\n });\n }\n\n // Case 2) handle a resolve or reject call\n // (`resolved` === `is` acts as a sentinel)\n // The actual function signature is\n // .re[ject|solve](, success, value)\n\n // Check if the value is a promise and try to obtain its `then` method\n if (value && (is(func, value) | is(obj, value))) {\n try { then = value.then; }\n catch (reason) { rejected = 0; value = reason; }\n }\n // If the value is a promise, take over its state\n if (is(func, then)) {\n try { then.call(value, transferState(1), rejected = transferState(0)); }\n catch (reason) { rejected(reason); }\n }\n // The value is not a promise; handle resolve/reject\n else {\n // Replace this handler with a finalized resolved/rejected handler\n handler = function (Resolved, Rejected) {\n // If the Resolved or Rejected parameter is not a function,\n // return the original promise (now stored in the `callback` variable)\n if (!is(func, (Resolved = rejected ? Resolved : Rejected)))\n return callback;\n // Otherwise, return a finalized promise, transforming the value with the function\n return Promise(function (resolve, reject) { finalize(this, resolve, reject, value, Resolved); });\n };\n // Resolve/reject pending callbacks\n i = 0;\n while (i < queue.length) {\n then = queue[i++];\n // If no callback, just resolve/reject the promise\n if (!is(func, resolved = then[rejected]))\n (rejected ? then.r : then.j)(value);\n // Otherwise, resolve/reject the promise with the result of the callback\n else\n finalize(then.p, then.r, then.j, value, resolved);\n }\n }\n // Returns a function that transfers the state of the promise\n function transferState(resolved) {\n return function (value) { then && (then = 0, pendingHandler(is, resolved, value)); };\n }\n };\n // The queue of pending callbacks; garbage-collected when handler is resolved/rejected\n handler.q = [];\n\n // Create and return the promise (reusing the callback variable)\n callback.call(callback = { then: function (resolved, rejected) { return handler(resolved, rejected); },\n \"catch\": function (rejected) { return handler(0, rejected); } },\n function (value) { handler(is, 1, value); },\n function (reason) { handler(is, 0, reason); });\n return callback;\n }\n\n // Finalizes the promise by resolving/rejecting it with the transformed value\n function finalize(promise, resolve, reject, value, transform) {\n setTimeout(function () {\n try {\n // Transform the value through and check whether it's a promise\n value = transform(value);\n transform = value && (is(obj, value) | is(func, value)) && value.then;\n // Return the result if it's not a promise\n if (!is(func, transform))\n resolve(value);\n // If it's a promise, make sure it's not circular\n else if (value == promise)\n reject(TypeError());\n // Take over the promise's state\n else\n transform.call(value, resolve, reject);\n }\n catch (error) { reject(error); }\n });\n }\n\n // Export the main module\n window.Promise = Promise;\n\n // Creates a resolved promise\n Promise.resolve = ResolvedPromise;\n function ResolvedPromise(value) { return Promise(function (resolve) { resolve(value); }); }\n\n // Creates a rejected promise\n Promise.reject = function (reason) { return Promise(function (resolve, reject) { reject(reason); }); };\n\n // Transforms an array of promises into a promise for an array\n Promise.all = function (promises) {\n return Promise(function (resolve, reject, count, values) {\n // Array of collected values\n values = [];\n // Resolve immediately if there are no promises\n count = promises.length || resolve(values);\n // Transform all elements (`map` is shorter than `forEach`)\n promises.map(function (promise, index) {\n ResolvedPromise(promise).then(\n // Store the value and resolve if it was the last\n function (value) {\n values[index] = value;\n --count || resolve(values);\n },\n // Reject if one element fails\n reject);\n });\n });\n };\n\n // Returns a promise that resolves or rejects as soon as one promise in the array does\n Promise.race = function (promises) {\n return Promise(function (resolve, reject) {\n // Register to all promises in the array\n promises.map(function (promise) {\n ResolvedPromise(promise).then(resolve, reject);\n });\n });\n };\n})('f', 'o');\n","// import 'Styles/themes/_wiski-critical.scss';\r\n\r\n// TODO remove for prod\r\nimport 'Styles/styles.scss';\r\n\r\n// This import will add Promise to the window.\r\nimport \"promiscuous/promiscuous-browser-full\";\r\n\r\n// Formulate customizations.\r\nimport \"./components/formulate/brite-verify-validation\";\r\n\r\n// Formulate plain JavaScript frontend.\r\nimport \"../responsive.plain-javascript/plain-index\";\r\n\r\nimport \"./lib/polyfills\";\r\n\r\nimport { each } from './lib/util';\r\nimport HeaderComponent from './header/header';\r\nimport ModalComponent from './components/modal/modal';\r\nimport PromoBannerComponent from './components/promo-banner/promo-banner';\r\nimport BioModalComponent from './components/modal/bio-modal';\r\nimport HeroWidget from './widgets/hero/hero.widget';\r\nimport HeroCarouselWidget from './widgets/hero-carousel/hero-carousel.widget';\r\nimport CareersAccordion from './widgets/careers-accordion/careers-accordion.widget';\r\nimport BlogGalleryWidget from './widgets/blog/blog-gallery.widget';\r\nimport SearchResultsWidget from './widgets/search-results/search-results.widget';\r\nimport ValidationComponent from './forms/validation';\r\nimport DualPGCL from './widgets/dual-pane-graphical-callout-list/dual-pane-graphical-callout-list.widget';\r\nimport RichText from './widgets/rich-text/rich-text.widget';\r\n// import FormsComponent from './forms/forms';\r\n// import './services/animations';\r\n\r\n// list of components that will fire conditionally depending on whether\r\n// the static selector property on them matches any dom elements\r\nconst components = [\r\n HeaderComponent,\r\n HeroWidget,\r\n HeroCarouselWidget,\r\n BlogGalleryWidget,\r\n SearchResultsWidget,\r\n ModalComponent,\r\n PromoBannerComponent,\r\n BioModalComponent,\r\n CareersAccordion,\r\n DualPGCL, \r\n RichText\r\n];\r\n\r\nif(typeof DEVELOPMENT !== 'undefined' && DEVELOPMENT) {\r\n window.cssLoaded = true;\r\n}\r\n\r\n//bootstrap\r\nif (window.cssLoaded) {\r\n init();\r\n} else {\r\n window.appInit = function(){\r\n setTimeout(() => {\r\n init();\r\n }, 0);\r\n };\r\n}\r\n\r\nfunction init() {\r\n let apiMap = {};\r\n var touchsupport = ('ontouchstart' in window) || (navigator.maxTouchPoints > 0) || (navigator.msMaxTouchPoints > 0)\r\n if (touchsupport){ // browser doesn't support touch\r\n document.documentElement.classList.add('js-touch');\r\n }\r\n\r\n\r\n components.forEach((cmp) => {\r\n const api = initComponent(cmp);\r\n \r\n if(api) {\r\n apiMap[api[0]] = api[1];\r\n }\r\n });\r\n \r\n}\r\n\r\nfunction initComponent(cmp) {\r\n let cmpArr = [];\r\n let cmpName;\r\n let cmpsOnPage = cmp.getEntryElements();\r\n if(cmpsOnPage.length) {\r\n each(cmpsOnPage, (el) => {\r\n const cmpInstance = new cmp(el);\r\n cmpName = cmpInstance.constructor.name;\r\n cmpArr.push(cmpInstance);\r\n });\r\n return [cmpName, cmpArr];\r\n }else{\r\n return false;\r\n }\r\n}\r\n"],"sourceRoot":""}