NicoVideo Simple UI
By kuy
—
Last update Jul 4, 2008
—
Installed
195 times.
// ==UserScript==
// @name NicoVideo Simple UI
// @namespace http://endflow.net/
// @description UI enhancement for NicoVideo.
// @include http://www.nicovideo.jp/*
// ==/UserScript==
// @author Yuki KODAMA (twitter:kuy, skype:netkuy)
// @version 0.1.1 [2008-06-23]
// @history [2008-06-23] 0.1.0 first release
// [2008-06-23] 0.1.1 add more options
(function(){
var tasks = [{
xpath:'//div[contains(@class,"ads_")]//div[contains(@id,"web_pc_")]/..',
limit:2,
retry:10,
passOne:function(e){
e.parentNode.removeChild(e);
}
},{
xpath:'id("billboard_container")',
style:"body{background:#ffffff;}",
passOne:function(e){
e.parentNode.removeChild(e);
}
},{
xpath:'//div[@class="user_bg"]/table/tbody/tr/td',
style:"div.user_bg table tbody tr td{padding:0px 0px 0px 6px;} div.user_bg input.search{background:#ffffff;}",
passAll:function(elems){
var user = document.createElement('TD');
user.nowrap = 'nowrap';
var anchor = $x('id("PAGEHEADER")/div/table/tbody/tr/td/a')[0];
user.innerHTML = '<a href="' + anchor.href + '><strong>' + anchor.firstChild.innerHTML + '</strong></a>';
var shortcuts = document.createElement('TD');
shortcuts.width = '100%';
var ranking = $x('id("PAGEHEADER")//a').filter(function(a){return a.href.indexOf('ranking') != -1})[0];
shortcuts.innerHTML = '<a href="http://www.nicovideo.jp/">トップ</a>'
+ ' | ' + '<a href="' + ranking.href + '">ランキング</a>';
var menu = document.createElement('TD');
menu.nowrap = 'nowrap';
menu.innerHTML = <><![CDATA[
<select onchange="jumpMENU('parent',this,0)">
<option selected="">メニュー</option>
<option value="http://www.nicovideo.jp/newarrival">新着動画</option>
<option value="http://www.nicovideo.jp/random">きまぐれ検索</option>
<option value="http://www.nicovideo.jp/tag">注目のタグ</option>
<option value="http://www.nicovideo.jp/my">マイページ</option>
<option value="http://www.nicovideo.jp/history">最近見た動画</option>
<option value="https://secure.nicovideo.jp/secure/logout">ログアウト</option>
</select>
]]></>;
var search = document.createElement('TD');
search.nowrap = 'nowrap';
search.innerHTML = <><![CDATA[
<form action="search" method="get" onsubmit="var target=this.tag.flag?'tag':'search';location.href='http://www.nicovideo.jp/'+target+'/'+encodeURIComponent(this.s.value.strip()).replace(/%20/g, '+'); return false;">
<input name="ref" value="top" type="hidden">
<div style="padding: 0px 2px; background-color: transparent; background-repeat: no-repeat; background-attachment: scroll; background-position: center center;">
<table summary="検索" style="margin: 0px auto;" border="0" cellpadding="0" cellspacing="0" height="32">
<tbody><tr>
<td style="padding: 0px;"><input name="s" value="" class="search" type="text"></td>
<td><input class="submit" value="キーワード" type="submit" name="keyword" onclick="this.flag=true"></td>
<td><input class="submit" value="タグ" type="submit" name="tag" onclick="this.flag=true"></td>
</tr>
</tbody></table>
</div>
</form>
]]></>;
// remove all
var parent = elems[0].parentNode;
elems.forEach(function(e){
e.parentNode.removeChild(e);
});
// append all
parent.appendChild(user);
parent.appendChild(shortcuts);
parent.appendChild(menu);
parent.appendChild(search);
}
},{
xpath:'id("PAGEHEADER")/table',
passOne:function(e){
e.parentNode.removeChild(e);
}
}];
var sweeper = function(){
var count = 0;
tasks.forEach(function(task){
if(task.done) return;
count++;
if(task.style) GM_addStyle(task.style);
var result = $x(task.xpath);
if(result && result.length != 0){
var ret = task.passOne ? task.passOne(result[0]) : task.passAll(result);
if(ret !== false){
if(task.limit){
if(!task.count) task.count = 0;
task.count++;
if(task.limit <= task.count) task.done = true;
}else{
task.done = true;
}
}
}
if(task.retry){
if(!task.retryCount) task.retryCount = 0;
task.retryCount++;
if(task.retry <= task.retryCount) task.done = true;
}
});
if(count != 0) setTimeout(sweeper, 250);
}
setTimeout(sweeper, 10);
function $x(x,c){c=c||document;var res=document.evaluate(x,c,null,XPathResult.UNORDERED_NODE_ITERATOR_TYPE,null);
for(var i,nodes=[];i=res.iterateNext();nodes.push(i));return nodes;}
})();