NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript== // @name MTLNovel - Entity Colorizer // @namespace mtlcolorizer // @match https://www.mtlnovel.com/*/*/ // @grant GM_xmlhttpRequest // @grant GM_addStyle // @version 1.0 // @license MIT // @author Spawner // @description 3/18/2020, 16:10:42 AM // ==/UserScript== /* ChangeLog 1.0 - Initial Release */ GM_addStyle("hgltr { text-shadow: 0 0 1px #ea2027, 0 0 1px #34495e }"); const colorName = "rgb(211, 84, 0)"; const colorLocation = "rgb(142, 68, 173)"; var hashTableWords; window.onload = function() { hashTableWords = new Map(); var getText = Array.from(document.getElementsByClassName('post-content')[0].getElementsByClassName('en'), e => e.innerText).toString(); runScript(getText); }; function runScript(text) { GM_xmlhttpRequest( { method : "POST", url : "https://api.explosion.ai/displacy/ent", data : JSON.stringify( { "model" : "en_core_web_md", "text" : text }), headers : { "Content-Type": "application/json;charset=UTF-8" }, onload: function(response) { var jsonArray = JSON.parse(response.responseText); jsonArray.forEach(function(obj) { var entityType = obj.label; if( entityType == "PERSON" || entityType == "LOC" ) { var entityData = text.slice( obj.start, obj.end ); hashTableWords.set( entityData, entityType ); } }); for (const [key, value] of hashTableWords.entries()) { var color = (value[0] == "P") ? colorName : colorLocation; document.getElementsByClassName('post-content')[0].innerHTML = document.getElementsByClassName('post-content')[0].innerHTML.replace ( new RegExp(key, "ig"), '<hgltr style="color:' + color + '">' + key + '</hgltr>' ); } } }); }