Page MenuHomestyx hydra

behavior-oncopy.js
No OneTemporary

behavior-oncopy.js

/**
* @provides javelin-behavior-phabricator-oncopy
* @requires javelin-behavior
* javelin-dom
*/
/**
* Tools like Paste and Differential don't normally respond to the clipboard
* 'copy' operation well, because when a user copies text they'll get line
* numbers and other metadata.
*
* To improve this behavior, applications can embed markers that delimit
* metadata (left of the marker) from content (right of the marker). When
* we get a copy event, we strip out all the metadata and just copy the
* actual text.
*/
JX.behavior('phabricator-oncopy', function() {
var zws = '\u200B'; // Unicode Zero-Width Space
JX.enableDispatch(document.body, 'copy');
JX.Stratcom.listen(
['copy'],
null,
function(e) {
var selection;
var text;
if (window.getSelection) {
selection = window.getSelection();
text = selection.toString();
} else {
selection = document.selection;
text = selection.createRange().text;
}
if (text.indexOf(zws) == -1) {
// If there's no marker in the text, just let it copy normally.
return;
}
var result = [];
// Strip everything before the marker (and the marker itself) out of the
// text. If a line doesn't have the marker, throw it away (the assumption
// is that it's a line number or part of some other meta-text).
var lines = text.split('\n');
var pos;
for (var ii = 0; ii < lines.length; ii++) {
pos = lines[ii].indexOf(zws);
if (pos == -1 && ii !== 0) {
continue;
}
result.push(lines[ii].substring(pos + 1));
}
result = result.join('\n');
var rawEvent = e.getRawEvent();
var clipboardData = 'clipboardData' in rawEvent ?
rawEvent.clipboardData :
window.clipboardData;
clipboardData.setData('Text', result);
e.prevent();
});
});

File Metadata

Mime Type
text/plain
Expires
Fri, Nov 21, 3:05 PM (1 d, 22 h)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
352587
Default Alt Text
behavior-oncopy.js (1 KB)

Event Timeline