ブックマークレット

拙作のブックマークレットです。

PC のブラウザで動作確認してあります。
コードをコピーして、アドレス入力欄に直接り付けるか、ブックマークの URI として保存してから実行ください。

Android はブックマークレットが使えなかったり、ローカルストレージの URI をランチャに貼れなかったり、ちょっとつまらないと感じます。 もっと遊ばせて欲しいのに。

コメント可視化

ソース中のコメントを本文に変換します。

javascript:(function(p){if(arguments.length<1)p=document.body;for(var i=0;i<p.childNodes.length;++i){var c=p.childNodes[i];switch(c.nodeType){case 8:var n=document.createElement('span');n.appendChild(document.createTextNode('\x3C!--'+c.nodeValue+'--\x3E'));p.replaceChild(n,c);break;case 1:arguments.callee(c);break;}}})();

ソース中<a href="〜"> 要素を抽出して、表にして文書末に追加します。
リンクが本文中に散らばっていて判りづらいページを、快適に扱う為に。

javascript:(function(){var sig="linklist_made_by_js",lS="font-size:small;white-space:nowrap;border-style:solid double double solid;border-width:1px 4px 4px 1px;border-color:WindowFrame;background-color:Window;color:WindowText;",gS=["a[href]{color:Blue;}","a[href]:visited{color:Purple;}","a[href]:hover{background-color:Highlight;color:HighlightText;}"];var _=document,pN=_.getElementById(sig),cN,gN,aE,lE,b,s,i;_.cE=_.createElement;_.gETN=_.getElementsByTagName;Element.prototype.aC=Element.prototype.appendChild;s=_.cE('style');_.head.aC(s);gS.forEach(function(c){s.sheet.insertRule("table#"+sig+" "+c,s.sheet.cssRules.length);});if(pN)pN.remove();pN=_.cE("table");pN.id=sig;pN.style=lS;_.body.aC(pN);cN=_.cE("tbody");pN.aC(cN);pN=cN;aE=_.gETN('a');b=aE.length;for(i=0;i<b;++i){cN=_.cE("tr");gN=_.cE("th");gN.aC(aE[i].cloneNode(true));gN.firstChild.removeAttribute("href");cN.aC(gN);gN=_.cE("td");lE=_.cE("a");s=decodeURI(aE[i].href);if(s.length>80)s=s.slice(0, 79)+"…";lE.aC(_.createTextNode(s));lE.href=aE[i].href;gN.aC(lE);cN.aC(gN);pN.aC(cN);}})();

ソース中<link rel="〜" href="〜"> 要素を、ナビゲーションバーとして表示します。

使っていた Opera が <link> 要素に対応していましたが、何故かローカルなページ(file: スキームで始まるページ)では表示されませんでした。 なので自前で表示する物を作ろうと思っていて、でも思っただけで長く経過してしまい、その内に Opera を使わなくなってしまいました。
れていたのをフと思い出したので、サクッと作ってみました。

表示の並びは Opera 準拠(多分)、参照する <link> 要素rel 属性は以下の通りです(これは Opera と同じかどうか自信がありません)

⇱ホームhome, start
☞索引index
📄目次contents, toc
🔍検索search, find
💬用語集glossary
ℹヘルプhelp
⭶最初first, top, origin, begin
◄前へprev, previous
►次へnext, child
⭸最後last, end
⮍親階層parent, up
⚖著作権copyright, license
👤作成者author

500ms 毎<body> の左右マージンを元に自身の表示を再設定します(ウチのサイトがマージンを動的に操作している事に対応する為)。 鬱陶しければ該当コードを削除してお使いください。

らく <link rel="〜" href="〜"> 要素を使っている人は少ないだろうと思います。 「対応ブラウザが少ない」「利用者が少ない」が循環する負の連鎖で。 でも環境によっては便利な機能ではあるので、積極的に使う助けになればと、これを公開してみます。

javascript:(function(){var sig="linknav_made_by_js";var m="5%";var st=["a{margin:0 0.2em;padding:0.2em;}","a[href]{color:Blue;}","a[href]:visited{color:Purple;}","a[href]:hover{background-color:Highlight;color:HighlightText;}","span{margin:0 0.2em;padding:0.2em;background-color:ButtonFace;color:GrayText;}","{position:fixed;z-index:999;margin:0;padding:0;top:0;left:0;font-size:medium;line-height:1;height:2em;width:100%;background-color:Window;}"];var _=document;_.cE=_.createElement;_.gEID=_.getElementById;Element.prototype.aC=Element.prototype.appendChild;var nN=_.gEID(sig),hE=_.head,bE=_.body,sE,pN,cN,aE,oE,eN,r,h,i,j;if(nN)nN.remove();var sE=_.cE('style');hE.aC(sE);st.forEach(function(c){sE.sheet.insertRule("div."+sig+" "+c,sE.sheet.cssRules.length);});var rl=[["ln_s","⇱ホーム","home","start"],["ln_i","☞索引","index"],["ln_c","📄目次","contents","toc"],["ln_f","🔍検索","search","find"],["ln_g","💬用語集","glossary"],["ln_h","ℹヘルプ","help"],["ln_b","⭶最初","first","top","origin","begin"],["ln_p","◄前へ","prev","prevoous"],["ln_n","►次へ","next","child"],["ln_e","⭸最後","last","end"],["ln_u","⮍親階層","parent","up"],["ln_l","⚖著作権","copyright","license"],["ln_a","👤作成者","author"]];nN=_.cE("div");nN.id=sig,nN.className=sig;pN=_.cE("p");nN.aC(pN);rl.forEach(function(r){r.forEach(function(h,i,r){if(i==1){cN=_.cE("span");cN.id=r[0];cN.aC(_.createTextNode(h));pN.aC(cN);}else if(i>=2)rl[h]=r[0];});});bE.style.marginTop=m;bE.insertBefore(nN,bE.firstChild);m=parseInt(bE.style.marginLeft);nN.style.marginLeft=m+"%";nN.style.width=(100-m-parseInt(bE.style.marginRight))+"%";for(i=0;i<hE.childNodes.length;++i){eN=hE.childNodes[i];if(/^link$/i.test(eN.nodeName)&&eN.rel&&eN.href){r=eN.rel.toLowerCase();h = eN.href;for(j=0;j<rl.length;++j){if(r in rl){oE=_.gEID(rl[r]);if(!oE)continue;aE=_.cE("a");aE.aC(_.createTextNode(oE.firstChild.data));aE.href=h;oE.parentNode.replaceChild(aE,oE);}}}}setTimeout(function(){var _=document,nN=_.getElementById("linknav_made_by_js"),m;if(nN){m=parseInt(_.body.style.marginLeft);nN.style.marginLeft=m+"%";nN.style.width=(100-m-parseInt(_.body.style.marginRight))+"%";setTimeout(arguments.callee,500);}},500);})();

青空文庫ルビ

青空文庫形式でルビの指示がされた文書を、実際にルビタグを付けた文書に変換します。
HTML-Aid の該当部分を抜き出してブックマークレット化しました。 ‥‥長いっ。

javascript:(function(){var _=document;_.cE=_.createElement;_.cT=_.createTextNode;Element.prototype.aC=Element.prototype.appendChild;Element.prototype.rC=Element.prototype.replaceChild;Element.prototype.iB=Element.prototype.insertBefore;rKn=[[19968,40959],[13312,19903],[63744,64255],[55296,57343],[12293,12295],[12347],[12437,12438],[12533,12534]];rHr=[[12353,12438],[12445,12447],[12441,12444],[10160],[10175],[12316],[12336,12341],[12540],[65392],[65438,65439]];rKt=[[12449,12538],[12541,12543],[12784,12799],[12441,12444],[10160],[10175],[12316],[12336,12341],[12540],[65382,65439]];rPn=[[0,31],[32,47],[58,64],[91,96],[123,127],[8192,8303],[12288,12292],[12296,12315],[12317,12335],[12342,12346],[12348,12351],[65281,65295],[65306,65312],[65339,65344],[65371,65374],[65377,65381],[65504,65509]];mR=function(n,a){var r,i;for(i=0;i<a.length;++i){r=a[i];if(r.length>=2){if(n>=r[0]&&n<=r[1])return true;}else{if(n==r[0])return true;}}return false;};bC=function(c){var b=0;if(mR(c,rKn))b|=2;if(mR(c,rHr))b|=4;if(mR(c,rKt))b|=8;if(b==0)b=1;return b;};sW=function(s){var i,c,b=15;for(i=s.length-1;i>=0;--i){c=s.charCodeAt(i);b&=bC(c);if(b==0)break;if(mR(c,rPn))break;}return i;};ca=function(r,n,s){var c;c=_.cE(n);c.aC(_.cT(s));r.aC(c);return c;};aE=function(s,t){var r=_.cE("ruby");r.className="reading";ca(r,"rb",s);ca(r,"rp","(");ca(r,"rt",t);ca(r,"rp",")");return r;};aD=function(r,e,bT,fT,i,iP,iG,dP,dL){r.iB(e,r.childNodes[i+iP]);if(bT&&bT!="")r.iB(_.cT(bT),r.childNodes[i+iP]);i+=iG;if(fT&&fT!="")r.rC(_.cT(fT),r.childNodes[i+dP]);else for(var j=0;j<dL;++j)r.removeChild(r.childNodes[i+dP]);};mD=function(n){if(arguments.length==0)n=_.body;if(!n||!(n.childNodes)||/^script|ruby|pre$/i.test(n.nodeName)||/\bsic\b/i.test(n.className))return;var eN,nN,t,sj,sP,iP,dP,dL,iG,bT,fT,rr,i;for(i=0;i<n.childNodes.length;++i){eN=n.childNodes[i];switch(eN.nodeType){case 3:t=eN.nodeValue;if((rr=/(|?)([^|《]+)《([^》]+)》/.exec(t))){sj=rr[2];bT=t.slice(0,rr.index),fT=t.slice(rr.index+rr[0].length);if(rr[1]==""){sP=sW(sj);if(sP>=0)bT+=sj.slice(0,sP+1),sj=sj.slice(sP+1);}if(bT==""){if(fT=="")iP=0,iG=0,dP=1,dL=1;else iP=0,iG=0,dP=1,dL=0;}else{if(fT=="")iP=0,iG=1,dP=1,dL=1;else iP=0,iG=1,dP=1,dL=0;}nN=aE(sj,rr[3]);aD(n,nN,bT,fT,i,iP,iG,dP,dL);i+=iG;break;}break;case 1:mD(eN);}}};mD();})();