Skip to content

Instantly share code, notes, and snippets.

@lagash
Forked from anonymous/comicsearch.user.js
Created November 5, 2008 05:35
Show Gist options
  • Save lagash/22295 to your computer and use it in GitHub Desktop.
Save lagash/22295 to your computer and use it in GitHub Desktop.
// ==UserScript==
// @name newcomicsearch
// @namespace http://d.hatena.ne.jp/dalmacija/
// @description newcomicsearch
// @include http://www.taiyosha.co.jp/comic/*
// ==/UserScript==
(function(){
var helpDiv = document.createElement('div')
helpDiv.setAttribute('id', 'comicmailto')
helpDiv.setAttribute('style', 'padding:5px;position:fixed;' +
'top:3px;right:3px;font-size:10px;' +
'background:#fff;color:#000;border:1px solid #ccc;' +
'z-index:256;text-align:left;font-weight:normal;' +
'line-height:120%;font-family:verdana;');
helpDiv.innerHTML="<div id='form_id'>wassrへ</div>";
document.body.appendChild(helpDiv);
var authDiv = document.createElement('div')
authDiv.setAttribute('id', 'comicmailto')
authDiv.setAttribute('style', 'padding:5px;position:fixed;' +
'top:50px;right:3px;font-size:10px;' +
'background:#fff;color:#000;border:1px solid #ccc;' +
'z-index:257;text-align:left;font-weight:normal;' +
'line-height:100%;font-family:verdana;'+
'overflow:auto;height:90%;');
authDiv.innerHTML="<div id='auth'>--</div>";
document.body.appendChild(authDiv);
//作家定義
var favorite=new Array(
"御形屋 はるか",
"紺條 夏生",
"もと なおこ",
"はっとり みつる",
"咲 香里",
"冬川 基",
"近木 野中哉",
"岡本 倫",
"羅川 真里茂",
"林 ふみの",
"今 市子",
"沙村 広明",
"篠房 六郎",
"幸村 誠",
"中村 嘉宏",
"サトウ ナンキ",
"おがき ちか",
"群青",
"後藤 晶",
"きづき あきら",
"美樹本 晴彦",
"安彦 良和",
"相原 実貴",
"宮坂 香帆",
"倉藤 光二",
"技来 静也",
"松本 次郎",
"阿部 吉俊",
"よしなが ふみ",
"藤崎 竜",
"陽香",
"橘 裕",
"長谷川 スズ",
"星 樹",
"あづま ゆき",
"武富 健治",
"私屋 カヲル",
"曽田 正人",
"一条 ゆかり",
"仲村 佳樹",
"糸杉 柾宏",
"岡田 和人",
"桜瀬 琥姫",
"遠藤 浩輝",
"惣領 冬実",
"遠藤 海成",
"山岸 凉子",
"箸井 地図",
"一色 まこと",
"宇仁田 ゆみ",
"okama",
"桂 明日香",
"雁 須磨子",
"Cuvie",
"さいとう ちほ",
"末次 由紀",
"宗我部 としのり",
"高遠 るい",
"高崎 ゆうき",
"高屋 奈月",
"田中 メカ",
"稚野 鳥子",
"鶴田 謙二",
"桃森 ミヨシ",
"那州 雪絵",
"袴田 めら",
"ひぐち アサ",
"水上 悟志",
"六道 神士",
"いけだ たかし",
"犬上 すくね",
"入江 亜季",
"影崎 由那",
"カトウ ハルアキ",
"桐原 いづみ",
"高河 ゆん",
"しげの 秀一",
"志村 貴子",
"鈴木 ジュリエッタ",
"冬目 景",
"中村 明日美子",
"日本橋 ヨヲコ",
"松苗 あけみ",
"森 薫",
"ヤスダ スズヒト",
"null",
"吉住 渉",
"東 まゆみ",
"麻生 みこと",
"新井 理恵",
"荒川 弘",
"有吉 京子",
"井ノ本 リカ子",
"佐々木少年",
"椎名 軽穂",
"塩野 干支郎次",
"志水 アキ",
"奥瀬 サキ",
"目黒 三吉",
"小梅 けいと",
"神葉 理世",
"杉基 イクラ",
"鈴見 敦",
"高野 真之",
"田中 ユタカ",
"海藍",
"萩尾 望都",
"船戸 明里",
"山名 沢湖",
"やまむら はじめ",
"吉富 昭仁",
"山口 貴由",
"石川 雅之",
"植芝 理一",
"漆原 友紀",
"弐瓶 勉",
"北崎 拓",
"筑波 さくら",
"羽海野 チカ",
"板場 広志",
"内藤 泰弘",
"久世 番子",
"しゃあ",
"小石川 ふに",
"木村 紺",
"三嶋 くるみ",
"水城 せとな",
"大岩 ケンジ",
"倉藤 梓",
"林家 志弦",
"鴨居 まさね",
"田村 由美",
"鬼頭 莫宏",
"津田 雅美",
"高野 うい",
"花見沢 Q太郎",
"石田 敦子",
"秋吉 由美子",
"きゆづき さとこ",
"ゆうき まさみ",
"松本 光司",
"CLAMP",
"神尾 葉子",
"山本 ヤマト",
"夏海 ケイ",
"小林 立",
"よしづき くみち",
"浜田 よしかづ",
"榎本 ナリコ",
"あきづき 空太",
"安部 真弘",
"上田 夢人",
"海野 つなみ",
"二ノ宮 知子",
"星野 リリィ",
"鎌谷 悠希",
"皆川 亮二",
"岡田 芽武",
"熊倉 隆敏",
"黒田 硫黄",
"中原 アヤ",
"あずま きよひこ",
"東雲 太郎",
"西川 秀明",
"上遠野 浩平",
"シギサワカヤ",
"成田 美名子",
"森島 明子",
"玉置 勉強",
"山本 小鉄子",
"三浦 建太郎",
"D・キッサン",
"相田 裕",
"井上 雄彦",
"武梨 えり",
"森永 みるく",
"kashmir",
"カサハラ テツロー",
"水 あさと",
"岩明 均",
"秋山 はる",
"西島 大介",
"渡会 けいじ",
"かきふらい",
"浅見 百合子",
"絶叫",
"ばらスィー",
"春野 友矢",
"矢上 裕",
"岩館 真理子",
"平尾 アウリ",
"紺野 キタ",
"大  沖",
"こむそう",
"篠原 健太",
"山本 直樹",
"渡辺 航",
"出渕 裕",
"荒井 チェリー",
"近木野 中哉",
"高山 しのぶ",
"草野 ほうき",
"ツガノ ガク",
"石見 翔子",
"平野 耕太",
"岡野 玲子",
"藤真 拓哉",
"勝田 文",
"西 炯子",
"あらた としひら"
);
// ************以下、External jQuery Loader
/** Usage:
var loader = new jQueryLoader(
{ // jQuery Core: required
name: 'jQuery',
version: '1.2.3',
url: 'http://blog.fulltext-search.biz/javascripts/gm/jquery-1.2.3.min.js'
},
[
{ // jQuery Plugin: optional
name: 'reflect',
version: '1.0', // optional: use '1.0' if undefined
url: 'http://blog.fulltext-search.biz/javascripts/gm/jquery.reflect.js'
}
]
);
**/
function jQueryLoader() { this.initialize.apply(this, arguments); };
var Util = {
bind: function() {
if (arguments.length < 3 && arguments[1] === undefined) return arguments[0];
var args = Util.toArray(arguments), __method = args.shift(), object = args.shift();
return function() {
return __method.apply(object, args.concat(Util.toArray(arguments)));
}
},
toArray: function(iterable) {
if (!iterable) return [];
var length = iterable.length || 0, results = new Array(length);
while (length--) results[length] = iterable[length];
return results;
},
extend: function(dist, source) {
for (var property in source) {
if(dist == source[property]) continue;
if(source[property] !== undefined) dist[property] = source[property];
}
return dist;
},
each: function(iteratorable, iterator) {
if(iteratorable.length === undefined)
for(var i in iteratorable) iterator.call( iteratorable[i], i, iteratorable[i] );
else
for(var i = 0, l = iteratorable.length, val = iteratorable[0];
i < l && iterator.call(val,i,val) !== false; val = iteratorable[++i] );
},
map: function(elems, callback) {
var ret = [];
for(var i=0,l=elems.length; i<l; i++) {
var value = callback(elems[i], i);
if(value !== null && value != undefined) {
if(value.constructor != Array) value = [value];
ret = ret.concat(value);
}
}
return ret;
},
parseQueryString: function(str) {
var memo = str.split('&');
for(var i=0,obj={},l=memo.length; i<l; i++) {
var pair = memo[i];
if((pair = pair.split('='))[0]) {
var name = decodeURIComponent(pair[0]);
var value = pair[1] ? decodeURIComponent(pair[1]) :undefined;
if(obj[name] !== undefined) {
if(obj[name].constructor != Array) obj[name] = [obj[name]];
if(value) obj[name].push(value);
} else {
var dummy = parseInt(new Number(value), 10);
obj[name] = isNaN(dummy) ? value : dummy;
}
}
}
return obj;
},
periodicalExecuter: function(callback, frequency) {
this.callback = callback;
this.frequency = frequency;
this.currentlyExecuting = false;
Util.extend(this, {
registerCallback: function() {
this.timer = setInterval(Util.bind(this.onTimerEvent, this), this.frequency * 1000);
},
execute: function() {
this.callback(this);
},
stop: function() {
if (!this.timer) return;
clearInterval(this.timer);
this.timer = null;
},
onTimerEvent: function() {
if (!this.currentlyExecuting) {
try {
this.currentlyExecuting = true;
this.execute();
} finally {
this.currentlyExecuting = false;
}
}
}
});
this.registerCallback();
}
};
jQueryLoader.prototype = {
cacheName: 'jQuery.Libraries',
namespace: 'jQueryLoader',
initialize: function(jquery, plugins) {
this.jquery = jquery;
this.plugins = plugins || [];
this.downloaded = 0;
this.permanents = eval(GM_getValue(this.cacheName, '({})'));
},
load: function(callback) {
if(typeof callback != 'function') return;
this.callback = callback;
this._load(this.jquery);
Util.each(this.plugins, Util.bind(function(i,lib) { this._load(lib); }, this));
this.eval();
},
_load: function(lib) {
lib.version = lib.version ? lib.version : '1.0';
if(!this.permanents[lib.name] || !this.permanents[lib.name].script ||
this.permanents[lib.name].version &&
this.compareVersion(this.permanents[lib.name].version, lib.version) < 0) {
if(!this.permanents[lib.name]) this.permanents[lib.name] = {};
Util.extend(this.permanents[lib.name], lib);
var self = this;
GM_xmlhttpRequest({
method: 'GET',
url: this.permanents[lib.name].url,
onload: function(res) {
self.permanents[lib.name].script = encodeURI(res.responseText);
GM_setValue(self.cacheName, self.permanents.toSource());
self.downloaded++;
},
onerror: function(res) { GM_log(res.status + ':' + res.responseText); }
});
} else { this.downloaded++; }
},
eval: function() {
if(this.plugins.length + 1 == this.downloaded) {
this.insert(this.permanents['jQuery'].script);
if(!unsafeWindow.__jQuery) unsafeWindow.__jQuery = {};
this.insert("__jQuery['" + this.namespace + "'] = jQuery.noConflict(true);");
var plugins = Util.map(this.plugins, Util.bind(function(plugin) {
return this.permanents[plugin.name].script;
}, this)).join("\n");
this.insert([
'(function(jQuery,$) {', plugins, "})(__jQuery['",
this.namespace, "'],__jQuery['", this.namespace, "']);"
].join(''));
this.wait();
} else {
setTimeout(Util.bind(function() { this.eval(); }, this), 10);
}
},
wait: function() {
if(unsafeWindow.__jQuery && unsafeWindow.__jQuery[this.namespace] &&
unsafeWindow.__jQuery[this.namespace]().jquery == this.permanents['jQuery'].version) {
this.callback(unsafeWindow.__jQuery[this.namespace]);
} else {
setTimeout(Util.bind(function() { this.wait(); }, this), 10);
}
},
insert: function(script) {
var lib = document.createElement('script');
lib.setAttribute('type', 'text/javascript');
lib.appendChild(document.createTextNode(decodeURI(script)));
document.getElementsByTagName('head')[0].appendChild(lib);
},
compareVersion: function(current, latest) {
var delta = 0;
var curr = current.split('.');
var ltst = latest.split('.');
for(var i=0, len = curr.length >= ltst.length ? curr.length : ltst.length; i<len; i++) {
var curr_num = parseInt(curr[i], 10);
var ltst_num = parseInt(ltst[i], 10);
if(isNaN(ltst_num) || curr_num > ltst_num) {
delta = 1;
break;
} else if(isNaN(curr_num) || curr_num < ltst_num) {
delta = -1;
break;
}
}
return delta;
}
};
//------------------------------jQueryローダオブジェクト
var loader = new jQueryLoader(
{ // jQuery Core: required
name: 'jQuery',
version: '1.2.3',
url: 'http://blog.fulltext-search.biz/javascripts/gm/jquery-1.2.3.min.js'
}
);
//------------------------------メイン。登録ワードを含むコミックをピックアップ
var favs=new Object();
var mailstr=new Array();
var mstr=0;
var favs=load();
if(!favs){
var str=new String();
for (var i in favorite){
str=favorite[i];
favs[str]=str;
}
save();
GM_log("favs is made now and saved.");
}else{
//GM_log(favs+":"+favs.toSource());
GM_log("favs is loaded");
}
loader.load(function($j) {
$j("table:has(th:contains('書籍扱'))").addClass("mainTable");
mtb=$j(".mainTable");
//---このページでは「書籍扱」という文字をトリガーに発売日一覧テーブルを判別
var cnt=0;
mailstr[0]="";
for (i in favs){
var a=$j("tr:contains("+favs[i]+")",mtb);
a.addClass("checked");
if(a.text()!=""){
mailstr[mstr]+=a.text();
cnt++;
if(cnt>0){cnt=0;mstr++;mailstr[mstr]="";}
GM_log(mailstr[mstr]);
}
$j("td:contains("+favs[i]+")",mtb).addClass("checked");
//GM_log(i+":"+favs[i]);
//---favリストを含む行にフラグを立てる
}
displayAuth();
mailstr.sort();
for (i in mailstr){ GM_log(mailstr[i]);}
//helpDiv.innerHTML="<div><a href='mailto:user@dammy.com?subject=comic&body="+mailstr+"'>send mail</div>";
$j("#form_id").click(function(){
post(); });
$j("td",mtb).css({"margin":"0px","padding":"0px","background":"#fff"});
$j("tr",mtb).each(function(){
$j("td:eq(3)",this).prepend("<input type='checkbox' />");
$j("td.checked input",this).attr("checked","true");
});
$j("input[type='checkbox']",mtb).change(function () {
//alert($j(this).parent().text()+":"+$j(this).attr('checked'));
var tmpStr=$j(this).parent().text();
var tmpChecked=$j(this).attr('checked');
//alert(tmpStr+":"+tmpChecked);
if(tmpChecked==true){
favs[tmpStr.toString()]=tmpStr.toString();
GM_log(favs[tmpStr.toString()]);
save(favs.toSource());
GM_log(tmpStr+"is added and favs is saved");
displayAuth();
}else if(tmpChecked==undefined){
delete favs[tmpStr.toString()];
//favs[tmpStr.toString()]=null;
GM_log(favs[tmpStr.toString()]);
save(favs.toSource());
GM_log(tmpStr+"is removed and favs is saved");
displayAuth();
}
});
$j("tr:not(.checked)",mtb).css({"color":"#777","font-size":"80%","height":"30%"});//--グレーアウト
$j(".checked",mtb).css({"color":"#444","font-weight":"bold"});
//$j("td.checked",mtb).css({"color":"#444","font-weight":"bold"});
// $j(".mainTable tr:not(.checked)").html("");//--消去
//---非チェック項目をグレーアウト
});
function save(){
GM_log("favs:"+favs+":"+favs.toSource());
window.setTimeout(function() {
GM_setValue("favs", favs.toSource());
}, 0);
}
function load(){
return eval(GM_getValue("favs", "({})")) || null;
}
function displayAuth(){
var tmpStr="";
for (i in favs){
tmpStr+="\""+favs[i]+"\",<br>\n";
}
authDiv.innerHTML="<div>"+tmpStr+"</div>";
}
function post(){
var URL="http://api.wassr.jp/todo/add.json";
window.setTimeout(function() {
for(i=0;i<mailstr.length;i++){
var postString=mailstr[i];
postString=encodeURIComponent(postString);//これを追加
GM_xmlhttpRequest({
method: "POST",
url: URL,
headers:{"Content-Type":"application/x-www-form-urlencoded"},
data: "body="+postString
});
}
alert("done.");
}, 0);
}
})();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment