Dassault Logo
  • HOME
  • LOGOUT
// PAGE-LEVEL CONSTANTS var CATEGORY = 'events' var ENV = 'PRD' var SITE_NAME = '3experience_world' var SUB_CATEGORY = 'registration' var TAG_COMMANDER_SCRIPT_ID = 'tag-commander-script' var TYPE = 'contact' // ANALYTICS/TIMING UTIL METHODS /** * options: { * enableLogs: Boolean, * intervalFrequency: Number, * logIdentifier: String, * maxIterations: Number, * onSuccess: () => void, * successCheck: () => Boolean, * } */ function waitForX(options) { var log = function log() { if (options.enableLogs) console.log.apply(console, arguments) } var logSuffix = options.logIdentifier ? ' -- [' + options.logIdentifier + ']' : '' var intervalFrequency = options.intervalFrequency || 100 var maxIterations = options.maxIterations || 100 // Do 1 immediate check before the interval starts. if (options.successCheck()) { log('SUCCESS (immediate), no interval needed' + logSuffix) options.onSuccess() return; } log('every ' + intervalFrequency + 'ms, for ' + intervalFrequency * maxIterations + 'ms' + logSuffix) var iterations = 0 var waitTimer = window.setInterval(function () { if (options.successCheck.apply(options)) { log('SUCCESS, waited: ' + ((iterations + 1) * intervalFrequency) + 'ms (' + (iterations + 1) + ' iterations)' + logSuffix) options.onSuccess.apply(options) window.clearInterval(waitTimer); log('cleared interval' + logSuffix) } if (iterations >= maxIterations) { log('TIMED OUT' + logSuffix) // Safety net to ensure this interval won't run forever. window.clearInterval(waitTimer) log('cleared interval' + logSuffix) } iterations++ }, options.intervalFrequency) } function createMetaTagWithAttributes(attributes) { var meta = document.createElement('meta') Object.keys(attributes).forEach(function (key) { meta.setAttribute(key, attributes[key]) }) return meta } function injectPageMeta(attributes) { var meta = createMetaTagWithAttributes(attributes) document.head.appendChild(meta) } function setupAnalyticsListener(el, attributesList) { el.setAttribute('itemscope', true); el.setAttribute('itemtype', 'http://tracking.3ds.com/ClickAction'); attributesList.forEach(function (attributes) { var meta = createMetaTagWithAttributes(attributes) el.appendChild(meta) }) } function triggerAnalyticsPageView(pageName) { if (!document.querySelector('#' + TAG_COMMANDER_SCRIPT_ID)) { injectPageMeta({ property: 'tk:name', content: pageName }) injectTagCommanderScript() } else if (window.ds_event) { window.ds_event('this', 'page', { event : 'page', page_category: CATEGORY, page_name: pageName, page_sub_category: SUB_CATEGORY, page_type: TYPE }) } else { console.warn('Unable to trigger analytics page view') } } function injectTagCommanderScript() { var tagCommanderScript = document.createElement('script'); tagCommanderScript.type = 'text/javascript'; tagCommanderScript.src = '//tracking.3ds.com/stat/init/ds_init_global.js'; tagCommanderScript.id = TAG_COMMANDER_SCRIPT_ID; document.head.appendChild(tagCommanderScript); } // ONE-TIME PAGE EXECUTION document.querySelector('html').setAttribute('xmlns:tk', 'http://tracking.3ds.com/ns#') injectPageMeta({ property: 'td:env', content: ENV }) injectPageMeta({ property: 'tk:site_name', content: SITE_NAME }) injectPageMeta({ property: 'tk:category', content: CATEGORY }) injectPageMeta({ property: 'tk:sub_category', content: SUB_CATEGORY }) injectPageMeta({ property: 'tk:type', content: TYPE }) waitForX({ intervalFrequency: 100, maxIterations: 150, onSuccess: function () { var leftNavLinks = document.querySelectorAll('.rfwf-nav-container ul a'); // CUSTOM SUPPORT button setupAnalyticsListener(leftNavLinks[0], [ { itemprop: 'category', content: 'navigation' }, { itemprop: 'action', content: 'menu' }, { itemprop: 'label', content: 'email_customer_support' } ]) // WEBSITE LINK button setupAnalyticsListener(leftNavLinks[1], [ { itemprop: 'category', content: 'navigation' }, { itemprop: 'action', content: 'menu' }, { itemprop: 'label', content: '3dexperience_world_2021' } ]) }, successCheck: function () { var leftNavLinks = document.querySelectorAll('.rfwf-nav-container ul a'); return leftNavLinks && leftNavLinks.length && leftNavLinks.length > 1; }, })
// v3 if (data.page === 'login') { triggerAnalyticsPageView('/3experience_world/events/registration/' + data.page) waitForX({ intervalFrequency: 100, maxIterations: 150, onSuccess: function () { var createAccountButton = document.querySelector('.create-account-frame button') setupAnalyticsListener(createAccountButton, [ { itemprop: 'category', content: 'CTA' }, { itemprop: 'action', content: 'middle' }, { itemprop: 'label', content: 'login' } ]) }, successCheck: function () { return document.querySelector('.create-account-frame button'); }, }) } if (data.page === 'createaccount') { triggerAnalyticsPageView('/3experience_world/events/registration/' + data.page) waitForX({ intervalFrequency: 100, maxIterations: 150, onSuccess: function () { var continueButton = document.querySelector('#wf-btn-submit'); setupAnalyticsListener(continueButton, [ { itemprop: 'category', content: 'CTA' }, { itemprop: 'action', content: 'form' }, { itemprop: 'label', content: '/3dexperience_world/events/registration/form/contactInfo' } ]) }, successCheck: function () { return document.querySelector('#wf-btn-submit'); }, }); } if (data.page === 'contactInfo') { triggerAnalyticsPageView('/3experience_world/events/registration/' + data.page) waitForX({ intervalFrequency: 100, maxIterations: 150, onSuccess: function () { var continueButton = document.querySelector('#wf-btn-submit'); setupAnalyticsListener(continueButton, [ { itemprop: 'category', content: 'CTA' }, { itemprop: 'action', content: 'form' }, { itemprop: 'label', content: '/3dexperience_world/events/registration/form/attendee' } ]) var cancelButton = document.querySelector('#wf-btn-cancel'); setupAnalyticsListener(cancelButton, [ { itemprop: 'category', content: 'navigation' }, { itemprop: 'action', content: 'middle' }, { itemprop: 'label', content: 'cancel' } ]) }, successCheck: function () { return ( document.querySelector('#wf-btn-submit') && document.querySelector('#wf-btn-cancel') ); }, }); } if ( data.page === 'attendee' || data.page === 'exhibitor' || data.page === 'press' || data.page === 'employee' ) { triggerAnalyticsPageView('/3experience_world/events/registration/' + data.page) waitForX({ intervalFrequency: 100, maxIterations: 150, onSuccess: function () { var continueButton = document.querySelector('#wf-btn-submit'); setupAnalyticsListener(continueButton, [ { itemprop: 'category', content: 'CTA' }, { itemprop: 'action', content: 'form' }, { itemprop: 'label', content: '/3dexperience_world/events/registration/form/order' } ]) var cancelButton = document.querySelector('#wf-btn-cancel'); setupAnalyticsListener(cancelButton, [ { itemprop: 'category', content: 'navigation' }, { itemprop: 'action', content: 'middle' }, { itemprop: 'label', content: 'cancel' } ]) }, successCheck: function () { return ( document.querySelector('#wf-btn-submit') && document.querySelector('#wf-btn-cancel') ); }, }); } if (data.page === 'order') { triggerAnalyticsPageView('/3experience_world/events/registration/' + data.page) waitForX({ intervalFrequency: 100, maxIterations: 150, onSuccess: function () { var orderButtons = document.querySelectorAll('.rfwf-orders-buttons button'); // BACK button setupAnalyticsListener(orderButtons[0], [ { itemprop: 'category', content: 'navigation' }, { itemprop: 'action', content: 'middle' }, { itemprop: 'label', content: 'back' } ]) // CLEAR ORDER button setupAnalyticsListener(orderButtons[1], [ { itemprop: 'category', content: 'navigation' }, { itemprop: 'action', content: 'middle' }, { itemprop: 'label', content: 'clear_order' } ]) // SUBMIT button setupAnalyticsListener(orderButtons[2], [ { itemprop: 'category', content: 'CTA' }, { itemprop: 'action', content: 'form' }, { itemprop: 'label', content: '/3dexperience_world/events/registration/form/submit' } ]) }, successCheck: function () { var orderButtons = document.querySelectorAll('.rfwf-orders-buttons button'); return orderButtons && orderButtons.length && orderButtons.length > 2 }, }); } if (data.page === 'confirm') { triggerAnalyticsPageView('/3experience_world/events/registration/thankyou') waitForX({ intervalFrequency: 100, maxIterations: 150, onSuccess: function () { var confirmationButtons = document.querySelectorAll('.rfwf-confirmation-buttons button'); // CONTINUE button setupAnalyticsListener(confirmationButtons[0], [ { itemprop: 'category', content: 'navigation' }, { itemprop: 'action', content: 'middle' }, { itemprop: 'label', content: 'continue' } ]) // PRINT button setupAnalyticsListener(confirmationButtons[1], [ { itemprop: 'category', content: 'navigation' }, { itemprop: 'action', content: 'middle' }, { itemprop: 'label', content: 'print' } ]) }, successCheck: function () { var confirmationButtons = document.querySelectorAll('.rfwf-confirmation-buttons button'); return confirmationButtons && confirmationButtons.length && confirmationButtons.length > 1 }, }); } if (data.page === 'dashboard') { triggerAnalyticsPageView('/3experience_world/events/registration/' + data.page) }
Dassault Logo
Facebook Logo Linkedin Logo Twitter Logo YouTube Logo

Corporate

  • About 3DS
  • 3DEXPERIENCE Lab
  • La Fondation
  • Investors
  • Events
  • Press Releases
  • Customer Stories
  • 3DS Magazines
  • Environmental Responsibilities
  • Ethics and Compliance
  • Careers
  • 3DEXPERIENCE® platform
  • 3DEXPERIENCE® Marketplace

Products

  • CATIA
  • SOLIDWORKS
  • ENOVIA
  • DELMIA
  • SIMULIA
  • GEOVIA
  • EXALEAD
  • 3DVIA
  • BIOVIA
  • NETVIBES
  • 3DEXCITE
  • Centric PLM

Industries

  • Aerospace & Defense
  • Business Services
  • Construction, Cities & Territories
  • Consumer Packaged Goods & Retail
  • Energy & Materials
  • High-Tech
  • Home & Lifestyle
  • Industrial Equipment
  • Life Sciences
  • Marine & Offshore
  • Transportation & Mobility

Insights

  • Design
  • Manufacturing
  • Science
  • Cloud

©2002-2020 Dassault Systèmes - All rights reserved

Legal Information • Terms of Use • Privacy Policy • Piracy Prevention • Contact •