2009年5月30日土曜日

Operaで使えるニコニコ大百科ポップアップ

このエントリーをはてなブックマークに追加
超うそ臭いの作ってみた。
元ネタはこちらのページ
コードをまるっとコピペした。
後、iframeを動的に追加して、dic.nicovideo.jpを表示させた。んで、説明文を適当に切り張りしてる。
つまるところ、無駄にインフラを消費するという素敵無駄コード!!
変な関数とかは使っていないので、FirefoxやGoogle Chromeで動くかもしれません。
動いても嘘くさい動きですががが。
ポップアップは自動的には消えないので、適当に左上の×ボタン(?)をクリックしてください。
mouseoutで消しやがれF*ckって人は適当にコードいじってください。

// ==UserScript==
// @name Popup Nico Dict for Iframe
// @namespace http://gigi-net.net
// @include http://dic.nicovideo.jp/*
// @include http://www.nicovideo.jp/watch/*
// @author giginet modified Arc Cosine
// @version 1.0
// ==/UserScript==
(function(){
var nicodicView = {
tip : null,
init : function(){
if( this.checkOption() ){
this.createNicoDic();
}else{
this.popup();
}
},
createNicoDic : function(){
document.getElementById("container").style.display = 'none';
//clear div
var cap = document.getElementsByTagName("h1")[0].innerHTML;
var desc = document.getElementById("article");
var article= desc.innerHTML;

//ページメニューを消去
article =article.replace(/<div id..page-menu.>.*<.div>/i,"");

//見出しを【】に変換
article =article.replace(/<h2.*?>/gm,"【");
article =article.replace(/<.h2>/gm,"】");

//タグを全消去
article =article.replace(/<.*?>/mg,"");
//先頭300文字のみ抽出し、省略された場合は...をくわえる
showText =article.substring(0,299);
if(article.length>=300){
showText +="..."
}
//見出しを改行する
showText =showText.replace(/【/gm,"<br>【");
showText =showText.replace(/】/gm,"】<br>");
//タイトルを追加
showText ="<h1>"+cap+"</h1>"+showText;
var descDiv = document.body.appendChild(document.createElement('div'));
descDiv.style.display = 'block';
descDiv.innerHTML = showText;
},
popup : function(){
var loc = location.href.match(/nicovideo/);
if(loc){
var iconList = document.getElementsByClassName("txticon");
var _self = this;
for( var i=0, l=iconList.length; i<l; i++ ) (function(list){
_self.CoolTips(list);
})(iconList[i]);
}
},
checkOption : function(){
var loc =location.href.match(/popup=true/);
if( !loc ){
return false;
}
return true;
},
findPos : function(e){
return { "x":e.clientX, "y":e.clientY};
},
CoolTips : function(node){
var link = node.parentNode.href;
node.onmouseover = function(e){ nicodicView.showTips(e,link); };
//node.onmouseout = function(){ nicodicView.hideTips(); };
},
showTips : function(e,link){
if( this.tip != null ){ this.nicodicView.hideTips(); };
this.tip = document.createElement("div");
var pos = this.findPos(e);
this.tip.style.top = pos.y - 240 +'px';
this.tip.style.left = pos.x + 20 + 'px';
this.tip.style.width = '340px';
this.tip.style.height = '220px';
this.tip.style.fontSize = '13px';
this.tip.style.fontWeight = 'bold';
this.tip.style.zIndex = '10000';
this.tip.style.background = "#333333";
this.tip.style.color = "#ffffff";
this.tip.style.position = 'absolute';


var iframe = this.tip.appendChild(document.createElement("iframe"));
iframe.src = link + "?popup=true";
iframe.width = "100%";
iframe.height= "100%";

var closeBox = this.tip.appendChild(document.createElement("div"));
closeBox.style.position = 'absolute';
closeBox.style.top = "2px";
closeBox.style.marginLeft = "2px";
closeBox.style.border = "sold 1px #fcfcfc";
closeBox.style.zIndex = "10001";
closeBox.style.width = '16px';
closeBox.style.height = '16px';
closeBox.style.background= '#333333';
closeBox.style.color= '#ffffff';
closeBox.style.fontWeight= 'bold';
closeBox.appendChild(document.createTextNode('X'));
closeBox.onclick = function(){ nicodicView.hideTips() };
document.body.appendChild(this.tip);

},
hideTips : function(){
this.tip.parentNode.removeChild(this.tip);
this.tip = null;
}

};
nicodicView.init();
})();

0 件のコメント :

コメントを投稿