Chrome拡張の高速な英語辞書ツール Mouse Dictionary を改造させていただきました

2018.9.18追記
Mouse Dictionaryの次期バージョン新機能について – カタテマ日記

ありがとうございます。以下、もう不要です。

 

元ネタは下記です。すげー便利です。おすすめです。

Chrome拡張の高速な英語辞書ツールをつくりました

 

仕事中なんですが、仕事にも使うんで……

本当に便利なChrome拡張のMouse Dictionaryなんですが、私の環境(Windows 10の最新のChrome)では字がちっちゃくてちっちゃくて、年寄りには辛いんですよね。なんでフォントを大きくしてみました。ついでに文字選択したとこを検索するようにしてみました。

いじったファイルはWindows 10だと下記の通りです。他の環境のことは分かりません。

Users\ユーザー名\AppData\Local\Google\Chrome\User Data\Default\Extensions\dnclbikcihnpjohihfcmmldgkjnebgnj\1.0.5_0\content.js

いじる前に念の為コピっときましょう。

本当はGitHubとかプルリクとか……よう分から、面倒なんでベタッと貼っときます……問題ありましたらお知らせください。ごめんなさい、先に謝っときます。

 

赤字のとこが追加したコードです。最初のが文字選択対応で、次がフォントサイズです。smallってのを12pxとか1.2emとか適当に変えてください。文字選択はmousemoveイベントの中なんで選択後にマウスを動かさないと反映されませんのでご注意ください。自画自賛ですが文字選択は便利かもです。

!function(t){var e={};function r(n){if(e[n])return e[n].exports;var i=e[n]={i:n,l:!1,exports:{}};return t[n].call(i.exports,i,i.exports,r),i.l=!0,i.exports}r.m=t,r.c=e,r.d=function(t,e,n){r.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:n})},r.r=function(t){“undefined”!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:”Module”}),Object.defineProperty(t,”__esModule”,{value:!0})},r.t=function(t,e){if(1&e&&(t=r(t)),8&e)return t;if(4&e&&”object”==typeof t&&t&&t.__esModule)return t;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,”default”,{enumerable:!0,value:t}),2&e&&”string”!=typeof t)for(var i in t)r.d(n,i,function(e){return t[e]}.bind(null,i));return n},r.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return r.d(e,”a”,e),e},r.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},r.p=””,r(r.s=7)}({7:function(t,e,r){“use strict”;r.r(e);const n={},i=/^[A-Z]$/;n.splitIntoWords=(t=>{const e=[];let r=null,n=0;for(;;){const i=t.charCodeAt(n);if(i>=33&&i<=126)null===r&&(r=n);else if(null!==r){const i=t.substring(r,n);e.push(i),r=null}if((n+=1)>=t.length){if(null!==r){const n=t.substring(r);e.push(n)}break}}return e}),n._isStrCapital=(t=>i.test(t)),n._splitString=(t=>{for(var e=[],r=0,i=0,s=t.length,l=!0;!(i>=s);){var a=t[i],o=n._isStrCapital(a),c=null;if(“-“===a||”_”===a||”#”===a||”.”===a?(c=t.substring(r,i),r=i+1):o&&!l?(c=t.substring(r,i),r=i):l=o,c){e.push(c);var u=c.toLowerCase();u!==c&&e.push(u)}i+=1}if(r>0){var p=t.substring(r);e.push(p);var h=p.toLowerCase();h!==p&&e.push(h)}return e}),n.parseString=(t=>{var e=[];if(t){e=e.concat(n.transformWord(t));var r,i,s=n._splitString(t);for(r=0,i=s.length;r<i;r++)e.push(s[r])}return e}),n.replaceTrailingCharacters=((t,e,r)=>{let n=null;return t.endsWith(e)&&(n=t.substring(t,t.length-e.length)+r),n});const s=/[!”#$%&’’‘()*+-.,/:;<=>?@[\\\]^_`{|}~]/gm;n.transformWord=(t=>{let e,r=[];if(t!==t.toLowerCase()&&r.push(t),(e=n.replaceTrailingCharacters(t,”ied”,”y”))&&r.push(e),(e=n.replaceTrailingCharacters(t,”ed”,””))&&r.push(e),(e=n.replaceTrailingCharacters(t,”ed”,”e”))&&r.push(e),(e=n.replaceTrailingCharacters(t,”ies”,”y”))&&r.push(e),(e=n.replaceTrailingCharacters(t,”ier”,”y”))&&r.push(e),(e=n.replaceTrailingCharacters(t,”er”,””))&&r.push(e),(e=n.replaceTrailingCharacters(t,”iest”,”y”))&&r.push(e),(e=n.replaceTrailingCharacters(t,”est”,””))&&r.push(e),(e=n.replaceTrailingCharacters(t,”s”,””))&&r.push(e),(e=n.replaceTrailingCharacters(t,”es”,””))&&r.push(e),(e=n.replaceTrailingCharacters(t,”‘s”,””))&&r.push(e),(e=n.replaceTrailingCharacters(t,”nning”,”n”))?r.push(e):(e=n.replaceTrailingCharacters(t,”ing”,””))&&r.push(e),(e=t.replace(s,””))!=t){r.push(e),e.toLowerCase()!==e&&r.push(e)}return r}),n.linkWords=(t=>{let e,r=[];for(let n=0;n<t.length;n++){let i=t[n].toLowerCase();0===n?e=i:e+=” “+i,r.unshift(e)}return r});var l=n;var a=class{constructor(t){this.size=t,this.list=new Array(t),this.dict={},this.index=0}put(t,e){if(this.get(t))return;let r=this.list[this.index];if(r){const t=r.key;delete this.dict[t]}else r={},this.list[this.index]=r;r.key=t,r.value=e,this.dict[t]=this.index,this.index=(this.index+1)%this.size}get(t){if(!t)return null;const e=this.dict[t];return void 0===e?null:this.list[e].value}};const o=(t,e)=>{if(!t)return null;const r=t[e];if(!r||!r.match(/[\x20-\x7E]/))return null;const n=((t,e)=>{let r,n=e;for(;;){if(” “===t[n]){r=n+1;break}if(n<=0){r=0;break}n-=1}return r})(t,e),i=((t,e)=>{let r,n=e+1,i=0;for(;;){if(” “===t[n]&&(i+=1)>=4){r=n;break}if(n>=t.length){r=n;break}n+=1}return r})(t,e);return t.substring(n,i)},c={create:t=>{var e=document.createElement(“template”);return e.innerHTML=t.trim(),e.content.firstChild}};var u=c;(()=>{const t=”____MOUSE_DICTIONARY_GtUfqBap4c8u”;let e=document.getElementById(t);if(e)return void(e.style.opacity<=0?e.style.opacity=.9:e.style.opacity=0);const r=(t,e)=>{const r=[];for(let s=0;s<t.length;s++){const l=t[s],a=e[l];if(a){const t='<font color=”#000088″><strong>’+i(l)+”</strong></font><br/>”+n(a);r.push(t)}}return 0===r.length&&r.push(‘<font color=”#000088″><strong>’+i(t[0])+”</strong></font><br/>”),r.join(‘<br/><hr style=”width:100%;margin:0px 0px 5px 0px;” />’)},n=t=>t.replace(/\\/g,”\n”).replace(/(◆.+)/g,'<font color=”#008000″>$1</font>’).replace(/(■.+)/g,'<font color=”#008000″>$1</font>’).replace(/(【.+?】)/g,'<font color=”#000088″>$1</font>’).replace(/({.+?})/g,'<font color=”#000088″>$1</font>’).replace(/(《.+?》)/g,'<font color=”#000088″>$1</font>’).replace(/\n/g,”<br/>”),i=t=>t.replace(/&/g,”&amp;”).replace(/</g,”&lt;”).replace(/>/g,”&gt;”).replace(/”/g,”&quot;”);let s=null;const c=new a(100),p=/(\r\n|\n|\r|,|\.)/gm;document.body.addEventListener(“mousemove”,t=>{const n=((t,e,r)=>{if (window.getSelection().toString().length) return window.getSelection().toString(); let n=null;try{const i=t.ownerDocument.caretRangeFromPoint(e,r);if(i){const t=i.startContainer,e=i.startOffset;t.nodeType==Node.TEXT_NODE&&(n=o(t.data,e))}}catch(t){n=null}return n})(t.target,t.clientX,t.clientY);if(!n)return;if(s==n)return;const i=c.get(n);if(i)return e.content.innerHTML=””,void e.content.appendChild(i);const a=n.trim().replace(p,” “).split(” “),h=l.linkWords(a),g=l.parseString(a[0]);h.splice.apply(h,[0,0].concat(g)),(t=>new Promise(e=>{chrome.storage.local.get(t,n=>{const i=r(t,n);e(i)})}))(h).then(t=>{const r=u.create(`<div>${t}</div>`);e.content.innerHTML=””,e.content.appendChild(r),c.put(n,r),s=n})});const h={all:”initial”,width:”200px”,height:”200px”,position:”fixed”,resize:”both”,overflow:”hidden”,top:0,left:0,backgroundColor:”#ffffff”,zIndex:2147483647,fontSize:”0.8em”,border:”1px solid #A0A0A0″,textAlign:”left”,lineHeight:”normal”,opacity:.95};e=(()=>{const e=(()=>{const t=document.createElement(“div”);for(let e of Object.keys(h))t.style[e]=h[e];return t})(),r=(()=>{let t=document.createElement(“div”);return t.innerText=”Mouse Dictionary”,t.style.cursor=”pointer”,t.style.backgroundColor=”#EBEBEB”,t})(),n=document.createElement(“div”);return n.style.fontSize=”small”, e.appendChild(r),e.appendChild(n),e.id=t,{dialog:e,header:r,content:n}})(),document.body.appendChild(e.dialog),(new class{constructor(){this.targetElement=null,this.startingX=null,this.startingY=null,this.elementX=null,this.elementY=null,document.body.addEventListener(“mousemove”,t=>{if(this.targetElement){let e=this.parseInt(t.pageX,10),r=this.parseInt(t.pageY,10),n=this.elementX+e-this.startingX,i=this.elementY+r-this.startingY;this.targetElement.style.left=n.toString()+”px”,this.targetElement.style.top=i.toString()+”px”}}),document.body.addEventListener(“mouseup”,()=>{this.targetElement&&(this.targetElement.style.opacity=.95,this.targetElement=null,this.startingX=null,this.startingY=null,this.elementX=null,this.elementY=null)})}add(t,e){this.makeElementDraggable(t,e)}makeElementDraggable(t,e){e.addEventListener(“mousedown”,e=>{this.targetElement=t,this.targetElement.style.opacity=.35,this.startingX=this.parseInt(e.pageX,10),this.startingY=this.parseInt(e.pageY,10),this.elementX=this.parseInt(this.targetElement.style.left),this.elementY=this.parseInt(this.targetElement.style.top)})}parseInt(t){let e;return null===t||void 0===t||””===t?e=0:(e=window.parseInt(t,10),isNaN(e)&&(e=0)),e}}).add(e.dialog,e.header)})()}});