Created
December 18, 2008 00:38
-
-
Save Constellation/37309 to your computer and use it in GitHub Desktop.
inspired from http://twitter.com/VoQn/status/1063396310
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// ==UserScript== | |
// @name LDR Pin Feed | |
// @namespace http://d.hatena.ne.jp/Constellation/ | |
// @description show pin items as feed | |
// @author Constellation | |
// @include http://fastladder.com/reader/* | |
// @include http://reader.livedoor.com/reader/* | |
// ==/UserScript== | |
(function(win){ | |
//Configuration | |
location.href = 'javascript:(' + function() { | |
var KEY = 'P'; | |
var base = { | |
ads: null, | |
gm: true, | |
subscribe_id: "gm_pinned_items", | |
last_stored_on: "", | |
channel:{ | |
error_count: "0", | |
link: location.href, | |
description: "my pinned items", | |
image: "/img/icon/pin.gif", | |
title: "Pinned items", | |
feedlink: "/api/pin/all", | |
subscribers_count: "1", | |
expires: (new Date).getTime()/1000, | |
}, | |
items: [] | |
} | |
function format(pin){ | |
base.items = pin.pins.map(function(pin, index){ | |
return { | |
"enclosure":"", | |
"link": pin.url, | |
"enclosure_type":null, | |
"author":"", | |
"body": "", | |
"created_on": pin.created_on, | |
"modified_on": "", | |
"id": index+0.1234567,//小数ならかぶらない+ボタンも有効になる | |
"title": pin.title, | |
"category":null | |
} | |
}); | |
return base | |
} | |
function GM_main(){ | |
gm_print_feed(format(pin)); | |
} | |
//ほぼprint_feedから持ってくるが, pin描画に適応 | |
var before_reading = ""; | |
function gm_print_feed(feed){ | |
invoke_hook('BEFORE_PRINTFEED', feed); | |
var subscribe_id = feed.subscribe_id; | |
State.last_feed = feed; | |
State.last_items = {}; | |
State.requested = false; | |
before_reading = State.now_reading; | |
State.now_reading = subscribe_id; | |
var Now = (new Date - 0)/1000; | |
var output = $(print_feed.target); | |
var channel = feed.channel; | |
var items = feed.items; | |
var item_formatter = new ItemFormatter().compile(); | |
var feed_formatter = new FeedFormatter().compile(); | |
var item_count = 0; | |
var item_f = function(v){ | |
item_count++; | |
State.last_items["_"+v.id] = v; | |
var widgets = entry_widgets.process(feed, v); | |
return item_formatter(v,{ | |
relative_date : (v.created_on) ? (Now-v.created_on).toRelativeDate() : tl('Unknown date'), | |
item_count : item_count, | |
widgets : widgets, | |
pin_active : pin.has(v.link) ? "pin_active" : "", | |
pinned : pin.has(v.link) ? "pinned" : "", | |
loop_context : [ | |
(item_count == 1) ? "first" : "", | |
(item_count % 2) ? "odd" : "even", | |
(item_count == size) ? "last" : "", | |
(item_count != 1 && item_count != size) ? "inner" : "" | |
].join(" ") | |
}); | |
}; | |
var subscribe_info = subs_item(subscribe_id, feed); | |
var size = items.length; | |
var first_write_num = LDR_VARS.PrintFeedFirstNum; | |
var widgets = channel_widgets.process(feed, items); | |
output.innerHTML = feed_formatter( | |
feed, channel, subscribe_info, { | |
ads_expire : null, | |
widgets: widgets, | |
items : function(){ | |
return items.slice(0, first_write_num).map(item_f).join("") | |
} | |
} | |
); | |
fix_linktarget(); | |
State.writer && State.writer.cancel(); | |
State.writer2 && State.writer2.cancel(); | |
function DIV(text){ | |
var div = document.createElement("div"); | |
div.innerHTML = text; | |
fix_linktarget(div); | |
return div; | |
} | |
// 遅延描画 | |
function push_item(){ | |
var num = LDR_VARS.PrintFeedNum; | |
var delay = LDR_VARS.PrintFeedDelay; | |
var delay2 = LDR_VARS.PrintFeedDelay2; | |
var writer = function(){ | |
var remain_items = items.slice(writed,writed + num).map(item_f).join(""); | |
writed += num | |
if(more.className){ | |
more.className = "hide"; | |
more.innerHTML = ""; | |
} | |
State.writer2 = (function(){ | |
more.appendChild(DIV(remain_items)) | |
more.className = ""; | |
}).later(10)(); | |
if(writed < size){ | |
State.writer = writer.later(delay2)(); | |
} | |
}; | |
State.writer = writer.later(delay)(); | |
} | |
if(items.length > first_write_num){ | |
var more = $N("div",{"class":"more"}); | |
more.innerHTML = "描画中"; | |
output.appendChild(more); | |
var writed = first_write_num; | |
push_item(); | |
} | |
Control.scroll_top(); | |
Control.del_scroll_padding(); | |
print_feed.target = "right_body"; | |
invoke_hook('AFTER_PRINTFEED', feed); | |
} | |
var id = setTimeout(function(){ | |
id && clearTimeout(id); | |
if(typeof Keybind != 'undefined' && get_next && get_prev){ | |
// native 書き換え. | |
var get_next_orig = get_next; | |
get_next = function(){ | |
if(State.now_reading == 'gm_pinned_items'){ | |
State.now_reading = before_reading; | |
} | |
return get_next_orig(); | |
} | |
var get_prev_orig = get_prev; | |
get_prev = function(){ | |
if(State.now_reading == 'gm_pinned_items'){ | |
State.now_reading = before_reading; | |
} | |
return get_prev_orig(); | |
} | |
Keybind.add(KEY, GM_main) | |
} else { | |
id = setTimeout(arguments.callee, 100); | |
} | |
}, 0); | |
}.toString() + ')()'; | |
})(this.unsafeWindow || this); | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment