This repository was archived by the owner on Feb 22, 2022. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 48
/
Copy pathcontact-data-services.min.js
4 lines (3 loc) · 15.4 KB
/
contact-data-services.min.js
1
2
3
4
/*! contact-data-services.js | https://github.com/experiandataquality/GlobalIntuitive | Apache-2.0
* Experian Data Quality | https://github.com/experiandataquality */
!function(s,a,r){"use strict";var d=s.ContactDataServices=s.ContactDataServices||{};d.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"},useAddressEnteredText:"<em>Enter address manually</em>",useSpinner:!1,language:"en",addressLineLabels:["addressLine1","addressLine2","addressLine3","locality","province","postalCode","country"]},d.mergeDefaultOptions=function(e){var t=e||{};return t.enabled=!0,t.language=t.language||d.defaults.language,t.useSpinner=t.useSpinner||d.defaults.useSpinner,t.lastSearchTerm="",t.currentSearchTerm="",t.lastCountryCode="",t.currentCountryCode="",t.currentSearchUrl="",t.currentFormatUrl="",t.applyFocus=void 0!==t.applyFocus?t.applyFocus:d.defaults.input.applyFocus,t.placeholderText=t.placeholderText||d.defaults.input.placeholderText,t.searchAgain=t.searchAgain||{},t.searchAgain.visible=void 0!==t.searchAgain.visible?t.searchAgain.visible:d.defaults.searchAgain.visible,t.searchAgain.text=t.searchAgain.text||d.defaults.searchAgain.text,t.formattedAddressContainer=t.formattedAddressContainer||d.defaults.formattedAddressContainer,t.formattedAddressContainer.showHeading=void 0!==t.formattedAddressContainer.showHeading?t.formattedAddressContainer.showHeading:d.defaults.formattedAddressContainer.showHeading,t.formattedAddressContainer.headingType=t.formattedAddressContainer.headingType||d.defaults.formattedAddressContainer.headingType,t.formattedAddressContainer.validatedHeadingText=t.formattedAddressContainer.validatedHeadingText||d.defaults.formattedAddressContainer.validatedHeadingText,t.formattedAddressContainer.manualHeadingText=t.formattedAddressContainer.manualHeadingText||d.defaults.formattedAddressContainer.manualHeadingText,t.elements=t.elements||{},t},d.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},d.translations={en:{gbr:{locality:"Town/City",province:"County",postalCode:"Post code"},usa:{locality:"City",province:"State",postalCode:"Zip code"}}},d.ua={banner:{show:function(e){var t=a.querySelector(".ua-banner");if(!t){var r=a.querySelector("body").firstChild;(t=a.createElement("div")).classList.add("ua-banner"),r.parentNode.insertBefore(t,r.nextSibling)}t.innerHTML=e},hide:function(){var e=a.querySelector(".ua-banner");e&&e.parentNode.removeChild(e)}}},d.urls={endpoint:"https://api.edq.com/capture/address/v2/search",construct:{address:{search:function(e){var t=d.urls.endpoint;return t+="?query="+encodeURIComponent(e.currentSearchTerm),t+="&country="+e.currentCountryCode,t+="&dataset="+e.currentDataSet,e.elements.location&&(t+="&location="+e.elements.location),t+="&take="+(e.maxSize||e.picklist.maxSize),t+="&auth-token="+e.token},format:function(e,t){return e+"&auth-token="+t.token}}},getToken:function(e){e.token||(e.token=d.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," "))}},d.address=function(e){var p=d.mergeDefaultOptions(e);return p.events=new d.eventFactory,p.init=function(){if(d.urls.getToken(p),!p.token)return p.enabled=!1,void d.ua.banner.show("<a href='https://github.com/experiandataquality/GlobalIntuitive#tokens'>Please provide a token for GlobalIntuitive.</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||s.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=d.urls.construct.address.search(p);p.lastSearchTerm=p.currentSearchTerm,p.result.hide(),p.searchSpinner.hide(),p.searchSpinner.show(),p.request.get(n,p.picklist.show)}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||s.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=d.urls.construct.address.format(e,p),p.request.get(p.currentFormatUrl,p.result.show)},p.picklist={size:0,maxSize:25,show:function(e){p.picklist.items=e.results,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.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={suggestion:d.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={address:[]};if(p.currentSearchTerm){var t=p.currentSearchTerm.split(",");if(0<t.length)for(var r=0;r<t.length;r++)e.address.push(p.picklist.useAddressEntered.formatManualAddressLine(t,r));var n=7-t.length;if(0<n)for(var s=7-n;s<7;s++)e.address.push(p.picklist.useAddressEntered.formatManualAddressLine([],s))}p.result.show(e),p.result.updateHeading(p.formattedAddressContainer.manualHeadingText)},formatManualAddressLine:function(e,t){var r={};return r[d.defaults.addressLineLabels[t]]=e[t]||"",r}},createList:function(){var e=a.createElement("div");e.classList.add("address-picklist-container"),p.input.parentNode.insertBefore(e,p.input.nextSibling),p.picklist.container=e;var t=a.createElement("div");return t.classList.add("address-picklist"),e.appendChild(t),t.addEventListener("keydown",p.picklist.enter),t},createListItem:function(e){var t=a.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,o=p.picklist.list.scrollTop,l=s.offsetTop,u=s.offsetTop+s.offsetHeight,c=s.offsetHeight;t?p.picklist.list.scrollTop=0:r?p.picklist.list.scrollTop=999:d<u+c?p.picklist.list.scrollTop=o+c:l-c-a<o&&(p.picklist.list.scrollTop=o-c)}}else p.picklist.checkEnter()},addMatchingEmphasis:function(e){for(var t=e.matched||[],r=e.suggestion,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.address&&0<e.address.length){p.result.calculateIfAddressLineGenerationRequired(),p.result.formattedAddressContainer=p.elements.formattedAddressContainer,!p.result.formattedAddressContainer&&p.result.generateAddressLineRequired&&p.result.createFormattedAddressContainer();for(var t=0;t<e.address.length;t++){var r=e.address[t];for(var n in r)r.hasOwnProperty(n)&&p.result.updateAddressLine(n,r,"address-line-input")}for(var s in p.result.hideSearchInputs(),p.result.createSearchAgainLink(),p.elements)if(p.elements.hasOwnProperty(s)&&"input"!==s&&p.elements[s]===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<d.defaults.addressLineLabels.length;t++){if(d.defaults.addressLineLabels[t]===e&&p.elements[e]!==p.elements.input){p.elements[e].value="";break}}},createFormattedAddressContainer:function(){var e=a.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=a.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)},calculateIfAddressLineGenerationRequired:function(){p.result.generateAddressLineRequired=!0;for(var e=0;e<d.defaults.addressLineLabels.length;e++){var t=d.defaults.addressLineLabels[e];if(p.elements[t]){p.result.generateAddressLineRequired=!1;break}}},updateAddressLine:function(e,t,r){if(p.elements[e]){var n=p.elements[e],s=t[e];n.value&&s&&(s=", "+s),"INPUT"===n.nodeName||"TEXTAREA"===n.nodeName||"SELECT"===n.nodeName?n.value+=s:n.innerText+=s,p.result.lastAddressField=n}else if(p.result.generateAddressLineRequired){var i=p.result.createAddressLine.label(e),a=p.result.createAddressLine.input(i,t[e],r);p.result.formattedAddressContainer.appendChild(a)}},createAddressLine:{input:function(e,t,r){var n=a.createElement("div");n.classList.add(r);var s=a.createElement("label");s.innerHTML=e.replace(/([A-Z])/g," $1").replace(/([0-9])/g," $1").replace(/^./,function(e){return e.toUpperCase()}),n.appendChild(s);var i=a.createElement("input");return i.setAttribute("type","text"),i.setAttribute("name",e),i.setAttribute("value",t),n.appendChild(i),n},label:function(e){var t=e,r=p.language.toLowerCase(),n=p.currentCountryCode.toLowerCase(),s=d.translations;if(s)try{var i=s[r][n][e];i&&(t=i)}catch(e){}return t}},createSearchAgainLink:function(){if(p.searchAgain.visible){var e=a.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||a).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=a.createElement("div");e.classList.add("loader"),e.classList.add("loader-inline");var t=a.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=a.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,get:function(e,r){p.request.currentRequest=new XMLHttpRequest,p.request.currentRequest.open("GET",e,!0),p.request.currentRequest.timeout=5e3,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()}},p.init(),p}}(window,window.document);