またニコニコ動画の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 );
})();
コメント
コメントを投稿