Guest User

Untitled

a guest
Jan 18th, 2019
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.30 KB | None | 0 0
  1. var PSA_CONFIG = {
  2.  
  3. /**
  4. * Title of the campaign.
  5. * This value is used for pageName.
  6. */
  7. campaignTitle: '',
  8.  
  9. /**
  10. * The Brand
  11. */
  12. brand: 'peugeot',
  13.  
  14. /**
  15. * Models
  16. * Define a Object for each model that is available on current page
  17. * id = vehicleModelBodystyle
  18. * label = vehicleModelBodystyleLabel
  19. */
  20. models: [
  21. {
  22. id: 'MY_MODEL_ID',
  23. label: 'Super cool PSA car'
  24. }
  25. ],
  26.  
  27. /**
  28. * Available conversion types
  29. * testdrive - offer - brochure
  30. */
  31. conversionTypes: [
  32. 'testdrive',
  33. 'offer'
  34. ]
  35. };
  36. /**
  37. * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  38. *
  39. * DANGER ZONE!! -> DO NOT CHANGE!!
  40. *
  41. * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  42. */
  43. var PSA_STATIC_DATA = {};
  44.  
  45. var PSA_MAPPINGS = {
  46. brand: {
  47. peugeot: 'kpp',
  48. citroen: 'cpp'
  49. },
  50. conversion: {
  51. testdrive: 'test-drive',
  52. offer: 'offer-request',
  53. brochure: 'brochure-request',
  54. probefahrt: 'test-drive',
  55. offerte: 'offer-request',
  56. broschuere: 'brochure-request'
  57. }
  58. };
  59.  
  60. /**
  61. * Init
  62. */
  63. (function (window) {
  64. window.dataLayer = window.dataLayer || [];
  65.  
  66. PSA_STATIC_DATA = {
  67. brand: PSA_CONFIG.brand,
  68. language: getLanguage(),
  69. pageCategory: 'form page',
  70. country: 'ch',
  71. siteTypeLevel1: PSA_MAPPINGS.brand[PSA_CONFIG.brand],
  72. siteTypeLevel2: 'promotion::ready to go',
  73. siteOwner: 'local',
  74. siteTarget: 'B2C',
  75. siteFamily: 'new cars',
  76. virtualPageURL: '/forms/test-drive|offer-request',
  77. formsName: 'test drive',
  78. mainStepIndicator: 1,
  79. mainStepName: 'personal information'
  80. };
  81.  
  82. var ids = [];
  83. var labels = [];
  84. PSA_CONFIG.models.forEach(function (modelObj) {
  85. ids.push(modelObj.id);
  86. labels.push(modelObj.label);
  87. });
  88.  
  89. PSA_STATIC_DATA.vehicleModelBodystyle = ids.join('|');
  90. PSA_STATIC_DATA.vehicleModelBodystyleLabel = labels.join('|');
  91.  
  92. if (!PSA_MAPPINGS.brand.hasOwnProperty(PSA_CONFIG.brand)) {
  93. throw new Error('Brand is not defined in brand map')
  94. }
  95.  
  96. var data = [
  97. PSA_MAPPINGS.brand[PSA_CONFIG.brand],
  98. PSA_STATIC_DATA.siteTypeLevel2,
  99. PSA_STATIC_DATA.siteOwner,
  100. PSA_STATIC_DATA.siteTarget,
  101. PSA_STATIC_DATA.siteFamily
  102. ];
  103.  
  104. if (PSA_CONFIG.models.length === 1) {
  105. data.push(PSA_CONFIG.models[0].id)
  106. } else {
  107. data.push('');
  108. }
  109.  
  110. data.push('desktop');
  111. data.push('');
  112. data.push(PSA_CONFIG.campaignTitle.replace(/\s+/g, '-').toLowerCase());
  113.  
  114. PSA_STATIC_DATA.pageName = data.join('/');
  115.  
  116. window.dataLayer.push(PSA_STATIC_DATA);
  117. })(window);
  118.  
  119. /**
  120. * On Confirmation
  121. * @param conversionTypes
  122. * @param postal
  123. */
  124. function onConfirmation(conversionType, postal) {
  125.  
  126.  
  127. var evtData = Object.assign(PSA_STATIC_DATA, {
  128. event: 'updatevirtualpath',
  129. pageCategory: 'lead page',
  130. formsLeadType: 'hot lead',
  131. formsLeadID: getGITID(),
  132. formsPostalCode: postal,
  133. mainStepIndicator: 2,
  134. mainStepName: 'confirmation'
  135. });
  136.  
  137.  
  138. var mappedName = mapConversionType(conversionType);
  139.  
  140. PSA_STATIC_DATA.formsName = mappedName.replace(/-/g, ' ');
  141. mapConversionType(conversionType);
  142.  
  143. PSA_STATIC_DATA.virtualPageURL = '/forms/'
  144. + mappedName
  145. + '/confirmation';
  146.  
  147. window.dataLayer.push(evtData);
  148. }
  149.  
  150. /**
  151. * Get current language from query parameter
  152. * @returns {string | null | string}
  153. */
  154. function getLanguage() {
  155. var urlParams = new URLSearchParams(window.location.search);
  156. return urlParams.get('lang') || 'de'
  157. }
  158.  
  159.  
  160. /**
  161. * Generate a unique ID
  162. * @returns {string}
  163. */
  164. function getGITID() {
  165. var r = "", s = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
  166. for( var i=0; i < 20; i++ )
  167. r += s.charAt(Math.floor(Math.random() * s.length));
  168. return r;
  169. }
  170.  
  171. /**
  172. * Map conversion types
  173. *
  174. * testdrive|offer ...
  175. *
  176. * @param conversionTypes
  177. * @returns {string}
  178. */
  179. function mapConversionType(conversionType) {
  180. if (PSA_MAPPINGS.conversion.hasOwnProperty(conversionType)) {
  181. return PSA_MAPPINGS.conversion[conversionType];
  182. } else {
  183. return conversionType;
  184. }
  185. }
Add Comment
Please, Sign In to add comment