Advertisement
oscarviedma

Funcionalidad JS para el formulario QR - OV DIVI

Aug 24th, 2024 (edited)
424
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
HTML 6.76 KB | None | 0 0
  1. <script src="https://cdnjs.cloudflare.com/ajax/libs/qrcodejs/1.0.0/qrcode.min.js"></script>
  2. <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@simonwep/pickr/dist/themes/classic.min.css"/>
  3. <script src="https://cdn.jsdelivr.net/npm/@simonwep/pickr/dist/pickr.min.js"></script>
  4.  
  5. <script>
  6. let pickr;
  7. let currentColor = '#000000';
  8. let qrSize = 512;
  9.  
  10. function updateColor(color) {
  11.     currentColor = color.toHEXA().toString();
  12.     document.getElementById('ov-color-preview').style.backgroundColor = currentColor;
  13.     document.querySelector('.pcr-button').style.color = currentColor;
  14. }
  15.  
  16. // Inicializar Pickr
  17. window.addEventListener('load', () => {
  18.     pickr = Pickr.create({
  19.         el: '#ov-color-preview',
  20.         theme: 'classic',
  21.         default: currentColor,
  22.         swatches: [
  23.             'rgba(0, 0, 0, 1)',
  24.             'rgba(244, 67, 54, 1)',
  25.             'rgba(233, 30, 99, 1)',
  26.             'rgba(156, 39, 176, 1)',
  27.             'rgba(103, 58, 183, 1)',
  28.             'rgba(63, 81, 181, 1)',
  29.             'rgba(33, 150, 243, 1)',
  30.             'rgba(3, 169, 244, 1)',
  31.             'rgba(0, 188, 212, 1)',
  32.             'rgba(0, 150, 136, 1)',
  33.             'rgba(76, 175, 80, 1)'
  34.         ],
  35.         components: {
  36.             preview: true,
  37.             opacity: false,
  38.             hue: false,
  39.             interaction: {
  40.                 hex: true,
  41.                 rgba: false,
  42.                 hsla: false,
  43.                 hsva: false,
  44.                 cmyk: false,
  45.                 input: true,
  46.                 clear: true,
  47.                 save: true
  48.             }
  49.         },
  50.         i18n: {
  51.             'btn:save': 'Guardar',
  52.             'btn:clear': 'Limpiar',
  53.         }
  54.     });
  55.  
  56.     pickr.on('change', updateColor);
  57.     pickr.on('save', (color) => {
  58.         updateColor(color);
  59.         pickr.hide();
  60.     });
  61.  
  62.     document.getElementById('ov-qr-type').addEventListener('change', function() {
  63.         const whatsappInputs = document.querySelector('.ov-whatsapp-inputs');
  64.         const vcardInputs = document.querySelector('.ov-vcard-inputs');
  65.         const wifiInputs = document.querySelector('.ov-wifi-inputs');
  66.         const normalInput = document.getElementById('ov-qr-text');
  67.        
  68.         whatsappInputs.style.display = 'none';
  69.         vcardInputs.style.display = 'none';
  70.         wifiInputs.style.display = 'none';
  71.         normalInput.style.display = 'none';
  72.        
  73.         switch(this.value) {
  74.             case 'whatsapp':
  75.                 whatsappInputs.style.display = 'block';
  76.                 break;
  77.             case 'vcard':
  78.                 vcardInputs.style.display = 'block';
  79.                 break;
  80.             case 'wifi':
  81.                 wifiInputs.style.display = 'block';
  82.                 break;
  83.             default:
  84.                 normalInput.style.display = 'block';
  85.         }
  86.     });
  87. });
  88.  
  89. function showWarning(message) {
  90.     const warningElement = document.getElementById('ov-warning');
  91.     warningElement.textContent = message;
  92.     setTimeout(() => {
  93.         warningElement.textContent = '';
  94.     }, 3000);
  95. }
  96.  
  97. function setQRSize(size) {
  98.     qrSize = size;
  99. }
  100.  
  101. function generateQR() {
  102.     var type = document.getElementById("ov-qr-type").value;
  103.     var text = '';
  104.     var qrcodeContainer = document.getElementById("ov-qrcode");
  105.     qrcodeContainer.innerHTML = '<div class="qr-watermark"></div>';
  106.  
  107.     if (type === 'whatsapp') {
  108.         var number = document.getElementById("ov-whatsapp-number").value.trim();
  109.         var message = document.getElementById("ov-whatsapp-message").value.trim();
  110.         if (!number) {
  111.             showWarning('Por favor, ingresa un número de WhatsApp.');
  112.             return;
  113.         }
  114.         text = `https://wa.me/${number}?text=${encodeURIComponent(message)}`;
  115.     } else if (type === 'vcard') {
  116.         text = generateVCard();
  117.         if (!text) {
  118.             showWarning('Por favor, completa al menos el nombre en la vCard.');
  119.             return;
  120.         }
  121.     } else if (type === 'wifi') {
  122.         var ssid = document.getElementById("ov-wifi-ssid").value.trim();
  123.         var encryption = document.getElementById("ov-wifi-encryption").value;
  124.         var password = document.getElementById("ov-wifi-password").value.trim();
  125.        
  126.         if (!ssid) {
  127.             showWarning('Por favor, ingresa el nombre de la red WiFi.');
  128.             return;
  129.         }
  130.        
  131.         if (encryption !== 'nopass' && !password) {
  132.            showWarning('Por favor, ingresa la contraseña de la red WiFi.');
  133.             return;
  134.         }
  135.        
  136.         text = `WIFI:T:${encryption};S:${ssid};P:${password};H:false;;`;
  137.     } else {
  138.         text = document.getElementById("ov-qr-text").value.trim();
  139.         if (text === '') {
  140.             showWarning('Por favor, ingresa un texto antes de generar el código QR.');
  141.             return;
  142.         }
  143.     }
  144.  
  145.     var finalText = text;
  146.     switch(type) {
  147.         case "url":
  148.             if (!text.startsWith("http://") && !text.startsWith("https://")) {
  149.                finalText = "https://" + text;
  150.             }
  151.             break;
  152.         case "email":
  153.             finalText = "mailto:" + text;
  154.             break;
  155.         case "tel":
  156.             finalText = "tel:" + text;
  157.             break;
  158.         case "sms":
  159.             finalText = "sms:" + text;
  160.             break;
  161.     }
  162.  
  163.     new QRCode(qrcodeContainer, {
  164.         text: finalText,
  165.         width: 512,
  166.         height: 512,
  167.         colorDark: currentColor,
  168.         colorLight: "#ffffff",
  169.         correctLevel: QRCode.CorrectLevel.H
  170.     });
  171.  
  172.     qrcodeContainer.style.maxWidth = '280px';
  173.     qrcodeContainer.style.maxHeight = '280px';
  174.  
  175.     qrcodeContainer.querySelector('.qr-watermark').style.display = 'none';
  176.  
  177.     var downloadButton = document.querySelector('.descargar-qr');
  178.     downloadButton.textContent = 'Descargar QR';
  179. }
  180.  
  181. function handleQRDownload() {
  182.     downloadQR();
  183. }
  184.  
  185. function downloadQR() {
  186.     var qrCodeDiv = document.getElementById("ov-qrcode");
  187.     var canvas = qrCodeDiv.querySelector("canvas");
  188.     if (!canvas) {
  189.         showWarning('Por favor, genera un código QR antes de intentar descargarlo.');
  190.         return;
  191.     }
  192.  
  193.     var padding = 20;
  194.     var newCanvas = document.createElement('canvas');
  195.     var ctx = newCanvas.getContext('2d');
  196.     newCanvas.width = canvas.width + padding * 2;
  197.     newCanvas.height = canvas.height + padding * 2;
  198.  
  199.     ctx.fillStyle = "#ffffff";
  200.     ctx.fillRect(0, 0, newCanvas.width, newCanvas.height);
  201.  
  202.     ctx.drawImage(canvas, padding, padding);
  203.  
  204.     var link = document.createElement('a');
  205.     link.download = 'ov-qrcode.png';
  206.     link.href = newCanvas.toDataURL("image/png").replace("image/png", "image/octet-stream");
  207.     link.click();
  208. }
  209.  
  210. document.querySelector('.descargar-qr').onclick = handleQRDownload;
  211. </script>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement