高亮关键词

高亮特定网页中感兴趣的关键词

目前为 2017-07-31 提交的版本。查看 最新版本

// ==UserScript==
// @name                highlight-my-interest
// @name:zh-CN          高亮关键词
// @description         highlight keywords in my favorites
// @description:zh-CN   高亮特定网页中感兴趣的关键词
// @version             0.2.0
// @author              jferroal
// @license             GPL-3.0
// @grant               none
// @require             https://gf.qytechs.cn/scripts/31793-jmul/code/JMUL.js?version=208363
// @include             https://sspai.com/*
// @include             https://toutiao.io/*
// @include             http://www.inoreader.com/*
// @run-at              document-end
// @namespace           https://gf.qytechs.cn/users/34556-jferroal
// ==/UserScript==

(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
const KeywordService = require('./keyword.service');
const TextElement = require('./text-element');
const MaxDetectTime = 10000;
const DetectIntervalTime = 2000;

(function () {
    let alreadyLoadedTimes = 0;
    let handledCount = 0;
    const autoMatchInterval = setInterval(() => {
        if (alreadyLoadedTimes < MaxDetectTime) {
            alreadyLoadedTimes += 1;
            const elements = TextElement.findAll();
            if (elements.length === handledCount) return;
            KeywordService.list().then(function (keywords) {
                TextElement.setKeywords(keywords);
                handledCount += elements.length;
                elements.map((e) => e.detect().highlight());
            });
        } else {
            clearInterval(autoMatchInterval);
            console.log('will no match any more');
        }
    }, DetectIntervalTime);
})();

},{"./keyword.service":2,"./text-element":3}],2:[function(require,module,exports){
const InterestedKeywords = [
    "书籍",
    "效率",
    "google",
    "nexus",
    "爬虫",
    "python",
    "angular",
    "node",
    "javascript",
    "ukulele",
    "gtd",
    "工作流",
    "日程",
    "英雄联盟",
    "vps",
    "服务器",
    "书单",
    "免费",
    "限免",
    "数据分析",
    "自由职业",
    "lol",
    "react",
    "mobx",
];

class KeywordService {
    static list(forceLoad = false) {
        return new Promise((resolve) => {
            if (forceLoad) {
                // load from server;
            }
            resolve(KeywordService.InterestedKeywords);
        });

    }
}
KeywordService.InterestedKeywords = InterestedKeywords;

module.exports = KeywordService;
},{}],3:[function(require,module,exports){
let JMUL = window.JMUL || {};
const Map = (list, fn) => {
    let result = [];
    if (list && list.length) {
        for (let i = 0; i < list.length; i += 1) {
            result.push(fn(list[i]));
        }
    }
    return result;
};

class TextElement {
    constructor(element) {
        this.element = new JMUL.Element(element);
        this.shouldHighlight = false;
    }

    detect() {
        for (const keyword of TextElement.keywords) {
            const innerText = this.element.element.innerText.toLocaleLowerCase();
            if (innerText.indexOf(keyword) > -1) {
                this.shouldHighlight = true;
                break;
            }
        }
        return this;
    }

    highlight() {
        if (this.shouldHighlight) {
            this.element.setCss({
                backgroundColor: '#FFDA5E',
                color: 'black',
            });
        }
    }

    static setKeywords(keywords) {
        TextElement.keywords = keywords;
    }

    static findAll() {
        return TextElement.targetTagNames.reduce((res, tagName) => {
            const tags = document.getElementsByTagName(tagName);
            return res.concat(Map(tags, (e) => new TextElement(e)));
        }, []);
    }
}

TextElement.targetTagNames = ['h1', 'h2', 'h3', 'h4', 'h5', 'p', 'a', 'pre', 'blockquote', 'summary'];
module.exports = TextElement;
},{}]},{},[1]);

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址