スキップしてメイン コンテンツに移動

ニコニコ動画用の自作スクリプト更新

またニコニコ動画のHTMLが変わりましたね

そのままだと不便なので、自作スクリプトを更新しました。

nicovideodown.js

userscripts.orgに更新しました。
http://userscripts.org/scripts/show/84552へアクセスして、ダウンロードして下さい。
自力で直せる人は自力で直しちゃってください。

nico_description

今回から、DOMContentLoadedで発火するようにしていますので、ファイル名を「nico_description.js」に変更してください。
また、今まで無駄にオブジェクト指向していたのを撤廃して、ふつーに連想配列にしました。
これでいーよね。
// ==UserScript==
// @name      nico description
// @namespace http://looxu.blogspot.com/
// @include   http://www.nicovideo.jp/watch/*
// @author    Arc Cosine
// @version   3.0
// ==/UserScript==
(function(){

    var NDesc = {
      com_style : {
        'color' : '#1259C7',
        'text-decoration' : 'underline',
        'padding-left' : '5px',
        'cursor' : 'pointer'
      },
      options : [
        { 'text' : '広告表示',  'func' : function(){ NDesc.ad_toggle(); } },
        { 'text' : 'Video詳細', 'func' : function(){ NDesc.description_toggle(); } }
      ],
      init : function(){
          //add Input Box
          NDesc.createInput();

          //hide parts
          NDesc.description_toggle();
          NDesc.ad_toggle();

          //add focus key event
          document.addEventListener( 'keypress', function(e){
            if( e.target.tagName != 'INPUT' && e.keyCode == 32 ){
              NDesc.use_hotkey();
              e.preventDefault();
            }
          },false );


          for( var i=NDesc.options.length; i-- > 0; ){
            NDesc.createParts(NDesc.options[i]);
          }
        },
        createParts : function( data ) {
          var insert_node1 = document.querySelector('div.des_1 p.font12');
          var insert_node2 = document.querySelector('div.des_2 p.font12');
          var node = document.createElement('span');
          node.appendChild(document.createTextNode(data.text));
          for( var option in NDesc.com_style ){
            var st_op = option.replace(/-([a-z])/,function(m){ return m[1].toUpperCase();});
            node.style[st_op] = NDesc.com_style[option];
          }
          node.addEventListener( 'click', function(){ data['func'].apply(); } ,false );
          var node2 = node.cloneNode(true);
          node2.addEventListener( 'click', function(){ data['func'].apply(); } ,false );
          insert_node1.appendChild(node);
          insert_node2.appendChild(node2);
        },

        toggleObject : function( selector ){
            var target = document.querySelector(selector);
            if( target ){
              target.style.display = (target.style.display == 'none' ) ? '' : 'none';
            }
        },

        description_toggle : function() {
            NDesc.toggleObject('div.info_frm');
            NDesc.toggleObject('div.des_2 table');
        },
        ad_toggle : function() {
            NDesc.toggleObject('#WATCHFOOTER');
            NDesc.toggleObject('#PAGEFOOTER');
        },
        createInput : function(){
            if( window.parent != window ) return;
            var input_work = document.createElement('input');
            input_work.readOnly = true;
            input_work.autocomplete = 'off';
            input_work.style.margin = '0px 0px 5px 10px';
            input_work.addEventListener('focus', function(){
              input_work.style.backgroundColor = '#fcc';
              input_work.value = 'Hotkey available';
            },false );
            input_work.addEventListener('blur',function(){
              input_work.style.backgroundColor = '#9D9';
              input_work.value = 'Hotkey unavailable';
            },false );
            input_work.addEventListener('keypress', NDesc.key_event, false );

            var video_title = document.querySelector('.video_title');
            video_title.parentNode.insertBefore( input_work, video_title.nextSibling );
            NDesc.input = input_work;
        },

        use_hotkey : function(){
          NDesc.input.focus();
        },

        play_pause : function(){
          var flvplayer = document.getElementById('flvplayer');
          if( !flvplayer ) return;
          if( flvplayer.ext_getStatus() == 'playing' ){
            flvplayer.ext_play(0);
          }else{
            flvplayer.ext_play(1);
          }
        },

        volumeup : function(){
          NDesc.volume(5);
        },
        volumedown : function(){
          NDesc.volume(-5);
        },
        seekleft : function(){
          NDesc.seek(-10);
        },
        seekright : function(){
          NDesc.seek(10);
        },
        seek2top : function(){
          NDesc.seek(Number.NEGATIVE_INFINITY);
        },
        volume : function(vol){
          var flvplayer = document.getElementById('flvplayer');
          if (!flvplayer) return;
          var cur = Number(flvplayer.ext_getVolume());
          var to = cur + Number(vol);
          if (to > 100) to = 100;
          if (to < 0  ) to = 0;
          flvplayer.ext_setVolume(to);
        },
        seek : function(time) {
          var flvplayer = document.getElementById('flvplayer');
          if (!flvplayer) return;
          var len = Number(flvplayer.ext_getTotalTime());
          var cur = Number(flvplayer.ext_getPlayheadTime());
          var to = cur + Number(time);
          if (to > len) to = len;
          if (to < 0  ) to = 0;
          flvplayer.ext_setPlayheadTime(to);
          // for shotage of backward seek.
          var cur = Number(flvplayer.ext_getPlayheadTime());
          if (time < 0 && cur - to > 5 && to > 10) {
              flvplayer.ext_setPlayheadTime(to - 10);
          }
        },
        key_event : function(e) {
          var handler = {
            'o' : function(){ NDesc.description_toggle(); },
            'a' : function(){ NDesc.ad_toggle(); },
            ' ' : function(){ NDesc.play_pause();  },
            'k' : function(){ NDesc.volumeup(); },
            'j' : function(){ NDesc.volumedown(); },
            'h' : function(){ NDesc.seekleft(); },
            'l' : function(){ NDesc.seekright(); },
            'H' : function(){ NDesc.seek2top(); }   //Shift+H
          };
          var t = e.target;
          var pressKey = String.fromCharCode(e.which);
          if( t.nodeType == 1 && typeof handler[pressKey] == "function" ){
            e.preventDefault();
            handler[pressKey].apply();
          }
        }
   };

    document.addEventListener('DOMContentLoaded', function(){
     NDesc.init();
    },false );

})();

コメント

このブログの人気の投稿

EFIブートローダを移動した話

EFIブートローダを移動した HX90に環境を整え終わってから、アホな事をしたので、その記録を残す。 SSD: Cドライブ SSD: Dドライブ(データストレージ用) + ESP※ SSD: Eドライブ(データストレージ用) ※ESP(EFI System Partition) インストールした時、こんな構成だった。 ESPがDドライブにあるのが気持ち悪かったので、これを削除した。 そしたら、BIOS画面が出るだけになり、Windowsが起動しなくなった。 移動手順 この時の自分はMBRをふっ飛ばした時と同じ現象だと思ったので、MBRというキーワードで検索したが、今はEFIブートローダーと呼んでいるらしい。 【Win10】任意のディスクにEFIブートローダをインストールする 色々検索した結果この記事が参考になった。 Diskpartを使って、パーティションを新たに分割し、bcdbootを実行して、無事に事なきを得た。 パーティションの分割はこんな感じ Diskpart Select volume 0 shrink desired = 200 Select disk 0 Create partition EFI size=200 Format quick fs=fat32 label="ESP" Assign letter=P exit EFIブートローダーのインストールはこんな感じ bcdboot C:\Windows /s P: /f UEFI ちなみに、自分の環境だけの問題なのだが、コマンドラインで、「\」を入力するのができなかった。我が家のキーボードはHHKBだけなので、日本語配列を無理やり適用されると、バックスラッシュが入力できないという不具合が生じる。 結局、コマンドプロンプトからマウスで範囲選択してコピーして貼り付けるという荒業でクリアした。 普通の人は、何も考えずに、\を入力すれば良い。 最終的に SSD: Cドライブ + ESP※ SSD: Dドライブ(データストレージ用) SSD: Eドライブ(データストレージ用) ※ESP(EFI System Partition) という構成に切り替えることができた。

Windows版gVimをアンインストールした日

Windows 版 gVim をアンインストールした話 以前に、 Windows11 on WSL2 + wezterm + Neovim = 最強開発環境 という痛々しい記事を書いたのだが、その続きの記事と言っても過言ではない。 この記事は Vim 駅伝 の 3 月 1 日の記事である。 前回はぺりーさんの netrw を使うために という記事だった。 次回は kuuote さんの Vim 側の組み込みプラグインを無効化するハック という記事である。 gVim との付き合い 思い返してみると、gVim との付き合いは大分長くなった。エディタとしては 自分の人生の中で最も長く付き合ってきたエディタ と言える。Vim のインターフェースとして gVim を何度も使ってきた。自分の手持ちのマシンは Windows なので、必然的に gVim を選択肢として選ぶ必要があった。 gVim の良さは何か。それは、Windows とのシームレスな関係であり、Windows OS の機能をそのまま使いたい場合に有用である。かつての自分にとってこの部分は非常に重要であった。具体的には、印刷機能と画面半透明化機能であり、これが無いとやってられないという認識であった。 しかし、時代が進み、自分の技術力の向上や考え方の変化、さらに Vim 周りのプラグインの更新が進むと gVim で運用していく事がだんだんと億劫になっていったというのが事実である。故に、 WSL2 上で動く Neovim の快適さに心が打ち震えた のである。 技術力の向上に伴う考え方の変化 かつての自分は 何でも gVim で処理したいな と考えていた。メールを見たり天気を見たり、Twitter を見たりするのに、gVim を活用していた。かつての Emacs 使いの guru のような立ち位置を目指していたというのがある。2000 年代初頭にインターネットに多少なりとも触れていた人ならば、「それ Pla」という古の単語を思い浮かべるかもしれない。この概念を持ち出すのはあまりにも古すぎるが、結局言いたいのは、 1 つの手法で全部をこなす という考え方だ。ネットを見るのにわざわざブラウザに切り替えるのはもったいないという今となっては情熱に似た何かを当時は多くの人が持っていた。 しかし、自分自身の技術力

javascriptは外部ファイルにした方がいいの?それとも、インラインの方が良いの?

事の発端 os0xさんのブログコメント で、javascriptの書き方について、面白いやり取りがありましたので、それについての私見を書きたいと思います。 結論から言いますと、プログラマ的な立場から言わせて頂くと、外部ファイル管理が望ましく、コーダ的な立場から言わせていただくとインラインが望ましいです。 なぜそのような結論に至ったのか、まずは経緯を御覧ください。 コメント欄でのやり取り os0xさんのブログコメント欄を引用しています