$.fn.extend({ startConfigurator: function () { this.find('.element').elAction(); $('#pumpCfg').submitForm(); }, submitForm: function () { this.one('submit', function (evt) { evt.preventDefault(); var CONTROLLER = 'submit'; var k = ['name', 'adres'], good = true; $(this).find('[name]').removeClass('error'); $(this).find('p.ajaxInfo').hide(); if (/^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/.test($(this).find('[name="mail"]').val()) == false) { $(this).find('[name="mail"]').addClass('error'); good = false; } for (var i = 0; i < k.length; i++) { var obj = $(this).find('[name="' + k[i] + '"]'); if (obj.val().length <= 1) { good = false; obj.addClass('error'); } } if (good) { var fullName = $('#selected .header span').html(); $('#pdf-modal').addClass('show').find('.loading').html('Trwa generowanie dokumentu PDF'); $('body').css({ overflow: 'hidden' }); generatePDF(fullName, CONTROLLER); // generate PDF and SEND } else { $('p.ajaxInfo.error').show(); } }); }, elAction: function () { var once = true; this.one("click", function () { var $this = $(this); var $id = $(this).attr('data-id'); var $step = $(this).attr('data-group'); var $stepValue = $(this).attr('data-' + $step.toLowerCase()); var $stepContent = $('
'); var container = $('#pumpCfg .steps'); $stepContent.appendTo(container); //wrapper for step $(this).insertInputs($step, $stepValue); // insert values $.get(window.__URL__ + 'ajax/configurator.php?what=loadSteps&id=' + $id + '&step=' + $step, function (data) { var target = $('#pumpCfg').find('.step:last'); target.setSelected($this, $step); target.find('.wrapper').html(data).slideDown(300).setHeader(); target.find('.element').elAction(); }).then(function () { $this.clone().appendTo('#selected .thumbs'); $('#selected').removeClass('hide').goBack(); $('#pumpCfg').find('.step:last').endScreen($step, $id); $('#pumpCfg').find('.step:last').removeClass('loading'); scrollToForm($this); }); }); }, insertInputs: function ($step, $val) { $('input[name=' + $step + ']').val($val); }, clearInputs: function ($step) { $('input[name=' + $step + ']').next().val(''); $('input[name=' + $step + ']').next().next().val(''); $pos = ''; /* check clicked position; */ $('#selected .thumbs').find('.element').each(function (i) { if ($(this).data('group') == $step) { $pos = i; } }); /* remove all next thumbs */ $('#selected .thumbs').find('.element').each(function (t) { if ($pos !== '' && t >= $pos) { $(this).remove(); } }); }, setHeader: function () { var title = $(this).find('.headerTitle'); var parent = $(this).parents('.step'); if (!parent.find('.wrapper').prev().hasClass('header')) { title.insertBefore(parent.find('.wrapper')); title.removeClass('hidden headerTitle').addClass('header'); } }, setSelected: function ($this, $step) { $this.addClass('selected'); //selected item ; this.prev().find('.element:not(.selected)').each(function () { $(this).remove() }); // SPECS LOADED REMOVE REST; /*load specs*/ var url = window.__URL__ + '!data/configurator/specs/wymiary_' + $this.attr('data-specs') + '.jpg'; console.log(url); $.ajax({ type: "HEAD", url: url, success: function (message, text, response) { if (response.getResponseHeader('Content-Type').indexOf('image') !== -1) { $('').appendTo($this.find('.photo')); } } }); /*set selected header*/ var headerContent = $this.parents('.step').find('.header').text().replace('Wybierz', 'Wybrano'); $this.parents('.step').find('.header').html(headerContent + '' + $this.find('.desc').html() + ''); /*navi header */ $('#selected .header span').currentName(); }, endScreen: function ($step, $id) { if ($step == 'directionType') { var name = pumpName(); var $this = $(this); var url = window.__URL__ + '!data/configurator/' + name + '.JPG'; console.log(name); $.ajax({ type: "HEAD", url: url, success: function (message, text, response) { if (response.getResponseHeader('Content-Type').indexOf('image') !== -1) { $this.find('.final.photo img').attr('src', url); } } }); $.get(window.__URL__ + 'ajax/configurator.php?what=getTable&id=' + $id + '&name=' + pumpName(), function (data) { var header = $('#pumpTable').html(); $('#pumpTable').html(header + data); $('#pumpTable table').finalPump($this); }); } }, currentName: function () { var ret = ''; var inputs = $(this).parents('form').find('.inputs input'); inputs.each(function (i) { if ($(this).val() !== '' && $(this).attr('name') !== 'fullName') { ret = (i++ > 0 ? ret + '-' + $(this).val() : $(this).val()); } }); $(this).html(ret); }, goBack: function () { this.find('.thumbs .element').last().one("click", function () { var $this = $(this); var $id = $(this).attr('data-id'); var $step = $(this).attr('data-group'); var $stepValue = $(this).attr('data-' + $step.toLowerCase()); var $stepContent = $('
'); var clickIndex; $('#pumpCfg .steps').find('.step').each(function (index, e) { var element = $(this).find('.element:first'); if (element.attr('data-group') == $step) { clickIndex = index; } }); $('#pumpCfg .steps').find('.step').each(function (pos, e) { if (pos >= clickIndex) { $(this).remove(); } }); $stepContent.appendTo($('#pumpCfg .steps')); $(this).insertInputs($step, $stepValue); // insert values $(this).clearInputs($step); // $.get(window.__URL__ + 'ajax/configurator.php?what=loadSteps&id=' + $id + '&step=' + $step + '&goBack=1', function (data) { var target = $('#pumpCfg').find('.step:last'); target.setSelected($this, $step, 'goBack'); target.find('.wrapper').html(data).slideDown(300).setHeader(); $('#pumpCfg .steps').find('.step').each(function (pos, e) { if ($(this).find('.wrapper .element').length == 0) { $(this).remove(); } }); target.find('.element').elAction(); }).then(function () { $('#pumpCfg').find('.step').each(function () { $(this).removeClass('loading') }); scrollToForm($this); }); }); }, finalPump: function ($container) { this.find('tbody tr').on('click', function () { $container.find('tr').each(function () { $(this).removeClass('chosen'); }); var tableType = $(this).find('td:first').html(); var pump = pumpName(); var direction = $('input[name="directionType"]').val(); var fullName = tableType + ' ' + direction + ' / ' + pump.replace(/-/g, " "); $(this).addClass('chosen'); $container.parents('form').find('#selected .header span').html(fullName); //set input value $('#pumpCfg').insertInputs('fullName', fullName); // $('#buttons').find('.form_group').removeClass('hide'); if ($(window).width() < 991) { $('#genPdf').remove(); } else { $('#genPdf').genPdf(fullName); } $('html, body').animate({ scrollTop: $('#buttons').offset().top }, 500); }); }, genPdf: function ($fullname) { this.one('click', function () { $('#pdf-modal').addClass('show'); $('body').css({ overflow: 'hidden' }); generatePDF($fullname); }); } }); function pumpName() { var pump = $('#pumpCfg').find('input[name=mountType]').val(); var roller = $('#pumpCfg').find('input[name=rollerType]').val().replace('Typ ', ''); var flank = $('#pumpCfg').find('input[name=flankType]').val(); return pump + '-' + roller + '-' + flank } function generatePDF($fullname, CONTROLLER = 'click') { //alert("gen pdf"); var main = 'configurator/' + pumpName() + '.JPG'; var roller = 'configurator/specs/wymiary_' + $('div[data-group="rollerType"]').attr('data-specs') + '.jpg'; var flank = 'configurator/specs/wymiary_' + $('div[data-group="flankType"]').attr('data-specs') + '.jpg'; var mount = 'configurator/specs/wymiary_' + $('div[data-group="mountType"]').attr('data-specs') + '.jpg'; var direction = $('input[name="directionType"]').val(); var fullname = $fullname; var group_id = $('div[data-group="pumpType"]').attr('data-id'); var date = Date.now(); var tableBASE = ''; html2canvas(document.querySelector('#pumpTable table')).then(function (canvas) { //first generate canvas var main_canvas = document.createElement('canvas'); var element = $('#pumpTable').find('table'); var width = parseInt(element.width() + 4); var height = parseInt(element.height() + 4); var margin = parseInt(element.css('marginTop')); main_canvas.width = width; main_canvas.height = height; var ctx = main_canvas.getContext('2d'); //draw CANVAS ctx.fillStyle = "white"; ctx.fillRect(0, 0, main_canvas.width, main_canvas.height); ctx.drawImage(canvas, margin, margin, width, height, 0, 0, width, height); //CONVERT canvas to base64 tableBASE = main_canvas.toDataURL('image/jpeg', 1); $.ajax({ async: false, type: "POST", url: window.__URL__ + 'ajax/configurator.php?what=genPdf', data: { imgMain: main, imgRoller: roller, imgFlank: flank, imgMount: mount, fullname: fullname, groupname: pumpName(), direcion: direction, tableBase: tableBASE, date: date }, succes: function (data) { return data; }, error: function (err) { return err; } }).done(function (o) { name = fullname.replace(/\s+/g, '_'); name = name.replace(/\//g, '-'); var pdf = window.__URL__ + '!data/configurator/pdf/' + name + '_' + date + '.pdf'; //no async/await support // This is FIX if (CONTROLLER == 'click') { $('#pdf-modal .header').removeClass('loading') .addClass('flex column center') .html('
Twoja konfiguracja
Pobierz plik PDF'); $('#pdf-modal a').click(function () { $(this).parents('#pdf-modal').removeClass('show'); $('body').css({ overflow: 'unset' }); $('#genPdf').addClass('disabled').click(function (evt) { evt.preventDefault(); }); //DELETE GENERATED PDF AFTER CLICK ON BUTTON ON MODAL /*setTimeout(function () { $.ajax({ type: "POST", url: window.__URL__ + 'ajax/configurator.php?what=delPdf', data: { pdf: '!data/configurator/pdf/' + name + '_' + date + '.pdf' } }).done(function () { console.log('usunieto PDF'); }); }, 3000); */ }); } else if (CONTROLLER == 'submit') { $.ajax({ async: false, type: "POST", url: window.__URL__ + 'ajax/configurator.php?what=sendOrderConfigurator', data: { pdf: 'configurator/pdf/' + name + '_' + date + '.pdf', fullName: fullname, company: $('input[name=company]').val(), name: $('input[name=name]').val(), mail: $('input[name=mail]').val(), adres: $('input[name=adres]').val() } }).done(function () { $('body').css({ overflow: 'auto' }); $('#pdf-modal').removeClass('show'); $('p.ajaxInfo.ok').show().html('Wysłano formularz. Formularz odświeży się za 5s'); setTimeout(function () { location.reload(); }, 5000); }); } }); }); } function scrollToForm(target) { var where = target.parents('.step').next(); $('html, body').animate({ scrollTop: where.offset().top }, 500); } $(function () { $('.configurator').startConfigurator(); });