Permalink
Browse files

open.thumbshots.org やめたり

  • Loading branch information...
oflow
oflow committed Apr 30, 2013
1 parent 2db3546 commit 3041f04562058fc3eee182cee0a492c8793e86ae
Showing with 99 additions and 66 deletions.
  1. +99 −66 google_search_thumbnail.user.js
@@ -13,6 +13,7 @@
// @include https://www.google.co.jp/webhp*
// @include https://www.google.co.jp/#
// @include https://www.google.co.jp/#sclient*
// @include https://www.google.co.jp/#safe*
// @include https://www.google.co.jp/#q=*
// @include https://www.google.co.jp/#hl=*
// @include https://www.google.co.jp/
@@ -25,8 +26,12 @@
// @include http://www.google.co.jp/
// @version 1.0
// @note 20130430
// Googleの仕様変更に対応
// 簡単にサムネ取得できる画像投稿サービス(twipple)追加
// ニコニコ動画のスパムくさいサイトうざいな
// @note 20130304
// open.thumbshots.org から capture.heartrails.com に変更
// open.thumbshots.org から searchpreview.de に変更
// @note 20120817
// DOMNodeInsertedでdiv#iresを追加するように変わってたので対応
// @note 20120711
@@ -43,52 +48,65 @@
// Google Search Number Favicon使用時でもサムネ付くように対応
// AutoPagerize使用時に2ページ目以降サムネ付かなかったのを修正
// NinjaKitのJSLintで怒られないように修正
//
// @memo li.g > div.vsc が li.g > div.rc になってる
// インスタントプレビューなくなったかもしれん
// ==/UserScript==
(function () {
var url = {
// thumbshots: 'http://open.thumbshots.org/image.pxf?url=%url%',
thumbshots: 'http://capture.heartrails.com/120x90/?%url%',
thumbshots: 'https://searchpreview.de/preview?s=%url%',
amazon: 'http://images-jp.amazon.com/images/P/%asin%.09._AA120_.jpg',
youtube: 'http://i.ytimg.com/vi/%id%/default.jpg',
nicovideo: 'http://tn-skr%number%.smilevideo.jp/smile?i=%id%'
nicovideo: 'http://tn-skr%number%.smilevideo.jp/smile?i=%id%',
twipple: 'http://p.twipple.jp/show/thumb/%id%'
};
var regexp = {
asin: /amazon.+(?:dp|ASIN|gp\/product)\/([0-9A-Z]{10})/,
nicovideo: /(?:www\.nicovideo\.jp\/watch|nico\.ms)\/sm([0-9]+)/,
youtube: /www\.youtube\.com\/watch\?.*v=([a-zA-Z0-9\-]+)/
nicovideo: /(?:www\.nicovideo\.jp\/watch|nico\.ms|nicoviewer\.net|nicozon\.net\/watch|nicosoku\.com\/watch|nico\.oh-web\.jp)\/sm([0-9]+)/,
youtube: /www\.youtube\.com\/watch\?.*v=([a-zA-Z0-9_\-]+)/,
twipple: /p\.twipple\.jp\/([a-zA-Z0-9]+)/
};
var css = '';
css += '.g.thumbshots { min-height: 95px; }';
css += '.g.thumbshots .thumb:active { outline: 1px solid #dd4b39; }';
css += '.g.thumbshots .thumb img { width: 120px; height: 90px; position: absolute; display: inline-block; border: 3px solid #e5e5e5; margin-top: 0px; outline: 1px solid #ccc; z-index: 2; }';
css += '.g.thumbshots > .vsc, .g.thumbshots > .mbl { margin-left: 135px; }';
css += '.g.thumbshots > .nrgt { margin-left: 155px; }';
// Amazonの商品画像は高さが違うので修正
// 高さ調整
css += '.g.thumbshots,';
css += '.g.thumbshots > .vsc { min-height: 93px; }';
// 画像の枠とかは他のボタンと同じような感じ
css += '.g.thumbshots .thumb img { width: 111px; height: 82px; position: absolute; display: inline-block; border: 3px solid #f1f1f1; outline: 1px solid #d5d5d5; margin-top: 3px; z-index: 2; }';
css += '.g.thumbshots .thumb:hover img { outline-color: #c1c1c1; }';
css += '.g.thumbshots .thumb:active img { outline-color: #4d90fe; }';
// 画像挿入するので位置調整
css += '.g.thumbshots > .rc,';
css += '.g.thumbshots > .vsc,';
css += '.g.thumbshots > .mbl { margin-left: 126px; }';
// サイトリンクの位置調整
css += '.g.thumbshots > .nrgt { margin-left: 135px; }';
// Amazonの商品画像は高さが違うので調整
css += '.g.amazon .thumb img { height: 120px; border-color: transparent; outline-width: 0; }';
css += '.g.amazon { min-height: 125px !important; }';
// 画像投稿サービス
css += '.g.photo .thumb img { width: auto; height: auto; max-width: 111px; max-height: 93px; }';
// 動画サムネの背景が黒になってたり枠線付いてるので消す
css += '.g.video .ts .th { overflow: visible !important; background: transparent !important; border: 0 !important; z-index: 200; }';
css += '.g.video .ts .th a { border: 0 !important; }';
// 本来のサムネ
css += '.g.video .ts td[width] { background: transparent !important; border: 0 !important; padding: 0 !important;}';
css += '.g.video .ts td[width] > div { position: absolute !important; width: 1px !important; height: 1px !important; }';
css += '.g.video img[class*="vidthumb"] { display: none !important; }';
css += '.g.video .s .th { overflow: visible !important; background: transparent !important; border: 0 !important; z-index: 200; }';
css += '.g.video .s .th a { border: 0 !important; }';
// 本来のサムネを消す
css += '.g.video .th img { display: none !important; }';
// ► 3:20 とか時間表示は残す
css += '.g.video td > .th a span { position: absolute !imoportant; right: auto !important; left: -132px; z-index: 200; }';
css += '.g.video .th .vdur { position: absolute !imoportant; right: auto !important; left: -123px; margin-bottom: 3px; z-index: 200; }';
// 動画用の位置調整
css += '.g.video .s > div { position: absolute !important; margin-left: 0 !important; }';
css += '.g.video img[class*="vidthumb"] { display: none !important; }';
// ~の他の動画≫
css += '.g.video .vsc + div { margin-top: 12px !important; }';
// 元々あるプレビューボタン(≫)を消す
// sig属性消してるのでクリックしても表示されない
css += '.vspib, #vspb { display: none !important; }';
var googleThumbnail = {
init: function () {
GM_addStyle(css);
document.body.addEventListener('DOMNodeInserted', this, false);
window.addEventListener('unload', this, false);
this.setWebnail(document.body);
this.checkResult(document.body);
},
handleEvent: function (event) {
var elm = event.target, i;
@@ -98,11 +116,11 @@
// console.debug(elm.nodeName, elm.id, elm.className);
// Ajaxで追加 = LI
// AutoPagerizeで追加 = OL
this.setWebnail(elm);
this.checkResult(elm);
} else if (elm.nodeName == 'DIV' && elm.id == 'ires') {
// console.debug(elm);
// 2012-08-17 ajaxで追加
this.setWebnail(elm);
this.checkResult(elm);
}
break;
@@ -118,66 +136,81 @@
break;
}
},
setWebnail: function (elm) {
var vsc = elm.getElementsByClassName('vsc'),
length = vsc.length,
i, a, href, li, thumb, img, anchor;
checkResult: function (elm) {
var g = elm.getElementsByClassName('g'),
length = g.length,
i, a, li;
// li.g > a > img.thumbshots
// li.g > div.vsc > h3
for (i = 0; i < length; i += 1) {
// div.vscのsig属性を消すとプレビューでない
vsc[i].removeAttribute('sig');
if (vsc[i].className != 'vsc') {
// vsc以外のクラスが付いてると元々サムネ付いてるはず
li = g[i];
// .g に id, 他のclass が付いてたらたぶん違う
if (li.id || li.className != 'g') {
continue;
}
// a class="l"がなかったら多分違う
a = vsc[i].getElementsByClassName('l')[0];
a = li.getElementsByTagName('a')[0];
if (!a) {
continue;
}
// onmosedown は削除しないで空にしとく
if (a.hasAttribute('onmousedown')) {
a.removeAttribute('onmousedown');
a.setAttribute('onmousedown', '');
}
href = a.href;
li = vsc[i].parentNode;
// li class="videobox"がある場合はやめとく
// li.videobox がある場合はやめとく
if (li.className.indexOf('videobox') != -1) {
continue;
}
// 子要素にclass="vresult"がある場合はやめとく(動画の横並びの時など)
if (li.getElementsByClassName('vresult')[0]) {
continue;
}
// こっからは多分サムネ置き換えるのでクラス追加しとく
li.className += ' thumbshots';
anchor = li.insertBefore(document.createElement('a'), vsc[i]);
anchor.href = href;
anchor.className = 'thumb';
img = anchor.appendChild(document.createElement('img'));
this.setWebnail(li, a.href);
}
},
setWebnail: function (li, href) {
var id,
w = 'abcdefghijklmnopqrstuvwxyz',
a = document.createElement('a'),
img = document.createElement('img');
if (regexp.asin.test(href)) {
// アマゾンっぽかったら商品画像
li.className += ' amazon';
img.src = url.amazon.replace('%asin%', RegExp.$1);
img.addEventListener('load', this, false);
} else if (regexp.youtube.test(href)) {
// Youtube
id = RegExp.$1;
li.className += ' video youtube';
img.src = url.youtube.replace('%id%', id);
} else if (regexp.nicovideo.test(href)) {
// ニコニコ動画
id = RegExp.$1;
li.className += ' video nicovideo';
img.src = url.nicovideo.replace('%id%', id).replace('%number%', (parseInt(id, 10) % 4 + 1));
} else {
// 他はopen.thumbshots.org
href = encodeURIComponent(href);
img.src = url.thumbshots.replace('%url%', href);
a.href = href;
a.className = 'thumb';
li.className += ' bb';
if (regexp.asin.test(href)) {
// アマゾンっぽかったら商品画像
li.className += ' amazon';
img.src = url.amazon.replace('%asin%', RegExp.$1);
img.addEventListener('load', this, false);
} else if (regexp.youtube.test(href)) {
// Youtube
li.className += ' video youtube';
img.src = url.youtube.replace('%id%', RegExp.$1);
} else if (regexp.nicovideo.test(href)) {
// ニコニコ動画
id = RegExp.$1;
li.className += ' video nicovideo';
img.src = url.nicovideo.replace('%id%', id)
.replace('%number%', (parseInt(id, 10) % 4 + 1));
} else if (regexp.twipple.test(href)) {
// 情弱
li.className += ' photo';
img.src = url.twipple.replace('%id%', RegExp.$1);
} else {
if (li.getAttribute('style')) {
return;
}
// 他はサムネ追加
href = encodeURIComponent(href);
// w = w.charAt(Math.floor(Math.random() * 24));
// url.thumbshots.replace('%[w]%', w);
img.src = url.thumbshots.replace('%url%', href);
}
a.appendChild(img);
li.className += ' thumbshots';
li.insertBefore(a, li.firstChild);
},
remove: function (elm) {
elm.removeEventListener('load', this, false);

0 comments on commit 3041f04

Please sign in to comment.