Greasy Fork is available in English.
给Keylol增加历史浏览记录功能
// ==UserScript== // @name keylol-history // @namespace http://tampermonkey.net/ // @version 0.3 // @description 给Keylol增加历史浏览记录功能 // @author yuyinws // @include https://keylol.com/* // @icon https://keylol.com/favicon.ico // @grant unsafeWindow // @license MIT // ==/UserScript== // URL参数获取 function GetQueryString(name) { var reg = new RegExp('(^|&)' + name + '=([^&]*)(&|$)', 'i') var r = window.location.search.substr(1).match(reg) var context = '' if (r != null) context = decodeURIComponent(r[2]) reg = null r = null return context == null || context == '' || context == 'undefined' ? '' : context } class History { constructor(url) { this.history = JSON.parse(window.localStorage.getItem('history')) || [] if (url.indexOf('https://keylol.com/t') > -1) { this.tID = url.split('t')[3].split('-')[0] this.tTitle = document.querySelector('#thread_subject').title this.add() } else if (GetQueryString('tid')) { this.tID = GetQueryString('tid') this.tTitle = document.querySelector('#thread_subject').title this.add() } } add() { this.history.forEach((item, index) => { if (item.tID === this.tID) { this.history.splice(index, 1) return } }) this.history.unshift({ tID: this.tID, tTitle: this.tTitle, }) window.localStorage.setItem('history', JSON.stringify(this.history)) } get() { return this.history } } // 渲染卡片样式 const renderPanel = (_hisList) => { let ref = document.querySelector('.list-inline').childNodes[4] let father = document.querySelector('.list-inline') let historyDom = document.createElement('div') let historyCard = document.createElement('div') let clearHistory = document.createElement('button') let historyWrapper = document.createElement('div') let historyInput = document.createElement('input') historyInput.placeholder = '搜索历史记录' historyInput.id = 'history-input' historyWrapper.id = 'history-wrapper' clearHistory.id = 'clearHistory' clearHistory.innerHTML = '清空记录' historyInput.style.display = 'block' historyInput.style.marginLeft = '5px' historyInput.style.width = '200px' historyInput.style.borderRadius = '3px' historyInput.style.border = '1px solid #D1D5DB' clearHistory.style.margin = '4px 0 4px 5px' clearHistory.style.padding = '4px 8px' clearHistory.style.background = '#74bcff' clearHistory.style.border = 'none' clearHistory.style.color = '#fff' clearHistory.style.borderRadius = '4px' clearHistory.style.cursor = 'pointer' historyDom.style.position = 'relative' historyDom.id = 'history' historyDom.style.height = '30px' historyDom.style.lineHeight = '27px' historyDom.style.display = 'inline-block' historyDom.style.padding = '0 10px' historyCard.id = 'historyCard' historyCard.style.width = '250px' historyCard.style.minHeight = '50px' historyCard.style.maxHeight = '200px' historyCard.style.overflowY = 'auto' historyCard.style.border = '1px solid #D1D5DB' historyCard.style.position = 'absolute' historyCard.style.left = '-70px' historyCard.style.zIndex = '999' historyCard.style.backgroundColor = '#fff' historyCard.style.display = 'none' historyDom.innerHTML = '<span id="historyText" style="cursor: pointer;">历史记录</span>' father.insertBefore(historyDom, ref) historyDom.appendChild(historyCard) historyCard.appendChild(clearHistory) historyCard.appendChild(historyInput) historyCard.appendChild(historyWrapper) historyDom.addEventListener('mouseover', () => { historyCard.style.display = 'block' }) historyDom.addEventListener('mouseout', () => { historyCard.style.display = 'none' }) historyInput.addEventListener('input', (e) => { const filterdHisList = _hisList.filter((item) => { if (item.tTitle.indexOf(e.target.value) > -1) { return true } }) renderHistory(filterdHisList) }) let historyText = document.querySelector('#historyText') historyText.addEventListener('mouseover', () => { historyDom.style.backgroundColor = '#74bcff' historyText.style.color = '#fff' }) historyText.addEventListener('mouseout', () => { historyDom.style.backgroundColor = '#f7f7f7' historyText.style.color = '#000' }) clearHistory.addEventListener('click', () => { window.localStorage.removeItem('history') historyWrapper.innerHTML = '<p style="text-align: center;">暂无历史记录</p>' }) } // 渲染历史记录 const renderHistory = (_hisList) => { let historyWrapper = document.querySelector('#history-wrapper') historyWrapper.innerHTML = '' if (_hisList.length === 0) { historyWrapper.innerHTML = '<p style="text-align: center;">暂无历史记录</p>' return } _hisList.forEach((item) => { let historyCardItem = document.createElement('div') historyCardItem.style.padding = '5px' historyCardItem.style.cursor = 'pointer' historyCardItem.style.borderBottom = '1px solid #D1D5DB' historyCardItem.style.fontSize = '12px' historyCardItem.style.color = '#000' historyCardItem.style.lineHeight = '20px' historyCardItem.innerHTML = `<a id="aTag" href="https://keylol.com/t${item.tID}-1-1">${item.tTitle}</a>` historyWrapper.appendChild(historyCardItem) }) } ;(() => { const history = new History(window.location.href) renderPanel(history.get()) renderHistory(history.get()) })()