68 lines
2.0 KiB
JavaScript
68 lines
2.0 KiB
JavaScript
(function () {
|
|
var buttons = document.querySelectorAll("[data-share-page]");
|
|
if (!buttons.length) return;
|
|
|
|
var RESET_MS = 2000;
|
|
|
|
function fallbackCopy(text) {
|
|
var ta = document.createElement("textarea");
|
|
ta.value = text;
|
|
ta.setAttribute("readonly", "");
|
|
ta.style.cssText = "position:fixed;top:0;left:0;width:1px;height:1px;padding:0;border:0;opacity:0;";
|
|
document.body.appendChild(ta);
|
|
ta.focus();
|
|
ta.select();
|
|
ta.setSelectionRange(0, ta.value.length);
|
|
var ok = false;
|
|
try {
|
|
ok = document.execCommand("copy");
|
|
} catch (_) {
|
|
ok = false;
|
|
}
|
|
document.body.removeChild(ta);
|
|
return ok;
|
|
}
|
|
|
|
function copyText(text) {
|
|
if (navigator.clipboard && navigator.clipboard.writeText) {
|
|
return navigator.clipboard.writeText(text).catch(function () {
|
|
fallbackCopy(text);
|
|
});
|
|
}
|
|
fallbackCopy(text);
|
|
return Promise.resolve();
|
|
}
|
|
|
|
function showCopied(btn, label, original) {
|
|
if (label) {
|
|
label.textContent = "链接已复制";
|
|
label.classList.add("is-copied");
|
|
}
|
|
btn.classList.add("is-share-copied");
|
|
btn.setAttribute("aria-label", "链接已复制");
|
|
if (typeof window.showToast === "function") {
|
|
window.showToast("链接已复制", "success");
|
|
}
|
|
if (btn._shareResetTimer) window.clearTimeout(btn._shareResetTimer);
|
|
btn._shareResetTimer = window.setTimeout(function () {
|
|
if (label) {
|
|
label.textContent = original;
|
|
label.classList.remove("is-copied");
|
|
}
|
|
btn.classList.remove("is-share-copied");
|
|
btn.setAttribute("aria-label", original || "分享");
|
|
btn._shareResetTimer = 0;
|
|
}, RESET_MS);
|
|
}
|
|
|
|
Array.prototype.forEach.call(buttons, function (btn) {
|
|
var label = btn.querySelector("[data-share-page-label]");
|
|
var original = (label && label.textContent) || btn.getAttribute("aria-label") || "分享";
|
|
btn.addEventListener("click", function (event) {
|
|
event.preventDefault();
|
|
showCopied(btn, label, original);
|
|
copyText(window.location.href);
|
|
});
|
|
});
|
|
})();
|