Hidden copy data

by justindeal

HTML

aaa <code data-var="{{12346__foo}}">Foo</code> bbb

JavaScript

const getSelectedSourceTextInRange = range => {
  const start = range.startContainer;
  const end = range.endContainer;
  let current = start;
  const text = [];
  while (true) {
  	if (current === start && current.nodeType === Node.TEXT_NODE) {
    	text.push(current.data.substr(range.startOffset));
    } else if (current === end && current.nodeType === Node.TEXT_NODE) {
      text.push(current.data.substr(0, range.endOffset));
		} else if (current.getAttribute('data-var')) {
    	text.push(current.getAttribute('data-var'));
    }
    if (current === end) {
    	break;
    }
    current = current.nextSibling;
  }
  return text.join('');
};

const getSelectedSourceText = () => {
	const selection = window.getSelection();
  const text = [];
  for (let i = 0; i < selection.rangeCount; i++) {
  	const range = selection.getRangeAt(i);
    text.push(getSelectedSourceTextInRange(range));
  }
  return text.join('');
};

document.addEventListener('copy', e => {
  e.clipboardData.setData('text/plain', getSelectedSourceText());
  event.preventDefault();
});