UNPKG

zent

Version:

一套前端设计语言和基于React的实现

71 lines (58 loc) 1.82 kB
'use strict'; 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;