Lingr でニコニコ動画のサムネイルを表示

Lingr のチャットルームでニコニコ動画のリンクが書き込まれた時、サムネイルを自動挿入する GreaseMonkey スクリプトを作ったので公開。一応、Safari の GreaseKit でも動作するはず。

サムネイル生成部分はhttp://10coin.com/2007/07/30/115744 を使わせてもらっている。

// ==UserScript== 
// @name          nicothumbnaillingr
// @description   nicovideo thumbnail for lingr
// @include       http://www.lingr.com/room/*
// @exclude       
// ==/UserScript== 

(function ()
 {

	 function createIframeObj(href)
	 {
		 var video_id  = href.replace('http://www.nicovideo.jp/watch/', '');
		 var iframeObj = document.createElement('iframe');
		 var style     = iframeObj.style;
		 style.width       = '312px';
		 style.height      = '176px';
		 style.borderWidth = '1px';
		 style.borderStyle = 'solid';
		 style.borderColor = '#ccc';
		 iframeObj.setAttribute('scrolling', 'no');
		 iframeObj.setAttribute('frameborder', 0);
		 iframeObj.setAttribute('src', 'http://www.nicovideo.jp/thumb/' + video_id);
		 return iframeObj;
	 }

	 function insertThumbnail()
	 {
		 var elems = document.getElementsByTagName('span');
		 for(var i = elems.length - 1; i > 0; i--) {
			 var class_str = "" + elems[i].getAttribute('class');
			 if(class_str.match(/messageTextContainer/)) {
				 var child_elems = elems[i].childNodes;
				 for(var j = 0; j < child_elems.length; j++) {
					 var href_str = "" + child_elems[j];
					 if(href_str.match(/http:\/\/www.nicovideo.jp\/watch\/sm[0-9]*/)){
						 var parent = child_elems[j].parentNode
						 var href = child_elems[j].getAttribute('href');
						 var iframeObj = createIframeObj(href);
						 parent.insertBefore(iframeObj, child_elems[j]);
						 break;
					 }
				 }
				 return;
			 }
		 }
	 }
	 
	 function registerLingrEvent() {
		 var w = typeof unsafeWindow != 'undefined' ? unsafeWindow : window;
		 window.addEventListener('load', function(){
			 w.Chatroom.prototype.original_highlightLastMessage = w.Chatroom.prototype.highlightLastMessage;
			 w.Chatroom.prototype.highlightLastMessage = function() {
				 this.original_highlightLastMessage();
				 insertThumbnail();
			 }

		 }, true);
	 }

	 function main()
	 {
		 registerLingrEvent();
	 }
	 main();
 })();