(function wstoiovox() { // IOVOX LIB class WsToIovox { dniUrl = 'https://cdn.iovox.com/rest/v1/dni.js'; phoneClasses = {}; classAutoIndex = 0; regex = { fr: { match: [ /(33 \(0\)|33\(0\)|33|0)([\s\.]?)(\d?)([\s\.]?)(\d{2}[\s\.]?)(\d{2}[\s\.]?)(\d{2}[\s\.]?)(\d{2}[\s\.]?)/, // 33|0X XX XX XX XX /(33 \(0\)|33\(0\)|33|0)([\s\.]?)(\d?)([\s\.]?)(\d{3}[\s\.]?)(\d{2}[\s\.]?)(\d{2}[\s\.]?)(\d{2}[\s\.]?)/, //33|0 XXX XX XX XX /(33 \(0\)|33\(0\)|33|0)([\s\.]?)(\d?)([\s\.]?)(\d{3}[\s\.]?)(\d{3}[\s\.]?)(\d{3}[\s\.]?)/, //33|0 XXX XXX XXX /(33 \(0\)|33\(0\)|33|0)([\s\.]?)(\d?)([\s\.]?)(\d{1}[\s\.]?)(\d{2}[\s\.]?)(\d{3}[\s\.]?)(\d{3}[\s\.]?)/, //33|0X XX XXX XXX ], clean: [[ /^(330|33|0)/, '33' ]], format: function (origin, number) { if(origin.match(/^0 ?80[05]/)) { number = number.substr(0,2) + ' ' + number.substr(2); } return number; } }, be: { match: [ /(32 |32)([\s\.\/]?)(4)([6789]\d{2}?)([\s\.\/]?)(\d{2}[\s\.]?)(\d{2}[\s\.]?)(\d{2}[\s\.]?)/, // landed XXX/XX XX XX /(32 |32|0)([\s\.\/]?)(\d{2}?)([\s\.\/]?)(\d{2}[\s\.]?)(\d{2}[\s\.]?)(\d{2}[\s\.]?)/, /(32 |32|0)([\s\.\/]?)(\d{1}?)([\s\.\/]?)(\d{3}[\s\.]?)(\d{2}[\s\.]?)(\d{2}[\s\.]?)/ // mobile 4XX XX XX XX ], clean: [[ /^(32|320|0)/, '32' ], [ /\//, '']] }, es: { match: [ /([\s\.]?)([0-9]{3})([\s\.]?)([0-9]{3})([\s\.]?)([0-9]{3})/, // 34 XXX XXX XXX /([\s\.]?)([0-9]{2})([\s\.]?)([0-9]{3})([\s\.]?)([0-9]{2})([\s\.]?)([0-9]{2})/, // 34 XXX XX XX XX /([\s\.]?)([0-9]{2})([\s\.]?)([0-9]{2})([\s\.]?)([0-9]{3})([\s\.]?)([0-9]{2})/, // 34 XX XXX XX XX ], clean: [[ /^(34)?/, '34']] }, uk: { match: [ /(44 \(0\)|44\(0\)|44|0)([\s\.]?)(\d{2})([\s\.]?)(\d{4}[\s\.]?)(\d{4}[\s\.]?)/, // 44|0XX XXXX XXXX // /([\s\.]?)([0-9]{3})([\s\.]?)([0-9]{4})([\s\.]?)([0-9]{4})/ // 44 XXX XXXX XXXX ], clean: [[ /^(44|440|0)?/, '44']] }, au: { start: 1, replace: function (number) { return number.substr(0, 3) !== '611' ? '610' + number.substr(2) : number }, match: [ /(61 1|611|1)([\s\.]?)(300|80\d)([\s\.]?)(\d{3})([\s\.]?)(\d{3})/, // 61 1300 XXX XXX | 61 1800 XXX XXX /(61 |61|0)([\s\.]?)(\d)([\s\.]?)(\d{4})([\s\.]?)(\d{4})/, // 61X XXXX | 0X XXXX XXXX | 0XXXXX XXXX /(61 |61|0)?([\s\.]?)(\d{4})([\s\.]?)(\d{3})([\s\.]?)(\d{3})/, // 61 XXXX XXX XXX ], clean: [[ /^(61|610|0)?/, '61']], format: function (origin, number) { if(origin.match(/^13/)) { number = number.replace(/ /g, ''); number = number.substr(0,2) + ' ' + number.substr(2, 4) + ' ' + number.substr(6); } return number; } }, it: { start: 1, match: [ /(39 \(0\)|39\(0\)|39|0)([\s\.]?)(\d?)([\s\.]?)(\d{2}[\s\.]?)(\d{2}[\s\.]?)(\d{2}[\s\.]?)(\d{2}[\s\.]?)(\d{1,2})?/, // 39|0X XX XX XX XX(XX) | 39|0XXXXXXXXXX(XXX) ], clean: [[ /^(390|39|0)/, '390' ]] } }; _snippet = { accessKey: '', actionKey: '', globalNumberFormat: '', sea: false, requestLinks: { items: [] }, siteData: { } }; _snippetItem = { linkId: '__ROTATING__', selector: '__discover__', poolId: '', dialString: '' }; constructor() { } // load iovox Library init() { var h = document.getElementsByTagName('script')[0]; var s = document.createElement('script'); s.type = 'text/javascript'; s.defer = true; s.async = true; s.id = 'iovox-ws-rn'; s.src = this.dniUrl; h.parentNode.insertBefore(s, h); } setup() { // GET WS setup return { country: 'fr', change: {}, whitelist: [ "33175254707", "33175254712", "33178919670", "33178919671", "33178919672", "33178919673", "33178919674", "33178919675", "33178919676", "33178919677", "33178919678", "33178919679", "33178919680", "33178919681", "33178919682", "33178919683", "33178919684", "33178919685", "33178919686", "33178919687", "33178919688", "33178919689", "33179352060", "33179352061", "33179352062", "33179352063", "33179352064", "33179352065", "33179352066", "33179352067", "33179352068", "33179352069", "33179352070", "33179352071", "33179352072", "33179352073", "33179352074", "33179353290", "33179353291", "33179353292", "33179353293", "33179353294", "33179353295", "33179353296", "33179353297", "33179353298", "33179353299", "33179353300", "33179353301", "33179353302", "33179353303", "33179353304", "33179353305", "33179353306", "33179353307", "33179353308", "33179353309", "33179353310", "33179353311", "33179353312", "33179353313", "33179353314", "33179353315", "33179353316", "33179353317", "33179353318", "33179353319", "33179353320", "33179353321", "33179353322", "33179353323", "33179353324", "33179353325", "33179353326", "33179353327", "33179353328", "33179353329", "33179356180", "33179356181", "33179356182", "33179356183", "33179356184", "33179356185", "33179356186", "33179356187", "33179356188", "33179356189", "33179356190", "33179356191", "33179356192", "33179356193", "33179356194", "33179356195", "33179356196", "33179356197", "33179356198", "33179356199", "33179356200", "33179356201", "33179356202", "33179356203", "33179356204", "33179356205", "33179356206", "33179356207", "33179356208", "33179356209", "33179356210", "33179356211", "33179356212", "33179356213", "33179356214", "33179356215", "33179356216", "33179356217", "33179356218", "33179356219", "33179356220", "33179356221", "33179356222", "33179356223", "33179356224", "33179356225", "33179356226", "33179356227", "33179356228", "33179356229", "33179356230", "33179356231", "33179356232", "33179356233", "33179356234", "33179356235", "33179356236", "33179356237", "33179356238", "33179356239", "33179356240", "33179356241", "33179356242", "33179356243", "33179356244", "33179356245", "33179356246", "33179356247", "33179356248", "33179356249", "33179356250", "33179356251", "33179356252", "33179356253", "33179356254", "33179356255", "33179356256", "33179356257", "33179356258", "33179356259", "33179356260", "33179356261", "33179356262", "33179356263", "33179356264", "33179356265", "33179356266", "33179356267", "33179356268", "33179356269", "33179356270", "33179356271", "33179356272", "33179356273", "33179356274", "33179356275", "33179356276", "33179356277", "33179356278", "33179356279", "33179356280", "33179356281", "33179356282", "33179356283", "33179356284", "33179356285", "33179356286", "33179356287", "33179356288", "33179356289", "33179356290", "33179356291", "33179356292", "33179356293", "33179356294", "33179356295", "33179356296", "33179356297", "33179356298", "33179356299", "33179356300", "33179356301", "33179356302", "33179356303", "33179356304", "33179356305", "33179356306", "33179356307", "33179356308", "33179356309", "33179356310", "33179356311", "33179356312", "33179356313", "33179356314", "33179356315", "33179356316", "33179356317", "33179356318", "33179356319", "33179356320", "33179356321", "33179356322", "33179356323", "33179356324", "33179356325", "33179356326", "33179356327", "33179356328", "33179356329", "33179356330", "33179356331", "33179356332", "33179356333", "33179356334", "33179356335", "33179356336", "33179356337", "33179356338", "33179356339", "33179356340", "33179356341", "33179356342", "33179356343", "33179356344", "33179356345", "33179356346", "33179356347", "33179356348", "33179356349", "33180045491", "33180045492", "33499922400", "33499922401", "33499922402", "33499922403", "33499922404", "33499922405", "33499922406", "33499922407", "33499922408", "33499922409", "33547540001", "33547541290", "33547541291", "33547541292", "33553035000", "33553951259", "33553952500", "33556828230", "33556828231", "33556828232", "33556828233", "33557222990", "33557222991", "33557222992", "33557222993", "33557222994", "33557222995", "33557222996", "33557222997", "33557222998", "33557222999", "33559831817", "33561216777", "33564101380", "33564101381", "33564101382", "33564101383", "33564101384", "33564101385", "33564101386", "33564101387", "33564101388", "33564101389", "33564101610", "33564101611", "33564101612", "33564101613", "33564101614", "33564101615", "33564101616", "33564101617", "33564101618", "33564101619", "33564101628", "33564101629", "33564101630", "33564101631", "33564101632", "33564104040", "33564104141", "33564104142", "33564104143", "33564104144", "33564104145", "33564104146", "33564104444", "33587131007", "33587131021", "33587131022", "33800811911", "33970268660", "33970268661", "33970268662", "33970268663", "33970268664", "33979980085", "33979980086", "33979980087", "33979980088", "33979980089", "33979980090", "33979980091", "33979980092", "33979980093", "33979980094", "33979980095", "33979980096", "33979980097", "33979980098", "33979980099", "33979982150", "33979982151", "33979982152", "33979982153", "33979982154", "33979982155", "33979982156", "33979982157", "33979982158", "33979982159", ], gua: 'UA-22569434-1', blacklist: ['33800811911'], format: 'xx xx xx xx xx', iovox: { pool: 'JL3S000', accessKey: '0942f791a8f70fe011bb55afd08d772608ee0096', actionKey: '331d4f05a1ffa74c8e474ed182b8a959e328d5b2', sea: true }, siteData: { } } } _cleanPhone(phone, clean) { phone = phone.replace(/[\s\.]/g, ''); for(var cleanIndex in this.regex[this.setup()['country']].clean) { var _clean = this.regex[this.setup()['country']].clean[cleanIndex]; phone = phone.replace(_clean[0], _clean[1]); } return phone; } _findPhones(node, setup) { var phones = []; var matchs = this.regex[this.setup()['country']].match; var format = this.regex[this.setup()['country']].format; var content = ''; var update = ''; if((node.nodeName == 'A' && node.getAttribute('href') && node.getAttribute('href').substr(0,4) == 'tel:')) { content = node.getAttribute('href'); update = 'href'; } else if (node.nodeName == 'IMG') { content = node.getAttribute('alt'); update = 'alt'; } else { content = node.textContent; } if(this.setup().update) { this.setup().update(node, update); } for(var matchIndex in matchs) { var match = matchs[matchIndex]; var _phones = content.match(match); if(_phones && _phones.length > 0) { var phone = this._cleanPhone(_phones[0]); phones.push(phone); var index = 'iovox-auto-selector-' + this.classAutoIndex++; (node.nodeType == Node.TEXT_NODE ? node.parentNode : node).classList.add(index); if(!this.phoneClasses[phone]) { this.phoneClasses[phone] = []; } this.phoneClasses[phone].push(index); } } return phones; } findPhones(node) { var phones = []; if(node.hasChildNodes()) { var child = node.firstChild; while(child) { if( (child.nodeName == 'A' && child.getAttribute('href') && child.getAttribute('href').substr(0,4) == 'tel:') || (child.nodeName == 'IMG' && child.getAttribute('alt')) || (child.nodeType == Node.TEXT_NODE) ) { // test attribute phones = phones.concat(this._findPhones(child)); } else if (child.nodeName == 'IMG') { } if(child.nodeType == Node.ELEMENT_NODE) { phones = phones.concat(this.findPhones(child)); } child = child.nextSibling; } } return phones; } filter(phones) { var finalPhones = []; phones = phones.filter(function(value, index, self) { return self.indexOf(value) === index }); var wl = this.setup().whitelist || []; var bl = this.setup().blacklist || []; if(wl.length == 0 && bl.length == 0) { return phones; } for(var phoneIndex in phones) { var phone = phones[phoneIndex]; if(wl.length > 0) { if(wl.indexOf(phone) != -1) { finalPhones.push(phone); } } else if(bl.length > 0) { if(bl.indexOf(phone) == -1) { finalPhones.push(phone); } } } return finalPhones; } _format(phone) { return this.setup().whitelist[phone] || this.setup().blacklist[phone] || this.setup().format; } _dialstring(phone) { return this.setup().change[phone] || phone; } initIovox(phones) { var config = this._snippet; var setup = this.setup().iovox; config.accessKey = setup.accessKey; config.actionKey = setup.actionKey; if(setup.sea === true) { config.sea = true; } if(setup.directory === true) { config.directory = true; } if(setup.source) { config.source = setup.source; } config.globalNumberFormat = this.setup().format; Object.assign(config.siteData, this.setup().siteData ); if(this.setup().gua) { config.siteData.gua = this.setup().gua; } config.siteData.ua = navigator.userAgent; config.siteData.siteId = setup.pool; for(var phoneIndex in phones) { var phone = phones[phoneIndex]; var item = Object.assign({}, this._snippetItem); item.poolId = setup.pool; item.selector = this.phoneClasses[phone].map(function (value) { return '.' + value }).join(','); item.numberFormat = this._format(phone); item.dialString = this._dialstring(phone); item.oriDialString = phone; config.requestLinks.items.push(item); } if(setup.manual) { config.manualNumberUpdate = true; window.addEventListener('iovox-js-api-loaded', setup.manual); } return config; }; run() { if(this.setup().iovox.autostart === false) { var self = this; window.WSDidDyn = { track: function() { self._run(); } }; console.log('Defining WsDidDyn', WsDidDyn); } else { this._run(); } }; _run() { var phones = this.findPhones(document.body); phones = this.filter(phones); window.iovoxApiConfig = this.initIovox(phones); if(phones.length > 0) { this.init(); } }; }; ws = new WsToIovox(); ws.run(); window.getIovoxApiConfig = function() { var key; var conf = JSON.stringify(iovoxApiConfig); conf = JSON.parse(conf); var keys = ['dataAttribute', 'dataLayer', 'apiUrl', 'apiVersion']; for(key in keys) { delete conf[keys[key]]; } keys = [ 'ua', 'first_visit', 'referer_page', 'first_page', 'current_page', '_ga', 'adobe']; for(key in keys) { delete conf.siteData[keys[key]]; } for(var itemIndex in conf.requestLinks.items) { var item = conf.requestLinks.items[itemIndex]; item.selector = '.insert_your_classes_for_number_' + item.dialString + ',.class2,#id1,...'; delete item.oriDialString; conf.requestLinks.items[itemIndex] = item; } return 'iovoxApiConfig = ' + JSON.stringify(conf, null, "\t") + ';'; } })();