zent
Version:
一套前端设计语言和基于React的实现
71 lines (58 loc) • 1.82 kB
JavaScript
;
var _ToggleSelection = require('./ToggleSelection');
var _ToggleSelection2 = _interopRequireDefault(_ToggleSelection);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
function copy(text) {
var reselectPrevious = void 0,
range = void 0,
selection = void 0,
mark = void 0,
success = false;
try {
reselectPrevious = (0, _ToggleSelection2['default'])();
range = document.createRange();
selection = document.getSelection();
mark = document.createElement('span');
mark.textContent = text;
// reset user styles for span element
mark.style.all = 'unset';
// prevents scrolling to the end of the page
mark.style.position = 'fixed';
mark.style.top = 0;
mark.style.clip = 'rect(0, 0, 0, 0)';
// used to preserve spaces and line breaks
mark.style.whiteSpace = 'pre';
// do not inherit user-select (it may be `none`)
mark.style.webkitUserSelect = 'text';
mark.style.MozUserSelect = 'text';
mark.style.msUserSelect = 'text';
mark.style.userSelect = 'text';
document.body.appendChild(mark);
range.selectNode(mark);
selection.addRange(range);
var successful = document.execCommand('copy');
if (!successful) {
throw new Error('copy command was unsuccessful');
}
success = true;
} catch (err) {
try {
window.clipboardData.setData('text', text);
success = true;
} catch (e) {}
} finally {
if (selection) {
if (typeof selection.removeRange === 'function') {
selection.removeRange(range);
} else {
selection.removeAllRanges();
}
}
if (mark) {
document.body.removeChild(mark);
}
reselectPrevious();
}
return success;
}
module.exports = copy;