Skip to content

Instantly share code, notes, and snippets.

@kk6
Created October 1, 2011 17:50
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
Star You must be signed in to star a gist
Save kk6/1256405 to your computer and use it in GitHub Desktop.
// ==UserScript==
// @name MyPixiv
// @namespace http://d.hatena.ne.jp/kk6/
// @description Pixiv用おれおれGM
// @include http://www.pixiv.net/*
// @exclude http://www.pixiv.net/bookmark.php*
// ==/UserScript==
(function($){
if(document.location.pathname === '/'){
var news = $('.NewsTop > h1, #column-misc > .item > h1');
news.next().hide();
news.click(function () {
$(this).next().toggle('fast');
});
}
// 作品のブックマークリクエストをpostする関数
function ajax_post_bookmark(){
$.post(
'bookmark_add.php',
{
'mode': 'add',
'tt': $('input[name=tt]').val(),
'id': $('input#illust_id').val(),
'type': 'illust',
'from_sid': '',
'restrict': '0',
'comment': '',
'tag': '',
'submit': 'add_bookmark'
},
function(data, status){
$("input#add_bm").replaceWith($("<p>ブックマークしました</p>"));
}
);
}
// 作品ページにブックマークボタンまたはブックマーク済み文言を表示させる関数
function add_bm_button () {
var bookmarked = $('div.bookmark a:first').text();
$('<p>, {"style": "font-size: 50%; font-color: #ccc;" }').append(bookmarked);
// ブックマーク済みでなければボタン追加
if (bookmarked !== "ブックマーク済み") {
// 作品ページ用の隠しフォーム
var add_form = $('<form>', {'action': 'bookmark_add.php', 'method': 'post'});
var add = $('<input>', {'type':'hidden', 'name': 'mode', 'value': 'add'});
var tt = $('<input>', {'type':'hidden', 'name': 'tt', 'value': $('input[name=tt]').val()});
var id = $('<input>', {'type':'hidden', 'name': 'id', 'value': $('input#illust_id').val()});
var type = $('<input>', {'type':'hidden', 'name': 'type', 'value': 'illust'});
var from_sid = $('<input>', {'type':'hidden', 'name': 'from_sid', 'value': ''});
var restrict = $('<input>', {'type':'hidden', 'name': 'restrict', 'value': '0'});
var comment = $('<input>', {'type':'hidden', 'name': 'comment', 'value': ''});
var tag = $('<input>', {'type':'hidden', 'name': 'tag', 'value': ''});
var submit = $('<input>', {'type':'submit', 'name': 'submit', 'value': 'add bookmark', 'id':'add_bm'});
submit.addClass('ui-button');
add_form.append(add, tt, id, type, from_sid, restrict, comment, tag, submit);
$('div.works_data > h3').append(add_form);
}else{
var bookmarked_text = $("<span>ブックマーク済み</span>").css({"background":"#f7f7ed", "padding":"5px"});
$('div.works_data > h3').before(bookmarked_text);
}
}
// ブックマークボタンをクリックした時に、ページ遷移させずに
// ajaxでブックマークに成功したか失敗したかを取得して表示する
function is_success_bookmark(){
$('input#add_bm').click(function(){
ajax_post_bookmark();
return false;
});
}
// ブックマーク済みかどうかを表示する。
function is_bookmarked(selecter){
$(selecter).each(function() {
// 作品ページへのアンカーを包むliタグを取得
var li = $(this).closest('li');
$.ajax({
type: 'GET',
url: $(this).attr('href'),
dataType: 'html',
success: function(data) {
var bm_flag = $(data).find('div.bookmark a:first').text();
if (bm_flag === "ブックマーク済み"){
li.append($('<span>B!</span>').css('color','blue'));
}
},
error: function() {
li.append($('<span>err</span>').css('color','red'));
}
});
});
}
// ユーザー作品一覧ページもしくはお気に入りユーザー新着一覧ページに
// ブックマーク済みかどうかを表示させる
function is_bookmarked_controller(evt){
var node = $(evt.target);
var anchors;
// お気に入りユーザー新着一覧
if(document.location.pathname === '/bookmark_new_illust.php'){
anchors = node.find($("ul.images a:first-child"));
is_bookmarked(anchors);
}
// ユーザー作品一覧
if(document.location.pathname === '/member_illust.php'){
anchors = node.find($(".display_works a:first-child"));
is_bookmarked(anchors);
}
}
// 最初のページ用
$(document).bind("ready", function(evt){
is_bookmarked_controller(evt);
});
// AutoPagerizeで継ぎ足されたページ用
window.addEventListener("AutoPagerize_DOMNodeInserted", function(evt){
is_bookmarked_controller(evt);
}, false);
//作品ページにブックマークボタン表示
add_bm_button();
// ブックマークリクエストのレスポンスを受け取ってブクマできたか表示
is_success_bookmark();
})(unsafeWindow.jQuery);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment