scan_code-8.x-1.0-beta4/js/scan_code.js

js/scan_code.js
/**
 * @file
 * Javascript file for scan code reading.
 */

(function (Drupal, drupalSettings, Quagga) {
  'use strict';

  var delay = 0;
  var throbber = 0;
  var open = false;
  var textBarcodeReading = drupalSettings.scan_code.textBarcodeReading;
  var patterns = drupalSettings.scan_code.patterns;
  if (drupalSettings.scan_code.statusOnLoad === 'open') {
    open = true;
  }

  Drupal.behaviors.BarcodeScanSearch = {
    attach: function (context, settings) {
      let scannerToggles = document.querySelectorAll('.scan-code-toggle');

      // If no media (camera, audio) - removing Barcode button.
      if (typeof navigator.mediaDevices === 'undefined') {
        console.log('Media devices does not exists or not allowed.');
      }

      scannerToggles.forEach(scannerToggle => {
        // If media devices does not allowed - removing scanner elements.
        if (typeof navigator.mediaDevices === 'undefined') {
          scannerToggle.remove();
        }
        else {
          scannerToggle.onclick = eventListener;
        }
      });

      /**
       * Scanner event listener.
       *
       * @param event
       */
      function eventListener(event) {
        event.preventDefault();
        let scannerContainer = document.querySelector('#scanner-container');
        if (scannerContainer === undefined || scannerContainer === null) {
          // Add scanner container
          scannerContainer = document.createElement('div');
          scannerContainer.id = 'scanner-container';
          scannerContainer.innerHTML = '<div id="interactive" class="viewport"></div>';
          this.parentElement.querySelector('input').parentElement.appendChild(scannerContainer);
          scannerContainer.style.display = 'block';

          open = true;
           Quagga.init({
            inputStream: {
              name: 'Live',
              type: 'LiveStream'
            },
            decoder: {
              readers: patterns,
            },
          }, function (err) {
            if (err) {
              console.log(err);
              return;
            }
            if (open) {
              Quagga.start();
            }
          });
        }
        else {
          open = false;
          Quagga.stop();
          scannerContainer.remove();
        }
      }

    }
  };

  // Processed - capturing process.
  Quagga.onProcessed(function (result) {
    if (delay < Date.now() - drupalSettings.scan_code.delay) {
      var drawingCtx = Quagga.canvas.ctx.overlay,
        drawingCanvas = Quagga.canvas.dom.overlay;

      var height = parseInt(drawingCanvas.getAttribute('height'));
      var width = parseInt(drawingCanvas.getAttribute('width'));

      drawingCtx.clearRect(0, 0, width, height);
      drawingCtx.fillStyle = 'rgba(0, 0, 0, 0.5)';
      drawingCtx.fillRect(0, height - 45, width, height);

      if (result && result.codeResult && result.codeResult.code) {
        Quagga.ImageDebug.drawPath(result.box, {x: 0, y: 1}, drawingCtx, {color: 'orange', lineWidth: 6});
        Quagga.ImageDebug.drawPath(result.line, {x: 'x', y: 'y'}, drawingCtx, {color: 'red', lineWidth: 3});
      }
      else {
        let dots = '';
        if (throbber < 30) {
          dots = '.';
        }
        else if (throbber < 60) {
          dots = '..';
        }
        else {
          dots = '...';
        }

        throbber++;
        if (throbber > 90) {
          throbber = 0;
        }

        let text = textBarcodeReading + dots;
        drawingCtx.font = '20px sans-serif';
        drawingCtx.fillStyle = 'white';
        drawingCtx.fillText(text, 10, height - 15);
      }
    }
  });

  // Processed - after scan code detection.
  Quagga.onDetected(function (result) {
    if (delay < Date.now() - drupalSettings.scan_code.delay) {
      delay = Date.now();

      // Draw needed image over scan (color rectangle).

      let drawingCtx = Quagga.canvas.ctx.overlay,
        drawingCanvas = Quagga.canvas.dom.overlay;
      let height = parseInt(drawingCanvas.getAttribute('height'));
      let width = parseInt(drawingCanvas.getAttribute('width'));

      drawingCtx.clearRect(0, height - 45, width, height);
      drawingCtx.fillStyle = 'rgba(0, 0, 0, 0.5)';
      drawingCtx.fillRect(0, height - 45, width, height);
      drawingCtx.fillStyle = 'white';
      drawingCtx.fillText(result.codeResult.code, 10, height - 15);

      let scannerContainer = document.querySelector('#scanner-container');
      let resultDetected = scannerContainer.parentElement.querySelector('input');
      resultDetected.select();
      resultDetected.value = result.codeResult.code;

      if (drupalSettings.scan_code.closeAfterScanning === 'closed') {
        Quagga.stop();
        scannerContainer.remove();
      }
    }
  });

})(Drupal, drupalSettings, Quagga);

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc