Tumblr: 連続ポストを読み飛ばす
by
vzvu3k6k
2014-05-10 [2014/05/10 00:20:03]
ダッシュボードで表示しているポストと異なるtumblelogまたは種類(text, quote, photoなど)が違うポストまでスクロールするブックマークレット
@@ -23,18 +23,23 @@
}
var skip_num = 0;
- var next_post = _.chain(current_post.parent('.post_container').nextAll('.post_container'))
+ var next_container = _.chain(current_post.closest('.post_container').nextAll('.post_container'))
.find(function(container){
skip_num++;
container = jQuery(container);
var post = container.find('.post');
return (current_post.data('tumblelog-name') != post.data('tumblelog-name')
|| current_post.data('type') != post.data('type'))
- /* ユーザースクリプトなどで隠されたポストのための処理 */
- && getComputedStyle(container[0]).display != 'none';
+ && container.is(':visible'); // ユーザースクリプトなどで隠されたポストは弾く
}).value();
- this.go_to_position = this.post_positions[jQuery(next_post).find('.post').attr('id')] || jQuery(document).height();
+ if(next_container.length == 0){
+ this.go_to_position = jQuery(document).height();
+ }else{
+ // ghostlistによって.post_containerの子要素が一時的に削除されている場合には
+ // post_positionsに登録されていないので、スクロール位置を独自に計算する
+ this.go_to_position = jQuery(next_container).offset().top;
+ }
this.animating = true;
jQuery("html,body").stop().animate({
scrollTop: this.go_to_position - this.scroll_offset
/*
* @title Tumblr: 連続ポストを読み飛ばす
* @description ダッシュボードで表示しているポストと異なるtumblelogまたは種類(text, quote, photoなど)が違うポストまでスクロールするブックマークレット
* @include https://www.tumblr.com/dashboard*
* @license CC0
*/
// https://secure.assets.tumblr.com/assets/scripts/dashboard.jsの
// /*! scripts/application/keycommands.js */以下で定義されている
// Tumblr.KeyCommands.keydownのコードを参考にした。
(function(){
this.update_post_positions();
this.current_position = jQuery(document).scrollTop() + 7;
var current_post;
for (var i in this.post_positions){
var p = this.post_positions[i];
if(this.check_offset(p)){
current_post = jQuery('#' + i);
break;
}
}
var skip_num = 0;
var next_container = _.chain(current_post.closest('.post_container').nextAll('.post_container'))
.find(function(container){
skip_num++;
container = jQuery(container);
var post = container.find('.post');
return (current_post.data('tumblelog-name') != post.data('tumblelog-name')
|| current_post.data('type') != post.data('type'))
&& container.is(':visible'); // ユーザースクリプトなどで隠されたポストは弾く
}).value();
if(next_container.length == 0){
this.go_to_position = jQuery(document).height();
}else{
// ghostlistによって.post_containerの子要素が一時的に削除されている場合には
// post_positionsに登録されていないので、スクロール位置を独自に計算する
this.go_to_position = jQuery(next_container).offset().top;
}
this.animating = true;
jQuery("html,body").stop().animate({
scrollTop: this.go_to_position - this.scroll_offset
}, this.scroll_speed * skip_num, (function(){
this.animating = false;
}).bind(this));
}).bind(Tumblr.KeyCommands)();
- Permalink
- このページへの個別リンクです。
- RAW
- 書かれたコードへの直接のリンクです。
- Packed
- 文字列が圧縮された書かれたコードへのリンクです。
- Userscript
- Greasemonkey 等で利用する場合の .user.js へのリンクです。
- Loader
- @require やソースコードが長い場合に多段ロードする Loader コミのコードへのリンクです。
- Metadata
- コード中にコメントで @xxx と書かれたメタデータの JSON です。