ブックマークレット

Last-modified: 2018-10-10 (水) 23:10:39

本文の単語からwikiにリンクを貼るブックマークレット

下記のスクリプトをブックマークレットとして登録し、本文ページで実行すると、wikiにページがある単語にリンクが貼られます。
ブックマークを追加するときに、urlの欄に下記のスクリプトを入力することで、ブックマークレットとして登録できます。

javascript:(function(){var blacklist=["m"," ","登場人物","世界観","【扉】","用語","考察","","質問返し","読者がよく使う言葉","メディアミックス"];var wikiurl="https://wikiwiki.jp/gensousaiki/?cmd=list";var yql='https://query.yahooapis.com/v1/public/yql?format=json&q='+encodeURIComponent('select * from htmlstring where url="'+wikiurl+'"'+' AND xpath="//div[@id=\'body\']//li/ul/li/a"')+'&env='+encodeURIComponent('https://raw.githubusercontent.com/kwetto/my-yql-tables-for/master/all.env');var reRegExp=/[\\^$.*+?()[\]{}|]/g;var reHasRegExp=new RegExp(reRegExp.source);function escapeRegExp(string){return(string&&reHasRegExp.test(string))?string.replace(reRegExp,'\\$&'):string}var xhr=new XMLHttpRequest();xhr.open("GET",yql,true);xhr.onload=function(e){if(xhr.readyState===4){if(xhr.status===200){var result=JSON.parse(xhr.responseText);var regLink=new RegExp('<a.+?="(.+?)">(.+?)</a>',"g");var values=[];var honbun=document.getElementById('novel_honbun');var honbunHtml=honbun.innerHTML;var tmp;var valueIndex=1;while(tmp=regLink.exec(result.query.results.result)){if(blacklist.indexOf(tmp[2])<0&&tmp[2].indexOf('/')<0){values.push({text:tmp[2],url:'https://wikiwiki.jp'+tmp[1],key:'#value'+valueIndex++ +'#',})}}values.sort(function(a,b){return b.text.length-a.text.length});var links=[];var linkIndex=1;while(tmp=regLink.exec(honbunHtml)){link={html:tmp[0],key:'#link'+linkIndex+'#'};honbunHtml=honbunHtml.replace(new RegExp(escapeRegExp(link.html)),link.key);links.push(link);linkIndex++}for(var i=0,l=values.length;i<l;i++){honbunHtml=honbunHtml.replace(new RegExp(escapeRegExp(values[i].text),'g'),values[i].key)}for(var i=0,l=values.length;i<l;i++){honbunHtml=honbunHtml.replace(new RegExp(escapeRegExp(values[i].key),'g'),'<a target="_blank" href="'+values[i].url+'">'+values[i].text+'</a>')}for(var i=0,l=links.length;i<l;i++){honbunHtml=honbunHtml.replace(new RegExp(escapeRegExp(links[i].key),'g'),links[i],html)}honbun.innerHTML=honbunHtml}else{console.error(xhr.statusText)}}};xhr.send()})();void(0);