{"version":3,"sources":["Honeywell.ClientModel.LanguageSelector.ts"],"names":["setCookie","$","click","event","cookieDate","Date","setFullYear","getFullYear","cookieValue","target","attr","document","cookie","toUTCString","_this","this","camlAll","languageMapping","field","propertyName","getLanguageSelectorData","utils","getRootWebListData","GenericHandler","countryMapping","getCountrySelectorData","exports","getSiteUrl","siteUrl","variation","currentUrl","toString","indexOf","currentVariation","replace","RegExp","protocol","languageSelectorDataPromise","formatLanguageCountry","getCurrentUrl","languages","countries","terms","formatLanguage","raw","language","term","clickUrl","getLanguagesForCountry","country1","Honeywell_ClientModel_Functional_1","compose2","map","_","curry","filter","aLanguage","country","getLookupValue","formatCountry","country0","flag","location","populateCountryLanguageSelector","culture","Honeywell_ClientModel_Promise_1","waitForAll3","Honeywell_ClientModel_UserTerms_1","getHonUserTermsForGroup","group","spread","templatePromise","Honeywell_ClientModel_TemplateService_1","TemplateService","getTemplate","mobileTemplatePromise","model","template","templateMobile","html","languageSelectorHtml","catch","console","log","require","e","preventDefault","toggleClass","toggle","Honeywell_ClientModel_Events_1","spLoad","then","_spPageContextInfo","currentCultureName"],"mappings":"iRA8HA,SAASA,KACLC,EAAE,wCAAwCC,MAAM,SAACC,GAC7C,GAAIC,GAAa,GAAIC,KACrBD,GAAWE,YAAYF,EAAWG,cAAgB,GAClD,IAAIC,GAAcP,EAAEE,EAAMM,QAAQC,KAAK,OACvCC,UAASC,OAAS,sBAAsBJ,EAAW,YAAYJ,EAAWS,cAAa,YAnI/F,GAAAC,GAAAC,qDAeA,IAAIC,GAAU,oFAOVC,IACEC,MAAO,UAAWC,aAAc,YAChCD,MAAO,QAASC,aAAc,aAC9BD,MAAO,YAAaC,aAAc,cAClCD,MAAO,OAAQC,aAAc,SAI/BC,EAA0B,WAAM,MAAAC,GAAMC,mBAAmB,qBAAqB,GAAID,GAAME,eAAeN,IAAkBD,IAGzHQ,IACEN,MAAO,QAASC,aAAc,YAC9BD,MAAO,OAAQC,aAAc,SAC7BD,MAAO,UAAWC,aAAc,YAChCD,MAAO,OAAQC,aAAc,SAI/BM,EAAyB,WAAM,MAAAJ,GAAMC,mBAAmB,oBAAoB,GAAID,GAAME,eAAeC,IAAiBR,GAG7GU,GAAAC,WAAa,SAACC,EAAiBC,EAAmBC,GAC3D,GAAIA,EAAWC,WAAWC,QAAQJ,IAAY,EAAG,CAC7C,GAAIK,GAAmBH,EAAWC,WAAWG,QAAQ,GAAIC,QAAO,KAAKP,EAAO,KAAO,IAAIM,QAAQ,OAAQ,GACvG,OAAOJ,GAAWC,WAAWG,QAAQD,EAAkBJ,GAEvD,MAAOC,GAAWM,SAAW,KAAOR,EAAQM,QAAQ,cAAe,IAAM,IAAML,EAKvF,IAmCIQ,GAnCAC,EAAwB,SAACC,GACzB,MAAA,UAACC,EAAuBC,EAAsBC,GAE9C,GAAIZ,GAAaS,IAEbI,EAAiB,SAACf,GAAoB,MAAA,UAACgB,GACvC,OACIC,SAAUD,EAAIE,KAAOJ,EAAME,EAAIE,MAAQF,EAAIC,SAC3CE,SAAUrB,EAAAC,WAAWC,EAASgB,EAAIf,UAAWC,MAIjDkB,EAAyB,SAACC,GAC1B,MAAAC,GAAAC,SAASD,EAAAE,IAAIT,EAAeM,EAASrB,UACjCyB,EAAEC,MAAMD,EAAEE,QAAQF,EACd,SAACG,GAAgD,MAAAP,GAASQ,UAAYpC,EAAMqC,eAAeF,EAAUC,UACnG3C,KAEV6C,EAAgB,SAACC,GACjB,OACIH,QAASG,EAASd,KAAOJ,EAAMkB,EAASd,MAAQc,EAASH,QACzDI,KAAMD,EAASC,KACfrB,UAAWQ,EAAuBY,GAAUpB,IAIpD,OAAOU,GAAAE,IAAIO,GAAelB,KAK1BF,EAAgB,WAAM,MAAA5B,UAASmD,UAQ/BC,EAAkC,SAACC,GACnC3B,EAA8B4B,EAAAC,YAClB9C,IAA2BK,IAC3B0C,EAAAC,yBAA0BJ,QAASA,EAASK,MAAO,sBACrDC,OAAOhC,EAAsBC,GAEvC,IAAIgC,GAAkB,GAAIC,GAAAC,gBAAgB,6BAA6BC,cACnEC,EAAwB,GAAIH,GAAAC,gBAAgB,mCAAmCC,aAEnFT,GAAAC,YAAY7B,EAA6BkC,EAAiBI,GACrDL,OAAO,SAACM,EAAqCC,EAAeC,GACzD7E,EAAE,qBAAqB8E,KAAKD,EAAeF,GAC3C,IAAII,GAAuB/E,EAAE,kBAAkB8E,KAAKF,EAASD,GAE7D,OADA5E,KACOgF,IAERC,MAAMC,QAAQC,KAIzBC,IAAS,UAAW,WAChBnF,EAAE,qBAAqBC,MAAM,SAAAmF,GACzBA,EAAEC,iBACFrF,EAAEoF,EAAE5E,QAAQ8E,YAAY,UACxBtF,EAAE,kBAAkBuF,aAIvBnD,GACDoD,EAAAC,SAASC,KAAK,WACV,MAAA5B,GAAgC6B,mBAAmBC","file":"Honeywell.ClientModel.LanguageSelector.js","sourcesContent":["import {compose2, map} from \"Honeywell.ClientModel.Functional\";\r\nimport * as utils from \"Honeywell.ClientModel.Utilities\";\r\nimport * as Q from \"q\";\r\nimport {TemplateService} from \"Honeywell.ClientModel.TemplateService\";\r\nimport {spLoad} from \"Honeywell.ClientModel.Events\";\r\nimport {getHonUserTermsForGroup} from \"Honeywell.ClientModel.UserTerms\";\r\nimport {waitForAll3} from \"Honeywell.ClientModel.Promise\";\r\n\r\n\r\n//Types we use for this module\r\ntype Country = { country: string, flag: string, siteUrl: string, term: string, current: boolean };\r\ntype Language = { country: SP.FieldLookupValue; language: string; variation: string, term: string };\r\ntype CountryLanguageSelectorModel = { country: string, flag: string, languages: { language: string, clickUrl: string }[] }[];\r\n\r\n//This CAML returns all rows:\r\nvar camlAll = `\r\n \r\n \r\n \r\n`;\r\n\r\n//Mapping for language:\r\nvar languageMapping: utils.SPFieldMapping[] = [\r\n { field: \"Country\", propertyName: \"country\" }, \r\n { field: \"Title\", propertyName: \"language\" }, \r\n { field: \"Variation\", propertyName: \"variation\" }, \r\n { field: \"Term\", propertyName: \"term\" }\r\n];\r\n\r\n//Get language selector data\r\nvar getLanguageSelectorData = () => utils.getRootWebListData('Language_Selector')(new utils.GenericHandler(languageMapping))(camlAll);\r\n\r\n//Mapping for country:\r\nvar countryMapping: utils.SPFieldMapping[] = [\r\n { field: \"Title\", propertyName: \"country\" },\r\n { field: \"Flag\", propertyName: \"flag\" },\r\n { field: \"SiteURL\", propertyName: \"siteUrl\" },\r\n { field: \"Term\", propertyName: \"term\" }\r\n];\r\n\r\n//Get country selector data\r\nvar getCountrySelectorData = () => utils.getRootWebListData('Country_Selector')(new utils.GenericHandler(countryMapping))(camlAll);\r\n\r\n//This function contains logic to get URL for the site based on country and language\r\nexport const getSiteUrl = (siteUrl: string, variation: string, currentUrl: Location) => {\r\n if (currentUrl.toString().indexOf(siteUrl) >= 0) {\r\n var currentVariation = currentUrl.toString().replace(new RegExp(`.*${siteUrl}\\/`), \"\").replace(/\\/.*/, \"\");\r\n return currentUrl.toString().replace(currentVariation, variation);\r\n } else {\r\n return currentUrl.protocol + \"//\" + siteUrl.replace(/^http.+\\/\\//, \"\") + \"/\" + variation;\r\n }\r\n}\r\n\r\n//This function formats the resuilts of three queries and returns the model\r\nvar formatLanguageCountry = (getCurrentUrl: () => Location) =>\r\n (languages: Language[], countries: Country[], terms: any) => {\r\n\r\n var currentUrl = getCurrentUrl();\r\n //This function formats language\r\n var formatLanguage = (siteUrl: string) => (raw: Language) => {\r\n return {\r\n language: raw.term ? terms[raw.term] : raw.language,\r\n clickUrl: getSiteUrl(siteUrl, raw.variation, currentUrl)\r\n };\r\n };\r\n\r\n var getLanguagesForCountry = (country1: Country) =>\r\n compose2(map(formatLanguage(country1.siteUrl)),\r\n _.curry(_.filter)(_,\r\n (aLanguage: { country: SP.FieldLookupValue }) => country1.country === utils.getLookupValue(aLanguage.country)\r\n , this));\r\n\r\n var formatCountry = (country0: Country) => {\r\n return {\r\n country: country0.term ? terms[country0.term] : country0.country,\r\n flag: country0.flag,\r\n languages: getLanguagesForCountry(country0)(languages)\r\n }\r\n };\r\n\r\n return map(formatCountry)(countries);\r\n\r\n}\r\n\r\n//To get the current URL\r\nvar getCurrentUrl = () => document.location;\r\n\r\n//The user may click several times, so to prevent loading the data multiple times \r\n//we keep it as a module variable\r\nvar languageSelectorDataPromise: Q.IPromise;\r\n\r\n//Impure function. \r\n//Gets all the data, data-binds template.\r\nvar populateCountryLanguageSelector = (culture: string) => {\r\n languageSelectorDataPromise = waitForAll3(\r\n getLanguageSelectorData(), getCountrySelectorData(),\r\n getHonUserTermsForGroup({ culture: culture, group: \"LanguageSelector\" })\r\n ).spread(formatLanguageCountry(getCurrentUrl));\r\n \r\n var templatePromise = new TemplateService(\"tpl_LanguageSelector.html\").getTemplate();\r\n var mobileTemplatePromise = new TemplateService(\"tpl_LanguageSelectorMobile.html\").getTemplate();\r\n\r\n waitForAll3(languageSelectorDataPromise, templatePromise, mobileTemplatePromise)\r\n .spread((model: CountryLanguageSelectorModel, template: any, templateMobile: any) => {\r\n $(\"#js-mmenu-regions\").html(templateMobile(model));\r\n var languageSelectorHtml = $(\"#js-region-box\").html(template(model));\r\n setCookie();\r\n return languageSelectorHtml;\r\n\r\n }).catch(console.log);\r\n}\r\n\r\n//Click event handler.\r\nrequire([\"jquery\"], () => {\r\n $(\"#js-region-button\").click(e => {\r\n e.preventDefault();\r\n $(e.target).toggleClass(\"active\");\r\n $(\"#js-region-box\").toggle();\r\n });\r\n});\r\n\r\nif (!languageSelectorDataPromise) {\r\n spLoad().then(() =>\r\n populateCountryLanguageSelector(_spPageContextInfo.currentCultureName)); // SP.pageContextInfo was undefined after moving this out of the click \r\n}\r\n\r\nfunction setCookie() {\r\n $(\"#js-region-box a,#js-mmenu-regions a\").click((event: Event) => {\r\n var cookieDate = new Date();\r\n cookieDate.setFullYear(cookieDate.getFullYear() + 10);\r\n var cookieValue = $(event.target).attr('href');\r\n document.cookie = `SiteLanguageChoice=${cookieValue};expires=${cookieDate.toUTCString()};path=/`;\r\n });\r\n}"]}