// ==UserScript== // @name Trello Copy // @namespace 1207bd0a-0252-4c8d-9134-d40ac51e4248 // @match https://trello.com/* // @grant none // @version 1.0.0 // @author Rick0 // @description Trello 功能擴充 // @require https://unpkg.com/clipboard@2/dist/clipboard.min.js // @downloadURL none // ==/UserScript== // == class == class Card { url = location.href.match(/(https?:\/\/.+)\//)[1] title () { return document.querySelector('.mod-card-back-title.js-card-detail-title-input').value } // description = document.querySelector('.description-title > .u-inline-block') // headerIcon = document.querySelector('.window-header-icon') // header = document.querySelector('.window-header') } // == global function == function setCSS(src) { let stylesheet = createNode(``) document.head.appendChild(stylesheet) } function setClipboardJS() { copyButton = createNode(``) document.body.appendChild(copyButton) new ClipboardJS('.oneCopy') } function setClipboard (text) { copyButton.setAttribute('data-clipboard-text', text) copyButton.click() } function createNode(html) { let template = document.createElement('template') template.innerHTML = html return template.content.firstChild } function createButton (buttonName, eventName, callback) { let button = createNode(`
`) let link = button.querySelector('a') link.addEventListener(eventName, callback) return button } function createCopyButton (buttonName, text) { return createButton(buttonName, 'click', function () { setClipboard(text) }) } // == global var == // == program start == // setCSS('https://cdnjs.cloudflare.com/ajax/libs/animate.css/3.7.2/animate.css') setClipboardJS() let observer = new MutationObserver(function () { let isCardDeatilMode = (location.pathname.slice(1, 2) === 'c') if (isCardDeatilMode) { let card = new Card() let tagArea = document.querySelector('.window-main-col>.card-detail-data') let copyArea = createNode(`