Tool for making comments to a 17lands draft log.
当前为
// ==UserScript== // @name 17lands Draft Log Comments // @namespace http://tampermonkey.net/ // @version 2025-11-26 // @description Tool for making comments to a 17lands draft log. // @author [email protected] (@iluvatar777) // @match https://www.17lands.com/draft/* // @icon https://www.google.com/s2/favicons?sz=64&domain=17lands.com // @grant GM_setClipboard // @license MIT // ==/UserScript== function init() { // TODO localStorage.setItem(getStorageKey('userid'), 'iluvatar777'); const userid = localStorage.getItem(getStorageKey('userid')); // add html to dom const el=document.getElementById('app')?.children[1]?.children[0]; const mainDiv = document.createElement('div'); mainDiv.id = 'comment-main'; mainDiv.innerHTML = ` <div id='comment-text-area' style='position: absolute; bottom: 10px; left: 20px; z-index: 100; background: rgba(0, 0, 0, .5);'> <div id='comment-controls' style='margin-bottom: 10px; background: rgba(0, 0, 0, .5)'> <span>Add comments to draft log</span> <button id='comment-button-export'>export</button> <button disabled id='comment-button-import'>import</button> <span>user id: <span id='comment-user-id'>${userid}</span></span> <button id='comment-button-clear' style='float: right'>clear comment</button> </div> <textarea id='comment-textarea' rows='4' cols='100'></textarea> </div> `; el.appendChild(mainDiv); //add listenrs window.navigation.addEventListener('navigate', handleNav); window.addEventListener("beforeunload", function(e){ localStorage.removeItem(getStorageKey('pick')) }); const clearButton = document.getElementById('comment-button-clear') clearButton.addEventListener("click", clearCurrentComment, false); const exportButton = document.getElementById('comment-button-export') exportButton.addEventListener("click", exportComments, false); } function handleNav(event) { const url = event.destination.url.split('/'); if (url.length !== 7) { //pick not in URL, ignore return; } const userid = localStorage.getItem(getStorageKey('userid')); const oldPick = localStorage.getItem(getStorageKey('pick')) const newPick = 'p' + url[5] + 'p' + url[6]; const draftid = url[4]; localStorage.setItem(getStorageKey('pick'), newPick) if ((oldPick === newPick) || !oldPick) return; const allComments = loadCommentsFromStorage(draftid) || {}; const newPickComments = allComments[newPick] || {}; const oldPickText = document.getElementById('comment-textarea').value; document.getElementById('comment-textarea').value = JSON.stringify((newPickComments[userid]) || '').slice(1, -1); storeText(draftid, oldPick, userid, oldPickText); } function clearCurrentComment() { const url = window.location.href.split('/'); const userid = localStorage.getItem(getStorageKey('userid')); const pick = 'p' + url[5] + 'p' + url[6]; const draftid = url[4]; storeText(draftid, pick, userid, ''); document.getElementById('comment-textarea').value = ''; } function storeText(draftid, pick, userid, text) { const allComments = loadCommentsFromStorage(draftid) || {}; const oldPickComments = allComments[pick] || {}; if ((text === '') && (allComments[pick] !== undefined)) { delete allComments[pick][userid]; console.log(allComments[pick]) } else { oldPickComments[userid] = text; allComments[pick] = oldPickComments; } console.log('allComments', allComments) setCommentsFromStorage(draftid, allComments); } function loadCommentsFromStorage(draftid) { return JSON.parse(localStorage.getItem(getStorageKey('comments'))); } function setCommentsFromStorage(draftid, comments) { return localStorage.setItem(getStorageKey('comments'), JSON.stringify(comments)); } function getCurrentPick(padded = false) { const url = window.location.href.split('/'); if (url.length !== 7) { //pick not in URL, ignore return; } return 'p' + url[5] + 'p' + url[6] + (padded && url[6] < 10 ? ' ' : ''); } function getStorageKey(item = '') { const url = window.location.href.split('/'); if (url.length !== 7) { //pick not in URL, ignore return; } return '17lcomments|' + url[4] + (item !== '' ? '|' + item : ''); } function exportComments() { const userid = localStorage.getItem(getStorageKey('userid')); const url = window.location.href.split('/'); const draftid = url[4]; const allComments = loadCommentsFromStorage(draftid); const allUsers = [userid]; const out = []; out.push('17lands|' + draftid + '|' + userid) for (let key of Object.keys(allComments).reverse()) { if (key[0] !== 'p') continue; //TODO don't assume only one user if (allComments[key][userid]) { out.push(key + (key.length < 5 ? ' ' : '') + ': ' + allComments[key][userid]) } } copyToClipboard(out.join('\n')); } function copyToClipboard(text) { if (navigator.clipboard && navigator.clipboard.writeText) { navigator.clipboard.writeText(text) .then(() => console.log('Comments copied to clipboard!')) .catch(err => console.error('Failed to copy text: ', err)); } else { console.log('clipboard not supported') } } (function() { 'use strict'; init(); })();