highlight-share
Version:
Medium-like text selection sharing without dependencies
45 lines (42 loc) • 3.49 kB
JavaScript
export function render(text, rawText, refUrl) {
return `<a title="Copy" data-quote="${rawText}" href="${refUrl}" target="_blank" rel="noopener nofollow noreferrer">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 20 20" style="enable-background:new 0 0 20 20;" xml:space="preserve">
<path d="M8.1,15.1c-0.3,0-0.5,0.2-0.5,0.5c0,0.3,0.2,0.5,0.5,0.5h8.2c0.3,0,0.5-0.2,0.5-0.5
c0-0.3-0.2-0.5-0.5-0.5h0H8.1C8.2,15.1,8.2,15.1,8.1,15.1L8.1,15.1z M8.1,11.7c-0.3,0-0.5,0.2-0.5,0.5c0,0.3,0.2,0.5,0.5,0.5h8.2
c0.3,0,0.5-0.2,0.5-0.5c0-0.3-0.2-0.5-0.5-0.5c0,0,0,0,0,0H8.1C8.2,11.7,8.2,11.7,8.1,11.7L8.1,11.7z M8.1,8.3
c-0.3,0-0.5,0.2-0.5,0.5c0,0.3,0.2,0.5,0.5,0.5h8.2c0.3,0,0.5-0.2,0.5-0.5c0-0.3-0.2-0.5-0.5-0.5c0,0,0,0,0,0H8.1
C8.2,8.3,8.2,8.3,8.1,8.3L8.1,8.3z M6,5.4h12.5c0.3,0,0.5,0.2,0.5,0.5v12.7c0,0.3-0.2,0.5-0.5,0.5H6c-0.3,0-0.5-0.2-0.5-0.5V5.9
C5.5,5.6,5.7,5.4,6,5.4L6,5.4z M1.7,1h12.5c0.3,0,0.5,0.2,0.5,0.5v2.9H6c-0.8,0-1.4,0.7-1.4,1.5v8.8H1.7c-0.3,0-0.5-0.2-0.5-0.5
V1.5C1.2,1.2,1.4,1,1.7,1L1.7,1z M1.7,0C0.9,0,0.2,0.7,0.2,1.5v12.7c0,0.8,0.7,1.5,1.4,1.5h2.9v2.9C4.6,19.3,5.2,20,6,20h12.5
c0.8,0,1.4-0.7,1.4-1.5V5.9c0-0.8-0.7-1.5-1.4-1.5h-2.9V1.5C15.7,0.7,15,0,14.2,0H1.7z" fill="currentcolor" />
<path d="M8.1,15.1c-0.3,0-0.5,0.2-0.5,0.5c0,0.3,0.2,0.5,0.5,0.5h8.2c0.3,0,0.5-0.2,0.5-0.5
c0-0.3-0.2-0.5-0.5-0.5h0H8.1C8.2,15.1,8.2,15.1,8.1,15.1z M8.1,11.7c-0.3,0-0.5,0.2-0.5,0.5c0,0.3,0.2,0.5,0.5,0.5h8.2
c0.3,0,0.5-0.2,0.5-0.5c0-0.3-0.2-0.5-0.5-0.5c0,0,0,0,0,0H8.1C8.2,11.7,8.2,11.7,8.1,11.7z M8.1,8.3c-0.3,0-0.5,0.2-0.5,0.5
c0,0.3,0.2,0.5,0.5,0.5h8.2c0.3,0,0.5-0.2,0.5-0.5c0-0.3-0.2-0.5-0.5-0.5c0,0,0,0,0,0H8.1C8.2,8.3,8.2,8.3,8.1,8.3z M6,5.4h12.5
c0.3,0,0.5,0.2,0.5,0.5v12.7c0,0.3-0.2,0.5-0.5,0.5H6c-0.3,0-0.5-0.2-0.5-0.5V5.9C5.5,5.6,5.7,5.4,6,5.4z M1.7,1h12.5
c0.3,0,0.5,0.2,0.5,0.5v2.9H6c-0.8,0-1.4,0.7-1.4,1.5v8.8H1.7c-0.3,0-0.5-0.2-0.5-0.5V1.5C1.2,1.2,1.4,1,1.7,1z M1.7,0
C0.9,0,0.2,0.7,0.2,1.5v12.7c0,0.8,0.7,1.5,1.4,1.5h2.9v2.9C4.6,19.3,5.2,20,6,20h12.5c0.8,0,1.4-0.7,1.4-1.5V5.9
c0-0.8-0.7-1.5-1.4-1.5h-2.9V1.5C15.7,0.7,15,0,14.2,0H1.7z" fill="currentcolor" />
</svg></a>`;
}
export function action(event, item) {
event.preventDefault();
const li = item.firstChild;
const { href } = li;
const quote = li.getAttribute("data-quote");
const placeholder = document.createElement("input");
document.body.appendChild(placeholder);
placeholder.value = `\"${quote.replace(/^\s+|\s+$/g, "")}\" ${href}`; // eslint-disable-line no-useless-escape
placeholder.select();
let succeed;
try {
succeed = document.execCommand("copy");
} catch (e) {
succeed = false;
} finally {
li.innerHTML = "<svg version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" x=\"0px\" y=\"0px\" viewBox=\"0 0 100 100\" enable-background=\"new 0 0 100 100\" xml:space=\"preserve\"><polyline class=\"check\" fill=\"none\" stroke=\"currentcolor\" stroke-width=\"10\" stroke-miterlimit=\"20\" points=\"15,60 40,80 85,20\" /></svg>";
document.body.removeChild(placeholder);
}
return succeed;
}
export const name = "copy";