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();
});