Hatena::ブログ(Diary)

Web系がおもしろい。

2011-05-09

Vimperatorのcopy.jsで、datetime属性を持ったins/del/time要素コピってくれる拡張書いた

| 00:13 | Vimperatorのcopy.jsで、datetime属性を持ったins/del/time要素コピってくれる拡張書いた - Web系がおもしろい。 のブックマークコメント

発端

yとかYとかでコピーができることは知ってたんですけど、他にもタイトルとかコピーしたくて、方法ないか探してたら見つかりまして。

vimperatorのタイトルのコピーはこれでできるのか :js util.copyToClipboard(content.document.title,true)<cr> Twitter / @えすぺりあ: vimperatorのタイトルのコピーはこれでできる ...

:map gy :js util.copyToClipboard(content.document.title,true)<CR>Twitter / @えすぺりあ: :map gy :js util.copyToCli ...


そしたら、@teramakoさんが

@ copy.js を使用するともう少し幸せになれるかもよ〜Twitter / @小悪魔テラ魔子べぇ: @esperia09 copy.js を使用するとも ...

と教えてくださったので、使ってみました。

そしたらなにこれ超便利、しかも拡張書けるとか俺得できますじゃないれすかとなりまして


書きました。以前書いてたブックマークレットを移植する感じで、ですが。


参考サイト様

参考どころじゃなくてほとんどコア部分以外はソースいただいてます。。


こんなのがコピれます

<ins datetime="2011-05-13T19:21:15+09:00"></ins>
<del datetime="2011-05-13T19:21:25+09:00"></del>
<time datetime="2011-05-13T19:21:32+09:00"></time>


liberator.globalVariables.copy_templates から下に追記

if (!liberator.globalVariables.copy_templates){
    liberator.globalVariables.copy_templates = [
        // 以下の3行追記
        { label: 'ins',   value: 'create ins element', custom: function(){ return createDatetime('ins'); } },
        { label: 'del',   value: 'create del element', custom: function(){ return createDatetime('del'); } },
        { label: 'time',   value: 'create ins element', custom: function(){ return createDatetime('time'); } },
    ];
}

function createDatetime(elName) {
    var ret = "";
    var xhr = util.httpGet("https://ntp-a1.nict.go.jp/cgi-bin/jsont");
    var jsont = function(o){
        var d = new Date(),s,offset;
        d.setTime(o.st*1000);
        offset = d.getTimezoneOffset()*-1;
        d.setTime(o.st*1000 + (offset/60)*3600*1000);
        s = d.toGMTString().split(' ');
        var addZero = function(n){ return (n<10) ? "0"+n : n; };
        var result = ('<' + elName + ' datetime="'+(+s[3])
            +'-'+addZero(d.getMonth()+1)
            +'-'+addZero(+s[1])
            +'T'+s[4]
            +"+"+addZero(offset/60)
            +':'+addZero(offset%(60))
            +'"></' + elName + '>'
        );
        return result;
    };
    if(xhr && xhr.status === 200) {
        ret = eval(xhr.responseText);
    }
    return ret;
}

Date.prototype.toISOString()

というメソッドがあるのをTwitterで知りました。。

詳しく調べていないのですが、メモです。


(new Date).toISOString() 使ったほうが早くね? "<ins>タグを生成 - s_hiiragiの活動メモ" Twitter / @teramako: (new Date).toISOString() 使 ...

toISOStringってMDCに載ってない気がする。MSDNには載ってるんだな。一応ES5で定義されてる Twitter / @azu_re: toISOStringってMDCに載ってない気がする ...


実行してみた
javascript:alert( (new Date).toISOString() );

2011-06-08T08:36:52.725Z

簡単に対応調べてみた
ブラウザ対応
IE9
IE8×
Safari5
Opera11.11
Chrome12
Firefox4
Firefox3.6


どうなるのか書いてなかったので追記。。

toISOStringをメモ

MacのvimperatorでwikipediaのCtrl+Fが効かない件

| 21:09 | MacのvimperatorでwikipediaのCtrl+Fが効かない件 - Web系がおもしろい。 のブックマークコメント

accesskey属性が優先されてるぽい感じ

VimperatorWikipedia見たときに Ctrl+F を押してページを下にスクロールさせようとしてもうまく動かなかったのです。


この問題は以前より問題として上がってたみたいで、accesskey属性が優先されて、Ctrl+Fが効かなくなってるようです。

再現されるのはmac-onlyってことなので、Mac + Vimperatorユーザ以外は無縁かもしれません。。(うちのWinXPでは起きなかった)

So this seems to be a Mac-only bug.

Issue 394: Wikipedia's search box breaks CTRL-F

At least it seems to be a firefox "bug" which we can't work around if pages see the access keys before vimperator gets them.

Issue 394: Wikipedia's search box breaks CTRL-F


解決策が以下にでています。

Comment 7 by aetherkn...@gmail.com, Nov 4, 2010

You can change which modifier key is used with accesskeys with the following about:config parameter:

http://kb.mozillazine.org/Ui.key.contentAccess


Comment 8 by jeidsath, Nov 5, 2010

Thanks aetherknight. Setting contentAccess to "5" works for me. Since this issue is a duplicate I also posted the info to Issue 155.

Issue 394: Wikipedia's search box breaks CTRL-F


…ということなので、vimperatorui.key.contentAccess に 5 を設定してみると、うまくいきました。

:set! ui.key.contentAccess=5


僕はその解決策をこのブログ書く時まで知らなかったので、根本的にuserscript で accesskey を消すプログラムを書いちゃいまして、せっかくなのでうpします。マジ僕英語読め…


https://gist.github.com/962309


追記

こちらの日記に、キーバインドが衝突する時の話がかかれてありました。

アクセスキーと Vimperator のキーバインドが衝突するあれ - EAGLE 雑記