forked from experianplc/Experian-Address-Validation
-
Notifications
You must be signed in to change notification settings - Fork 0
/
contact-data-services.min.js
4 lines (3 loc) · 16.2 KB
/
contact-data-services.min.js
1
2
3
4
/*! contact-data-services.js | https://github.com/experianplc/Experian-Address-Validation | Apache-2.0
* Experian | https://github.com/experianplc */
!function(i,l,r){"use strict";var u=i.ContactDataServices=i.ContactDataServices||{};u.defaults={input:{placeholderText:"Start typing an address...",applyFocus:!1},formattedAddressContainer:{showHeading:!1,headingType:"h3",validatedHeadingText:"Validated address",manualHeadingText:"Manual address entered"},searchAgain:{visible:!0,text:"Search again"},allowUseAddressEntered:!0,useAddressEnteredText:"<em>Enter address manually</em>",useSpinner:!1,language:"en",addressLineLabels:["address_line_1","address_line_2","address_line_3","locality","region","postal_code","country","building_number","street","sub_building"]},u.mergeDefaultOptions=function(e){var t=e||{};return t.enabled=!0,t.language=t.language||u.defaults.language,t.useSpinner=t.useSpinner||u.defaults.useSpinner,t.lastSearchTerm="",t.currentSearchTerm="",t.lastCountryCode="",t.currentCountryCode="",t.currentSearchUrl="",t.currentFormatUrl="",t.applyFocus=void 0!==t.applyFocus?t.applyFocus:u.defaults.input.applyFocus,t.placeholderText=t.placeholderText||u.defaults.input.placeholderText,t.allowUseAddressEntered=void 0!==t.allowUseAddressEntered?t.allowUseAddressEntered:u.defaults.allowUseAddressEntered,t.searchAgain=t.searchAgain||{},t.searchAgain.visible=void 0!==t.searchAgain.visible?t.searchAgain.visible:u.defaults.searchAgain.visible,t.searchAgain.text=t.searchAgain.text||u.defaults.searchAgain.text,t.formattedAddressContainer=t.formattedAddressContainer||u.defaults.formattedAddressContainer,t.formattedAddressContainer.showHeading=void 0!==t.formattedAddressContainer.showHeading?t.formattedAddressContainer.showHeading:u.defaults.formattedAddressContainer.showHeading,t.formattedAddressContainer.headingType=t.formattedAddressContainer.headingType||u.defaults.formattedAddressContainer.headingType,t.formattedAddressContainer.validatedHeadingText=t.formattedAddressContainer.validatedHeadingText||u.defaults.formattedAddressContainer.validatedHeadingText,t.formattedAddressContainer.manualHeadingText=t.formattedAddressContainer.manualHeadingText||u.defaults.formattedAddressContainer.manualHeadingText,t.elements=t.elements||{},t},u.eventFactory=function(){var i={collection:{},on:function(e,t){i.collection[e]=i.collection[e]||[],i.collection[e].push(t)},trigger:function(e,t){if(i.collection[e])for(var r=0;r<i.collection[e].length;r++){for(var n=[t],s=2;s<arguments.length;s++)n.push(arguments[s]);try{i.collection[e][r].apply(i.collection,n)}catch(e){}}}};return i},u.translations={en:{gbr:{locality:"Town/City",region:"County",postal_code:"Post code"},usa:{locality:"City",region:"State",postal_code:"Zip code"}}},u.ua={banner:{show:function(e){var t=l.querySelector(".ua-banner");if(!t){var r=l.querySelector("body").firstChild;(t=l.createElement("div")).classList.add("ua-banner"),r.parentNode.insertBefore(t,r.nextSibling)}t.innerHTML=e},hide:function(){var e=l.querySelector(".ua-banner");e&&e.parentNode.removeChild(e)}}},u.urls={endpoint:"https://api.experianaperture.io/address/search/v1",construct:{address:{searchUrl:function(){return u.urls.endpoint},searchData:function(e){var t={country_iso:e.currentCountryCode,components:{unspecified:[e.currentSearchTerm]},dataset:e.currentDataSet,take:e.maxSize||e.picklist.maxSize};return e.elements.location&&(t.location=e.elements.location),JSON.stringify(t)}}},getToken:function(e){e.token||(e.token=u.urls.getParameter("token"))},getParameter:function(e){e=e.replace(/[\[]/,"\\[").replace(/[\]]/,"\\]");var t=new RegExp("[\\?&]"+e+"=([^&#]*)").exec(location.search);return null===t?"":decodeURIComponent(t[1].replace(/\+/g," "))}},u.address=function(e){var p=u.mergeDefaultOptions(e);return p.events=new u.eventFactory,p.init=function(){if(u.urls.getToken(p),!p.token)return p.enabled=!1,void u.ua.banner.show("<a href='https://github.com/experianplc/Experian-Address-Validation#tokens'>Please provide a token for Experian Address Validation.</a>");p.hasSearchInputBeenReset=!0,p.setCountryList(),p.elements.input&&(p.input=p.elements.input,p.countryCodeMapping=p.elements.countryCodeMapping||{},p.input.addEventListener("keyup",p.search),p.input.addEventListener("keydown",p.checkTab),p.input.setAttribute("placeholder",p.placeholderText),p.input.parentNode.setAttribute("autocomplete","off"),p.input.parentNode.addEventListener("submit",function(e){e.preventDefault()}),p.applyFocus&&p.input.focus())},p.unbind=function(){p.elements.input&&(p.input=p.elements.input,p.input.removeEventListener("keyup",p.search),p.input.removeEventListener("keydown",p.checkTab),p.input.parentNode.removeAttribute("autocomplete"))},p.search=function(e){var t=e||i.event;if(38!==(t=t.which||t.keyCode)&&40!==t&&13!==t){p.currentSearchTerm=p.input.value;var r=p.countryCodeMapping[p.countryList.value]||p.countryList.value;if(r=r.split(";"),p.currentCountryCode=r[0],p.currentDataSet=r[1]||"",""===p.currentSearchTerm&&(p.hasSearchInputBeenReset=!0),p.canSearch()){p.request.currentRequest&&p.request.currentRequest.abort(),p.events.trigger("pre-search",p.currentSearchTerm);var n=u.urls.construct.address.searchUrl(),s=u.urls.construct.address.searchData(p);p.lastSearchTerm=p.currentSearchTerm,p.result.hide(),p.searchSpinner.hide(),p.searchSpinner.show(),p.request.send(n,"POST",p.picklist.show,s)}else p.lastSearchTerm!==p.currentSearchTerm&&p.picklist.hide()}else p.picklist.keyup(t)},p.setCountryList=function(){p.countryList=p.elements.countryList,p.countryList||p.createCountryDropdown()},p.canSearch=function(){return p.enabled&&""!==p.currentSearchTerm&&p.lastSearchTerm!==p.currentSearchTerm&&p.countryList.value!==r&&""!==p.countryList.value&&!0===p.hasSearchInputBeenReset},p.checkTab=function(e){var t=e||i.event;9!==(t=t.which||t.keyCode)||p.picklist.keyup(t)},p.createCountryDropdown=function(){p.countryList={}},p.format=function(e){p.events.trigger("pre-formatting-search",e),p.searchSpinner.hide(),p.currentFormatUrl=e,p.request.send(p.currentFormatUrl,"GET",p.result.show)},p.picklist={size:0,maxSize:25,show:function(e){p.picklist.items=e.result.suggestions,p.picklist.currentItem=null,p.picklist.size=p.picklist.items.length,p.picklist.list=p.picklist.list||p.picklist.createList(),p.picklist.list.innerHTML="",p.picklist.resetTabCount(),p.searchSpinner.hide(),p.allowUseAddressEntered&&(p.picklist.useAddressEntered.element=p.picklist.useAddressEntered.element||p.picklist.useAddressEntered.create()),0<p.picklist.size&&(p.events.trigger("pre-picklist-create",p.picklist.items),p.picklist.items.forEach(function(e){var t=p.picklist.createListItem(e);p.picklist.list.appendChild(t),p.picklist.listen(t)}),p.events.trigger("post-picklist-create"))},hide:function(){p.picklist.currentItem=null,p.picklist.useAddressEntered.destroy(),p.picklist.list&&(p.input.parentNode.removeChild(p.picklist.container),p.picklist.list=r)},useAddressEntered:{create:function(){var e={text:u.defaults.useAddressEnteredText,format:""},t=p.picklist.createListItem(e);return t.classList.add("use-address-entered"),p.picklist.list.parentNode.insertBefore(t,p.picklist.list.nextSibling),t.addEventListener("click",p.picklist.useAddressEntered.click),t},destroy:function(){p.picklist.useAddressEntered.element&&(p.picklist.list.parentNode.removeChild(p.picklist.useAddressEntered.element),p.picklist.useAddressEntered.element=r)},click:function(){var e={result:{address:{address_line_1:"",address_line_2:"",address_line_3:"",locality:"",region:"",postal_code:"",country:""}}};if(p.currentSearchTerm){var t=p.currentSearchTerm.split(",");t[0]&&(e.result.address.address_line_1=t[0]),t[1]&&(e.result.address.address_line_2=t[1]),t[2]&&(e.result.address.address_line_3=t[2]);for(var r=3;r<t.length;r++)e.result.address.address_line_3+=t[r]}p.result.show(e),p.result.updateHeading(p.formattedAddressContainer.manualHeadingText)},formatManualAddressLine:function(e,t){var r={};return r[u.defaults.addressLineLabels[t]]=e[t]||"",r}},createList:function(){var e=l.createElement("div");e.classList.add("address-picklist-container"),p.input.parentNode.insertBefore(e,p.input.nextSibling),p.picklist.container=e;var t=l.createElement("div");return t.classList.add("address-picklist"),e.appendChild(t),t.addEventListener("keydown",p.picklist.enter),t},createListItem:function(e){var t=l.createElement("div");return t.innerHTML=p.picklist.addMatchingEmphasis(e),t.setAttribute("format",e.format),t},tabCount:-1,resetTabCount:function(){p.picklist.tabCount=-1},keyup:function(e){if(p.picklist.list)if(13!==e&&9!==e){var t,r,n=p.picklist.list.querySelectorAll("div");if(0!==n.length){38===e?p.picklist.tabCount--:p.picklist.tabCount++,p.picklist.tabCount<0&&(p.picklist.tabCount=n.length-1,r=!0),p.picklist.tabCount>n.length-1&&(t=!(p.picklist.tabCount=0));var s=n[p.picklist.tabCount],i=p.picklist.list.querySelector(".selected");i&&i.classList.remove("selected"),s.classList.add("selected"),p.picklist.currentItem=s;var a=p.picklist.list.offsetTop,d=p.picklist.list.offsetTop+p.picklist.list.offsetHeight,l=p.picklist.list.scrollTop,u=s.offsetTop,o=s.offsetTop+s.offsetHeight,c=s.offsetHeight;t?p.picklist.list.scrollTop=0:r?p.picklist.list.scrollTop=999:d<o+c?p.picklist.list.scrollTop=l+c:u-c-a<l&&(p.picklist.list.scrollTop=l-c)}}else p.picklist.checkEnter()},addMatchingEmphasis:function(e){for(var t=e.matched||[],r=e.text,n=0;n<t.length;n++){var s="<b>"+r.substring(t[n][0],t[n][1])+"</b>";r=r.substring(0,t[n][0])+s+r.substring(t[n][1])}return r},listen:function(e){e.addEventListener("click",p.picklist.pick.bind(null,e))},checkEnter:function(){var e;1===p.picklist.size?e=p.picklist.list.querySelectorAll("div")[0]:p.picklist.currentItem&&(e=p.picklist.currentItem),e&&p.picklist.pick(e)},pick:function(e){p.events.trigger("post-picklist-selection",e),p.format(e.getAttribute("format"))}},p.result={show:function(e){if(p.searchSpinner.hide(),p.picklist.hide(),p.input.value="",e.result.address){for(var t in p.result.formattedAddressContainer=p.elements.formattedAddressContainer,!p.result.formattedAddressContainer&&p.result.generateAddressLineRequired&&p.result.createFormattedAddressContainer(),p.result.updateAddressLine("address_line_1",e.result.address.address_line_1,"address-line-input"),p.result.updateAddressLine("address_line_2",e.result.address.address_line_2,"address-line-input"),p.result.updateAddressLine("address_line_3",e.result.address.address_line_3,"address-line-input"),p.result.updateAddressLine("locality",e.result.address.locality,"address-line-input"),p.result.updateAddressLine("region",e.result.address.region,"address-line-input"),p.result.updateAddressLine("postal_code",e.result.address.postal_code,"address-line-input"),p.result.updateAddressLine("country",e.result.address.country,"address-line-input"),e.result.components&&(e.result.components.building&&p.result.updateAddressLine("building_number",e.result.components.building.building_number,"address-line-input"),e.result.components.street&&p.result.updateAddressLine("street",e.result.components.street.full_name,"address-line-input"),e.result.components.sub_building&&e.result.components.sub_building.door&&p.result.updateAddressLine("sub_building",e.result.components.sub_building.door.full_name,"address-line-input")),p.result.hideSearchInputs(),p.result.createSearchAgainLink(),p.elements)if(p.elements.hasOwnProperty(t)&&"input"!==t&&p.elements[t]===p.elements.input){p.hasSearchInputBeenReset=!1;break}}p.events.trigger("post-formatting-search",e)},hide:function(){for(var e in p.result.formattedAddressContainer&&(p.input.parentNode.removeChild(p.result.formattedAddressContainer),p.result.formattedAddressContainer=r),p.searchAgain.link&&(p.searchAgain.link.parentNode.removeChild(p.searchAgain.link),p.searchAgain.link=r),p.elements)if(p.elements.hasOwnProperty(e))for(var t=0;t<u.defaults.addressLineLabels.length;t++){if(u.defaults.addressLineLabels[t]===e&&p.elements[e]!==p.elements.input){p.elements[e].value="";break}}},createFormattedAddressContainer:function(){var e=l.createElement("div");e.classList.add("formatted-address"),p.input.parentNode.insertBefore(e,p.input.nextSibling),p.result.formattedAddressContainer=e},createHeading:function(){if(p.formattedAddressContainer.showHeading){var e=l.createElement(p.formattedAddressContainer.headingType);e.innerHTML=p.formattedAddressContainer.validatedHeadingText,p.result.formattedAddressContainer.appendChild(e)}},updateHeading:function(e){p.formattedAddressContainer.showHeading&&(p.result.formattedAddressContainer.querySelector(p.formattedAddressContainer.headingType).innerHTML=e)},updateAddressLine:function(e,t,r){if(p.elements[e]){var n=p.elements[e];p.result.updateLabel(e);var s=t;n.value&&s&&(s=", "+s),"INPUT"===n.nodeName||"TEXTAREA"===n.nodeName||"SELECT"===n.nodeName?n.value+=s:n.innerText+=s,p.result.lastAddressField=n}},updateLabel:function(e){var t=e,r=p.language.toLowerCase(),n=p.currentCountryCode.toLowerCase(),s=u.translations;if(s)try{var i=s[r][n][e];if(i){t=i;for(var a=l.getElementsByTagName("label"),d=0;d<a.length;d++)a[d].htmlFor===e&&(a[d].innerHTML=i)}}catch(e){}return t},createSearchAgainLink:function(){if(p.searchAgain.visible){var e=l.createElement("a");e.setAttribute("href","#"),e.classList.add("search-again-link"),e.innerHTML=p.searchAgain.text,e.addEventListener("click",p.reset),p.searchAgain.link=e,p.result.formattedAddressContainer?p.result.formattedAddressContainer.appendChild(e):p.result.lastAddressField.parentNode.insertBefore(e,p.result.lastAddressField.nextSibling)}},renderInputList:function(e){if(0<e.length)for(var t=0;t<e.length;t++)p.result.formattedAddressContainer.appendChild(e[t])},hideSearchInputs:function(){p.toggleVisibility(p.input.parentNode)}},p.toggleVisibility=function(e){for(var t=(e=e||l).querySelectorAll(".toggle"),r=0;r<t.length;r++)t[r].classList.contains("hidden")?t[r].classList.remove("hidden"):t[r].classList.add("hidden")},p.searchSpinner={show:function(){if(p.useSpinner){var e=l.createElement("div");e.classList.add("loader"),e.classList.add("loader-inline");var t=l.createElement("div");t.classList.add("spinner"),e.appendChild(t),p.input.parentNode.insertBefore(e,p.input.nextSibling)}},hide:function(){if(p.useSpinner){var e=p.input.parentNode.querySelector(".loader-inline");e&&p.input.parentNode.removeChild(e)}}},p.reset=function(e){e&&e.preventDefault(),p.enabled=!0,p.result.hide(),p.input.value="",p.hasSearchInputBeenReset=!0,p.toggleVisibility(p.input.parentNode),p.input.focus(),p.events.trigger("post-reset")},p.handleError={badRequest:function(e){p.enabled=!1,p.handleError.showSubmitButton(),p.events.trigger("request-error-400",e)},unauthorized:function(e){p.enabled=!1,p.handleError.showSubmitButton(),p.events.trigger("request-error-401",e)},forbidden:function(e){p.enabled=!1,p.handleError.showSubmitButton(),p.events.trigger("request-error-403",e)},notFound:function(e){p.enabled=!1,p.handleError.showSubmitButton(),p.events.trigger("request-error-404",e)},showSubmitButton:function(){var e=l.createElement("button");e.innerText="Submit",p.input.parentNode.insertBefore(e,p.input.nextSibling),e.addEventListener("click",function(){p.picklist.useAddressEntered.click(),p.input.parentNode.removeChild(e)})}},p.request={currentRequest:null,send:function(e,t,r,n){p.request.currentRequest=new XMLHttpRequest,p.request.currentRequest.open(t,e,!0),p.request.currentRequest.timeout=5e3,p.request.currentRequest.setRequestHeader("auth-token",p.token),p.request.currentRequest.setRequestHeader("Content-Type","application/json"),p.request.currentRequest.setRequestHeader("Accept","application/json"),p.request.currentRequest.setRequestHeader("Add-Components","true"),p.request.currentRequest.onload=function(e){if(200<=p.request.currentRequest.status&&p.request.currentRequest.status<400){var t=JSON.parse(p.request.currentRequest.responseText);p.request.latestResult=t,r(t)}else p.request.latestResult={},p.searchSpinner.hide(),p.events.trigger("request-error",e),400===p.request.currentRequest.status?p.handleError.badRequest(e):401===p.request.currentRequest.status?p.handleError.unauthorized(e):403===p.request.currentRequest.status?p.handleError.forbidden(e):404===p.request.currentRequest.status&&p.handleError.notFound(e)},p.request.currentRequest.onerror=function(e){p.searchSpinner.hide(),p.events.trigger("request-error",e)},p.request.currentRequest.ontimeout=function(e){p.searchSpinner.hide(),p.events.trigger("request-timeout",e)},p.request.currentRequest.send(n)}},p.init(),p}}(window,window.document);