{"version":3,"sources":["js-institute.js"],"names":["xhr","cardsHolder","document","querySelector","loadSpinner","loadMoreContainer","elErrorNoResults","elErrorBadRequest","sortNumber","urls","next","all","templateObject","heading","element","classList","contentKey","cards","card","children","attributes","attr","noLinkCard","ajax","get","url","options","length","Error","XMLHttpRequest","open","setRequestHeader","onreadystatechange","readyState","responseText","JSON","parse","status","success","console","error","statusText","send","data","createTemplateElement","obj","doctorObj","arguments","undefined","createElement","checkAndSetParameter","param","func","_len","args","Array","_key","apply","concat","cssClassList","forEach","cssClass","add","key","innerHTML","_ref","contentValue","checkForAltAttr","value","hideTemplateElement","setAttribute","kid","appendChild","GetSectionHolder","section","getLastChildOfClass","classname","slice","call","querySelectorAll","pop","lastHeading","sectionHolder","Group","newCardSection","Append","el","initializeDoctors","doctors","holder","doc","setRepeatParameters","cardTemplate","HideLinks","loadMoreHandler","dataNextUrl","NextPageUrl","dataAllUrl","AllUrl","stopLoadSpinner","Content","remove","hasNoResults","Doctors","urlNext","urlAll","setNextUrl","getDoctors","CardCountTotal","e","loadMoreBtnHandler","preventDefault","loadType","target","getAttribute","err","initializeFirstLoad","loadBtns","i","addEventListener","initializeBtnListener"],"mappings":"AAAA,cAAa,WAEX,IAgJMA,EAhJFC,EAAcC,SAASC,cAAc,8BACrCC,EAAcF,SAASC,cAAc,2BACrCE,EAAoBH,SAASC,cAAc,6BAC3CG,EAAmBJ,SAASC,cAAc,+BAC1CI,EAAoBL,SAASC,cAAc,gCAC3CK,EAAaN,SAASC,cAAc,6BACpCM,EAAO,CACTC,KAAM,GACNC,IAAK,IAGHC,EAAiB,CACnBC,QAAS,CACPC,QAAS,MACTC,UAAW,CAAC,yBACZC,WAAY,SAGdC,MAAO,CACLH,QAAS,MACTC,UAAW,CAAC,iBAGdG,KAAM,CACJJ,QAAS,MACTC,UAAW,CAAC,eACZI,SAAU,CACV,CACEL,QAAS,IACTC,UAAW,CAAC,uBACZK,WAAY,CACZ,CACEC,KAAM,OACNL,WAAY,eAGdG,SAAU,CACV,CACEL,QAAS,MACTC,UAAW,GACXK,WAAY,CACZ,CACEC,KAAM,MACNL,WAAY,YACd,CACEK,KAAM,MACNL,WAAY,UAGhB,CACEF,QAAS,MACTC,UAAW,CAAC,2BACZC,WAAY,qBAGhB,CACEF,QAAS,MACTC,UAAW,CAAC,qBACZI,SAAU,CACV,CACEL,QAAS,IACTC,UAAW,CAAC,qBACZC,WAAY,OACZI,WAAY,CAAC,CACXC,KAAM,OACNL,WAAY,gBAEhB,CACEF,QAAS,MACTC,UAAW,CAAC,sBACZC,WAAY,SACd,CACEF,QAAS,IACTC,UAAW,CAAC,0BACZC,WAAY,wBACZG,SAAU,CAAC,CACTL,QAAS,IACTC,UAAW,CAAC,+BACZK,WAAY,CAAC,CACXC,KAAM,OACNL,WAAY,cACd,CACEK,KAAM,WACNL,WAAY,gBAEdA,WAAY,sBAOpBM,WAAY,CACVR,QAAS,MACTC,UAAW,CAAC,eACZI,SAAU,CACV,CACEL,QAAS,OACTC,UAAW,CAAC,uBACZK,WAAY,GACZD,SAAU,CACV,CACEL,QAAS,MACTC,UAAW,GACXK,WAAY,CACZ,CACEC,KAAM,MACNL,WAAY,YACd,CACEK,KAAM,MACNL,WAAY,YAKlB,CACEF,QAAS,MACTC,UAAW,CAAC,qBACZI,SAAU,CACV,CACEL,QAAS,OACTC,UAAW,CAAC,QACZC,WAAY,OACZI,WAAY,IACd,CACEN,QAAS,MACTC,UAAW,CAAC,sBACZC,WAAY,SACd,CACEF,QAAS,IACTC,UAAW,CAAC,0BACZC,WAAY,wBACZG,SAAU,CAAC,CACTL,QAAS,OACTC,UAAW,CAAC,+BACZK,WAAY,WAQlBG,GACEvB,OAAM,EA2BH,CACLwB,IA1BF,SAAaC,EAAKC,GAChB,IAAKD,GAAsB,IAAfA,EAAIE,OACd,MAAM,IAAIC,MAAM,gBAGlB5B,EAAM,IAAI6B,gBACNC,KAAK,MAAOL,GAChBzB,EAAI+B,iBAAiB,eAAgB,oDAErC/B,EAAIgC,mBAAqB,WACvB,GAAuB,IAAnBhC,EAAIiC,WAAkB,CACxB,IAAIC,EAAeC,KAAKC,MAAMpC,EAAIkC,cACf,MAAflC,EAAIqC,OACNX,EAAQY,QAAQJ,IAEhBK,QAAQC,MAAM,mEACdxC,EAAIqC,OAAS,kCACbrC,EAAIyC,YACJf,EAAQc,MAAMN,MAIpBlC,EAAI0C,KAAKhB,EAAQiB,SAQrB,SAASC,EAAsBC,EAA/B,GAAqC,IAAIC,EAA+B,EAAnBC,UAAUpB,aAA+BqB,IAA9F,EAAA,EAAyH,GACnHlC,EAAUZ,SAAS+C,cAAcJ,EAAI/B,SAGzC,SAASoC,EAAqBC,EAAOC,GACnC,GAAID,EAAO,CAAC,IAAK,IAAIE,EAAON,UAAUpB,OAAQ2B,EAAOC,MAAa,EAAPF,EAAWA,EAAO,EAAI,GAAIG,EAAO,EAAGA,EAAOH,EAAMG,IAASF,EAAKE,EAAO,GAAKT,UAAUS,GAC9IJ,EAAKK,WAAMT,EAAW,CAACG,GAAOO,OAAOJ,KAgDzC,OARAJ,EAAqBL,EAAI9B,UApCzB,SAAqB4C,GACnBA,EAAaC,QAAQ,SAAUC,GAC7B/C,EAAQC,UAAU+C,IAAID,OAoC1BX,EAAqBL,EAAI7B,WAhCzB,SAAoB+C,GAClBjD,EAAQkD,UAAYlB,EAAUiB,KAiChCb,EAAqBL,EAAIzB,WA9BzB,SAAuBA,GAarBA,EAAWwC,QAAQ,SAAUK,GAAO,IAAI5C,EAAO4C,EAAK5C,KAAKL,EAAaiD,EAAKjD,WACrEkD,EALN,SAAyB7C,EAAM6C,GAC7B,MAAgB,QAAT7C,EAAiB6C,EAAe,YAAcA,EAIlCC,CAAgB9C,EAAMyB,EAAU9B,KAZrD,SAA6BK,EAA7B,GAAoC,IAAI+C,IAA2B,EAAnBrB,UAAUpB,aAA+BqB,IAAzF,IAAA,EAIE,MAHa,aAAT3B,IAAkC,IAAV+C,GAA6B,UAAVA,GAC7CtD,EAAQC,UAAU+C,IAAI,oBAEhBM,EASHC,CAAoBhD,EAAM6C,IAC7BpD,EAAQwD,aAAajD,EAAM6C,OAgBjChB,EAAqBL,EAAI1B,SAXzB,SAAuBA,GACrBA,EAASyC,QAAQ,SAAUW,GAAM,OAAOzD,EAAQ0D,YAAY5B,EAAsB2B,EAAKzB,QAYlFhC,EAGT,IAAI2D,EAAmB,SAA0BC,GAE/C,SAASC,EAAoBC,GAC3B,MAAO,GAAGC,MAAMC,KAAK7E,EAAY8E,iBAAiBH,IAAYI,MAmBhE,IAJMC,EAIFC,GAJED,EAAcN,EAAoB,4BACfM,EAAYjB,YAAcU,EAAQS,MAZlDR,EAAoB,iBAG7B,WACE1E,EAAYuE,YAAY5B,EAAsBhC,EAAeC,QAAS6D,IACtE,IAAIzD,EAAQ2B,EAAsBhC,EAAeK,OAEjD,OADAhB,EAAYuE,YAAYvD,GACjBA,EAQ4BmE,GAErC,MAAO,CACLC,OAAQ,SAAgBC,GACtBJ,EAAcV,YAAYc,MAKhC,SAASC,EAAkB5C,EAAM6C,EAASC,GAcxCD,EAAQ5B,QAAQ,SAAU8B,GACxBA,EAZF,SAA6BA,GAQ3B,MAPuB,CAAC,eAAgB,mBACvB9B,QAAQ,SAAUT,GAC7BR,EAAKQ,KACPuC,EAAIvC,GAASR,EAAKQ,MAIfuC,EAIDC,CAAoBD,GAC1B,IAAIE,EAAejD,EAAKkD,UAAYjF,EAAeU,WAAaV,EAAeM,KAC/EuE,EAAOJ,OAAOzC,EAAsBgD,EAAcF,MAsBtD,SAASI,EAAgBnD,GAEvB,IAAIoD,EAAcpD,EAAKqD,YACnBC,EAAatD,EAAKuD,OAetBC,IA/BF,SAAsBxD,GACpB,QAAKA,EAAKyD,SAAWzD,EAAKyD,QAAQzE,QAAU,KAC1CrB,EAAiBS,UAAUsF,OAAO,oBAC3B,GA8BLC,CAAa3D,KAIjBA,EAAKyD,QAAQxC,QAAQ,SAAUc,GAC7Ba,EAAkB5C,EAAM+B,EAAQ6B,QAAS9B,EAAiBC,MAnBnDqB,GAAoC,EAArBA,EAAYpE,QAXtC,SAAoB6E,EAASC,GAC3BhG,EAAKC,KAAO8F,EACZ/F,EAAKE,IAAM8F,EAcPC,CAAWX,EAAaE,GACxB5F,EAAkBU,UAAUsF,OAAO,oBAEnChG,EAAkBU,UAAU+C,IAAI,oBAqBtC,SAASqC,IACP/F,EAAYW,UAAU+C,IAAI,mBAG5B,SAAS6C,EAAWlF,GAxDlBnB,EAAiBS,UAAU+C,IAAI,mBAC/BvD,EAAkBQ,UAAU+C,IAAI,mBA+ChC1D,EAAYW,UAAUsF,OAAO,mBAC7BhG,EAAkBU,UAAU+C,IAAI,mBAWhC,IACEvC,EAAKC,IAAIC,EAAK,CACZa,QAAS,SAAiBK,GACxBlC,EAAKC,KAAOiC,EAAKqD,YACjBF,EAAgBnD,GAChBwD,IACIxD,EAAKiE,iBACPpG,EAAWwD,UAAYrB,EAAKiE,iBAGhCpE,MAAO,WACL2D,OAGJ,MAAOU,GAIP,MAHAtE,QAAQC,MAAMqE,GACdV,IACA5F,EAAkBQ,UAAUsF,OAAO,mBAC7BQ,GAwBV,SAASC,EAAmBD,GAC1BA,EAAEE,iBACF,IAAIC,EAAWH,EAAEI,OAAOC,aAAa,kBACrCP,EAAWlG,EAAKuG,KAlBlB,WACE,IAEEL,EADU1G,EAAYiH,aAAa,aAEnC,MAAOC,GACP5E,QAAQC,MAAM,8HAGd2E,IAsBFC,GATF,WAEE,IADA,IAAIC,EAAWhH,EAAkB0E,iBAAiB,UACzCuC,EAAI,EAAGA,EAAID,EAAS1F,OAAQ2F,IAAK,CAC9BD,EAASC,GACfC,iBAAiB,QAAST,IAMhCU,GAtZS","file":"js-institute.js","sourcesContent":["'use strict';(function Institute() {\n // Global selectors\n var cardsHolder = document.querySelector('[rel=\"js-cards-container\"]');\n var loadSpinner = document.querySelector('[rel=\"js-load-spinner\"]');\n var loadMoreContainer = document.querySelector('[rel=\"js-load-container\"]');\n var elErrorNoResults = document.querySelector('[rel=\"js-error-no-results\"]');\n var elErrorBadRequest = document.querySelector('[rel=\"js-error-bad-request\"]');\n var sortNumber = document.querySelector('[rel=\"js-CardCountTotal\"]');\n var urls = {\n next: '',\n all: '' };\n\n\n var templateObject = {\n heading: {\n element: 'div',\n classList: ['doctor-cards__heading'],\n contentKey: 'Group' },\n\n\n cards: {\n element: 'div',\n classList: ['doctor-cards'] },\n\n\n card: {\n element: 'div',\n classList: ['doctor-card'],\n children: [\n {\n element: 'a',\n classList: ['doctor-card__anchor'],\n attributes: [\n {\n attr: 'href',\n contentKey: 'DetailHref' }],\n\n\n children: [\n {\n element: 'img',\n classList: [],\n attributes: [\n {\n attr: 'src',\n contentKey: 'ImageSrc' },\n {\n attr: 'alt',\n contentKey: 'Name' }] },\n\n\n {\n element: 'div',\n classList: ['doctor-card__anchor-btn'],\n contentKey: 'ViewProfileText' }] },\n\n\n {\n element: 'div',\n classList: ['doctor-card__text'],\n children: [\n {\n element: 'a',\n classList: ['doctor-card__name'],\n contentKey: 'Name',\n attributes: [{\n attr: 'href',\n contentKey: 'DetailHref' }] },\n\n {\n element: 'div',\n classList: ['doctor-card__title'],\n contentKey: 'Title' },\n {\n element: 'p',\n classList: ['doctor-card__statement'],\n contentKey: 'ProfessionalStatement',\n children: [{\n element: 'a',\n classList: ['doctor-card__statement-link'],\n attributes: [{\n attr: 'href',\n contentKey: 'DetailHref' },\n {\n attr: 'doNotAdd',\n contentKey: 'HasReadMore' }],\n\n contentKey: 'ReadMoreText' }] }] }] },\n\n\n\n\n\n\n noLinkCard: {\n element: 'div',\n classList: ['doctor-card'],\n children: [\n {\n element: 'span',\n classList: ['doctor-card__anchor'],\n attributes: [],\n children: [\n {\n element: 'img',\n classList: [],\n attributes: [\n {\n attr: 'src',\n contentKey: 'ImageSrc' },\n {\n attr: 'alt',\n contentKey: 'Name' }] }] },\n\n\n\n\n {\n element: 'div',\n classList: ['doctor-card__text'],\n children: [\n {\n element: 'span',\n classList: ['u-h3'],\n contentKey: 'Name',\n attributes: [] },\n {\n element: 'div',\n classList: ['doctor-card__title'],\n contentKey: 'Title' },\n {\n element: 'p',\n classList: ['doctor-card__statement'],\n contentKey: 'ProfessionalStatement',\n children: [{\n element: 'span',\n classList: ['doctor-card__statement-link'],\n attributes: [] }] }] }] } };\n\n\n\n\n\n\n\n var ajax = function Ajax() {\n var xhr = void 0;\n\n function get(url, options) {\n if (!url || url.length === 0) {\n throw new Error('Bad Get URL');\n }\n\n xhr = new XMLHttpRequest();\n xhr.open('GET', url);\n xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');\n\n xhr.onreadystatechange = function getStateChangeListener() {\n if (xhr.readyState === 4) {\n var responseText = JSON.parse(xhr.responseText);\n if (xhr.status === 200) {\n options.success(responseText);\n } else {\n console.error('An error occurred during your request!\\n status: ' +\n xhr.status + '\\n status text: ' +\n xhr.statusText);\n options.error(responseText);\n }\n }\n };\n xhr.send(options.data);\n }\n\n return {\n get: get };\n\n }();\n\n function createTemplateElement(obj) {var doctorObj = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var element = document.createElement(obj.element);\n\n // internal\n function checkAndSetParameter(param, func) {\n if (param) {for (var _len = arguments.length, args = Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {args[_key - 2] = arguments[_key];}\n func.apply(undefined, [param].concat(args));\n }\n }\n\n function setCssClass(cssClassList) {\n cssClassList.forEach(function (cssClass) {\n element.classList.add(cssClass);\n });\n }\n\n function setContent(key) {\n element.innerHTML = doctorObj[key];\n }\n\n function setAttributes(attributes) {\n // internal\n function hideTemplateElement(attr) {var value = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n if (attr === 'doNotAdd' && (value === false || value === 'false')) {\n element.classList.add('u-display--none');\n }\n return !value;\n }\n // internal\n function checkForAltAttr(attr, contentValue) {\n return attr !== 'alt' ? contentValue : 'Photo of ' + contentValue;\n }\n // action\n attributes.forEach(function (_ref) {var attr = _ref.attr,contentKey = _ref.contentKey;\n var contentValue = checkForAltAttr(attr, doctorObj[contentKey]);\n if (!hideTemplateElement(attr, contentValue)) {\n element.setAttribute(attr, contentValue);\n }\n });\n }\n\n function birthChildren(children) {\n children.forEach(function (kid) {return element.appendChild(createTemplateElement(kid, doctorObj));});\n }\n\n // Sets Css classes\n checkAndSetParameter(obj.classList, setCssClass);\n // Copies content from data to innerHTML of element\n checkAndSetParameter(obj.contentKey, setContent);\n // Sets html attributes (src, href....)\n checkAndSetParameter(obj.attributes, setAttributes);\n // loops child elemnts in template to create html structure\n checkAndSetParameter(obj.children, birthChildren);\n\n return element;\n }\n\n var GetSectionHolder = function getSectionHolder(section) {\n // internal\n function getLastChildOfClass(classname) {\n return [].slice.call(cardsHolder.querySelectorAll(classname)).pop();\n }\n // internal\n function lastCardSection() {\n return getLastChildOfClass('.doctor-cards');\n }\n // internal\n function newCardSection() {\n cardsHolder.appendChild(createTemplateElement(templateObject.heading, section));\n var cards = createTemplateElement(templateObject.cards);\n cardsHolder.appendChild(cards);\n return cards;\n }\n // internal\n function isNewSection() {\n var lastHeading = getLastChildOfClass('.doctor-cards__heading');\n return !lastHeading || lastHeading.innerHTML !== section.Group;\n }\n // action\n var sectionHolder = isNewSection() ? newCardSection() : lastCardSection();\n\n return {\n Append: function Append(el) {\n sectionHolder.appendChild(el);\n } };\n\n };\n\n function initializeDoctors(data, doctors, holder) {\n /* takes global parameters and applies them to individual\n cards (reused button text) */\n function setRepeatParameters(doc) {\n var repeatParameters = ['ReadMoreText', 'ViewProfileText'];\n repeatParameters.forEach(function (param) {\n if (data[param]) {\n doc[param] = data[param];\n }\n });\n\n return doc;\n }\n // action\n doctors.forEach(function (doc) {\n doc = setRepeatParameters(doc, data);\n var cardTemplate = data.HideLinks ? templateObject.noLinkCard : templateObject.card;\n holder.Append(createTemplateElement(cardTemplate, doc));\n });\n }\n\n function hideErrors() {\n elErrorNoResults.classList.add('u-display--none');\n elErrorBadRequest.classList.add('u-display--none');\n }\n\n function hasNoResults(data) {\n if (!data.Content || data.Content.length <= 0) {\n elErrorNoResults.classList.remove('u-display--none');\n return true;\n }\n return false;\n }\n\n function setNextUrl(urlNext, urlAll) {\n urls.next = urlNext;\n urls.all = urlAll;\n }\n\n function loadMoreHandler(data) {\n // internal\n var dataNextUrl = data.NextPageUrl;\n var dataAllUrl = data.AllUrl;\n\n function hasNextPageUrl() {\n return dataNextUrl && dataNextUrl.length > 0;\n }\n // internal\n function toggleLoadMore() {\n if (hasNextPageUrl()) {\n setNextUrl(dataNextUrl, dataAllUrl);\n loadMoreContainer.classList.remove('u-display--none');\n } else {\n loadMoreContainer.classList.add('u-display--none');\n }\n }\n // action\n stopLoadSpinner();\n\n if (hasNoResults(data)) {\n return;\n }\n\n data.Content.forEach(function (section) {\n initializeDoctors(data, section.Doctors, GetSectionHolder(section));\n });\n toggleLoadMore();\n }\n\n function startLoadSpinner() {\n loadSpinner.classList.remove('u-display--none');\n loadMoreContainer.classList.add('u-display--none');\n }\n\n function stopLoadSpinner() {\n loadSpinner.classList.add('u-display--none');\n }\n\n function getDoctors(url) {\n hideErrors();\n startLoadSpinner();\n\n try {\n ajax.get(url, {\n success: function success(data) {\n urls.next = data.NextPageUrl;\n loadMoreHandler(data);\n stopLoadSpinner();\n if (data.CardCountTotal) {\n sortNumber.innerHTML = data.CardCountTotal;\n }\n },\n error: function error(data) {\n stopLoadSpinner();\n } });\n\n } catch (e) {\n console.error(e);\n stopLoadSpinner();\n elErrorBadRequest.classList.remove('u-display--none');\n throw e;\n }\n // //TODO: REMOVE FOR PROD !!!!!!!!!!\n // function tempStaticLoader(){\n // loadMoreHandler(MocData.firstPage)\n // }\n // setTimeout(tempStaticLoader, 2000);\n }\n\n function initializeFirstLoad() {\n try {\n var url = cardsHolder.getAttribute('data-url');\n getDoctors(url);\n } catch (err) {\n console.error('OH, NO! Possible missing target elements:\\n [rel=\"js-cards-container] | [rel=\"js-load-container\"]\\n causing: ' +\n\n\n err);\n //// hideErrors();\n }\n //remove next line for prod\n //loadMoreHandler(MocData.firstPage)\n }\n\n function loadMoreBtnHandler(e) {\n e.preventDefault();\n var loadType = e.target.getAttribute('data-load-type');\n getDoctors(urls[loadType]);\n }\n\n function initializeBtnListener() {\n var loadBtns = loadMoreContainer.querySelectorAll('button');\n for (var i = 0; i < loadBtns.length; i++) {\n var btn = loadBtns[i];\n btn.addEventListener('click', loadMoreBtnHandler);\n }\n }\n\n function Init() {\n initializeFirstLoad();\n initializeBtnListener();\n }\n\n Init();\n\n})();"]}