Advertisement
plasticfuzz

T119_SV_LP_Calculator

May 4th, 2016
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ;(function () {
  2.     var mobConsole = (function (result) {
  3.         result.elem = document.createElement('div');
  4.         result.elem.classList.add(result.cssRoot);
  5.  
  6.         result.elem.style.position = 'fixed';
  7.         result.elem.style.background = 'white';
  8.         result.elem.style.top = '0';
  9.         result.elem.style.color = 'black';
  10.  
  11.         result.promise = mmcore.waitFor(function () {
  12.             return document.body;
  13.         });
  14.  
  15.         result.promise.done(function () {
  16.             document.body.appendChild(result.elem);
  17.         });
  18.  
  19.         console.log = (function(orig) {
  20.             return function() {
  21.                 result.log.apply(result, arguments);
  22.                 return orig.apply(this, arguments)
  23.             }
  24.         })(console.log);
  25.  
  26.         result.elem.addEventListener('click', result.clear.bind(result));
  27.  
  28.         return result;
  29.     })({
  30.         cssRoot: 'mm-mob-cons',
  31.         log: function () {
  32.             var msg = document.createElement('p');
  33.             msg.innerHTML = Array.prototype.slice.call(arguments, 0).join(' ');
  34.             this.elem.appendChild(msg);
  35.         },
  36.         clear: function() {
  37.             this.elem.innerHTML = '';
  38.         }
  39.     });
  40.  
  41.     var CAMPAIGN_NAME = 'T119_SV_LP_Calculator';
  42.     var ELEMENTS = ['A_Chevrons'];
  43.     var CAMPAIGN_NAMESPACE = 'mm-t119';
  44.     var CAMPAIGN_PAGE_ID = 'T119_CAMPAIGN';
  45.  
  46.     var campaign = new mmcore.Campaign(CAMPAIGN_NAME, ELEMENTS, CAMPAIGN_NAMESPACE);
  47.  
  48.     campaign.extend({
  49.         applyVariant: function () {
  50.         },
  51.         requestVariant: function () {
  52.             var req = mmcore.request(CAMPAIGN_PAGE_ID).done(function () {
  53.                 document.body.classList.add(this.prefix);
  54.                 this.renderMaxyboxes();
  55.                 this.applyVariant();
  56.  
  57.                 mmcore.IntegrationFactory.initialize('Omniture', {
  58.                     campaign: this.name,
  59.                     parameters: ['eVar6']
  60.                 });
  61.             }.bind(this));
  62.  
  63.             return req;
  64.         },
  65.         checkGenRules: function () {
  66.             if (!isOffer()) {
  67.                 return (new mmcore.Deferred()).reject().promise();
  68.             }
  69.  
  70.             return waitDom();
  71.  
  72.             function isOffer() {
  73.                 var offer;
  74.  
  75.                 try {
  76.                     offer = location.search.match(/offer=([0-9]+)/)[1];
  77.                 } catch (e) {
  78.                 }
  79.  
  80.                 return ['115', '167'].indexOf(offer);
  81.             }
  82.  
  83.             function waitDom() {
  84.                 return mmcore.waitFor(function () {
  85.                     return document.querySelector('.step-chevron-outer.last');
  86.                 })
  87.             }
  88.         },
  89.         fnToStr: function (func) {
  90.             var resultStr = /\*([^*]|[\r\n]|(\*+([^*/]|[\r\n])))*\*+/.exec(func.toString());
  91.             return resultStr[0].replace(/(^\*|\*$)/g, '');
  92.         }
  93.     });
  94.  
  95.     campaign.varsModule = {
  96.         render: function (variant) {
  97.             var lastChevron = document.querySelector('.step-chevron-outer.last');
  98.             var calcNode = document.createElement('div');
  99.             var calculator = {};
  100.             var lastVal = '';
  101.  
  102.             mmcore.AttachStyle(this.css);
  103.  
  104.             calcNode.innerHTML = this.html;
  105.             calcNode = calcNode.querySelector('.step-chevron-outer');
  106.  
  107.             calculator.input = calcNode.querySelector('.mm-t119-field__input');
  108.             calculator.bonus = calcNode.querySelector('.mm-t119-bonus');
  109.             calculator.regBonus = calcNode.querySelector('.mm-t119-reg-bonus');
  110.             calculator.sum = calcNode.querySelector('.mm-t119-total-bonus');
  111.  
  112.             calculator.input.value = lastVal;
  113.  
  114.             lastChevron.classList.remove('last');
  115.  
  116.             insertAfter(calcNode, lastChevron);
  117.  
  118.             calculator.input.addEventListener('blur', handleBlur);
  119.             calculator.input.addEventListener('keydown', handleKey);
  120.             calculator.input.addEventListener('keyup', handleKey);
  121.  
  122.             if (variant === 'A2') {
  123.                 calculator.input.parentNode.classList.add('mm-t119-field_low')
  124.             }
  125.  
  126.             if (variant === 'A3') {
  127.                 calculator.input.value = 30;
  128.                 handleKey();
  129.             }
  130.  
  131.             function insertAfter(node, refNode) {
  132.                 refNode.parentNode.insertBefore(node, refNode.nextElementSibling);
  133.             }
  134.  
  135.             function validateKey(e) {
  136.                 var pressedKey = e.which ? e.which : event.keyCode;
  137.                 var allowedKeys = [8, 9, 13, 37, 39, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 110, 188, 190];
  138.  
  139.                 return allowedKeys.indexOf(pressedKey) !== -1;
  140.             }
  141.  
  142.             function handleKey(evt) {
  143.                 console.log('evt', evt.type, calculator.input.value)
  144.  
  145.                 if (evt && evt.type === 'keydown' && !validateKey(evt)) {
  146.                     console.log('prevention', calculator.input.value)
  147.                     evt.preventDefault();
  148.                 } else {
  149.                     setTimeout(function() {
  150.                         console.log('in timeout', calculator.input.value)
  151.                         if (lastVal === calculator.input.value) {
  152.                             return;
  153.                         }
  154.  
  155.                         var numVal = parseInt(calculator.input.value.replace(/[^0-9]/g, ''), 10);
  156.  
  157.                         console.log('num', numVal)
  158.  
  159.                         calculator.input.value = lastVal = formatNum(numVal, true);
  160.  
  161.                         console.log('aft format', calculator.input.value)
  162.  
  163.                         recalculate(numVal);
  164.                     }, 0);
  165.                 }
  166.             }
  167.  
  168.             function handleBlur() {
  169.                 var val = calculator.input.value.replace(/[^0-9]/g, '');
  170.  
  171.                 mmcore.SetAction('T119_Interaction ', 1, val || 'blank');
  172.                 mmcore.request();
  173.             }
  174.  
  175.             function formatNum(number, hideCurr) {
  176.                 var result = number.toString().replace(/[^0-9]/g, '');
  177.  
  178.                 if (result && !hideCurr) {
  179.                     result = '£' + result;
  180.                 }
  181.  
  182.                 return result;
  183.             }
  184.  
  185.             function recalculate(num) {
  186.                 var bonus;
  187.  
  188.                 if (!num || num < 5) {
  189.                     calculator.bonus.innerHTML = '';
  190.                     calculator.regBonus.innerHTML = '';
  191.                     calculator.sum.innerHTML = '';
  192.                     calculator.input.parentNode.classList.add('mm-t119-field_low')
  193.                 } else {
  194.                     bonus = num * 2;
  195.                     bonus = bonus > 1000 ? 1000 : bonus;
  196.  
  197.                     calculator.bonus.innerHTML = formatNum(bonus);
  198.                     calculator.regBonus.innerHTML = formatNum('10');
  199.                     calculator.sum.innerHTML = formatNum(num + bonus + 10);
  200.                     calculator.input.parentNode.classList.remove('mm-t119-field_low')
  201.                 }
  202.             }
  203.         },
  204.         html: campaign.fnToStr(function () {
  205.             /*            
  206.             <div class="mm-t119-calc step-chevron-outer last">
  207.                 <div class="step-chevron">
  208.                     <div class="step-chevron-inner-shadow">
  209.                         <div class="step-chevron-inner">
  210.                             <div class="lp-step-middle">
  211.                                 <div class="lp-step-info">
  212.                                     <div class="mm-t119-header">
  213.                                         DISCOVER YOUR PLAYING AMOUNT
  214.                                     </div>
  215.                                     <div class="mm-t119-main">
  216.                                         <div class="mm-t119-col-1">
  217.                                             <div class="mm-t119-top">
  218.                                                 Enter deposit<br>
  219.                                                 amount here
  220.                                             </div>
  221.                                             <div class="mm-t119-bot">
  222.                                                 <div class="mm-t119-field">
  223.                                                     <input class="mm-t119-field__input" maxlength="5" pattern="\d*">
  224.                                                 </div>
  225.                                             </div>
  226.                                         </div>
  227.                                         <div class="mm-t119-col-2">
  228.                                             <div class="mm-t119-bot">+</div>
  229.                                         </div>
  230.                                         <div class="mm-t119-col-3">
  231.                                             <div class="mm-t119-top">
  232.                                                 Your<br>
  233.                                                 bonus
  234.                                             </div>
  235.                                             <div class="mm-t119-bot mm-t119-bonus"></div>
  236.                                         </div>
  237.                                         <div class="mm-t119-col-4">
  238.                                             <div class="mm-t119-top"></div>
  239.                                             <div class="mm-t119-bot">+</div>
  240.                                         </div>
  241.                                         <div class="mm-t119-col-5">
  242.                                             <div class="mm-t119-top">
  243.                                                 Registration<br>
  244.                                                 Bonus
  245.                                             </div>
  246.                                             <div class="mm-t119-bot mm-t119-reg-bonus"></div>
  247.                                         </div>
  248.                                         <div class="mm-t119-col-6">
  249.                                             <div class="mm-t119-top"></div>
  250.                                             <div class="mm-t119-bot">=</div>
  251.                                         </div>
  252.                                         <div class="mm-t119-col-7">
  253.                                             <div class="mm-t119-top">
  254.                                                 Total<br>
  255.                                                 Balance
  256.                                             </div>
  257.                                             <div class="mm-t119-bot mm-t119-total-bonus"></div>
  258.                                         </div>
  259.                                     </div>
  260.                                 </div>
  261.                             </div>
  262.                         </div>
  263.                     </div>
  264.                 </div>
  265.             </div>
  266.                          */
  267.         }),
  268.         css: campaign.fnToStr(function () {
  269.             /*
  270.             .mm-t119 .mm-t119-calc .lp-step-info {
  271.                 max-width: 100%;
  272.                 width: 100%;
  273.                 margin: 0px;
  274.                 padding: 0;
  275.             }
  276.  
  277.             .mm-t119 .step-chevron-inner {
  278.                 display: block;
  279.             }
  280.  
  281.             .mm-t119 .mm-t119-main {
  282.                 font-size: 70%;
  283.                 line-height: 1;
  284.                 margin-top: 10px;
  285.                 width: 100%;
  286.             }
  287.  
  288.             .mm-t119 .mm-t119-row {
  289.                 display: flex;
  290.                 align-items: center;
  291.             }
  292.  
  293.             .mm-t119 .mm-t119-field__input {
  294.                 width: 100%;
  295.                 box-sizing: border-box;
  296.                 border: none;
  297.                 border-radius: .2em;
  298.                 outline: none;
  299.  
  300.                 padding-left: .8em;
  301.  
  302.                 font-size: 1.2em;
  303.                 font-weight: bold;
  304.                 height: 1.67em;
  305.             }
  306.  
  307.             .mm-t119 .mm-t119-field {
  308.                 position: relative;
  309.             }
  310.  
  311.             .mm-t119-field:before {
  312.                 content: '£';
  313.                 color: black;
  314.                 position: absolute;
  315.                 padding-left: .2em;
  316.                 font-size: 1.2em;
  317.  
  318.                 line-height: normal;
  319.  
  320.                 top: 0;
  321.                 left: 0;
  322.                 height: 100%;
  323.                 display: -webkit-flex;
  324.                 display: flex;
  325.                 -webkit-align-items: center;
  326.                 align-items: center;
  327.             }
  328.  
  329.             .mm-t119 .mm-t119-field_low:after {
  330.                 content: 'min £5 deposit';
  331.                 font-size: .6em;
  332.                 position: absolute;
  333.                 width: 100%;
  334.                 left: 0;
  335.                 top: 100%;
  336.                 padding-top: .3em;
  337.                 line-height: normal;
  338.             }
  339.  
  340.             .mm-t119 .mm-t119-row.mm-t119-last {
  341.                 margin-top: 10px;
  342.                 padding-bottom: 1em;
  343.             }
  344.  
  345.             .mm-t119 .mm-t119-row.mm-t119-last .mm-t119-col.mm-t119-col-7 {
  346.                 font-size: 2em
  347.             }
  348.  
  349.             .mm-t119 .mm-t119-col.mm-t119-col-2,
  350.             .mm-t119 .mm-t119-col.mm-t119-col-4,
  351.             .mm-t119 .mm-t119-col.mm-t119-col-6 {
  352.                 font-size: 1em;
  353.             }
  354.  
  355.             .mm-t119-col-1 {
  356.                 width: 24%;
  357.             }
  358.  
  359.             .mm-t119-main {
  360.                 display: -webkit-flex;
  361.                 display: flex;
  362.                 -webkit-align-items: flex-end;
  363.                 align-items: flex-end;
  364.                 -webkit-justify-content: space-between;
  365.                 justify-content: space-between;
  366.             }
  367.  
  368.             .mm-t119-top {
  369.                 -webkit-align-self: flex-start;
  370.                 align-self: flex-start;
  371.                 font-size: .8em;
  372.             }
  373.  
  374.             .mm-t119-bot {
  375.                 line-height: 2em;
  376.                 min-height: 2em;
  377.                 margin-top: 10px;
  378.                 font-size: 1.2em;
  379.                 font-weight: bold;
  380.             }
  381.  
  382.             .mm-t119-top,
  383.             .mm-t119-bot {
  384.             }
  385.  
  386.             .mm-t119-col-5 {
  387.                 margin: 0 -1em;
  388.             }
  389.  
  390.             .mm-t119-bot.mm-t119-total-bonus {
  391.                 font-size: 2em;
  392.                 line-height: 1.2em;
  393.                 min-height: 1.2em;
  394.             }
  395.  
  396.             .mm-t119-main {
  397.                 padding-bottom: 15px;
  398.             }
  399.  
  400.             @media only screen and (min-width: 641px) {
  401.                 .mm-t119 .page-container {
  402.                     height: auto;
  403.                 }
  404.  
  405.                 .mm-t119 .page-width {
  406.                     text-align: right;
  407.                 }
  408.  
  409.                 .mm-t119 .page-copy {
  410.                     float: none;
  411.                     display: inline-block;
  412.                 }
  413.             }
  414.         */
  415.         })
  416.     };
  417.  
  418.     campaign.checkGenRules().done(function () {
  419.         campaign.requestVariant()
  420.     });
  421. })();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement