use-on-demand
Version:
93 lines • 3.84 kB
JavaScript
import Clipboard from 'clipboard';
/**
* 依赖【clipboard】这个【第三方库】。
*/
var xX_CopyPaste_Util = /** @class */ (function () {
function xX_CopyPaste_Util() {
}
// 简单复制
xX_CopyPaste_Util.prototype.simpleCopy = function (selector) {
var clipboard = new Clipboard(selector);
return clipboard;
};
// 带回调的复制
xX_CopyPaste_Util.prototype.copyWithCb = function (selector, sucCb, errCb) {
var clipboard = this.simpleCopy(selector);
clipboard.on('success', sucCb);
clipboard.on('error', errCb);
return clipboard;
};
// 指定复制过程中的一些选项
xX_CopyPaste_Util.prototype.specialCopy = function (selector, options) {
// 基于目标元素,指定复制的真正元素(比如,我们需要复制目标元素的下一个元素)
var clipboard = new Clipboard(selector, options || {
// TIP 指定一个目标,真正复制的 是这个目标的下一个兄弟元素
target: function (trigger) {
return trigger.nextElementSibling;
},
// TIP 指定一个目标,复制的是这个目标的【aria-label】标签属性
text: function (trigger) {
return trigger.getAttribute('aria-label');
},
// TIP 指定一个目标,作为 复制过程中的container值(??? 这里的focus改变,指的是什么?)
container: document.getElementById('bootstrap-modal'),
// TIP 指定操作模式Action(剪切、复制)
action: function (elem) {
return 'cut';
},
});
};
// 销毁Clipboard对象
xX_CopyPaste_Util.prototype.destroy = function (clipboard) {
clipboard.destroy();
};
return xX_CopyPaste_Util;
}());
export { xX_CopyPaste_Util };
/**
* 没有【第三方库】的【复制粘贴】工具。
*/
var xX_CopyPaste_Util_noThirdLib = /** @class */ (function () {
function xX_CopyPaste_Util_noThirdLib() {
}
/**
*
* Copy到剪切板。
*
* 参考资料:
* 常规情况:
* 参考资料:[How do I copy to the clipboard in JavaScript? - Stack Overflow](https://stackoverflow.com/questions/400212/how-do-i-copy-to-the-clipboard-in-javascript)
*
* 特殊情况(【navigator.clipboard】不存在):
* https://stackoverflow.com/a/60292243/6264260
*/
xX_CopyPaste_Util_noThirdLib.copy_to_clipboard_compatibleInOldBrowser = function (p) {
if (typeof (navigator.clipboard) !== 'undefined') {
/**
* 一般,只有在【Https站】和【localhost】的情况下,才允许使用【navigator.clipboard】。
*/
navigator.clipboard.writeText(p);
}
else {
console.log('navigator.clipboard');
var textArea = document.createElement('textarea');
textArea.value = p;
textArea.style.position = 'fixed'; // avoid scrolling to bottom
document.body.appendChild(textArea);
textArea.focus();
textArea.select();
try {
var successful = document.execCommand('copy');
var msg = successful ? 'successful' : 'unsuccessful';
// toastr.info(msg);
}
catch (err) {
// toastr.warning('Was not possible to copy te text: ', err);
}
document.body.removeChild(textArea);
}
};
return xX_CopyPaste_Util_noThirdLib;
}());
export { xX_CopyPaste_Util_noThirdLib };
//# sourceMappingURL=copy-paste.js.map