const $ = require('jquery'); const Bloodhound = require("typeahead.js/dist/bloodhound.js"); const Typeahead = require("typeahead.js/dist/typeahead.jquery.js"); const Cookies = require('js-cookie'); class IhkSwitch { constructor(section) { const t = this; this.serviceUrlBase = "/blueprint/servlet/serviceport/ihkfinder"; this.ihklListUrl = 'services/ihkList.json';//this.serviceUrlBase + "/ihk/all"; this.communitiesUrl = 'services/communities.json';//this.serviceUrlBase + "/community/all"; // berechnen d // center ist geolocation aus js api // item die IHK /* const p = 0.017453292519943295; const c = Math.cos; const a = 0.5 - c((item.lat - center.lat) * p) / 2 + c(center.lat * p) * c(item.lat * p) * (1 - c((item.lng - center.lng) * p)) / 2; const distance = 12742 * Math.asin(Math.sqrt(a)); */ $(section).addClass("initialized"); t.section = section; t.form = section.find('.ihk-finder'); t.charMap = { 'a': /[àáâ]/gi, 'c': /[ç]/gi, 'e': /[èéêë]/gi, 'i': /[ï]/gi, 'o': /[ô]/gi, 'oe': /[œ]/gi, 'u': /[ü]/gi, 's': /[ß]/gi }; t.initClosing(); t.checkState(); } initClosing() { this.section.find('.closer').on('click', () => { this.section.addClass('hide'); setTimeout(() => { this.section.removeAttr('data-show-step'); }, 400); }) } checkState() { const cookie = Cookies.get('my-ihk'); if (cookie) { this.initSwitch(); } else { this.initGeolocation(); } } loadIhkList(callback) { $.getJSON(this.ihklListUrl, (response) => { if (response.jsonResponse && response.status === 200) { this.ihkList = response.jsonResponse.sort((a, b) => { const countryNameA = a.country.toUpperCase(); // ignore upper and lowercase const countryNameB = b.country.toUpperCase(); // ignore upper and lowercase // Sort by country if (countryNameA < countryNameB) { return -1; } if (countryNameA > countryNameB) { return 1; } const ihkNameA = a.name.toUpperCase(); // ignore upper and lowercase const ihkNameB = b.name.toUpperCase(); // ignore upper and lowercase // Sort by name if (ihkNameA < ihkNameB) { return -1; } if (ihkNameA > ihkNameB) { return 1; } // names must be equal return 0; }); //console.log(this.ihkList); callback(); } }) } loadCommunities(callback) { $.getJSON(this.communitiesUrl, (communities) => { if (communities.jsonResponse && communities.status === 200) { this.communities = communities.jsonResponse; callback(); } }); } initForm() { this.section.attr('data-show-step', 'form'); if (this.communities && this.ihkList) { this.initBloodhound(this.communities); } else { this.loadIhkList(() => { this.loadCommunities( () => { this.initBloodhound(this.communities) } ) }); } this.form.on('submit', function () { /* if ($('.tt-cursor').length) { $('.tt-cursor').trigger('click'); } else if ($('.tt-suggestion').length > 1) { $('.tt-suggestion').first().trigger('click'); } */ return false; }); } initGeolocation() { navigator.geolocation.getCurrentPosition((pos) => {this.locationSuccess(pos)}, (err) => {this.locationError(err)}); this.section.find('.change-location').on('click', () => { this.initForm(); }) this.section.find('.accept-location').on('click', () => { this.setCookie(); }) this.section.find('.toggle-location-info').on('click', (e) => { e.preventDefault(); this.section.find('#location-info').slideToggle(250, 'swing'); }) } setCookie() { const myIHK = this.ihkList.find(ihk => { return ihk.ihknr === this.myLocation.ihk }) delete myIHK.zips; Cookies.set('my-ihk', JSON.stringify(myIHK).toString(), { expires: 365 }); this.initSwitch(); } locationSuccess(position) { let url = 'https://api.bigdatacloud.net/data/reverse-geocode-client?localityLanguage=de'; url += '&latitude=' + position.coords.latitude; url += '&longitude=' + position.coords.longitude; $.getJSON(url, (location) => { this.section.find('.my-location').text(location.postcode + ' ' + location.city); this.myLocation = { city: location.city, zip: location.postcode } this.loadCommunities(() => {this.checkMyLocation()}); }) } checkMyLocation() { this.myLocation.ihk = -1; $.each(this.communities, (index, value) => { if (this.normalize(this.myLocation.city).toUpperCase() === value.name || (value.zips && value.zips.indexOf(this.myLocation.zip) > -1)) { this.myLocation.ihk = value.ihknr; this.loadIhkList(() => {this.completeGeolocation()}); return false; } }); if (this.myLocation.ihk === -1) { this.initForm(); } } completeGeolocation() { const myIHK = this.ihkList.find(ihk => { return ihk.ihknr === this.myLocation.ihk }) if (myIHK) { this.section.find('.my-ihk').text('IHK ' + myIHK.name); this.section.attr('data-show-step', 'geolocation'); } else { this.initForm(); } } locationError(error) { this.section.attr('data-show-step', 'form'); this.initForm(); } initBloodhound(data) { const t = this; $.each(data, function (index, value) { data[index]['normName'] = t.normalize(data[index].name); }); data.sort(function (a, b) { if (a.name < b.name) return -1; if (a.name > b.name) return 1; return 0; }); t.communities = new Bloodhound({ datumTokenizer: function (d) { var titleTokens = Bloodhound.tokenizers.whitespace(d.normName); return titleTokens.concat(d.zips) }, queryTokenizer: function (q) { var normalized = t.normalize(q); return Bloodhound.tokenizers.whitespace(normalized); }, local: data, limit: 50 }); t.communities.initialize(); var src = { name: 'communities', displayKey: 'name', source: t.communities.ttAdapter(), templates: { empty: ['
Leider nichts gefunden
'].join('\n'), suggestion: function (e) { return ('