Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
Size: Mime:
"use strict";

Object.defineProperty(exports, "__esModule", {
  value: true
});
/**
 * @see https://w3c.github.io/clipboard-apis/#clipboard-event-paste
 * @see https://stackoverflow.com/questions/34045777/copy-to-clipboard-using-javascript-in-ios
 */

const IS_BROWSER = typeof document === 'object';

function isOS() {
  return navigator.userAgent.match(/ipad|iphone/i) ? true : false;
}

exports.isOS = isOS;

function copyToClipboard(urlToCopy) {
  if (IS_BROWSER) {
    const listener = event => {
      event.clipboardData.setData('text/plain', urlToCopy);
      event.preventDefault();
    };

    document.addEventListener('copy', listener);
    document.execCommand('copy');
    document.removeEventListener('copy', listener);
  }
}

exports.copyToClipboard = copyToClipboard;

function makeEditable(dom) {
  if (IS_BROWSER) {
    dom.contentEditable = true;
    dom.readonly = false;
  }
}

exports.makeEditable = makeEditable;

function createElement(text, scoped) {
  console.debug('[Copy] creating element');

  if (IS_BROWSER) {
    scoped.textArea = document.createElement('textArea');
    scoped.textArea.value = text;
    scoped.textArea.innerHTML = text;
    makeEditable(scoped.textArea);
    document.body.appendChild(scoped.textArea); // window.textarea = scoped.textArea

    scoped.actions.push('appended textArea');
  }
}

exports.createElement = createElement;

function selectText(scoped) {
  console.debug('[Copy] selecting text');

  if (IS_BROWSER) {
    const range = document.createRange();
    range.selectNodeContents(scoped.textArea);
    const selection = window.getSelection();
    selection.removeAllRanges();
    selection.addRange(range);
    scoped.textArea.setSelectionRange(0, 999999);
    scoped.actions.push('set selection range');
  }
}

exports.selectText = selectText;

function executeCopyToClipboard(scoped) {
  console.debug('[Copy] executing copy');

  if (IS_BROWSER) {
    document.execCommand('copy');
    document.body.removeChild(scoped.textArea);
  }
}

exports.executeCopyToClipboard = executeCopyToClipboard;

function copy(text) {
  if (IS_BROWSER) {
    const scoped = {
      textArea: document.createElement('textArea'),
      editableDiv: document.createElement('div'),
      actions: []
    };

    if (isOS()) {
      console.debug('[Copy] iOS');
      createElement(text, scoped);
      selectText(scoped);
      executeCopyToClipboard(scoped);
    } else {
      console.debug('[Copy] native export functionality');
      copyToClipboard(text);
    }
  }
}

exports.copy = copy; //# sourceMappingURL=Copy.js.map