// ==UserScript== // @name groya // @namespace http://aokura.com/ // @description あやしい画像(エログロなど)へのリンクを縮小表示で確認 // @version 0.5 // ==/UserScript== (function($) { // 適用除外サイト var exclusion = [ /* Regular Expressions */ /\.nifty\.com\/aokura/i, /aok\.cocolog\-nifty\.com/i, /hp\.vector\.co\.jp\/authors\/VA010286/i, /(login|mail|my)\.(yahoo|nifty)\.co(m|\.)/i, /(facebook|twitter|youtube)\.com/i, /google\.co(m|\.)/i, /mixi\.jp/i, /(mypage|pigg)\.ameba\.jp/i ]; // common functions var addEvent = function(obj, ev, handler) { if (obj.addEventListener) obj.addEventListener(ev, handler, false); else if (obj.attachEvent) obj.attachEvent('on' + ev, handler); else { var func = obj['on' + ev]; obj['on' + ev] = function(e) { if (func != null) func(e); handler(e); }; } }; var setStyles = function(obj, hash) { for (var key in hash) { var prop = key.replace(/\-([a-z])/, function() { return arguments[1].toUpperCase(); }); obj.style[prop] = hash[key]; } }; // popup window (customized) var popupWindow = function(w, h) { this.pWnd = null; this.target = 'groya_popup_window'; this.features = { dialog:'yes', width:w, height:h, channelmode:0, directories:0, fullscreen:0, location:0, menubar:0, resizable:0, scrollbars:0, status:0, toolbar:0 }; this.open = function(url) { var list = []; for (var i in this.features) { list.push(i + '=' + this.features[i]); } this.pWnd = $.open(url, this.target, list.join(',')); if (this.pWnd) { this.pWnd.focus(); $.groya_popup_window = this.pWnd; return true; } return false; }; addEvent($, 'unload', function(e) { var wnd = $.groya_popup_window; if (wnd && !wnd.closed) wnd.close(); }); }; // entry point /* try { if (top.location.href != location.href) return; } catch(e) { return; } */ if ($.name == 'groya_popup_window') return; for (var i = 0; i < exclusion.length; i++) { if (exclusion[i].test(location.href)) return; } var reg2ch = /ime\.st\/|ime\.nu\/|pinktower\.com\/\??|http:\/\/nun\.nu\/\?/ig; var regurl = /h?ttps?:\/\/[\-_.!~*'()a-zA-Z0-9;\/?:@&=+$,%#]+\.(bmp|gif|jpe?g|png)/ig; var puw = new popupWindow(120, 100); var count = 0; var window_load = function(e) { var urls = {}; var imgs = []; var links = $.document.getElementsByTagName('a'); for (var i = 0; i < links.length; i++) { if ((/\.(bmp|gif|jpe?g|png)$/i).test(links[i].href)) { var s = links[i].href.replace(reg2ch, ''); urls[s] = 1; } } var arr = $.document.body.innerHTML.match(regurl); if (arr) { for (var i = 0; i < arr.length; i++) { var s = arr[i].replace(/^h?t?tp:/i, 'http:'); s = s.replace(/^h?t?tps:/i, 'https:').replace(reg2ch, ''); urls[s] = 1; } } var img_arr = $.document.getElementsByTagName('img'); for (var i = 0; i < img_arr.length; i++) { if (urls[img_arr[i].src]) delete urls[img_arr[i].src]; } for (var key in urls) { imgs.push(key); } if (imgs.length < 1) return; var div = $.document.createElement('div'); $.document.body.appendChild(div); setStyles(div, { 'position':'absolute', 'top':'0', 'left':'0', 'background-color':'black', 'color':'white', 'display':'block', 'margin':'0', 'font-family':'Verdana', 'font-size':'small', 'padding':'4px', 'text-align':'left', 'width':'100%' }); var div1 = $.document.createElement('div'); setStyles(div1, { 'display':'none', 'margin':'0', 'overflow':'auto', 'padding':'3px 0 0 0', 'text-align':'left', 'white-space':'nowrap' }); var div2 = $.document.createElement('div'); var btn = $.document.createElement('input'); btn.type = 'button'; btn.value = 'show images'; setStyles(btn, { 'background-color':'black', 'color':'white', 'font-family':'Verdana', 'font-size':'small', 'margin':'0 12px 0 0', 'width':'110px' }); div2.innerHTML = 'Groya for Greasemonkey Ver.0.5 - Copyright (c) 2012 AOK'; setStyles(div2, { 'color':'white', 'font-family':'Verdana', 'font-size':'small', 'margin':'0', 'padding':'0', 'text-align':'left', 'white-space':'nowrap' }); var span = $.document.createElement('span'); setStyles(span, { 'color':'white', 'font-family':'Verdana', 'font-size':'small', 'margin':'0', 'padding':'0 12px', 'white-space':'nowrap' }); div2.insertBefore(btn, div2.firstChild); div.appendChild(div2); div.appendChild(div1); var select = $.document.createElement('select'); setStyles(select, { 'background-color':'black', 'color':'white', 'font-family':'Verdana', 'font-size':'small', 'margin':'0', 'padding':'0' }); for (var i = 0; i < imgs.length; i++) { if (i % 50 == 0) { var option = $.document.createElement('option'); option.appendChild($.document.createTextNode((i+1)+'-')); select.appendChild(option); } } span.innerHTML = '('+imgs.length+' images)'; div2.appendChild(span); var select_change = function(e) { var count = 0; span.innerHTML = '('+count+'/'+imgs.length+' images)'; for (var i = div1.children.length-1; i >= 0; i--) { div1.removeChild(div1.children[i]); } var si = select.selectedIndex; for (var i = si*50; i < (si+1)*50 && i < imgs.length; i++) { var key = imgs[i]; var a = $.document.createElement('a'); a.alt = key; a.href = key.replace(/^https?/, 'groya'); a.title = key; var img = $.document.createElement('img'); img.src = key; setStyles(img, { 'display':'none', 'height':'60px', 'margin':'2px', 'opacity':'0.6', 'padding':'0', 'width':'80px' }); a.appendChild(img); addEvent(img, 'mouseover', function(e) { this.style.opacity = '1.0'; }); addEvent(img, 'mouseout', function(e) { this.style.opacity = '0.6'; }); addEvent(img, 'load', function(e) { this.style.display = 'inline'; span.innerHTML = '('+(++count)+'/'+imgs.length+' images)'; }); addEvent(a, 'click', function(e) { if (puw.open(this.title)) { try { var pdoc = puw.pWnd.document; pdoc.open(); pdoc.writeln('