編集(管理者用) | 編集 | 差分 | 新規作成 | 一覧 | RSS | 表紙 | 検索 | 更新履歴

bookmarklet

bookmarkから使うJavaScript。

役に立つかどうかは分かりません。

傍点強調

em要素・strong要素を傍点で強調します。それだけ。

Mozillaで動作確認。Operaではスタイル部分を調節する必要あり( margin-left:-1.5em; margin-right:0.5em; vertical-align:200% あたりで)。

javascript:(function(){var nEms=document.getElementsByTagName('em'); for(var i=0; i<nEms.length; i++){elementDotEm(nEms[i]);}var nStrongs=document.getElementsByTagName('strong'); for(var i=0; i<nStrongs.length; i++){elementDotEm(nStrongs[i]);}addEmStyle(); /* end */ function elementDotEm(n){var ns=new Array(); for(var i=0; i<n.childNodes.length; i++){ns[ns.length]=n.childNodes.item(i);}for(var i=0; i<ns.length; i++){if(ns[i].nodeType==3)spanSplit(ns[i]); else if(ns[i].nodeType==1 && !ns[i].tagName.match(/^(rb|em|strong)$/i))elementDotEm(ns[i]);}}function spanSplit(nText){var fr=document.createDocumentFragment(); var chars=nText.data.split(''); for(var i=0; i<chars.length; i++){var nAdd; if(chars[i].match(/^[0-9A-Za-z\u00c0-\u024f\u0370-\u1fff\u3040-\u30ff\u4e00-\ud7a3\uf900-\ufdff\ufe70-\ufeff\uff10-\uff19\uff21-\uff3a\uff41-\uff5a\uff66-\uff9d]$/)){nAdd=document.createElement('span'); nAdd.className='dot-em'; nAdd.appendChild(document.createTextNode(chars[i]));}else{nAdd=doc

 ument.createTextNode(chars[i]);}fr.appendChild(nAdd);}nText.parentNode.replaceChild(fr, nText);}function addEmStyle(){var nStyle=document.createElement('style'); nStyle.type='text/css'; var cssText=document.createTextNode('em,strong{line-height:1; font-style:normal;}em span.dot-em:after,strong span.dot-em:after{content:\u0027\u4e36\u0027; font-size:50%; font-weight:normal; margin-left:-1.0em; margin-right:0; vertical-align:100%;}'); nStyle.appendChild(cssText); document.getElementsByTagName('head').item(0).appendChild(nStyle);}})()

元ソース:

function(){
    var nEms = document.getElementsByTagName('em');
    for (var i = 0; i < nEms.length; i++) {
        elementDotEm(nEms[i]);
    }
    var nStrongs = document.getElementsByTagName('strong');
    for (var i = 0; i < nStrongs.length; i++) {
        elementDotEm(nStrongs[i]);
    }
    addEmStyle();
    /* end */
    function elementDotEm(n) {
        var ns = new Array();
        for (var i = 0; i < n.childNodes.length; i++) {
            ns[ns.length] = n.childNodes.item(i);
        }
        for (var i = 0; i < ns.length; i++) {
            if (ns[i].nodeType == 3) spanSplit(ns[i]);
            else if ( ns[i].nodeType == 1 &&
                !ns[i].tagName.match(/^(rb|em|strong)$/i) )
                elementDotEm(ns[i]);
        }
    }
    function spanSplit(nText) {
        var fr = document.createDocumentFragment();
        var chars = nText.data.split('');
        for (var i = 0; i < chars.length; i++) {
            var nAdd;
            if (chars[i].match(/^[0-9A-Za-z\u00c0-\u024f\u0370-\u1fff\u3040-\u30ff\u4e00-\ud7a3\uf900-\ufdff\ufe70-\ufeff\uff10-\uff19\uff21-\uff3a\uff41-\uff5a\uff66-\uff9d]$/)) {
                nAdd = document.createElement('span');
                nAdd.className = 'dot-em';
                nAdd.appendChild(document.createTextNode(chars[i]));
            } else {
                nAdd = document.createTextNode(chars[i]);
            }
            fr.appendChild(nAdd);
        }
        nText.parentNode.replaceChild(fr, nText);
    }
    function addEmStyle() {
        var nStyle = document.createElement('style');
        nStyle.type = 'text/css';
        var cssText = document.createTextNode('em,strong{line-height:1;font-style:normal;}em span.dot-em:after,strong span.dot-em:after{content:\u0027\u4e36\u0027;font-size:50%;font-weight:normal;margin-left:-1.0em;margin-right:0;vertical-align:100%;}');
        nStyle.appendChild(cssText);
        document.getElementsByTagName('head').item(0).appendChild(nStyle);
    }
}

Mozillaのページ内リンク補正

最近のバージョンのMozillaでコンテントネゴシエーションを使うページを開いた場合に、ページ内のある箇所へ進むリンクのURLがおかしくなるのを補正するものです。

1.7 RC2を入れたら直ったので、そうした方が早いでしょう。一応元ソースのみ表示。

元ソース:

 function(){
    var as = document.getElementsByTagName('a');
    for (var i = 0; i < as.length; i++) {
        var a = as.item(i);
        if (!a.getAttribute('href')) continue;
        if (a.getAttribute('href').indexOf('#')) continue;
        a.href = location.href.split('#')[0] + a.getAttribute('href');
    }
}

おまけ:bookmarklet作成用の秀丸マクロ

以下の形式で書かれた複数行のソースを javascript:(function(){ ... })() という形式に変更したものをクリップボードに格納します。

function(){
    ...
    ...
}

マクロソース:

//js2bmlt.mac
selectall;
copy;
newfile;
disabledraw;
paste;
gofiletop;
insert "javascript:(";
replaceallfast "[\\n\\t ]+"," ",regular;
replaceallfast "[(){};=+<>]\\f +", "\\0", regular;
replaceallfast " +\\f[<>(){};=+]", "\\1", regular;
gofileend;
insert ")()";
selectall;
copy;
quit;